//
0x608060405234801561001057600080fd5b50614f7c806100206000396000f3fe6080604052600436106101e75760003560e01c8063ad5c464811610102578063dde43cba11610095578063f1b3f4d711610064578063f1b3f4d7146105b9578063f21f3c08146105d9578063f45346dc146105f9578063f915f982146106195761026a565b8063dde43cba1461054f578063e14f870d14610564578063e43af08e14610579578063e5c393e1146105995761026a565b8063c31c9c07116100d1578063c31c9c0714610507578063cc2a9a5b1461051c578063dbcb186314610380578063dde223421461053c5761026a565b8063ad5c464814610492578063b25f9483146104a7578063b39cff12146104c7578063bfd4e1d3146104e75761026a565b806366e616cf1161017a57806384a91cfe1161014957806384a91cfe146104025780638ff73ec8146104225780639d200c3f146104525780639d2d26d6146104725761026a565b806366e616cf14610380578063713390f5146103a0578063723f864c146103cd5780637944f944146103ed5761026a565b80632d2da806116101b65780632d2da8061461030b57806351c7c9901461031e5780635491cd671461033e57806360c40fca146103605761026a565b806303e1ebd11461026f5780630787ec64146102a55780631f962278146102c75780632570189c146102f85761026a565b3661026a576038546001600160a01b0316610200610639565b6001600160a01b0316146040518060400160405280601f81526020017f4f6e6c792057424e42207472616e73666572732061726520616c6c6f77656400815250906102675760405162461bcd60e51b815260040161025e9190614bdc565b60405180910390fd5b50005b600080fd5b34801561027b57600080fd5b5061028f61028a366004614848565b61063d565b60405161029c9190614d89565b60405180910390f35b3480156102b157600080fd5b506102c56102c036600461479d565b610a9c565b005b3480156102d357600080fd5b506102e76102e236600461472d565b610b91565b60405161029c959493929190614dbb565b61028f610306366004614872565b610bef565b6102c561031936600461448a565b610fa3565b34801561032a57600080fd5b506102e761033936600461472d565b61110b565b34801561034a57600080fd5b5061035361114c565b60405161029c9190614a01565b34801561036c57600080fd5b506102c561037b3660046148e3565b61115b565b34801561038c57600080fd5b506102c561039b36600461448a565b6115f6565b3480156103ac57600080fd5b506103c06103bb3660046144fa565b61171f565b60405161029c9190614d1b565b3480156103d957600080fd5b506103c06103e83660046144fa565b611764565b3480156103f957600080fd5b5061035361179e565b34801561040e57600080fd5b506102e761041d3660046146d3565b6117ad565b34801561042e57600080fd5b5061044261043d366004614620565b611804565b60405161029c9493929190614da0565b34801561045e57600080fd5b506102c561046d366004614772565b61185a565b34801561047e57600080fd5b5061044261048d366004614620565b6118b5565b34801561049e57600080fd5b5061035361197c565b3480156104b357600080fd5b506104426104c2366004614683565b61198b565b3480156104d357600080fd5b506102e76104e23660046146d3565b6119d5565b3480156104f357600080fd5b506103c0610502366004614544565b611a0d565b34801561051357600080fd5b50610353611a54565b34801561052857600080fd5b506102c561053736600461459f565b611a63565b61028f61054a366004614860565b611b74565b34801561055b57600080fd5b5061028f611ee3565b34801561057057600080fd5b50610353611ee8565b34801561058557600080fd5b506103c0610594366004614544565b611ef7565b3480156105a557600080fd5b506104426105b4366004614683565b611f32565b3480156105c557600080fd5b506102c56105d43660046147d3565b611fee565b3480156105e557600080fd5b506102c56105f43660046144c2565b612040565b34801561060557600080fd5b506102c561061436600461479d565b61208c565b34801561062557600080fd5b506102c5610634366004614772565b6120bd565b3390565b60006106516101a083016101808401614810565b15806106755750600061066a608084016060850161448a565b6001600160a01b0316145b6106915760405162461bcd60e51b815260040161025e90614ce4565b60006107006106a36020850185614810565b6106b56101a086016101808701614810565b6106ce576106c9608086016060870161448a565b6106db565b6038546001600160a01b03165b6106eb60a087016080880161448a565b6106fb60c0880160a0890161448a565b61210b565b6040805180820190915260208082527f50726f7669646564206164647265737320697320756e6b6e6f776e2070616972908201529091506001600160a01b03821661075e5760405162461bcd60e51b815260040161025e9190614bdc565b50600061077c826107726020870187614810565b866020013561234e565b905061078b8461012001612517565b15610821576001600160a01b03821663d505accf333060001960e08901356107bb6101408b016101208c01614965565b6040516001600160e01b031960e088901b1681526107ee9594939291906101408d0135906101608e013590600401614a15565b600060405180830381600087803b15801561080857600080fd5b505af115801561081c573d6000803e3d6000fd5b505050505b6108366001600160a01b03831633848461254d565b6108486101a085016101808601614810565b6108fb576001600160a01b038216632cd4539961086b60e0870160c0880161448a565b604087013561088261012089016101008a0161448a565b6040518463ffffffff1660e01b81526004016108a093929190614a56565b602060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f291906148f5565b92505050610a97565b6001600160a01b038216632cd4539930604087013561092261012089016101008a0161448a565b6040518463ffffffff1660e01b815260040161094093929190614a56565b602060405180830381600087803b15801561095a57600080fd5b505af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099291906148f5565b506038546040516370a0823160e01b81526000916001600160a01b0316906370a08231906109c4903090600401614a01565b60206040518083038186803b1580156109dc57600080fd5b505afa1580156109f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1491906148f5565b603854604051632e1a7d4d60e01b81529192506001600160a01b031690632e1a7d4d90610a45908490600401614d89565b600060405180830381600087803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b50610a929250610a8c91505060e0870160c0880161448a565b826125a7565b925050505b919050565b603354604051637bf8c2fb60e01b81526000916001600160a01b031690637bf8c2fb90610acd908790600401614a01565b602060405180830381600087803b158015610ae757600080fd5b505af1158015610afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1f91906144a6565b9050610b2d8433838661269f565b60405163f340fa0160e01b81526001600160a01b0382169063f340fa0190610b59908590600401614a01565b600060405180830381600087803b158015610b7357600080fd5b505af1158015610b87573d6000803e3d6000fd5b5050505050505050565b600080600080610b9f614400565b6000610bab8a8a6127f4565b90506001600160a01b03811615610be257610bd2610bc88b612880565b828a8a6000612901565b9550955095509550955050610be4565b505b945094509450945094565b6000610c0361032083016103008401614810565b1580610c3157506000610c1c60a084016080850161448a565b6001600160a01b0316148015610c3157508135155b610c4d5760405162461bcd60e51b815260040161025e90614cad565b600080610c6261032085016103008601614810565b15610cf4576038546001600160a01b03169150610c84346102e0860135612f53565b9050603860009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cd657600080fd5b505af1158015610cea573d6000803e3d6000fd5b5050505050610d0a565b610d0460a085016080860161448a565b91505082355b6000610d32600184610d2260c0890160a08a0161448a565b6106fb60e08a0160c08b0161448a565b6040805180820190915260208082527f50726f7669646564206164647265737320697320756e6b6e6f776e2070616972908201529091506001600160a01b038216610d905760405162461bcd60e51b815260040161025e9190614bdc565b50610da361032086016103008701614810565b15610db857610db3838284612f95565b610dc4565b610dc48333838561269f565b60006001600160a01b038216635dd0ec32610de6610100890160e08a0161448a565b602089013560408a013560608b0135610e076101408d016101208e0161448a565b8c610140016040518763ffffffff1660e01b8152600401610e2d96959493929190614b96565b602060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f91906148f5565b9050610e8e6102808701612517565b15610f9a576102e086013515610f255760006060836001600160a01b0316886102e00135604051610ebe906149fe565b60006040518083038185875af1925050503d8060008114610efb576040519150601f19603f3d011682016040523d82523d6000602084013e610f00565b606091505b509150915081610f225760405162461bcd60e51b815260040161025e90614c64565b50505b6001600160a01b0382166377f64878610f45610100890160e08a0161448a565b88610220016040518363ffffffff1660e01b8152600401610f67929190614b01565b600060405180830381600087803b158015610f8157600080fd5b505af1158015610f95573d6000803e3d6000fd5b505050505b95945050505050565b60385460408051630d0e30db60e41b8152905134926001600160a01b03169163d0e30db091849160048082019260009290919082900301818588803b158015610feb57600080fd5b505af1158015610fff573d6000803e3d6000fd5b5050603354603854604051632e79d5ff60e11b8152600095506001600160a01b039283169450635cf3abfe935061103c9290911690600401614a01565b602060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108e91906144a6565b6038549091506110a8906001600160a01b03168284612f95565b60405163f340fa0160e01b81526001600160a01b0382169063f340fa01906110d4908690600401614a01565b600060405180830381600087803b1580156110ee57600080fd5b505af1158015611102573d6000803e3d6000fd5b50505050505050565b600080600080611119614400565b60006111258a8a612fa0565b90506001600160a01b03811615610be257610bd26111428a612880565b828a8a6001612901565b6033546001600160a01b031690565b3361116d610100830160e08401614810565b158061119857506038546001600160a01b031661118d602084018461448a565b6001600160a01b0316145b6111b45760405162461bcd60e51b815260040161025e90614c2f565b6033546000906001600160a01b031663c9a396e96111d5602086018661448a565b6040518263ffffffff1660e01b81526004016111f19190614a01565b60206040518083038186803b15801561120957600080fd5b505afa15801561121d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124191906144a6565b905060006001600160a01b0316816001600160a01b03161415604051806060016040528060328152602001614e9d60329139906112915760405162461bcd60e51b815260040161025e9190614bdc565b506020830135600019811415611320576040516370a0823160e01b81526001600160a01b038316906370a08231906112cd908690600401614a01565b60206040518083038186803b1580156112e557600080fd5b505afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d91906148f5565b90505b6060840135156113b9576001600160a01b03821663d505accf84306020880135606089013561135560a08b0160808c01614965565b6040516001600160e01b031960e088901b16815261138695949392919060a08d01359060c08e013590600401614a15565b600060405180830381600087803b1580156113a057600080fd5b505af11580156113b4573d6000803e3d6000fd5b505050505b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906113e990869086908690600401614add565b602060405180830381600087803b15801561140357600080fd5b505af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b919061482c565b5061144d610100850160e08601614810565b156115b35760405163f940e38560e01b81526001600160a01b0383169063f940e385906114809086903090600401614a79565b600060405180830381600087803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b50506038546040516370a0823160e01b8152600093506001600160a01b0390911691506370a08231906114e5903090600401614a01565b60206040518083038186803b1580156114fd57600080fd5b505afa158015611511573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153591906148f5565b603854604051632e1a7d4d60e01b81529192506001600160a01b031690632e1a7d4d90611566908490600401614d89565b600060405180830381600087803b15801561158057600080fd5b505af1158015611594573d6000803e3d6000fd5b506115ad9250610a8c915050606087016040880161448a565b506115f0565b6001600160a01b03821663f940e385846115d3606088016040890161448a565b6040518363ffffffff1660e01b8152600401610b59929190614a79565b50505050565b60335460405163c9a396e960e01b81526000916001600160a01b03169063c9a396e990611627908590600401614a01565b60206040518083038186803b15801561163f57600080fd5b505afa158015611653573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167791906144a6565b905060006001600160a01b0316816001600160a01b03161415604051806060016040528060328152602001614e9d60329139906116c75760405162461bcd60e51b815260040161025e9190614bdc565b50806001600160a01b03166338e3127f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561170357600080fd5b505af1158015611717573d6000803e3d6000fd5b505050505050565b611727614428565b600061173384846127f4565b90506001600160a01b0381161561175c5761175961175085612880565b82876000612fd3565b91505b509392505050565b61176c614428565b60006117788484612fa0565b90506001600160a01b0381161561175c5761175961179584612880565b82876001612fd3565b6036546001600160a01b031690565b6000806000806117bb614400565b60006117c88b8b8b6135b7565b90506001600160a01b038116156117f5576117e56111428a612880565b95509550955095509550506117f7565b505b9550955095509550959050565b60008060008060006118178a8a8a61363c565b90506001600160a01b0381161561184c5761183e6118348b612880565b8289896000613671565b94509450945094505061184e565b505b95509550955095915050565b600061186583612880565b905061187a83611873610639565b838561269f565b806001600160a01b031663d9c55ce16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110ee57600080fd5b60008060008060006118c88a8a8a6135b7565b905060001986146118d95785611955565b6040516370a0823160e01b81526001600160a01b038216906370a0823190611905908a90600401614a01565b60206040518083038186803b15801561191d57600080fd5b505afa158015611931573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195591906148f5565b95506001600160a01b0381161561184c5761183e61197289612880565b8289896001613671565b6038546001600160a01b031690565b600080600080600061199d89896127f4565b90506001600160a01b038116156119c8576119ba6118348a612880565b9450945094509450506119ca565b505b945094509450949050565b6000806000806119e3614400565b60006119f08b8b8b61363c565b90506001600160a01b038116156117f5576117e5610bc88c612880565b611a15614428565b6000611a228585856135b7565b90506001600160a01b03811615611a4b57611a48611a3f84612880565b82886001612fd3565b91505b50949350505050565b6035546001600160a01b031690565b600054610100900460ff1680611a7c5750611a7c613c11565b80611a8a575060005460ff16155b611ac55760405162461bcd60e51b815260040180806020018281038252602e815260200180614e6f602e913960400191505060405180910390fd5b600054610100900460ff16158015611af0576000805460ff1961ff0019909116610100171660011790555b611af8613c22565b603380546001600160a01b03199081166001600160a01b038a811691909117909255603480548216898416179055603580548216888416179055603880548216878416179055603780548216868416179055603980549091169184169190911790558015611102576000805461ff001916905550505050505050565b6000611b8861030083016102e08401614810565b1580611bb657506000611ba1608084016060850161448a565b6001600160a01b0316148015611bb657508135155b611bd25760405162461bcd60e51b815260040161025e90614cad565b600080611be761030085016102e08601614810565b15611c79576038546001600160a01b03169150611c09346102c0860135612f53565b9050603860009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c5b57600080fd5b505af1158015611c6f573d6000803e3d6000fd5b5050505050611c8f565b611c89608085016060860161448a565b91505082355b6000611cb68184611ca660a0890160808a0161448a565b6106fb60c08a0160a08b0161448a565b6040805180820190915260208082527f50726f7669646564206164647265737320697320756e6b6e6f776e2070616972908201529091506001600160a01b038216611d145760405162461bcd60e51b815260040161025e9190614bdc565b50611d2761030086016102e08701614810565b15611d3c57611d37838284612f95565b611d48565b611d488333838561269f565b60006001600160a01b038216633f4c853e611d6960e0890160c08a0161448a565b602089013560408a0135611d856101208c016101008d0161448a565b8b610120016040518663ffffffff1660e01b8152600401611daa959493929190614b58565b602060405180830381600087803b158015611dc457600080fd5b505af1158015611dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfc91906148f5565b9050611e0b6102608701612517565b15610f9a576102c086013515611ea25760006060836001600160a01b0316886102c00135604051611e3b906149fe565b60006040518083038185875af1925050503d8060008114611e78576040519150601f19603f3d011682016040523d82523d6000602084013e611e7d565b606091505b509150915081611e9f5760405162461bcd60e51b815260040161025e90614c64565b50505b6001600160a01b0382166377f64878611ec160e0890160c08a0161448a565b88610200016040518363ffffffff1660e01b8152600401610f67929190614b01565b60d081565b6034546001600160a01b031690565b611eff614428565b6000611f0c85858561363c565b90506001600160a01b03811615611a4b57611a48611f2986612880565b82886000612fd3565b6000806000806000611f448989612fa0565b90506000198614611f555785611fd1565b6040516370a0823160e01b81526001600160a01b038216906370a0823190611f81908a90600401614a01565b60206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd191906148f5565b95506001600160a01b038116156119c8576119ba61197289612880565b61200c84611ffa610639565b6037546001600160a01b03168661269f565b603754604051632b27948360e21b81526001600160a01b039091169063ac9e520c90610b5990849088908790600401614ab6565b603754604051631e43e78160e31b81526001600160a01b039091169063f21f3c08906120729084908690600401614a79565b600060405180830381600087803b15801561170357600080fd5b603354604051632e79d5ff60e11b81526000916001600160a01b031690635cf3abfe90610acd908790600401614a01565b6120db826120c9610639565b6039546001600160a01b03168461269f565b6039546040516333c71ed560e11b81526001600160a01b039091169063678e3daa90612072908590600401614a01565b60006001600160a01b0383161561223557846121aa5760345460405163136b498960e21b81526001600160a01b0390911690634dad26249061215590879087908790600401614a93565b60206040518083038186803b15801561216d57600080fd5b505afa158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a591906144a6565b61222e565b60345460405163870bd02560e01b81526001600160a01b039091169063870bd025906121de90879087908790600401614a93565b60206040518083038186803b1580156121f657600080fd5b505afa15801561220a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222e91906144a6565b9050612346565b846122c15760345460405163e6a4390560e01b81526001600160a01b039091169063e6a439059061226c9087908690600401614a79565b60206040518083038186803b15801561228457600080fd5b505afa158015612298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122bc91906144a6565b612343565b603454604051630b0476c360e21b81526001600160a01b0390911690632c11db0c906122f39087908690600401614a79565b60206040518083038186803b15801561230b57600080fd5b505afa15801561231f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234391906144a6565b90505b949350505050565b6000826123e757600019821461236457816123e0565b6040516370a0823160e01b81526001600160a01b038516906370a0823190612390903390600401614a01565b60206040518083038186803b1580156123a857600080fd5b505afa1580156123bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e091906148f5565b9050612510565b6000600019831461247e576040516370a0823160e01b8152612479906001600160a01b038716906370a0823190612422903390600401614a01565b60206040518083038186803b15801561243a57600080fd5b505afa15801561244e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247291906148f5565b8490613cc4565b612488565b670de0b6b3a76400005b905061175981866001600160a01b031663935a8b84336040518263ffffffff1660e01b81526004016124ba9190614a01565b60206040518083038186803b1580156124d257600080fd5b505afa1580156124e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250a91906148f5565b90613e03565b9392505050565b60006125266020830183614965565b60ff1615801561253857506020820135155b801561254657506040820135155b1592915050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526115f0908590613ebd565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106125f35780518252601f1990920191602091820191016125d4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612655576040519150601f19603f3d011682016040523d82523d6000602084013e61265a565b606091505b505090508061269a5760405162461bcd60e51b8152600401808060200182810382526034815260200180614e3b6034913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106127245780518252601f199092019160209182019101612705565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612786576040519150601f19603f3d011682016040523d82523d6000602084013e61278b565b606091505b50915091508180156127b95750805115806127b957508080602001905160208110156127b657600080fd5b50515b6117175760405162461bcd60e51b8152600401808060200182810382526031815260200180614e0a6031913960400191505060405180910390fd5b60345460405163e6a4390560e01b81526000916001600160a01b03169063e6a43905906128279086908690600401614a79565b60206040518083038186803b15801561283f57600080fd5b505afa158015612853573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287791906144a6565b90505b92915050565b60335460405163c9a396e960e01b81526000916001600160a01b03169063c9a396e9906128b1908590600401614a01565b60206040518083038186803b1580156128c957600080fd5b505afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287a91906144a6565b60008060008061290f614400565b600033905060008a6001600160a01b0316633804ee196040518163ffffffff1660e01b815260040160206040518083038186803b15801561294f57600080fd5b505afa158015612963573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298791906148f5565b905060008b6001600160a01b0316632929c6e66040518163ffffffff1660e01b815260040160206040518083038186803b1580156129c457600080fd5b505afa1580156129d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fc91906148f5565b9050808211612a0c576000612a10565b8082035b9750888015612a2157506103e88a10155b15612cad5760405163b07f80a160e01b81526001600160a01b038d169063b07f80a190612a54908e908e90600401614d92565b602060405180830381600087803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa691906148f5565b965060008c6001600160a01b031663d59172f38c6040518263ffffffff1660e01b8152600401612ad69190614d89565b60206040518083038186803b158015612aee57600080fd5b505afa158015612b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2691906148f5565b6040516303f09e8b60e51b81529091506001600160a01b038f1690637e13d16090612b57908b908590600401614d92565b60206040518083038186803b158015612b6f57600080fd5b505afa158015612b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba791906148f5565b6040516317825eab60e11b81529097506001600160a01b038e1690632f04bd5690612bd6908b90600401614d89565b60206040518083038186803b158015612bee57600080fd5b505afa158015612c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2691906148f5565b60405163e831fd1d60e01b81529096506001600160a01b038e169063e831fd1d90612c55908790600401614a01565b60806040518083038186803b158015612c6d57600080fd5b505afa158015612c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca59190614884565b945050612f43565b6127108a1115612f4357612cc68b61270f198c01614075565b96508c6001600160a01b0316637e13d160888e6001600160a01b031663d59172f38e6040518263ffffffff1660e01b8152600401612d049190614d89565b60206040518083038186803b158015612d1c57600080fd5b505afa158015612d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5491906148f5565b6040518363ffffffff1660e01b8152600401612d71929190614d92565b60206040518083038186803b158015612d8957600080fd5b505afa158015612d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc191906148f5565b6040516317825eab60e11b81529096506001600160a01b038d1690632f04bd5690612df0908a90600401614d89565b60206040518083038186803b158015612e0857600080fd5b505afa158015612e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4091906148f5565b60405163e831fd1d60e01b81529095506001600160a01b038d169063e831fd1d90612e6f908690600401614a01565b60806040518083038186803b158015612e8757600080fd5b505afa158015612e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebf9190614884565b604051634f6d975d60e01b81529094506001600160a01b038d1690634f6d975d90612ef09086908e90600401614b3f565b60206040518083038186803b158015612f0857600080fd5b505afa158015612f1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4091906148f5565b84525b5050509550955095509550959050565b600061287783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614113565b61269a83838361416d565b603454604051630b0476c360e21b81526000916001600160a01b031690632c11db0c906128279086908690600401614a79565b612fdb614428565b81156132fe576040516324d6a2e160e21b81526001600160a01b0385169063935a8b849061300d908690600401614a01565b60206040518083038186803b15801561302557600080fd5b505afa158015613039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305d91906148f5565b808252156132f957604051637092a7dd60e11b81526001600160a01b0385169063e1254fba90613091908690600401614a01565b60206040518083038186803b1580156130a957600080fd5b505afa1580156130bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e191906148f5565b60408083019190915251631724916d60e31b81526001600160a01b0386169063b9248b68906131169087908790600401614a79565b60806040518083038186803b15801561312e57600080fd5b505afa158015613142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131669190614930565b5060a08401526080830152508051156132015760405163b516f7b160e01b81526001600160a01b0385169063b516f7b1906131a5908690600401614a01565b6040805180830381600087803b1580156131be57600080fd5b505af11580156131d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f6919061490d565b60e083015260c08201525b6040516370a0823160e01b81526001600160a01b03851690635c1952179082906370a0823190613235908890600401614a01565b60206040518083038186803b15801561324d57600080fd5b505afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328591906148f5565b6040518263ffffffff1660e01b81526004016132a19190614d89565b602060405180830381600087803b1580156132bb57600080fd5b505af11580156132cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f391906148f5565b60208201525b61352d565b6040516370a0823160e01b81526001600160a01b038516906370a082319061332a908690600401614a01565b60206040518083038186803b15801561334257600080fd5b505afa158015613356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337a91906148f5565b8082521561352d57604051637092a7dd60e11b81526001600160a01b0385169063e1254fba906133ae908690600401614a01565b60206040518083038186803b1580156133c657600080fd5b505afa1580156133da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fe91906148f5565b60408083019190915251631724916d60e31b81526001600160a01b0386169063b9248b68906134339087908790600401614a79565b60806040518083038186803b15801561344b57600080fd5b505afa15801561345f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134839190614930565b5060a0840152608083015260608201528051156135225760405163b516f7b160e01b81526001600160a01b0385169063b516f7b1906134c6908690600401614a01565b6040805180830381600087803b1580156134df57600080fd5b505af11580156134f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613517919061490d565b60e083015260c08201525b60c081015160208201525b60405163e831fd1d60e01b81526001600160a01b0385169063e831fd1d90613559908690600401614a01565b60806040518083038186803b15801561357157600080fd5b505afa158015613585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a99190614884565b610100820152949350505050565b60345460405163870bd02560e01b81526000916001600160a01b03169063870bd025906135ec90879087908790600401614a93565b60206040518083038186803b15801561360457600080fd5b505afa158015613618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234691906144a6565b60345460405163136b498960e21b81526000916001600160a01b031690634dad2624906135ec90879087908790600401614a93565b60008060008084613944576040516370a0823160e01b81526000906001600160a01b038a16906370a08231906136ab908b90600401614a01565b60206040518083038186803b1580156136c357600080fd5b505afa1580156136d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fb91906148f5565b90506000896001600160a01b031663e1254fba8a6040518263ffffffff1660e01b815260040161372b9190614a01565b60206040518083038186803b15801561374357600080fd5b505afa158015613757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377b91906148f5565b905060008b6001600160a01b031663498b5ae88c8c6040518363ffffffff1660e01b81526004016137ad929190614a79565b60206040518083038186803b1580156137c557600080fd5b505afa1580156137d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fd91906148f5565b604051635c19521760e01b81529091506001600160a01b038c1690635c1952179061382c908c90600401614d89565b602060405180830381600087803b15801561384657600080fd5b505af115801561385a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387e91906148f5565b9650600061389684613890858d6142c1565b9061431a565b90506138a684613890848d6142c1565b955060006138b48988612f53565b604051630975bf0160e41b81529091506001600160a01b038e169063975bf010906138e59084908690600401614d92565b604080518083038186803b1580156138fc57600080fd5b505afa158015613910573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613934919061490d565b909850955061184e945050505050565b6040516324d6a2e160e21b81526000906001600160a01b038a169063935a8b8490613973908b90600401614a01565b60206040518083038186803b15801561398b57600080fd5b505afa15801561399f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c391906148f5565b94506000808b6001600160a01b031663498b5ae88c8c6040518363ffffffff1660e01b81526004016139f6929190614a79565b60206040518083038186803b158015613a0e57600080fd5b505afa158015613a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4691906148f5565b9050613a528982613cc4565b9250613a5e8184613e03565b91505060008a6001600160a01b031663b516f7b18b6040518263ffffffff1660e01b8152600401613a8f9190614a01565b6040805180830381600087803b158015613aa857600080fd5b505af1158015613abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae0919061490d565b509050613aed8184613e03565b9050613af98784613e03565b9650613b2b613b24613b1583613b0f8187612f53565b90613cc4565b670de0b6b3a764000090612f53565b8890613e03565b94506000613b5f848d6001600160a01b031663e1254fba8e6040518263ffffffff1660e01b81526004016124ba9190614a01565b90506000888710613b71576000613b7b565b613b7b8988612f53565b604051630975bf0160e41b81529091506001600160a01b038e169063975bf01090613bac9084908690600401614d92565b604080518083038186803b158015613bc357600080fd5b505afa158015613bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfb919061490d565b9098509550505050505095509550955095915050565b6000613c1c3061435c565b15905090565b600054610100900460ff1680613c3b5750613c3b613c11565b80613c49575060005460ff16155b613c845760405162461bcd60e51b815260040180806020018281038252602e815260200180614e6f602e913960400191505060405180910390fd5b600054610100900460ff16158015613caf576000805460ff1961ff0019909116610100171660011790555b8015613cc1576000805461ff00191690555b50565b60408051808201909152600381526226a22d60e91b602082015260009082613d6a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d2f578181015183820152602001613d17565b50505050905090810190601f168015613d5c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506040805180820190915260038152624d4d4f60e81b60208201526002830490670de0b6b3a7640000821904851115613de45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613d2f578181015183820152602001613d17565b508281670de0b6b3a764000086020181613dfa57fe5b04949350505050565b6000821580613e10575081155b15613e1d5750600061287a565b816706f05b59d3b200001981613e2f57fe5b04831115604051806040016040528060038152602001624d4d4f60e81b81525090613e9b5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613d2f578181015183820152602001613d17565b50670de0b6b3a76400006002815b048385020181613eb557fe5b049392505050565b613ecf826001600160a01b0316614362565b613f20576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310613f5e5780518252601f199092019160209182019101613f3f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613fc0576040519150601f19603f3d011682016040523d82523d6000602084013e613fc5565b606091505b50915091508161401c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156115f05780806020019051602081101561403857600080fd5b50516115f05760405162461bcd60e51b815260040180806020018281038252602a815260200180614f1d602a913960400191505060405180910390fd5b6000821580614082575081155b1561408f5750600061287a565b81611388198161409b57fe5b04831115604051806040016040528060038152602001624d4d4f60e81b815250906141075760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613d2f578181015183820152602001613d17565b50612710600281613ea9565b600081848411156141655760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613d2f578181015183820152602001613d17565b505050900390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106141ea5780518252601f1990920191602091820191016141cb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461424c576040519150601f19603f3d011682016040523d82523d6000602084013e614251565b606091505b509150915081801561427f57508051158061427f575080806020019051602081101561427c57600080fd5b50515b6142ba5760405162461bcd60e51b815260040180806020018281038252602d815260200180614ef0602d913960400191505060405180910390fd5b5050505050565b6000826142d05750600061287a565b828202828482816142dd57fe5b04146128775760405162461bcd60e51b8152600401808060200182810382526021815260200180614ecf6021913960400191505060405180910390fd5b600061287783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061439b565b3b151590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610a92575050151592915050565b600081836143ea5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613d2f578181015183820152602001613d17565b5060008385816143f657fe5b0495945050505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001614474614400565b905290565b803560ff81168114610a9757600080fd5b60006020828403121561449b578081fd5b813561287781614de6565b6000602082840312156144b7578081fd5b815161287781614de6565b600080604083850312156144d4578081fd5b82356144df81614de6565b915060208301356144ef81614de6565b809150509250929050565b60008060006060848603121561450e578081fd5b833561451981614de6565b9250602084013561452981614de6565b9150604084013561453981614de6565b809150509250925092565b60008060008060808587031215614559578081fd5b843561456481614de6565b9350602085013561457481614de6565b9250604085013561458481614de6565b9150606085013561459481614de6565b939692955090935050565b60008060008060008060c087890312156145b7578182fd5b86356145c281614de6565b955060208701356145d281614de6565b945060408701356145e281614de6565b935060608701356145f281614de6565b9250608087013561460281614de6565b915060a087013561461281614de6565b809150509295509295509295565b600080600080600060a08688031215614637578081fd5b853561464281614de6565b9450602086013561465281614de6565b9350604086013561466281614de6565b9250606086013561467281614de6565b949793965091946080013592915050565b60008060008060808587031215614698578384fd5b84356146a381614de6565b935060208501356146b381614de6565b925060408501356146c381614de6565b9396929550929360600135925050565b600080600080600060a086880312156146ea578283fd5b85356146f581614de6565b9450602086013561470581614de6565b9350604086013561471581614de6565b94979396509394606081013594506080013592915050565b60008060008060808587031215614742578182fd5b843561474d81614de6565b9350602085013561475d81614de6565b93969395505050506040820135916060013590565b60008060408385031215614784578182fd5b823561478f81614de6565b946020939093013593505050565b6000806000606084860312156147b1578081fd5b83356147bc81614de6565b925060208401359150604084013561453981614de6565b600080600080608085870312156147e8578182fd5b84356147f381614de6565b935060208501359250604085013561ffff81168114614584578283fd5b600060208284031215614821578081fd5b813561287781614dfb565b60006020828403121561483d578081fd5b815161287781614dfb565b60006101a0828403121561485a578081fd5b50919050565b6000610300828403121561485a578081fd5b6000610320828403121561485a578081fd5b600060808284031215614895578081fd5b6040516080810181811067ffffffffffffffff821117156148b257fe5b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b6000610100828403121561485a578081fd5b600060208284031215614906578081fd5b5051919050565b6000806040838503121561491f578182fd5b505080516020909101519092909150565b60008060008060808587031215614945578182fd5b505082516020840151604085015160609095015191969095509092509050565b600060208284031215614976578081fd5b61287782614479565b803582526020810135602083015260408101356040830152606081013560608301526149b160808301608083016149b5565b5050565b60ff6149c082614479565b16825260208181013590830152604090810135910152565b805182526020810151602083015260408101516040830152606081015160608301525050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b03938416815291909216602082015261ffff909116604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060e08201905060018060a01b038416825282356020830152602083013560408301526040830135606083015261251060808301606085016149b5565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0386811682526020820186905260408201859052831660608201526101608101614b8c608083018461497f565b9695505050505050565b6001600160a01b038781168252602082018790526040820186905260608201859052831660808201526101808101614bd160a083018461497f565b979650505050505050565b6000602080835283518082850152825b81811015614c0857858101830151858201604001528201614bec565b81811115614c195783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f526f757465723a20696e76616c69642077697468647261772072657175657374604082015260600190565b60208082526029908201527f4661696c656420746f2073656e64207465726d696e6174696f6e20726577617260408201526832103a37903830b4b960b91b606082015260800190565b6020808252601c908201527f526f757465723a20496e76616c6964206f70656e207265717565737400000000604082015260600190565b6020808252601d908201527f526f757465723a20496e76616c696420636c6f73652072657175657374000000604082015260600190565b600061018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151614d81828501826149d8565b505092915050565b90815260200190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b600061010082019050868252856020830152846040830152836060830152614b8c60808301846149d8565b6001600160a01b0381168114613cc157600080fd5b8015158114613cc157600080fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564556e61626c6520746f2066696e64207265736572766520666f722070726f7669646564206c656e6461626c6520746f6b656e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d46f1297ff7cf1ff68edc6c0cbda860524ed0812200170a52dbb73a489a6a9a964736f6c63430007040033