From 720be7b8a9afd234f5b698f20a14d365185b8287 Mon Sep 17 00:00:00 2001 From: Kevin Halliday Date: Thu, 10 Oct 2024 13:59:32 -0400 Subject: [PATCH] chore(contracts/core): allow bridge fee overpayment --- contracts/allocs/devnet.json | 2 +- contracts/allocs/staging.json | 2 +- contracts/bindings/admin.go | 2 +- contracts/bindings/allocpredeploys.go | 2 +- contracts/bindings/omnibridgel1.go | 2 +- contracts/bindings/omnibridgenative.go | 2 +- contracts/core/.gas-snapshot | 18 +++++++++--------- contracts/core/src/token/OmniBridgeL1.sol | 4 +++- contracts/core/src/token/OmniBridgeNative.sol | 8 ++++---- contracts/core/test/token/OmniBridgeL1.t.sol | 10 ++++------ .../core/test/token/OmniBridgeNative.t.sol | 17 ++++++----------- .../evm/testdata/TestMakeEVMGenesis.golden | 2 +- 12 files changed, 33 insertions(+), 38 deletions(-) diff --git a/contracts/allocs/devnet.json b/contracts/allocs/devnet.json index d56bb2cba..956c72361 100644 --- a/contracts/allocs/devnet.json +++ b/contracts/allocs/devnet.json @@ -33639,7 +33639,7 @@ }, "0xede1dbfffffffffffffffffffffffffffffffffd": { "balance": "0x0", - "code": "0x6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113cb565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113e8565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113e8565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611401565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113cb565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e461035136600461142d565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b5061017960008051602061168c83398151915281565b6101e461040f366004611401565b610bad565b34801561042057600080fd5b506101e461042f3660046113cb565b610c03565b34801561044057600080fd5b506101e461044f3660046113e8565b610d11565b34801561046057600080fd5b506101e461046f3660046113cb565b610d22565b34801561048057600080fd5b506101e461048f366004611488565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114d3565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b91906114ff565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115b1565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115e7565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114d3565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b391906114ff565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b44908490611616565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114d3565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc38661129c565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112ad565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b60008051602061168c83398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e160008051602061168c833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e160008051602061168c8339815191526112ad565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b600061112583836107fe565b90506111318183611616565b341461117f5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a20696e636f72726563742066756e6473000000000060448201526064016104db565b81600160008282546111919190611629565b9091555050600054600254604080516001600160a01b038781166024830152604480830188905283518084039091018152606490920183526020820180516001600160e01b031663f3fef3a360e01b179052915163c21dda4f60e01b8152600160401b850483169463c21dda4f948794611225946001600160401b039093169360049391909216916201388090840161163c565b6000604051808303818588803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b50506040518581526001600160a01b03871693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a3505050565b6112a4611365565b6107fb816113ae565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113215760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611365565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113dd57600080fd5b81356108ca816113b6565b6000602082840312156113fa57600080fd5b5035919050565b6000806040838503121561141457600080fd5b823561141f816113b6565b946020939093013593505050565b6000806000806080858703121561144357600080fd5b843561144e816113b6565b9350602085013561145e816113b6565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b60008060006060848603121561149d57600080fd5b83356114a881611473565b925060208401356114b8816113b6565b915060408401356114c8816113b6565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561151157600080fd5b604051604081018181106001600160401b038211171561154157634e487b7160e01b600052604160045260246000fd5b604052825161154f81611473565b8152602083015161155f816113b6565b60208201529392505050565b6000815180845260005b8181101561159157602081850181015186830182015201611575565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115d4606084018661156b565b9150808416604084015250949350505050565b6000602082840312156115f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611600565b818103818111156107e4576107e4611600565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261167660a084018661156b565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220954ec61ffbef1747b0bc6170ad124f69b3aaf05577309cc053716a7c0eddd7fc64736f6c63430008180033", + "code": "0x6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113df565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113fc565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113fc565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611415565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113df565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e4610351366004611441565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b506101796000805160206116a083398151915281565b6101e461040f366004611415565b610bad565b34801561042057600080fd5b506101e461042f3660046113df565b610c03565b34801561044057600080fd5b506101e461044f3660046113fc565b610d11565b34801561046057600080fd5b506101e461046f3660046113df565b610d22565b34801561048057600080fd5b506101e461048f36600461149c565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114e7565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611513565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115c5565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115fb565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114e7565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190611513565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b4490849061162a565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114e7565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc3866112b0565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112c1565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b6000805160206116a083398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e16000805160206116a0833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e16000805160206116a08339815191526112c1565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b61112382826107fe565b61112d908261162a565b34101561117c5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20696e73756666696369656e742066756e6473000060448201526064016104db565b806001600082825461118e919061163d565b9091555050600054600160401b90046001600160a01b031663c21dda4f6111b5833461163d565b6000546002546040516001600160a01b038881166024830152604482018890526001600160401b0390931692600492169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e088901b16815261123a94939291906201388090600401611650565b6000604051808303818588803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b50506040518481526001600160a01b03861693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a35050565b6112b8611379565b6107fb816113c2565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113355760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611379565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113f157600080fd5b81356108ca816113ca565b60006020828403121561140e57600080fd5b5035919050565b6000806040838503121561142857600080fd5b8235611433816113ca565b946020939093013593505050565b6000806000806080858703121561145757600080fd5b8435611462816113ca565b93506020850135611472816113ca565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b6000806000606084860312156114b157600080fd5b83356114bc81611487565b925060208401356114cc816113ca565b915060408401356114dc816113ca565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561152557600080fd5b604051604081018181106001600160401b038211171561155557634e487b7160e01b600052604160045260246000fd5b604052825161156381611487565b81526020830151611573816113ca565b60208201529392505050565b6000815180845260005b818110156115a557602081850181015186830182015201611589565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115e8606084018661157f565b9150808416604084015250949350505050565b60006020828403121561160d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611614565b818103818111156107e4576107e4611614565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261168a60a084018661157f565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212207e2b43e80f776959bfee4f00ceda9bc3e4390b2b22a1f6268ff2a3694128f7da64736f6c63430008180033", "nonce": "0x0", "storage": { "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" diff --git a/contracts/allocs/staging.json b/contracts/allocs/staging.json index deef8c18c..9af7a6595 100644 --- a/contracts/allocs/staging.json +++ b/contracts/allocs/staging.json @@ -33639,7 +33639,7 @@ }, "0xede1dbfffffffffffffffffffffffffffffffffd": { "balance": "0x0", - "code": "0x6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113cb565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113e8565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113e8565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611401565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113cb565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e461035136600461142d565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b5061017960008051602061168c83398151915281565b6101e461040f366004611401565b610bad565b34801561042057600080fd5b506101e461042f3660046113cb565b610c03565b34801561044057600080fd5b506101e461044f3660046113e8565b610d11565b34801561046057600080fd5b506101e461046f3660046113cb565b610d22565b34801561048057600080fd5b506101e461048f366004611488565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114d3565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b91906114ff565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115b1565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115e7565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114d3565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b391906114ff565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b44908490611616565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114d3565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc38661129c565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112ad565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b60008051602061168c83398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e160008051602061168c833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e160008051602061168c8339815191526112ad565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b600061112583836107fe565b90506111318183611616565b341461117f5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a20696e636f72726563742066756e6473000000000060448201526064016104db565b81600160008282546111919190611629565b9091555050600054600254604080516001600160a01b038781166024830152604480830188905283518084039091018152606490920183526020820180516001600160e01b031663f3fef3a360e01b179052915163c21dda4f60e01b8152600160401b850483169463c21dda4f948794611225946001600160401b039093169360049391909216916201388090840161163c565b6000604051808303818588803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b50506040518581526001600160a01b03871693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a3505050565b6112a4611365565b6107fb816113ae565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113215760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611365565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113dd57600080fd5b81356108ca816113b6565b6000602082840312156113fa57600080fd5b5035919050565b6000806040838503121561141457600080fd5b823561141f816113b6565b946020939093013593505050565b6000806000806080858703121561144357600080fd5b843561144e816113b6565b9350602085013561145e816113b6565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b60008060006060848603121561149d57600080fd5b83356114a881611473565b925060208401356114b8816113b6565b915060408401356114c8816113b6565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561151157600080fd5b604051604081018181106001600160401b038211171561154157634e487b7160e01b600052604160045260246000fd5b604052825161154f81611473565b8152602083015161155f816113b6565b60208201529392505050565b6000815180845260005b8181101561159157602081850181015186830182015201611575565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115d4606084018661156b565b9150808416604084015250949350505050565b6000602082840312156115f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611600565b818103818111156107e4576107e4611600565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261167660a084018661156b565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220954ec61ffbef1747b0bc6170ad124f69b3aaf05577309cc053716a7c0eddd7fc64736f6c63430008180033", + "code": "0x6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113df565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113fc565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113fc565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611415565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113df565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e4610351366004611441565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b506101796000805160206116a083398151915281565b6101e461040f366004611415565b610bad565b34801561042057600080fd5b506101e461042f3660046113df565b610c03565b34801561044057600080fd5b506101e461044f3660046113fc565b610d11565b34801561046057600080fd5b506101e461046f3660046113df565b610d22565b34801561048057600080fd5b506101e461048f36600461149c565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114e7565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611513565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115c5565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115fb565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114e7565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190611513565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b4490849061162a565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114e7565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc3866112b0565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112c1565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b6000805160206116a083398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e16000805160206116a0833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e16000805160206116a08339815191526112c1565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b61112382826107fe565b61112d908261162a565b34101561117c5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20696e73756666696369656e742066756e6473000060448201526064016104db565b806001600082825461118e919061163d565b9091555050600054600160401b90046001600160a01b031663c21dda4f6111b5833461163d565b6000546002546040516001600160a01b038881166024830152604482018890526001600160401b0390931692600492169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e088901b16815261123a94939291906201388090600401611650565b6000604051808303818588803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b50506040518481526001600160a01b03861693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a35050565b6112b8611379565b6107fb816113c2565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113355760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611379565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113f157600080fd5b81356108ca816113ca565b60006020828403121561140e57600080fd5b5035919050565b6000806040838503121561142857600080fd5b8235611433816113ca565b946020939093013593505050565b6000806000806080858703121561145757600080fd5b8435611462816113ca565b93506020850135611472816113ca565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b6000806000606084860312156114b157600080fd5b83356114bc81611487565b925060208401356114cc816113ca565b915060408401356114dc816113ca565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561152557600080fd5b604051604081018181106001600160401b038211171561155557634e487b7160e01b600052604160045260246000fd5b604052825161156381611487565b81526020830151611573816113ca565b60208201529392505050565b6000815180845260005b818110156115a557602081850181015186830182015201611589565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115e8606084018661157f565b9150808416604084015250949350505050565b60006020828403121561160d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611614565b818103818111156107e4576107e4611614565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261168a60a084018661157f565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212207e2b43e80f776959bfee4f00ceda9bc3e4390b2b22a1f6268ff2a3694128f7da64736f6c63430008180033", "nonce": "0x0", "storage": { "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" diff --git a/contracts/bindings/admin.go b/contracts/bindings/admin.go index 4b5d86139..727e3a749 100644 --- a/contracts/bindings/admin.go +++ b/contracts/bindings/admin.go @@ -32,7 +32,7 @@ var ( // AdminMetaData contains all meta data concerning the Admin contract. var AdminMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_SCRIPT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauseBridge\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pausePortal\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXCall\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXCallTo\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXSubmit\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXSubmitFrom\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseBridge\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpausePortal\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXCall\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXCallTo\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXSubmit\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXSubmitFrom\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeBridgeL1\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeBridgeNative\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeFeeOracleV1\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeGasPump\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeGasStation\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradePortal\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradePortalRegistry\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeSlashing\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeStaking\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", - Bin: "0x6080604052600c805462ff00ff19166201000117905534801561002157600080fd5b506201944280620000336000396000f3fe60806040523480156200001157600080fd5b50600436106200015d5760003560e01c8063a71b82f311620000c7578063c7a275ae1162000086578063c7a275ae14620002d4578063cec93a7a14620002eb578063cfbf9af71462000302578063d3919d631462000319578063d9ce4ea91462000330578063f8ccbf47146200034757600080fd5b8063a71b82f31462000261578063ad1610621462000278578063b90b3ffb146200028f578063becbbd8414620002a6578063c206ac6714620002bd57600080fd5b80635dcb079211620001205780635dcb079214620001d7578063626812e314620001ee5780636e7a983314620002055780637924b9b3146200021c5780637be8840014620002335780639452e25f146200024a57600080fd5b806308de3fd414620001625780631a2b9c80146200017b5780633e1f7dbc14620001925780634bbad78a14620001a95780635a92ef2314620001c0575b600080fd5b6200017962000173366004620026be565b6200036f565b005b620001796200018c366004620026be565b620004ad565b62000179620001a33660046200275b565b6200054f565b62000179620001ba366004620026be565b62000cac565b62000179620001d13660046200275b565b62000d4e565b62000179620001e8366004620027c7565b62000e7b565b62000179620001ff3660046200275b565b62000fa8565b620001796200021636600462002805565b620010cc565b620001796200022d3660046200275b565b620011e4565b620001796200024436600462002805565b62001308565b620001796200025b36600462002805565b62001382565b62000179620002723660046200288a565b620013fc565b620001796200028936600462002805565b6200161d565b62000179620002a0366004620027c7565b62001697565b62000179620002b7366004620027c7565b6200173f565b62000179620002ce366004620026be565b620017e7565b62000179620002e5366004620027c7565b62001889565b62000179620002fc3660046200288a565b62001931565b6200017962000313366004620027c7565b62001b52565b620001796200032a36600462002805565b62001bfa565b6200017962000341366004620027c7565b62002117565b600c546200035b9062010000900460ff1681565b604051901515815260200160405180910390f35b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b158015620003c257600080fd5b505af1158015620003d7573d6000803e3d6000fd5b505060405163d533b44560e01b81526001600160401b03851660048201526001600160a01b038616925063d533b44591506024015b600060405180830381600087803b1580156200042757600080fd5b505af11580156200043c573d6000803e3d6000fd5b50505050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200048e57600080fd5b505af1158015620004a3573d6000803e3d6000fd5b5050505050505050565b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200050057600080fd5b505af115801562000515573d6000803e3d6000fd5b50506040516315fd043360e31b81526001600160401b03851660048201526001600160a01b038616925063afe8219891506024016200040c565b6000600262048789608a1b0190506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200059e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c49190620028d0565b90506000826001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062d9190620028d0565b90506000836001600160a01b031663969b53da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000670573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006969190620028d0565b90506000846001600160a01b03166312622e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ff9190620028f7565b90506000856001600160a01b03166323b051d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000742573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000768919062002917565b604051637fec2a8d60e01b81526001600160a01b038b166004820152909150600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b158015620007bc57600080fd5b505af1158015620007d1573d6000803e3d6000fd5b505050506000604051620007e590620025f5565b604051809103906000f08015801562000802573d6000803e3d6000fd5b509050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200085357600080fd5b505af115801562000868573d6000803e3d6000fd5b50505050620008848b600262048789608a1b01838c8c620021bf565b856001600160a01b0316876001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f39190620028d0565b6001600160a01b0316146200093f5760405162461bcd60e51b815260206004820152600d60248201526c1bdddb995c8818da185b99d959609a1b60448201526064015b60405180910390fd5b826001600160401b0316876001600160a01b03166312622e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000988573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009ae9190620028f7565b6001600160401b031614620009fa5760405162461bcd60e51b81526020600482015260116024820152701b0c50da185a5b92590818da185b99d959607a1b604482015260640162000936565b846001600160a01b0316876001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a43573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a699190620028d0565b6001600160a01b03161462000ab05760405162461bcd60e51b815260206004820152600c60248201526b1bdb5b9a4818da185b99d95960a21b604482015260640162000936565b81876001600160a01b03166323b051d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000af0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b16919062002917565b1462000b655760405162461bcd60e51b815260206004820152601760248201527f6c3142726964676542616c616e6365206368616e676564000000000000000000604482015260640162000936565b836001600160a01b0316876001600160a01b031663969b53da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bd49190620028d0565b6001600160a01b03161462000c1f5760405162461bcd60e51b815260206004820152601060248201526f1b0c509c9a5919d94818da185b99d95960821b604482015260640162000936565b60405162000c2d9062002603565b604051809103906000f08015801562000c4a573d6000803e3d6000fd5b506001600160a01b031663c04062266040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000c8657600080fd5b505af115801562000c9b573d6000803e3d6000fd5b505050505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b15801562000cff57600080fd5b505af115801562000d14573d6000803e3d6000fd5b505060405163185f372d60e31b81526001600160401b03851660048201526001600160a01b038616925063c2f9b96891506024016200040c565b604051637fec2a8d60e01b81526001600160a01b0384166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b15801562000d9f57600080fd5b505af115801562000db4573d6000803e3d6000fd5b50505050600060405162000dc89062002611565b604051809103906000f08015801562000de5573d6000803e3d6000fd5b509050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000e3657600080fd5b505af115801562000e4b573d6000803e3d6000fd5b5050505062000e748573cccccc00000000000000000000000000000000028386866000620021cb565b5050505050565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b15801562000ece57600080fd5b505af115801562000ee3573d6000803e3d6000fd5b50505050816001600160a01b03166383d0cbd96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b505af115801562000f38573d6000803e3d6000fd5b50505050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f8a57600080fd5b505af115801562000f9f573d6000803e3d6000fd5b50505050505050565b604051637fec2a8d60e01b81526001600160a01b0384166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b15801562000ff957600080fd5b505af11580156200100e573d6000803e3d6000fd5b50505050600060405162001022906200261f565b604051809103906000f0801580156200103f573d6000803e3d6000fd5b509050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200109057600080fd5b505af1158015620010a5573d6000803e3d6000fd5b5050505062000e748573cccccc0000000000000000000000000000000001838686620021bf565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200111d57600080fd5b505af115801562001132573d6000803e3d6000fd5b50505050600060405162001146906200262d565b604051809103906000f08015801562001163573d6000803e3d6000fd5b509050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011b457600080fd5b505af1158015620011c9573d6000803e3d6000fd5b50505050620011dc8685838686620021bf565b505050505050565b604051637fec2a8d60e01b81526001600160a01b0384166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200123557600080fd5b505af11580156200124a573d6000803e3d6000fd5b5050505060006040516200125e906200263b565b604051809103906000f0801580156200127b573d6000803e3d6000fd5b509050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012cc57600080fd5b505af1158015620012e1573d6000803e3d6000fd5b5050505062000e748573121e240000000000000000000000000000000001838686620021bf565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200135957600080fd5b505af11580156200136e573d6000803e3d6000fd5b505050506000604051620011469062002649565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b158015620013d357600080fd5b505af1158015620013e8573d6000803e3d6000fd5b505050506000604051620011469062002657565b6000829050806001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001466919062002917565b821480620014d75750806001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620014ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014d4919062002917565b82145b80620015465750806001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200151d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001543919062002917565b82145b620015855760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21030b1ba34b7b760911b604482015260640162000936565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b158015620015d657600080fd5b505af1158015620015eb573d6000803e3d6000fd5b5050604051632f4dae9f60e01b8152600481018590526001600160a01b0384169250632f4dae9f91506024016200040c565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200166e57600080fd5b505af115801562001683573d6000803e3d6000fd5b505050506000604051620011469062002665565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b158015620016ea57600080fd5b505af1158015620016ff573d6000803e3d6000fd5b50505050816001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200179257600080fd5b505af1158015620017a7573d6000803e3d6000fd5b50505050816001600160a01b03166354d26bba6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200183a57600080fd5b505af11580156200184f573d6000803e3d6000fd5b50506040516310a5a7f760e01b81526001600160401b03851660048201526001600160a01b03861692506310a5a7f791506024016200040c565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b158015620018dc57600080fd5b505af1158015620018f1573d6000803e3d6000fd5b50505050816001600160a01b03166323dbce506040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b6000829050806001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200199b919062002917565b82148062001a0c5750806001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620019e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a09919062002917565b82145b8062001a7b5750806001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001a52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a78919062002917565b82145b62001aba5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21030b1ba34b7b760911b604482015260640162000936565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b15801562001b0b57600080fd5b505af115801562001b20573d6000803e3d6000fd5b50506040516376ab298d60e11b8152600481018590526001600160a01b038416925063ed56531a91506024016200040c565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b15801562001ba557600080fd5b505af115801562001bba573d6000803e3d6000fd5b50505050816001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b60008390506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001c40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c669190620028d0565b90506000826001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001ca9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ccf9190620028d0565b90506000836001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d389190620028d0565b604051637fec2a8d60e01b81526001600160a01b038a166004820152909150600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b15801562001d8c57600080fd5b505af115801562001da1573d6000803e3d6000fd5b5050505060008260405162001db69062002673565b6001600160a01b039091168152602001604051809103906000f08015801562001de3573d6000803e3d6000fd5b509050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001e3457600080fd5b505af115801562001e49573d6000803e3d6000fd5b5050505062001e5c8a89838a8a620021bf565b836001600160a01b0316856001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001ea5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ecb9190620028d0565b6001600160a01b03161462001f135760405162461bcd60e51b815260206004820152600d60248201526c1bdddb995c8818da185b99d959609a1b604482015260640162000936565b826001600160a01b0316856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f5c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f829190620028d0565b6001600160a01b03161462001fca5760405162461bcd60e51b815260206004820152600d60248201526c1d1bdad95b8818da185b99d959609a1b604482015260640162000936565b816001600160a01b0316856001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002013573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020399190620028d0565b6001600160a01b031614620020805760405162461bcd60e51b815260206004820152600c60248201526b1bdb5b9a4818da185b99d95960a21b604482015260640162000936565b6040516200208e9062002681565b604051809103906000f080158015620020ab573d6000803e3d6000fd5b5060405163148aedc160e21b81526001600160a01b038a81166004830152919091169063522bb70490602401600060405180830381600087803b158015620020f257600080fd5b505af115801562002107573d6000803e3d6000fd5b5050505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200216a57600080fd5b505af11580156200217f573d6000803e3d6000fd5b50505050816001600160a01b031663c3d8ad676040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b62000e74858585858560015b6000620021d886620023d2565b604051637fec2a8d60e01b81526001600160a01b0389166004820152909150600080516020620193cd83398151915290637fec2a8d90602401600060405180830381600087803b1580156200222c57600080fd5b505af115801562002241573d6000803e3d6000fd5b5050604051639623609d60e01b81526001600160a01b0384169250639623609d91506200227990899089908990899060040162002931565b600060405180830381600087803b1580156200229457600080fd5b505af1158015620022a9573d6000803e3d6000fd5b50505050600080516020620193ed83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620022fb57600080fd5b505af115801562002310573d6000803e3d6000fd5b505050508115620023745762002326856200247c565b620023745760405162461bcd60e51b815260206004820152601960248201527f696e697469616c697a657273206e6f742064697361626c656400000000000000604482015260640162000936565b846001600160a01b03166200238987620024a1565b6001600160a01b03161462000f9f5760405162461bcd60e51b815260206004820152600e60248201526d1d5c19dc9859194819985a5b195960921b604482015260640162000936565b604051630667f9d760e41b81526001600160a01b03821660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152600090600080516020620193cd8339815191529063667f9d70906044015b602060405180830381865afa15801562002450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002476919062002917565b92915050565b60006001600160401b03620024918362002506565b6001600160401b03161492915050565b604051630667f9d760e41b81526001600160a01b03821660048201527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6024820152600090600080516020620193cd8339815191529063667f9d709060440162002432565b604051630667f9d760e41b81526001600160a01b03821660048201527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060248201526000908190600080516020620193cd8339815191529063667f9d7090604401602060405180830381865afa15801562002585573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ab919062002917565b90506001600160401b03811115620024765760405162461bcd60e51b815260206004820152600c60248201526b696e697469616c697a696e6760a01b604482015260640162000936565b6117c0806200297e83390190565b6138fa806200413e83390190565b61017e8062007a3883390190565b610c6b8062007bb683390190565b614bd3806200882183390190565b611982806200d3f483390190565b6118c4806200ed7683390190565b6112dd806201063a83390190565b61112a806201191783390190565b6117728062012a4183390190565b61521a80620141b383390190565b6001600160a01b0381168114620026a557600080fd5b50565b6001600160401b0381168114620026a557600080fd5b600080600060608486031215620026d457600080fd5b8335620026e1816200268f565b92506020840135620026f3816200268f565b915060408401356200270581620026a8565b809150509250925092565b60008083601f8401126200272357600080fd5b5081356001600160401b038111156200273b57600080fd5b6020830191508360208285010111156200275457600080fd5b9250929050565b600080600080606085870312156200277257600080fd5b84356200277f816200268f565b9350602085013562002791816200268f565b925060408501356001600160401b03811115620027ad57600080fd5b620027bb8782880162002710565b95989497509550505050565b60008060408385031215620027db57600080fd5b8235620027e8816200268f565b91506020830135620027fa816200268f565b809150509250929050565b6000806000806000608086880312156200281e57600080fd5b85356200282b816200268f565b945060208601356200283d816200268f565b935060408601356200284f816200268f565b925060608601356001600160401b038111156200286b57600080fd5b620028798882890162002710565b969995985093965092949392505050565b600080600060608486031215620028a057600080fd5b8335620028ad816200268f565b92506020840135620028bf816200268f565b929592945050506040919091013590565b600060208284031215620028e357600080fd5b8151620028f0816200268f565b9392505050565b6000602082840312156200290a57600080fd5b8151620028f081620026a8565b6000602082840312156200292a57600080fd5b5051919050565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f85011683010190509594505050505056fe608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116e1806100df6000396000f3fe6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113cb565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113e8565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113e8565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611401565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113cb565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e461035136600461142d565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b5061017960008051602061168c83398151915281565b6101e461040f366004611401565b610bad565b34801561042057600080fd5b506101e461042f3660046113cb565b610c03565b34801561044057600080fd5b506101e461044f3660046113e8565b610d11565b34801561046057600080fd5b506101e461046f3660046113cb565b610d22565b34801561048057600080fd5b506101e461048f366004611488565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114d3565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b91906114ff565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115b1565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115e7565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114d3565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b391906114ff565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b44908490611616565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114d3565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc38661129c565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112ad565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b60008051602061168c83398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e160008051602061168c833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e160008051602061168c8339815191526112ad565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b600061112583836107fe565b90506111318183611616565b341461117f5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a20696e636f72726563742066756e6473000000000060448201526064016104db565b81600160008282546111919190611629565b9091555050600054600254604080516001600160a01b038781166024830152604480830188905283518084039091018152606490920183526020820180516001600160e01b031663f3fef3a360e01b179052915163c21dda4f60e01b8152600160401b850483169463c21dda4f948794611225946001600160401b039093169360049391909216916201388090840161163c565b6000604051808303818588803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b50506040518581526001600160a01b03871693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a3505050565b6112a4611365565b6107fb816113ae565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113215760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611365565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113dd57600080fd5b81356108ca816113b6565b6000602082840312156113fa57600080fd5b5035919050565b6000806040838503121561141457600080fd5b823561141f816113b6565b946020939093013593505050565b6000806000806080858703121561144357600080fd5b843561144e816113b6565b9350602085013561145e816113b6565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b60008060006060848603121561149d57600080fd5b83356114a881611473565b925060208401356114b8816113b6565b915060408401356114c8816113b6565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561151157600080fd5b604051604081018181106001600160401b038211171561154157634e487b7160e01b600052604160045260246000fd5b604052825161154f81611473565b8152602083015161155f816113b6565b60208201529392505050565b6000815180845260005b8181101561159157602081850181015186830182015201611575565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115d4606084018661156b565b9150808416604084015250949350505050565b6000602082840312156115f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611600565b818103818111156107e4576107e4611600565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261167660a084018661156b565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220954ec61ffbef1747b0bc6170ad124f69b3aaf05577309cc053716a7c0eddd7fc64736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b506138bd8061003d6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063916a17c61162000097578063ba414fa6116200006e578063ba414fa61462000193578063c040622614620001ae578063e20c9f7114620001ba578063fa7626d414620001c457600080fd5b8063916a17c61462000166578063b0464fdc146200017f578063b5508aa9146200018957600080fd5b80631ed7831c14620000e55780632ade388014620001075780633e5e3c2314620001205780633f7286f4146200012a57806366d9a9a0146200013457806385226c81146200014d575b600080fd5b620000ef620001d2565b604051620000fe919062001fbc565b60405180910390f35b6200011162000236565b604051620000fe91906200205f565b620000ef62000384565b620000ef620003e6565b6200013e62000448565b604051620000fe91906200216d565b62000157620005c1565b604051620000fe9190620021fa565b620001706200069b565b604051620000fe919062002262565b6200017062000785565b620001576200086f565b6200019d62000949565b6040519015158152602001620000fe565b620001b8620009ec565b005b620000ef62000b0b565b601f546200019d9060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156200022c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200020d575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200037b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000363578382906000526020600020018054620002cf90620022d7565b80601f0160208091040260200160405190810160405280929190818152602001828054620002fd90620022d7565b80156200034e5780601f1062000322576101008083540402835291602001916200034e565b820191906000526020600020905b8154815290600101906020018083116200033057829003601f168201915b505050505081526020019060010190620002ad565b5050505081525050815260200190600101906200025a565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200037b5783829060005260206000209060020201604051806040016040529081600082018054620004a290620022d7565b80601f0160208091040260200160405190810160405280929190818152602001828054620004d090620022d7565b8015620005215780601f10620004f55761010080835404028352916020019162000521565b820191906000526020600020905b8154815290600101906020018083116200050357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620005a857602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620005695790505b505050505081525050815260200190600101906200046c565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156200037b5783829060005260206000200180546200060790620022d7565b80601f01602080910402602001604051908101604052809291908181526020018280546200063590620022d7565b8015620006865780601f106200065a5761010080835404028352916020019162000686565b820191906000526020600020905b8154815290600101906020018083116200066857829003601f168201915b505050505081526020019060010190620005e5565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156200037b5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200076c57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200072d5790505b50505050508152505081526020019060010190620006bf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156200037b5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200085657602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620008175790505b50505050508152505081526020019060010190620007a9565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156200037b578382906000526020600020018054620008b590620022d7565b80601f0160208091040260200160405190810160405280929190818152602001828054620008e390620022d7565b8015620009345780601f10620009085761010080835404028352916020019162000934565b820191906000526020600020905b8154815290600101906020018083116200091657829003601f168201915b50505050508152602001906001019062000893565b60085460009060ff161562000962575060085460ff1690565b604051630667f9d760e41b815260008051602062003868833981519152600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa158015620009bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009e5919062002313565b1415905090565b60007f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af115801562000a52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a7891906200234a565b509091506000905081600481111562000a955762000a9562002399565b1462000ad65760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b604482015260640160405180910390fd5b62000ae062000b6d565b62000aea62000e94565b62000af462001170565b62000afe6200152c565b62000b0862001940565b50565b606060158054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b601f805474121e24000000000000000000000000000000000200610100600160a81b0319909116179081905560408051634b4da9ed60e11b815290516101009092046001600160a01b03169163969b53da916004808201926020929091908290030181865afa15801562000be5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0b9190620023af565b602180546001600160a01b0319166001600160a01b03928316179055601f54604080516312622e5b60e01b81529051610100909204909216916312622e5b9160048083019260209291908290030181865afa15801562000c6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c959190620023d4565b602260146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550601f60019054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d11573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d379190620023af565b602280546001600160a01b0319166001600160a01b039290921691909117905560405162000d659062001fa1565b604051809103906000f08015801562000d82573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b0392831617905560225460405163ca669fa760e01b815291166004820152600080516020620038688339815191529063ca669fa790602401600060405180830381600087803b15801562000deb57600080fd5b505af115801562000e00573d6000803e3d6000fd5b5050601f5460225460205460215460405163f35ea55760e01b8152600160a01b90930467ffffffffffffffff1660048401526001600160a01b03918216602484015281166044830152610100909204909116925063f35ea5579150606401600060405180830381600087803b15801562000e7957600080fd5b505af115801562000e8e573d6000803e3d6000fd5b50505050565b600062000ebb60405180604001604052806002815260200161746f60f01b81525062001d7a565b90506000670de0b6b3a76400009050600062000ef4604051806040016040528060058152602001643830bcb7b960d91b81525062001d7a565b60405163f30c7ba360e01b815290915068056bc75e2d6310000090600080516020620038688339815191529063f30c7ba39062000f38908790879060040162002400565b600060405180830381600087803b15801562000f5357600080fd5b505af115801562000f68573d6000803e3d6000fd5b5050602054602254602154601f546040516001600160a01b0389811660248301528b81166044830152606482018b90526084820189905294851696506328d27d639550600160a01b90930467ffffffffffffffff1693918216926101009091049091169060a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b179052516001600160e01b031960e087901b168152620010229493929190620186a09060040162002428565b6020604051808303816000875af115801562001042573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001068919062002313565b50620010ee601f60019054906101000a90046001600160a01b03166001600160a01b03166323b051d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015620010c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010e7919062002313565b8262001d8e565b601f5460405163402914f560e01b81526001600160a01b03848116600483015262000e8e926101009004169063402914f5906024015b602060405180830381865afa15801562001142573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001168919062002313565b600062001d8e565b60006200119760405180604001604052806002815260200161746f60f01b81525062001d7a565b601f54604051633abfe55f60e01b81526001600160a01b038084166004830152670de0b6b3a76400006024830181905293945060009261010090041690633abfe55f90604401602060405180830381865afa158015620011fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001221919062002313565b6020546022546021546040516001600160a01b03888116602483015260448201889052949550600080516020620038688339815191529463f30c7ba3948116938793600160a01b90910467ffffffffffffffff16926004929091169060640160408051808303601f190181529181526020808301805163f3fef3a360e01b6001600160e01b03909116179052601f548251638fdcb4c960e01b815292516101009091046001600160a01b031692638fdcb4c99260048083019391928290030181865afa158015620012f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200131c9190620023d4565b604051602401620013329594939291906200247d565b60408051601f198184030181529181526020820180516001600160e01b031663c21dda4f60e01b179052516001600160e01b031960e086901b1681526200137f93929190600401620024ba565b600060405180830381600087803b1580156200139a57600080fd5b505af1158015620013af573d6000803e3d6000fd5b5060008051602062003868833981519152925063c88a5e6d9150859050620013d88486620024ec565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156200141f57600080fd5b505af115801562001434573d6000803e3d6000fd5b505060405163ca669fa760e01b81526001600160a01b038616600482015260008051602062003868833981519152925063ca669fa79150602401600060405180830381600087803b1580156200148957600080fd5b505af11580156200149e573d6000803e3d6000fd5b5050601f5461010090046001600160a01b0316915063c3de453d9050620014c68385620024ec565b6040516001600160e01b031960e084901b1681526001600160a01b0387166004820152602481018690526044016000604051808303818588803b1580156200150d57600080fd5b505af115801562001522573d6000803e3d6000fd5b5050505050505050565b60006200155360405180604001604052806002815260200161746f60f01b81525062001d7a565b90506000670de0b6b3a7640000905060006200158c604051806040016040528060058152602001643830bcb7b960d91b81525062001d7a565b9050600068056bc75e2d6310000090506000604051620015ac9062001faf565b604051809103906000f080158015620015c9573d6000803e3d6000fd5b5060405163f30c7ba360e01b8152909150600080516020620038688339815191529063f30c7ba39062001603908490889060040162002400565b600060405180830381600087803b1580156200161e57600080fd5b505af115801562001633573d6000803e3d6000fd5b5050602054602254602154601f546040516001600160a01b038a811660248301528881166044830152606482018c9052608482018a905294851696506328d27d639550600160a01b90930467ffffffffffffffff1693918216926101009091049091169060a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b179052516001600160e01b031960e087901b168152620016ed9493929190620186a09060040162002428565b6020604051808303816000875af11580156200170d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001733919062002313565b50601f5460405163402914f560e01b81526001600160a01b038581166004830152620017b4926101009004169063402914f590602401602060405180830381865afa15801562001787573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ad919062002313565b8562001d8e565b60405163f30c7ba360e01b8152600080516020620038688339815191529063f30c7ba390620017ea908890889060040162002400565b600060405180830381600087803b1580156200180557600080fd5b505af11580156200181a573d6000803e3d6000fd5b5050602054602254601f546040516001600160a01b038b8116602483015293841695506328d27d639450600160a01b90920467ffffffffffffffff16928892610100909204169060440160408051601f198184030181529181526020820180516001600160e01b0316630f41a04d60e11b179052516001600160e01b031960e087901b168152620018b79493929190620186a09060040162002428565b6020604051808303816000875af1158015620018d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018fd919062002313565b50601f5460405163402914f560e01b81526001600160a01b03858116600483015262001939926101009004169063402914f59060240162001124565b5050505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152600080516020620038688339815191529063ca669fa790602401600060405180830381600087803b1580156200199557600080fd5b505af1158015620019aa573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620019ff57600080fd5b505af115801562001a14573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001b0294506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001a73573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a99919062002313565b6040518263ffffffff1660e01b815260040162001ab891815260200190565b602060405180830381865afa15801562001ad6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001afc919062002514565b62001df9565b601f54604080516304bae1ef60e31b8152905162001b5c9261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001a73573d6000803e3d6000fd5b60225460405163ca669fa760e01b81526001600160a01b039091166004820152600080516020620038688339815191529063ca669fa790602401600060405180830381600087803b15801562001bb157600080fd5b505af115801562001bc6573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001c1b57600080fd5b505af115801562001c30573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001d1e94506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001c8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cb5919062002313565b6040518263ffffffff1660e01b815260040162001cd491815260200190565b602060405180830381865afa15801562001cf2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d18919062002514565b62001e57565b601f54604080516304bae1ef60e31b8152905162001d789261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001c8f573d6000803e3d6000fd5b565b600062001d878262001e8c565b5092915050565b60405163260a5b1560e21b8152600481018390526024810182905260008051602062003868833981519152906398296c549060440160006040518083038186803b15801562001ddc57600080fd5b505afa15801562001df1573d6000803e3d6000fd5b505050505050565b604051630c9fd58160e01b815281151560048201526000805160206200386883398151915290630c9fd581906024015b60006040518083038186803b15801562001e4257600080fd5b505afa15801562001939573d6000803e3d6000fd5b60405163a598288560e01b81528115156004820152600080516020620038688339815191529063a59828859060240162001e29565b6000808260405160200162001ea2919062002538565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150600080516020620038688339815191529063ffa1864990602401602060405180830381865afa15801562001f09573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2f9190620023af565b6040516318caf8e360e31b8152909250600080516020620038688339815191529063c657c7189062001f68908590879060040162002556565b600060405180830381600087803b15801562001f8357600080fd5b505af115801562001f98573d6000803e3d6000fd5b50505050915091565b611287806200258583390190565b605c806200380c83390190565b6020808252825182820181905260009190848201906040850190845b8181101562001fff5783516001600160a01b03168352928401929184019160010162001fd8565b50909695505050505050565b60005b83811015620020285781810151838201526020016200200e565b50506000910152565b600081518084526200204b8160208601602086016200200b565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156200211557603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b81811015620020fe57605f19898503018352620020eb84865162002031565b948e01949350918d0191600101620020cc565b505050978a01979450509188019160010162002086565b50919a9950505050505050505050565b60008151808452602080850194506020840160005b83811015620021625781516001600160e01b031916875295820195908201906001016200213a565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620021ec57888303603f1901855281518051878552620021bd8886018262002031565b91890151858303868b0152919050620021d7818362002125565b96890196945050509086019060010162002196565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156200225557603f198886030184526200224285835162002031565b9450928501929085019060010162002223565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620021ec57888303603f19018552815180516001600160a01b03168452870151878401879052620022c38785018262002125565b95880195935050908601906001016200228b565b600181811c90821680620022ec57607f821691505b6020821081036200230d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156200232657600080fd5b5051919050565b80516001600160a01b03811681146200234557600080fd5b919050565b6000806000606084860312156200236057600080fd5b8351600581106200237057600080fd5b925062002380602085016200232d565b915062002390604085016200232d565b90509250925092565b634e487b7160e01b600052602160045260246000fd5b600060208284031215620023c257600080fd5b620023cd826200232d565b9392505050565b600060208284031215620023e757600080fd5b815167ffffffffffffffff81168114620023cd57600080fd5b6001600160a01b03929092168252602082015260606040820181905260009082015260800190565b67ffffffffffffffff86811682526001600160a01b0386811660208401528516604083015260a06060830181905260009190620024689084018662002031565b91508084166080840152509695505050505050565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a060608401526200246860a084018662002031565b60018060a01b0384168152826020820152606060408201526000620024e3606083018462002031565b95945050505050565b808201808211156200250e57634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200252757600080fd5b81518015158114620023cd57600080fd5b600082516200254c8184602087016200200b565b9190910192915050565b6001600160a01b03831681526040602082018190526000906200257c9083018462002031565b94935050505056fe60c0604052600080546001600160a01b0319167301004e20000000000000520800000000004c4b4017905534801561003657600080fd5b506001600160401b03461660805260a660a052604051633b9aca009061005b906100a3565b908152602001604051809103906000f08015801561007d573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100b0565b6101d0806110b783390190565b60805160a051610fdb6100dc600039600061019801526000818161041a01526109450152610fdb6000f3fe6080604052600436106101405760003560e01c80636739afca116100b6578063b2b2f5bd1161006f578063b2b2f5bd146104a0578063b4d5afd1146104d4578063c21dda4f14610509578063c26dfc051461051c578063cf84c8181461053e578063d051c97d1461055e57600080fd5b80636739afca1461039f57806378fe5307146103c15780638dd9523c146103e85780639a8a059214610408578063a32eb7c61461043c578063aaf1bc971461047057600080fd5b80632f32700e116101085780632f32700e146102405780633aa87330146102a55780633fd3b15e146102e6578063500b19e71461032757806355e2448e1461035f57806366a1eaf31461037f57600080fd5b80630360d20f1461014557806306c3dc5f14610171578063110ff5f11461018657806324278bbe146101d257806328d27d6314610212575b600080fd5b34801561015157600080fd5b5061015a600281565b60405160ff90911681526020015b60405180910390f35b34801561017d57600080fd5b5061015a600381565b34801561019257600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610168565b3480156101de57600080fd5b506102026101ed366004610bba565b60066020526000908152604090205460ff1681565b6040519015158152602001610168565b34801561021e57600080fd5b5061023261022d366004610c3b565b61059f565b604051908152602001610168565b34801561024c57600080fd5b506040805180820182526000808252602091820152815180830183526007546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610168565b3480156102b157600080fd5b506101ba6102c0366004610cbf565b60026020908152600092835260408084209091529082529020546001600160401b031681565b3480156102f257600080fd5b506101ba610301366004610cbf565b60046020908152600092835260408084209091529082529020546001600160401b031681565b34801561033357600080fd5b50600154610347906001600160a01b031681565b6040516001600160a01b039091168152602001610168565b34801561036b57600080fd5b506007546001600160401b03161515610202565b34801561038b57600080fd5b5061039d61039a366004610cf2565b50565b005b3480156103ab57600080fd5b506103b46107b7565b6040516101689190610d2d565b3480156103cd57600080fd5b506000546101ba90600160401b90046001600160401b031681565b3480156103f457600080fd5b50610232610403366004610dde565b6107fd565b34801561041457600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044857600080fd5b506102327ffeccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1e81565b34801561047c57600080fd5b5061020261048b366004610bba565b60056020526000908152604090205460ff1681565b3480156104ac57600080fd5b506102327fa06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6881565b3480156104e057600080fd5b506000546104f690600160801b900461ffff1681565b60405161ffff9091168152602001610168565b61039d610517366004610e42565b61087e565b34801561052857600080fd5b506000546104f690600160901b900461ffff1681565b34801561054a57600080fd5b506000546101ba906001600160401b031681565b34801561056a57600080fd5b506101ba610579366004610cbf565b60036020908152600092835260408084209091529082529020546001600160401b031681565b600080546001600160401b0390811690831611156106045760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064015b60405180910390fd5b6000546001600160401b03600160401b9091048116908316101561066a5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016105fb565b604080518082019091526001600160401b0388168082526001600160a01b0388166020909201829052600780546001600160e01b031916909117600160401b9092029190911790555a9050600080866001600160a01b0316846001600160401b031687876040516106dc929190610e7a565b60006040518083038160008787f1925050503d806000811461071a576040519150601f19603f3d011682016040523d82523d6000602084013e61071f565b606091505b50915091505a61072f9084610ea0565b600780546001600160e01b03191690559250811580156107585750836001600160401b03168310155b1561079e5760405162461bcd60e51b81526020600482015260166024820152754d6f636b506f7274616c3a206f7574206f662067617360501b60448201526064016105fb565b816107ab57805160208201fd5b50509695505050505050565b604080516000808252602082019092526060916107f7565b6040805180820190915260008152606060208201528152602001906001900390816107cf5790505b50905090565b600154604051632376548f60e21b81526000916001600160a01b031690638dd9523c90610834908890889088908890600401610ee2565b602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190610f1a565b95945050505050565b6000546001600160401b0390811690821611156108dd5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064016105fb565b6000546001600160401b03600160401b909104811690821610156109435760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016105fb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b0316036109c45760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016105fb565b6001600160401b038616610a1a5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016105fb565b6001600160a01b038416610a705760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c000000000060448201526064016105fb565b6000610a7e878585856107fd565b905080341015610ad05760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e74206665650000000060448201526064016105fb565b6001600160401b03808816600090815260026020908152604080832060ff8b1680855292528220805491936001939192610b0c91859116610f33565b82546101009290920a6001600160401b0381810219909316918316021790915589811660008181526002602090815260408083208786168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90610b8c9033908c908c908c908c908c90610f5a565b60405180910390a45050505050505050565b80356001600160401b0381168114610bb557600080fd5b919050565b600060208284031215610bcc57600080fd5b610bd582610b9e565b9392505050565b80356001600160a01b0381168114610bb557600080fd5b60008083601f840112610c0557600080fd5b5081356001600160401b03811115610c1c57600080fd5b602083019150836020828501011115610c3457600080fd5b9250929050565b60008060008060008060a08789031215610c5457600080fd5b610c5d87610b9e565b9550610c6b60208801610bdc565b9450610c7960408801610bdc565b935060608701356001600160401b03811115610c9457600080fd5b610ca089828a01610bf3565b9094509250610cb3905060808801610b9e565b90509295509295509295565b60008060408385031215610cd257600080fd5b610cdb83610b9e565b9150610ce960208401610b9e565b90509250929050565b600060208284031215610d0457600080fd5b81356001600160401b03811115610d1a57600080fd5b82016101808185031215610bd557600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015610dcf57898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b80841015610db957845183168252938c019360019390930192908c0190610d97565b50988b0198965050509288019250600101610d57565b50919998505050505050505050565b60008060008060608587031215610df457600080fd5b610dfd85610b9e565b935060208501356001600160401b03811115610e1857600080fd5b610e2487828801610bf3565b9094509250610e37905060408601610b9e565b905092959194509250565b60008060008060008060a08789031215610e5b57600080fd5b610e6487610b9e565b9550602087013560ff81168114610c6b57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610eb357610eb3610e8a565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b03808716835260606020840152610f06606084018688610eb9565b915080841660408401525095945050505050565b600060208284031215610f2c57600080fd5b5051919050565b6001600160401b03818116838216019080821115610f5357610f53610e8a565b5092915050565b6001600160a01b0387811682528616602082015260a060408201819052600090610f879083018688610eb9565b6001600160401b03949094166060830152506080015294935050505056fea264697066735822122094816f2db6ff15c367e9274ff4084a2574be4d5b966a69654180fd9ffb631c0264736f6c63430008180033608060405234801561001057600080fd5b506040516101d03803806101d083398101604081905261002f91610037565b600055610050565b60006020828403121561004957600080fd5b5051919050565b6101718061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780638dd9523c1461005a578063ddca3f4314610081575b600080fd5b604051600181526020015b60405180910390f35b6100736100683660046100a7565b600054949350505050565b604051908152602001610051565b61007360005481565b803567ffffffffffffffff811681146100a257600080fd5b919050565b600080600080606085870312156100bd57600080fd5b6100c68561008a565b9350602085013567ffffffffffffffff808211156100e357600080fd5b818701915087601f8301126100f757600080fd5b81358181111561010657600080fd5b88602082850101111561011857600080fd5b6020830195508094505050506101306040860161008a565b90509295919450925056fea2646970667358221220721172973248b1811d0ce80fb3c63ecaa4ee2acba92eaf0384d16ccac0f6ebda64736f6c634300081800336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220f0047128a938cbb6f0aeb9b91bc379cc849c3afc53b352b8da02c82089ad30e064736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212206d67c57ae88860fd6a8fd5e64c7e48f96695592a8f847bb482035c0738c4c5e964736f6c63430008180033608060405234801561001057600080fd5b5061015e806100206000396000f3fe6080604052600436106100295760003560e01c8063bef7a2f01461002e578063f679d3051461005c575b600080fd5b34801561003a57600080fd5b5061004a67016345785d8a000081565b60405190815260200160405180910390f35b610064610066565b005b61006e61009b565b60405133907fc3ef55ddda4bc9300706e15ab3aed03c762d8afd43a7d358a7b9503cb39f281b90600090a2565b67016345785d8a00003410156100f75760405162461bcd60e51b815260206004820152601a60248201527f536c617368696e673a20696e73756666696369656e7420666565000000000000604482015260640160405180910390fd5b60405161dead903480156108fc02916000818181858888f19350505050158015610125573d6000803e3d6000fd5b5056fea2646970667358221220e54f4616555ca48641e09d52a300c51bd72300171829e999a6cc770bf9fb372e64736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610b8c806100df6000396000f3fe6080604052600436106100dd5760003560e01c806384768b7a1161007f578063c6a2aac811610059578063c6a2aac814610252578063cf8e629a14610267578063d146fd1b1461027c578063f2fde38b1461029657600080fd5b806384768b7a146101b85780638da5cb5b146101f8578063a5a470ad1461023f57600080fd5b8063400ada75116100bb578063400ada751461015457806359bcddde146101745780635c19a95c14610190578063715018a6146101a357600080fd5b8063117407e3146100e257806311bcd830146101045780633f0b1edf14610134575b600080fd5b3480156100ee57600080fd5b506101026100fd3660046109b8565b6102b6565b005b34801561011057600080fd5b5061012168056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561014057600080fd5b5061010261014f3660046109b8565b610386565b34801561016057600080fd5b5061010261016f366004610a49565b610452565b34801561018057600080fd5b50610121670de0b6b3a764000081565b61010261019e366004610a85565b610571565b3480156101af57600080fd5b50610102610669565b3480156101c457600080fd5b506101e86101d3366004610a85565b60016020526000908152604090205460ff1681565b604051901515815260200161012b565b34801561020457600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161012b565b61010261024d366004610aa7565b61067d565b34801561025e57600080fd5b506101026107d3565b34801561027357600080fd5b50610102610811565b34801561028857600080fd5b506000546101e89060ff1681565b3480156102a257600080fd5b506101026102b1366004610a85565b61084c565b6102be61088a565b60005b818110156103815760018060008585858181106102e0576102e0610b07565b90506020020160208101906102f59190610a85565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061032f5761032f610b07565b90506020020160208101906103449190610a85565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a26001016102c1565b505050565b61038e61088a565b60005b81811015610381576000600160008585858181106103b1576103b1610b07565b90506020020160208101906103c69190610a85565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061040057610400610b07565b90506020020160208101906104159190610a85565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a2600101610391565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104985750825b905060008267ffffffffffffffff1660011480156104b55750303b155b9050811580156104c3575080155b156104e15760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561050b57845460ff60401b1916600160401b1785555b610514876108e5565b6000805460ff1916871515179055831561056857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b670de0b6b3a76400003410156105ce5760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a20696e73756666696369656e74206465706f73697400000060448201526064015b60405180910390fd5b336001600160a01b038216146106265760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a206f6e6c792073656c662064656c65676174696f6e00000060448201526064016105c5565b6040513481526001600160a01b0382169033907f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a350565b61067161088a565b61067b60006108f6565b565b60005460ff16158061069e57503360009081526001602052604090205460ff165b6106e15760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b60448201526064016105c5565b602181146107315760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e677468000060448201526064016105c5565b68056bc75e2d6310000034101561078a5760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a20696e73756666696369656e74206465706f73697400000060448201526064016105c5565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538383346040516107c793929190610b1d565b60405180910390a25050565b6107db61088a565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b61081961088a565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b61085461088a565b6001600160a01b03811661087e57604051631e4fbdf760e01b8152600060048201526024016105c5565b610887816108f6565b50565b336108bc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461067b5760405163118cdaa760e01b81523360048201526024016105c5565b6108ed610967565b610887816109b0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661067b57604051631afcd79f60e31b815260040160405180910390fd5b610854610967565b600080602083850312156109cb57600080fd5b823567ffffffffffffffff808211156109e357600080fd5b818501915085601f8301126109f757600080fd5b813581811115610a0657600080fd5b8660208260051b8501011115610a1b57600080fd5b60209290920196919550909350505050565b80356001600160a01b0381168114610a4457600080fd5b919050565b60008060408385031215610a5c57600080fd5b610a6583610a2d565b915060208301358015158114610a7a57600080fd5b809150509250929050565b600060208284031215610a9757600080fd5b610aa082610a2d565b9392505050565b60008060208385031215610aba57600080fd5b823567ffffffffffffffff80821115610ad257600080fd5b818501915085601f830112610ae657600080fd5b813581811115610af557600080fd5b866020828501011115610a1b57600080fd5b634e487b7160e01b600052603260045260246000fd5b604081528260408201528284606083013760006060848301015260006060601f19601f860116830101905082602083015294935050505056fea264697066735822122045470f898cb2934a31276e4ca2304db83cfec5fa14d15fdfc851bfc62fde336264736f6c6343000818003360806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b614aed80620000e66000396000f3fe60806040526004361061036b5760003560e01c80638532eb9f116101c6578063b4d5afd1116100f7578063c3d8ad6711610095578063d051c97d1161006f578063d051c97d14610af8578063d533b44514610b39578063f2fde38b14610b59578063f45cc7b814610b7957600080fd5b8063c3d8ad6714610a9a578063c4ab80bc14610aaf578063cf84c81814610acf57600080fd5b8063bff0e84d116100d1578063bff0e84d14610a27578063c21dda4f14610a47578063c26dfc0514610a5a578063c2f9b96814610a7a57600080fd5b8063b4d5afd1146109b2578063b521466d146109e7578063bb8590ad14610a0757600080fd5b8063a480ca7911610164578063afe821981161013e578063afe8219814610925578063afe8af9c14610945578063b187bd261461097b578063b2b2f5bd1461099057600080fd5b8063a480ca79146108b5578063a8a98962146108d5578063aaf1bc97146108f557600080fd5b806397b52062116101a057806397b520621461083e5780639a8a05921461085e578063a10ac97a14610871578063a32eb7c61461089357600080fd5b80638532eb9f146107b35780638da5cb5b146107d35780638dd9523c1461081057600080fd5b80633f4ba83a116102a0578063575420501161023e578063715018a611610218578063715018a61461074d57806378fe53071461076257806383d0cbd9146107895780638456cb591461079e57600080fd5b806357542050146106ca57806366a1eaf31461070b5780636739afca1461072b57600080fd5b806349cc3bf61161027a57806349cc3bf614610643578063500b19e71461065d57806354d26bba1461069557806355e2448e146106aa57600080fd5b80633f4ba83a146105cd5780633fd3b15e146105e2578063461ab4881461062357600080fd5b8063241b71bb1161030d57806330632e8b116102e757806330632e8b1461052557806336d219121461054557806336d853f91461056c5780633aa873301461058c57600080fd5b8063241b71bb1461046057806324278bbe146104905780632f32700e146104c057600080fd5b806310a5a7f71161034957806310a5a7f7146103d3578063110ff5f1146103f35780631d3eb6e31461042b57806323dbce501461044b57600080fd5b80630360d20f1461037057806306c3dc5f1461039c578063103ba701146103b1575b600080fd5b34801561037c57600080fd5b50610385600281565b60405160ff90911681526020015b60405180910390f35b3480156103a857600080fd5b50610385600381565b3480156103bd57600080fd5b506103d16103cc366004613dbe565b610ba0565b005b3480156103df57600080fd5b506103d16103ee366004613df9565b610bb4565b3480156103ff57600080fd5b50600154610413906001600160401b031681565b6040516001600160401b039091168152602001610393565b34801561043757600080fd5b506103d1610446366004613e16565b610c13565b34801561045757600080fd5b506103d1610d2e565b34801561046c57600080fd5b5061048061047b366004613e8a565b610d78565b6040519015158152602001610393565b34801561049c57600080fd5b506104806104ab366004613df9565b60056020526000908152604090205460ff1681565b3480156104cc57600080fd5b50604080518082018252600080825260209182015281518083018352600b546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610393565b34801561053157600080fd5b506103d1610540366004613ea3565b610d89565b34801561055157600080fd5b5060015461041390600160401b90046001600160401b031681565b34801561057857600080fd5b506103d1610587366004613df9565b61102a565b34801561059857600080fd5b506104136105a7366004613ede565b60066020908152600092835260408084209091529082529020546001600160401b031681565b3480156105d957600080fd5b506103d161103b565b3480156105ee57600080fd5b506104136105fd366004613ede565b60086020908152600092835260408084209091529082529020546001600160401b031681565b34801561062f57600080fd5b5061048061063e366004613f17565b611076565b34801561064f57600080fd5b506000546103859060ff1681565b34801561066957600080fd5b5060025461067d906001600160a01b031681565b6040516001600160a01b039091168152602001610393565b3480156106a157600080fd5b506103d1611092565b3480156106b657600080fd5b50600b546001600160401b03161515610480565b3480156106d657600080fd5b506104136106e5366004613f53565b600a6020908152600092835260408084209091529082529020546001600160401b031681565b34801561071757600080fd5b506103d1610726366004613f88565b6110dc565b34801561073757600080fd5b5061074061147c565b6040516103939190613fc3565b34801561075957600080fd5b506103d1611570565b34801561076e57600080fd5b5060005461041390600160681b90046001600160401b031681565b34801561079557600080fd5b506103d1611584565b3480156107aa57600080fd5b506103d16115ce565b3480156107bf57600080fd5b506103d16107ce366004614074565b611609565b3480156107df57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661067d565b34801561081c57600080fd5b5061083061082b366004614143565b61171c565b604051908152602001610393565b34801561084a57600080fd5b506103d16108593660046141aa565b61179d565b34801561086a57600080fd5b5046610413565b34801561087d57600080fd5b50610830600080516020614a5883398151915281565b34801561089f57600080fd5b50610830600080516020614a9883398151915281565b3480156108c157600080fd5b506103d16108d03660046141f5565b6117b0565b3480156108e157600080fd5b506103d16108f03660046141f5565b611838565b34801561090157600080fd5b50610480610910366004613df9565b60046020526000908152604090205460ff1681565b34801561093157600080fd5b506103d1610940366004613df9565b611849565b34801561095157600080fd5b50610413610960366004613df9565b6009602052600090815260409020546001600160401b031681565b34801561098757600080fd5b506104806118a3565b34801561099c57600080fd5b50610830600080516020614a3883398151915281565b3480156109be57600080fd5b506000546109d4906301000000900461ffff1681565b60405161ffff9091168152602001610393565b3480156109f357600080fd5b506103d1610a02366004614210565b6118f9565b348015610a1357600080fd5b506103d1610a22366004613df9565b61190a565b348015610a3357600080fd5b506103d1610a42366004614210565b61191b565b6103d1610a55366004614234565b61192c565b348015610a6657600080fd5b506000546109d490610100900461ffff1681565b348015610a8657600080fd5b506103d1610a95366004613df9565b611d06565b348015610aa657600080fd5b506103d1611d65565b348015610abb57600080fd5b506103d1610aca3660046141aa565b611daf565b348015610adb57600080fd5b50600054610413906501000000000090046001600160401b031681565b348015610b0457600080fd5b50610413610b13366004613ede565b60076020908152600092835260408084209091529082529020546001600160401b031681565b348015610b4557600080fd5b506103d1610b54366004613df9565b611dc2565b348015610b6557600080fd5b506103d1610b743660046141f5565b611e1c565b348015610b8557600080fd5b5060005461041390600160a81b90046001600160401b031681565b610ba8611e57565b610bb181611eb2565b50565b610bbc611e57565b610bdc610bd7600080516020614a3883398151915283611f4e565b611f97565b6040516001600160401b038216907fcd7910e1c5569d8433ce4ef8e5d51c1bdc03168f614b576da47dc3d2b51d033a90600090a250565b333014610c5f5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b60448201526064015b60405180910390fd5b600154600b546001600160401b03908116600160401b9092041614610cc05760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610c56565b600b54600160401b90046001600160a01b031615610d205760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610c56565b610d2a828261203d565b5050565b610d36611e57565b610d4d600080516020614a98833981519152611f97565b6040517f3d0f9c56dac46156a2db0aa09ee7804770ad9fc9549d21023164f22d69475ed890600090a1565b6000610d83826121b7565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610dce5750825b90506000826001600160401b03166001148015610dea5750303b155b905081158015610df8575080155b15610e165760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e4057845460ff60401b1916600160401b1785555b610e55610e5060208801886141f5565b61221e565b610e6d610e6860408801602089016141f5565b61222f565b610e85610e8060a0880160808901613df9565b6122d3565b610e9d610e9860c0880160a08901613df9565b61238b565b610eb5610eb060e0880160c08901614210565b61243f565b610ece610ec9610100880160e08901614210565b6124e3565b610ee8610ee361012088016101008901613dbe565b611eb2565b610f10610efd61018088016101608901613df9565b610f0b6101808901896142bd565b612583565b610f206060870160408801613df9565b6001805467ffffffffffffffff19166001600160401b0392909216919091179055610f516080870160608801613df9565b600180546001600160401b0392909216600160401b026fffffffffffffffff000000000000000019909216919091179055610104610fb0610f986080890160608a01613df9565b82610fab6101408b016101208c01613df9565b6128b2565b610fdb610fc36080890160608a01613df9565b82610fd66101608b016101408c01613df9565b612927565b50831561102257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b611032611e57565b610bb1816122d3565b611043611e57565b61104b612993565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b600061108b836110868585611f4e565b6129aa565b9392505050565b61109a611e57565b6110b1600080516020614a38833981519152612a31565b6040517f4c48c7b71557216a3192842746bdfc381f98d7536d9eb1c6764f3b45e679482790600090a1565b600080516020614a988339815191526110fb6060830160408401613df9565b611109826110868484611f4e565b1561114b5760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610c56565b611153612ad7565b366000611164610100860186614306565b909250905060408501600061117c8260208901613df9565b600154909150600160401b90046001600160401b03166111a26040840160208501613df9565b6001600160401b0316146111f85760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a2077726f6e672063636861696e20494400000000006044820152606401610c56565b8261123c5760405162461bcd60e51b81526020600482015260146024820152734f6d6e69506f7274616c3a206e6f20786d73677360601b6044820152606401610c56565b6001600160401b03808216600090815260096020526040902054166112a35760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a20756e6b6e6f776e2076616c2073657400000000006044820152606401610c56565b6112ab612b21565b6001600160401b0316816001600160401b0316101561130c5760405162461bcd60e51b815260206004820152601760248201527f4f6d6e69506f7274616c3a206f6c642076616c207365740000000000000000006044820152606401610c56565b611350873561131f6101608a018a614306565b6001600160401b038086166000908152600a6020908152604080832060099092529091205490911660026003612b71565b6113945760405162461bcd60e51b81526020600482015260156024820152744f6d6e69506f7274616c3a206e6f2071756f72756d60581b6044820152606401610c56565b6113bd87358386866113aa6101208d018d614306565b6113b86101408f018f614306565b612d25565b6114095760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c69642070726f6f66000000000000006044820152606401610c56565b60005b83811015611449576114418386868481811061142a5761142a61434f565b905060200281019061143c9190614365565b612da0565b60010161140c565b505050505061147760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156115675760008481526020908190206040805180820182526002860290920180546001600160401b0316835260018101805483518187028101870190945280845293949193858301939283018282801561154f57602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b03168152602001906008019060208260070104928301926001038202915080841161150c5790505b505050505081525050815260200190600101906114a0565b50505050905090565b611578611e57565b61158260006132c9565b565b61158c611e57565b6115a3600080516020614a38833981519152611f97565b6040517f5f335a4032d4cfb6aca7835b0c2225f36d4d9eaa4ed43ee59ed537e02dff6b3990600090a1565b6115d6611e57565b6115de61333a565b6040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b3330146116505760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b6044820152606401610c56565b600154600b546001600160401b03908116600160401b90920416146116b15760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610c56565b600b54600160401b90046001600160a01b0316156117115760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610c56565b611477838383612583565b600254604051632376548f60e21b81526000916001600160a01b031690638dd9523c906117539088908890889088906004016143ae565b602060405180830381865afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179491906143e6565b95945050505050565b6117a5611e57565b611477838383612927565b6117b8611e57565b60405147906001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117f0573d6000803e3d6000fd5b50816001600160a01b03167f9dc46f23cfb5ddcad0ae7ea2be38d47fec07bb9382ec7e564efc69e036dd66ce8260405161182c91815260200190565b60405180910390a25050565b611840611e57565b610bb18161222f565b611851611e57565b61186c610bd7600080516020614a9883398151915283611f4e565b6040516001600160401b038216907fab78810a0515df65f9f10bfbcb92d03d5df71d9fd3b9414e9ad831a5117d6daa90600090a250565b60006118f4600080516020614a58833981519152600052600080516020614a788339815191526020527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1690565b905090565b611901611e57565b610bb18161243f565b611912611e57565b610bb18161238b565b611923611e57565b610bb1816124e3565b600080516020614a388339815191528661194a826110868484611f4e565b1561198c5760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610c56565b6001600160401b03881660009081526005602052604090205460ff166119f45760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610c56565b6001600160a01b038616611a4a5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610c56565b6000546001600160401b036501000000000090910481169084161115611ab25760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610c56565b6000546001600160401b03600160681b90910481169084161015611b185760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610c56565b6000546301000000900461ffff16841115611b755760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206461746120746f6f206c617267650000000000006044820152606401610c56565b60ff808816600081815260046020526040902054909116611bd85760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642073686172640000006044820152606401610c56565b6000611be68a88888861171c565b905080341015611c385760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610c56565b6001600160401b03808b166000908152600660209081526040808320868516845290915281208054600193919291611c7291859116614415565b82546101009290920a6001600160401b038181021990931691831602179091558b811660008181526006602090815260408083208886168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90611cf29033908e908e908e908e908b9061443c565b60405180910390a450505050505050505050565b611d0e611e57565b611d2e611d29600080516020614a9883398151915283611f4e565b612a31565b6040516001600160401b038216907fc551305d9bd408be4327b7f8aba28b04ccf6b6c76925392d195ecf9cc764294d90600090a250565b611d6d611e57565b611d84600080516020614a98833981519152612a31565b6040517f2cb9d71d4c31860b70e9b707c69aa2f5953e03474f00cfcfff205c4745f8287590600090a1565b611db7611e57565b6114778383836128b2565b611dca611e57565b611de5611d29600080516020614a3883398151915283611f4e565b6040516001600160401b038216907f1ed9223556fb0971076c30172f1f00630efd313b6a05290a562aef95928e712590600090a250565b611e24611e57565b6001600160a01b038116611e4e57604051631e4fbdf760e01b815260006004820152602401610c56565b610bb1816132c9565b33611e897f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146115825760405163118cdaa760e01b8152336004820152602401610c56565b60008160ff1611611f055760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206375746f66660000000000006044820152606401610c56565b6000805460ff191660ff83169081179091556040519081527f1683dc51426224f6e37a3b41dd5849e2db1bfe22366d1d913fa0ef6f757e828f906020015b60405180910390a150565b60008282604051602001611f7992919091825260c01b6001600160c01b031916602082015260280190565b60405160208183030381529060405280519060200120905092915050565b6000818152600080516020614a78833981519152602081905260409091205460ff1615611ff95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c56565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b612045613351565b3660005b828110156121b1578383828181106120635761206361434f565b90506020028101906120759190614487565b6003805460018101825560009190915290925082906002027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016120b98282614550565b50506120c24690565b6001600160401b03166120d86020840184613df9565b6001600160401b031614612126576001600560006120f96020860186613df9565b6001600160401b031681526020810191909152604001600020805460ff19169115159190911790556121a9565b60005b6121366020840184614306565b90508110156121a7576001600460006121526020870187614306565b858181106121625761216261434f565b90506020020160208101906121779190613df9565b6001600160401b031681526020810191909152604001600020805460ff1916911515919091179055600101612129565b505b600101612049565b50505050565b600080516020614a588339815191526000908152600080516020614a7883398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff168061108b5750600092835260205250604090205460ff1690565b612226613450565b610bb181613499565b6001600160a01b0381166122855760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206665654f7261636c650000006044820152606401610c56565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd97bdb0db82b52a85aa07f8da78033b1d6e159d94f1e3cbd4109d946c3bcfd3290602001611f43565b6000816001600160401b03161161232c5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782067617300000000006044820152606401610c56565b600080546cffffffffffffffff00000000001916650100000000006001600160401b038416908102919091179091556040519081527f1153561ac5effc2926ba6c612f86a397c997bc43dfbfc718da08065be0c5fe4d90602001611f43565b6000816001600160401b0316116123e45760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d696e2067617300000000006044820152606401610c56565b6000805467ffffffffffffffff60681b1916600160681b6001600160401b038416908102919091179091556040519081527f8c852a6291aa436654b167353bca4a4b0c3d024c7562cb5082e7c869bddabf3e90602001611f43565b60008161ffff16116124935760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610c56565b6000805464ffff0000001916630100000061ffff8416908102919091179091556040519081527f65923e04419dc810d0ea08a94a7f608d4c4d949818d95c3788f895e575dd206490602001611f43565b60008161ffff16116125375760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610c56565b6000805462ffff00191661010061ffff8416908102919091179091556040519081527f620bbea084306b66a8cc6b5b63830d6b3874f9d2438914e259ffd5065c33f7b090602001611f43565b80806125d15760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f2076616c696461746f7273000000000000006044820152606401610c56565b6001600160401b0380851660009081526009602052604090205416156126395760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c207365740000006044820152606401610c56565b604080518082018252600080825260208083018290526001600160401b0388168252600a9052918220825b848110156128115786868281811061267e5761267e61434f565b9050604002018036038101906126949190614678565b80519093506001600160a01b03166126ee5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f2076616c696461746f720000006044820152606401610c56565b600083602001516001600160401b03161161274b5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f207a65726f20706f776572000000000000006044820152606401610c56565b82516001600160a01b03166000908152602083905260409020546001600160401b0316156127bb5760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c696461746f72006044820152606401610c56565b60208301516127ca9085614415565b60208481015185516001600160a01b03166000908152918590526040909120805467ffffffffffffffff19166001600160401b039092169190911790559350600101612664565b506001600160401b038781166000818152600960205260408120805467ffffffffffffffff191687851617905554600160a81b90049091161015612875576000805467ffffffffffffffff60a81b1916600160a81b6001600160401b038a16021790555b6040516001600160401b038816907f3a7c2f997a87ba92aedaecd1127f4129cae1283e2809ebf5304d321b943fd10790600090a250505050505050565b6001600160401b03838116600081815260076020908152604080832087861680855290835292819020805467ffffffffffffffff191695871695861790555193845290927f8647aae68c8456a1dcbfaf5eaadc94278ae423526d3f09c7b972bff7355d55c791015b60405180910390a3505050565b6001600160401b03838116600081815260086020908152604080832087861680855290835292819020805467ffffffffffffffff191695871695861790555193845290927fe070f08cae8464c91238e8cbea64ccee5e7b48dd79a843f144e3721ee6bdd9b5910161291a565b611582600080516020614a58833981519152612a31565b600080516020614a588339815191526000908152600080516020614a7883398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680612a10575060008481526020829052604090205460ff165b80612a29575060008381526020829052604090205460ff165b949350505050565b6000818152600080516020614a78833981519152602081905260409091205460ff16612a965760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c56565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901612b1b57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000805460ff8116600160a81b9091046001600160401b031611612b455750600190565b600054612b669060ff811690600160a81b90046001600160401b03166146d4565b6118f4906001614415565b6000803660005b88811015612d1257898982818110612b9257612b9261434f565b9050602002810190612ba49190614487565b91508015612c5857368a8a612bba6001856146f4565b818110612bc957612bc961434f565b9050602002810190612bdb9190614487565b9050612bea60208201826141f5565b6001600160a01b0316612c0060208501856141f5565b6001600160a01b031611612c565760405162461bcd60e51b815260206004820152601f60248201527f51756f72756d3a2073696773206e6f7420646564757065642f736f72746564006044820152606401610c56565b505b612c62828c6134a1565b612cae5760405162461bcd60e51b815260206004820152601960248201527f51756f72756d3a20696e76616c6964207369676e6174757265000000000000006044820152606401610c56565b876000612cbe60208501856141f5565b6001600160a01b03168152602081019190915260400160002054612ceb906001600160401b031684614415565b9250612cf983888888613515565b15612d0a5760019350505050612d1a565b600101612b78565b506000925050505b979650505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050612d6086868686612d5b8d8d61354d565b61361a565b81600081518110612d7357612d7361434f565b602002602001018181525050612d92818b612d8d8c61387b565b613893565b9a9950505050505050505050565b6000612daf6020840184613df9565b90506000612dc06020840184613df9565b90506000612dd46040850160208601613df9565b90506000612de86060860160408701613df9565b9050466001600160401b0316836001600160401b03161480612e1157506001600160401b038316155b612e5d5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e67206465737420636861696e000000006044820152606401610c56565b6001600160401b0380851660009081526007602090815260408083208685168452909152902054612e9091166001614415565b6001600160401b0316816001600160401b031614612ef05760405162461bcd60e51b815260206004820152601860248201527f4f6d6e69506f7274616c3a2077726f6e67206f666673657400000000000000006044820152606401610c56565b612f006060870160408801613dbe565b60ff16600460ff161480612f28575060ff8216612f236060880160408901613dbe565b60ff16145b612f745760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e6720636f6e66206c6576656c000000006044820152606401610c56565b612f846080870160608801613df9565b6001600160401b03858116600090815260086020908152604080832087851684529091529020549181169116101561300457612fc66080870160608801613df9565b6001600160401b03858116600090815260086020908152604080832087851684529091529020805467ffffffffffffffff1916929091169190911790555b6001600160401b03808516600090815260076020908152604080832086851684529091528120805460019391929161303e91859116614415565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550306001600160a01b031685608001602081019061307f91906141f5565b6001600160a01b03160361315957806001600160401b0316826001600160401b0316856001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b6000336000604051602401613112906020808252601e908201527f4f6d6e69506f7274616c3a206e6f207863616c6c20746f20706f7274616c0000604082015260600190565b60408051601f198184030181529181526020820180516001600160e01b031662461bcd60e51b179052516131499493929190614757565b60405180910390a4505050505050565b604080518082019091526001600160401b03851681526020810161318360808801606089016141f5565b6001600160a01b039081169091528151600b8054602090940151909216600160401b026001600160e01b03199093166001600160401b039091161791909117905560008080806131d960a08a0160808b016141f5565b6001600160a01b03161461322a576132256131fa60a08a0160808b016141f5565b61320a60e08b0160c08c01613df9565b6001600160401b031661322060a08c018c614793565b6138a9565b61323f565b61323f61323a60a08a018a614793565b613969565b600b80546001600160e01b0319169055919450925090506000836132635782613274565b604051806020016040528060008152505b9050846001600160401b0316866001600160401b0316896001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b85338987604051611cf29493929190614757565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611582600080516020614a58833981519152611f97565b6000805b60035481101561344357600381815481106133725761337261434f565b906000526020600020906002020191506133894690565b82546001600160401b039081169116146133c35781546001600160401b03166000908152600560205260409020805460ff1916905561343b565b60005b6001830154811015613439576000600460008560010184815481106133ed576133ed61434f565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b031683528201929092526040019020805460ff19169115159190911790556001016133c6565b505b600101613355565b50610bb160036000613d23565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661158257604051631afcd79f60e31b815260040160405180910390fd5b611e24613450565b60006134b060208401846141f5565b6001600160a01b0316613504836134ca6020870187614793565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613a0092505050565b6001600160a01b0316149392505050565b600061352d60ff84166001600160401b0386166144c0565b61354360ff84166001600160401b0388166144c0565b1195945050505050565b60606000826001600160401b03811115613569576135696144aa565b604051908082528060200260200182016040528015613592578160200160208202803683370190505b50905060005b83811015613612576135ed60028686848181106135b7576135b761434f565b90506020028101906135c99190614365565b6040516020016135d9919061481e565b604051602081830303815290604052613a2a565b8282815181106135ff576135ff61434f565b6020908102919091010152600101613598565b509392505050565b8051600090858461362c8160016148ed565b61363683856148ed565b1461365457604051631a8a024960e11b815260040160405180910390fd5b6000816001600160401b0381111561366e5761366e6144aa565b604051908082528060200260200182016040528015613697578160200160208202803683370190505b5090506000806000805b858110156137e45760008885106136dc5785846136bd81614900565b9550815181106136cf576136cf61434f565b6020026020010151613702565b8a856136e781614900565b9650815181106136f9576136f961434f565b60200260200101515b905060008d8d848181106137185761371861434f565b905060200201602081019061372d9190614919565b61375a578f8f8561373d81614900565b965081811061374e5761374e61434f565b905060200201356137b1565b89861061378b57868561376c81614900565b96508151811061377e5761377e61434f565b60200260200101516137b1565b8b8661379681614900565b9750815181106137a8576137a861434f565b60200260200101515b90506137bd8282613a61565b8784815181106137cf576137cf61434f565b602090810291909101015250506001016136a1565b5084156138365785811461380b57604051631a8a024960e11b815260040160405180910390fd5b8360018603815181106138205761382061434f565b6020026020010151975050505050505050611794565b861561384f57886000815181106138205761382061434f565b8c8c60008181106138625761386261434f565b9050602002013597505050505050505095945050505050565b6000610d836001836040516020016135d9919061493b565b6000826138a08584613a90565b14949350505050565b600060606000805a905060008061392c8960008060019054906101000a900461ffff168b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e6001600160a01b0316613acb90949392919063ffffffff16565b9150915060005a9050613940603f8b6149c0565b811161394857fe5b828261395483876146f4565b965096509650505050505b9450945094915050565b600060606000805a9050600080306001600160a01b031688886040516139909291906149e2565b6000604051808303816000865af19150503d80600081146139cd576040519150601f19603f3d011682016040523d82523d6000602084013e6139d2565b606091505b50915091505a6139e290846146f4565b9250816139f157805160208201fd5b909450925090505b9250925092565b600080600080613a108686613b55565b925092509250613a208282613b9f565b5090949350505050565b60008282604051602001613a3f9291906149f2565b60408051601f1981840301815282825280516020918201209083015201611f79565b6000818310613a7d57600082815260208490526040902061108b565b600083815260208390526040902061108b565b600081815b845181101561361257613ac182868381518110613ab457613ab461434f565b6020026020010151613a61565b9150600101613a95565b6000606060008060008661ffff166001600160401b03811115613af057613af06144aa565b6040519080825280601f01601f191660200182016040528015613b1a576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115613b3b578692505b828152826000602083013e90999098509650505050505050565b60008060008351604103613b8f5760208401516040850151606086015160001a613b8188828585613c58565b9550955095505050506139f9565b50508151600091506002906139f9565b6000826003811115613bb357613bb3614a21565b03613bbc575050565b6001826003811115613bd057613bd0614a21565b03613bee5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115613c0257613c02614a21565b03613c235760405163fce698f760e01b815260048101829052602401610c56565b6003826003811115613c3757613c37614a21565b03610d2a576040516335e2f38360e21b815260048101829052602401610c56565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613c93575060009150600390508261395f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613ce7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d135750600092506001915082905061395f565b9760009750879650945050505050565b5080546000825560020290600052602060002090810190610bb191905b80821115613d6f57805467ffffffffffffffff191681556000613d666001830182613d73565b50600201613d40565b5090565b508054600082556003016004900490600052602060002090810190610bb191905b80821115613d6f5760008155600101613d94565b803560ff81168114613db957600080fd5b919050565b600060208284031215613dd057600080fd5b61108b82613da8565b6001600160401b0381168114610bb157600080fd5b8035613db981613dd9565b600060208284031215613e0b57600080fd5b813561108b81613dd9565b60008060208385031215613e2957600080fd5b82356001600160401b0380821115613e4057600080fd5b818501915085601f830112613e5457600080fd5b813581811115613e6357600080fd5b8660208260051b8501011115613e7857600080fd5b60209290920196919550909350505050565b600060208284031215613e9c57600080fd5b5035919050565b600060208284031215613eb557600080fd5b81356001600160401b03811115613ecb57600080fd5b82016101a0818503121561108b57600080fd5b60008060408385031215613ef157600080fd5b8235613efc81613dd9565b91506020830135613f0c81613dd9565b809150509250929050565b60008060408385031215613f2a57600080fd5b823591506020830135613f0c81613dd9565b80356001600160a01b0381168114613db957600080fd5b60008060408385031215613f6657600080fd5b8235613f7181613dd9565b9150613f7f60208401613f3c565b90509250929050565b600060208284031215613f9a57600080fd5b81356001600160401b03811115613fb057600080fd5b8201610180818503121561108b57600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b8481101561406557898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b8084101561404f57845183168252938c019360019390930192908c019061402d565b50988b0198965050509288019250600101613fed565b50919998505050505050505050565b60008060006040848603121561408957600080fd5b833561409481613dd9565b925060208401356001600160401b03808211156140b057600080fd5b818601915086601f8301126140c457600080fd5b8135818111156140d357600080fd5b8760208260061b85010111156140e857600080fd5b6020830194508093505050509250925092565b60008083601f84011261410d57600080fd5b5081356001600160401b0381111561412457600080fd5b60208301915083602082850101111561413c57600080fd5b9250929050565b6000806000806060858703121561415957600080fd5b843561416481613dd9565b935060208501356001600160401b0381111561417f57600080fd5b61418b878288016140fb565b909450925050604085013561419f81613dd9565b939692955090935050565b6000806000606084860312156141bf57600080fd5b83356141ca81613dd9565b925060208401356141da81613dd9565b915060408401356141ea81613dd9565b809150509250925092565b60006020828403121561420757600080fd5b61108b82613f3c565b60006020828403121561422257600080fd5b813561ffff8116811461108b57600080fd5b60008060008060008060a0878903121561424d57600080fd5b863561425881613dd9565b955061426660208801613da8565b945061427460408801613f3c565b935060608701356001600160401b0381111561428f57600080fd5b61429b89828a016140fb565b90945092505060808701356142af81613dd9565b809150509295509295509295565b6000808335601e198436030181126142d457600080fd5b8301803591506001600160401b038211156142ee57600080fd5b6020019150600681901b360382131561413c57600080fd5b6000808335601e1984360301811261431d57600080fd5b8301803591506001600160401b0382111561433757600080fd5b6020019150600581901b360382131561413c57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560de1983360301811261437b57600080fd5b9190910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b038087168352606060208401526143d2606084018688614385565b915080841660408401525095945050505050565b6000602082840312156143f857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03818116838216019080821115614435576144356143ff565b5092915050565b6001600160a01b0387811682528616602082015260a0604082018190526000906144699083018688614385565b6001600160401b039490941660608301525060800152949350505050565b60008235603e1983360301811261437b57600080fd5b60008135610d8381613dd9565b634e487b7160e01b600052604160045260246000fd5b8082028115828204841417610d8357610d836143ff565b600160401b8211156144eb576144eb6144aa565b8054828255808310156114775760008260005260206000206003850160021c81016003840160021c8201915060188660031b16801561453b576000198083018054828460200360031b1c16815550505b505b818110156110225782815560010161453d565b813561455b81613dd9565b815467ffffffffffffffff19166001600160401b0391821617825560019081830160208581013536879003601e1901811261459557600080fd5b86018035848111156145a657600080fd5b6020820194508060051b36038513156145be57600080fd5b6145c881856144d7565b60009384526020842093600282901c92505b82811015614631576000805b6004811015614625576146186145fb8961449d565b6001600160401b03908116600684901b90811b91901b1984161790565b97860197915088016145e6565b508582015586016145da565b50600319811680820381831461466c576000805b82811015614666576146596145fb8a61449d565b9887019891508901614645565b50868501555b50505050505050505050565b60006040828403121561468a57600080fd5b604051604081018181106001600160401b03821117156146ac576146ac6144aa565b6040526146b883613f3c565b815260208301356146c881613dd9565b60208201529392505050565b6001600160401b03828116828216039080821115614435576144356143ff565b81810381811115610d8357610d836143ff565b60005b8381101561472257818101518382015260200161470a565b50506000910152565b60008151808452614743816020860160208601614707565b601f01601f19169290920160200192915050565b8481526001600160a01b038416602082015282151560408201526080606082018190526000906147899083018461472b565b9695505050505050565b6000808335601e198436030181126147aa57600080fd5b8301803591506001600160401b038211156147c457600080fd5b60200191503681900382131561413c57600080fd5b6000808335601e198436030181126147f057600080fd5b83016020810192503590506001600160401b0381111561480f57600080fd5b80360382131561413c57600080fd5b602081526000823561482f81613dd9565b6001600160401b0380821660208501526020850135915061484f82613dd9565b80821660408501526040850135915061486782613dd9565b166060838101919091526001600160a01b0390614885908501613f3c565b16608083015261489760808401613f3c565b6001600160a01b03811660a0840152506148b460a08401846147d9565b60e060c08501526148ca61010085018284614385565b9150506148d960c08501613dee565b6001600160401b03811660e0850152613612565b80820180821115610d8357610d836143ff565b600060018201614912576149126143ff565b5060010190565b60006020828403121561492b57600080fd5b8135801515811461108b57600080fd5b60c08101823561494a81613dd9565b6001600160401b03908116835260208401359061496682613dd9565b808216602085015260ff61497c60408701613da8565b1660408501526060850135915061499282613dd9565b90811660608401526080840135906149a982613dd9565b16608083015260a092830135929091019190915290565b6000826149dd57634e487b7160e01b600052601260045260246000fd5b500490565b8183823760009101908152919050565b60ff60f81b8360f81b16815260008251614a13816001850160208701614707565b919091016001019392505050565b634e487b7160e01b600052602160045260246000fdfea06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6876e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9ff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400feccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1ea2646970667358221220c69186e7f7ad44a0e0b553ce4822187af916cecd868070f19c6ef9977873292064736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6118a3806100df6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101395780638da5cb5b14610141578063ada867981461017b578063c4d66de81461019b578063f2fde38b146101ae57600080fd5b80630f560cd7146100a357806321d93090146100c157806347153cbf146100ec578063473d04521461010157806352d482e214610126575b600080fd5b6100ab6101c1565b6040516100b891906110e6565b60405180910390f35b6100d46100cf36600461114a565b610462565b6040516001600160401b0390911681526020016100b8565b6100ff6100fa366004611163565b61049f565b005b61011461010f3660046111b9565b6104b3565b6040516100b8969594939291906111d6565b6100ff610134366004611221565b610597565b6100ff6105ff565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016100b8565b61018e6101893660046111b9565b610613565b6040516100b89190611295565b6100ff6101a93660046112bd565b6107d8565b6100ff6101bc3660046112bd565b6108e6565b60008054606091906001600160401b038111156101e0576101e06112da565b60405190808252806020026020018201604052801561024957816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282526000199092019101816101fe5790505b50905060005b6000546001600160401b038216101561045c576001600080836001600160401b031681548110610281576102816112f0565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b039081168452838201949094526040928301909120825160e08101845281546001600160a01b0381168252600160a01b9004851681840152600182015480861682860152600160401b810486166060830152600160801b90049094166080850152600281018054845181850281018501909552808552919360a086019390929083018282801561038857602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116103455790505b505050505081526020016003820180546103a190611306565b80601f01602080910402602001604051908101604052809291908181526020018280546103cd90611306565b801561041a5780601f106103ef5761010080835404028352916020019161041a565b820191906000526020600020905b8154815290600101906020018083116103fd57829003601f168201915b50505050508152505082826001600160401b03168151811061043e5761043e6112f0565b602002602001018190525080806104549061133a565b91505061024f565b50919050565b6000818154811061047257600080fd5b9060005260206000209060049182820401919006600802915054906101000a90046001600160401b031681565b6104a7610926565b6104b081610981565b50565b60016020819052600091825260409091208054918101546003820180546001600160a01b038516946001600160401b03600160a01b90910481169484821694600160401b8104831694600160801b9091049092169290919061051490611306565b80601f016020809104026020016040519081016040528092919081815260200182805461054090611306565b801561058d5780601f106105625761010080835404028352916020019161058d565b820191906000526020600020905b81548152906001019060200180831161057057829003601f168201915b5050505050905086565b61059f610926565b60005b6001600160401b0381168211156105fa576105e88383836001600160401b03168181106105d1576105d16112f0565b90506020028101906105e3919061136e565b610981565b806105f28161133a565b9150506105a2565b505050565b610607610926565b6106116000610ef6565b565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c08101919091526001600160401b03808316600090815260016020818152604092839020835160e08101855281546001600160a01b0381168252600160a01b90048616818401529281015480861684860152600160401b810486166060850152600160801b9004909416608083015260028401805484518184028101840190955280855292949360a0860193909283018282801561073657602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116106f35790505b5050505050815260200160038201805461074f90611306565b80601f016020809104026020016040519081016040528092919081815260200182805461077b90611306565b80156107c85780601f1061079d576101008083540402835291602001916107c8565b820191906000526020600020905b8154815290600101906020018083116107ab57829003601f168201915b5050505050815250509050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561081d5750825b90506000826001600160401b031660011480156108395750303b155b905081158015610847575080155b156108655760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561088f57845460ff60401b1916600160401b1785555b61089886610f67565b83156108de57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6108ee610926565b6001600160a01b03811661091d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6104b081610ef6565b336109587f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106115760405163118cdaa760e01b8152336004820152602401610914565b600061099060208301836112bd565b6001600160a01b0316036109e65760405162461bcd60e51b815260206004820152601960248201527f506f7274616c52656769737472793a207a65726f2061646472000000000000006044820152606401610914565b60006109f860408301602084016111b9565b6001600160401b031611610a4e5760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a207a65726f20636861696e2049440000006044820152606401610914565b6000610a6060808301606084016111b9565b6001600160401b031611610ab65760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a207a65726f20696e74657276616c0000006044820152606401610914565b677fffffffffffffff610acf60a08301608084016111b9565b6001600160401b03161115610b265760405162461bcd60e51b815260206004820181905260248201527f506f7274616c52656769737472793a20706572696f6420746f6f206c617267656044820152606401610914565b6000610b3860a08301608084016111b9565b6001600160401b031611610b8e5760405162461bcd60e51b815260206004820152601b60248201527f506f7274616c52656769737472793a207a65726f20706572696f6400000000006044820152606401610914565b6000610b9d60c083018361138e565b905011610bec5760405162461bcd60e51b815260206004820152601760248201527f506f7274616c52656769737472793a206e6f206e616d650000000000000000006044820152606401610914565b6000610bfb60a08301836113db565b905011610c4a5760405162461bcd60e51b815260206004820152601960248201527f506f7274616c52656769737472793a206e6f20736861726473000000000000006044820152606401610914565b6000600181610c5f60408501602086016111b9565b6001600160401b031681526020810191909152604001600020546001600160a01b031614610ccf5760405162461bcd60e51b815260206004820152601b60248201527f506f7274616c52656769737472793a20616c72656164792073657400000000006044820152606401610914565b60005b610cdf60a08301836113db565b9050816001600160401b03161015610dae576000610d0060a08401846113db565b836001600160401b0316818110610d1957610d196112f0565b9050602002016020810190610d2e91906111b9565b90508060ff16816001600160401b0316148015610d4f5750610d4f81610f78565b610d9b5760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a20696e76616c69642073686172640000006044820152606401610914565b5080610da68161133a565b915050610cd2565b508060016000610dc460408401602085016111b9565b6001600160401b031681526020810191909152604001600020610de7828261168b565b5060009050610dfc60408301602084016111b9565b815460018101835560009283526020928390206004820401805460039092166008026101000a6001600160401b03818102199093169390921691909102919091179055610e4b908201826112bd565b6001600160a01b0316610e6460408301602084016111b9565b6001600160401b03167fb08d1911b978b0c040fa5e01711aa326770a97c5f00039d45e7ae8dec7409e73610e9e60608501604086016111b9565b610eae60808601606087016111b9565b610ebe60a08701608088016111b9565b610ecb60a08801886113db565b610ed860c08a018a61138e565b604051610eeb97969594939291906117d4565b60405180910390a350565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610f6f610f95565b6104b081610fde565b600060ff821660011480610f8f575060ff82166004145b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661061157604051631afcd79f60e31b815260040160405180910390fd5b6108ee610f95565b6000815180845260005b8181101561100c57602081850181015186830182015201610ff0565b506000602082860101526020601f19601f83011685010191505092915050565b600060e0830160018060a01b0383511684526020808401516001600160401b03808216602088015280604087015116604088015280606087015116606088015280608087015116608088015260a0860151915060e060a088015283825180865261010089019150602084019550600093505b808410156110c05785518316825294840194600193909301929084019061109e565b5060c0870151945087810360c08901526110da8186610fe6565b98975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561113d57603f1988860301845261112b85835161102c565b9450928501929085019060010161110f565b5092979650505050505050565b60006020828403121561115c57600080fd5b5035919050565b60006020828403121561117557600080fd5b81356001600160401b0381111561118b57600080fd5b820160e0818503121561119d57600080fd5b9392505050565b6001600160401b03811681146104b057600080fd5b6000602082840312156111cb57600080fd5b813561119d816111a4565b6001600160a01b03871681526001600160401b038681166020830152858116604083015284811660608301528316608082015260c060a082018190526000906110da90830184610fe6565b6000806020838503121561123457600080fd5b82356001600160401b038082111561124b57600080fd5b818501915085601f83011261125f57600080fd5b81358181111561126e57600080fd5b8660208260051b850101111561128357600080fd5b60209290920196919550909350505050565b60208152600061119d602083018461102c565b6001600160a01b03811681146104b057600080fd5b6000602082840312156112cf57600080fd5b813561119d816112a8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061131a57607f821691505b60208210810361045c57634e487b7160e01b600052602260045260246000fd5b60006001600160401b0380831681810361136457634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6000823560de1983360301811261138457600080fd5b9190910192915050565b6000808335601e198436030181126113a557600080fd5b8301803591506001600160401b038211156113bf57600080fd5b6020019150368190038213156113d457600080fd5b9250929050565b6000808335601e198436030181126113f257600080fd5b8301803591506001600160401b0382111561140c57600080fd5b6020019150600581901b36038213156113d457600080fd5b60008135610f8f816111a4565b5b818110156114465760008155600101611432565b5050565b600160401b82111561145e5761145e6112da565b8054828255808310156105fa578160005260206000206003840160021c810160188560031b1680156114a1576000198083018054828460200360031b1c16815550505b506114b46003840160021c830182611431565b5050505050565b6001600160401b038311156114d2576114d26112da565b6114dc838261144a565b60008181526020902082908460021c60005b8181101561154a576000805b600481101561153d5761152c61150f87611424565b6001600160401b03908116600684901b90811b91901b1984161790565b6020969096019591506001016114fa565b50838201556001016114ee565b506003198616808703818814611589576000805b828110156115835761157261150f88611424565b60209790970196915060010161155e565b50848401555b5050505050505050565b601f8211156105fa57806000526020600020601f840160051c810160208510156115ba5750805b6114b4601f850160051c830182611431565b6001600160401b038311156115e3576115e36112da565b6115f7836115f18354611306565b83611593565b6000601f84116001811461162b57600085156116135750838201355b600019600387901b1c1916600186901b1783556114b4565b600083815260209020601f19861690835b8281101561165c578685013582556020948501946001909201910161163c565b50868210156116795760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135611696816112a8565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356116c2816111a4565b6001600160e01b03199190911690911760a09190911b67ffffffffffffffff60a01b16178155600181016117196116fb60408501611424565b825467ffffffffffffffff19166001600160401b0391909116178255565b61175a61172860608501611424565b82546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff000000000000000016178255565b61179561176960808501611424565b82805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b16919091179055565b506117a360a08301836113db565b6117b18183600286016114bb565b50506117c060c083018361138e565b6117ce8183600386016115cc565b50505050565b600060a082016001600160401b03808b1684526020818b1681860152818a16604086015260a060608601528288845260c08601905089935060005b89811015611836578435611822816111a4565b84168252938201939082019060010161180f565b5085810360808701528681528688838301376000818801830152601f909601601f19169095019094019a995050505050505050505056fea2646970667358221220255fd5ad41605f03b0fdee0c74365d3bd6155928b8705f1dbfd81bd803ec801064736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6117e5806100df6000396000f3fe6080604052600436106101665760003560e01c80637adbf973116100d1578063a67265b11161008a578063dbb602fd11610064578063dbb602fd14610440578063df18e04714610460578063ed1bd76c1461048d578063f2fde38b146104ad57600080fd5b8063a67265b1146103da578063c4918b4e146103fa578063ca48b20b1461041057600080fd5b80637adbf973146103135780637dc0d1d0146103335780638456cb59146103535780638aec67fe146103685780638da5cb5b1461037d578063a3dace5d146103ba57600080fd5b80634b260981116101235780634b2609811461023657806351cff8d91461024c57806355e0af6b1461026c5780635c975abb1461029b578063715018a6146102cb57806374eeb847146102e057600080fd5b806308a957a91461016b5780630e6e91d81461018d578063285aaa20146101ad57806339acf9f1146101d65780633f4ba83a1461020e5780634ae809ee14610223575b600080fd5b34801561017757600080fd5b5061018b610186366004611586565b6104cd565b005b34801561019957600080fd5b5061018b6101a83660046115af565b6104e1565b3480156101b957600080fd5b506101c360355481565b6040519081526020015b60405180910390f35b3480156101e257600080fd5b506000546101f6906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b34801561021a57600080fd5b5061018b6104f2565b6101c3610231366004611586565b610504565b34801561024257600080fd5b506101c36103e881565b34801561025857600080fd5b5061018b610267366004611586565b61071c565b34801561027857600080fd5b5061028c6102873660046115af565b6107cb565b6040516101cd9392919061160e565b3480156102a757600080fd5b506000805160206117908339815191525460ff1660405190151581526020016101cd565b3480156102d757600080fd5b5061018b6108ad565b3480156102ec57600080fd5b5060005461030190600160a01b900460ff1681565b60405160ff90911681526020016101cd565b34801561031f57600080fd5b5061018b61032e366004611586565b6108bf565b34801561033f57600080fd5b506032546101f6906001600160a01b031681565b34801561035f57600080fd5b5061018b6108d0565b34801561037457600080fd5b506101c36108e0565b34801561038957600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101f6565b3480156103c657600080fd5b5061018b6103d53660046115af565b61094e565b3480156103e657600080fd5b5061018b6103f5366004611638565b61095f565b34801561040657600080fd5b506101c360345481565b34801561041c57600080fd5b50610427620222e081565b60405167ffffffffffffffff90911681526020016101cd565b34801561044c57600080fd5b506033546101f6906001600160a01b031681565b34801561046c57600080fd5b506101c361047b366004611586565b60366020526000908152604090205481565b34801561049957600080fd5b506101c36104a83660046115af565b610adf565b3480156104b957600080fd5b5061018b6104c8366004611586565b610b2e565b6104d5610b69565b6104de81610bc4565b50565b6104e9610b69565b6104de81610c6f565b6104fa610b69565b610502610cec565b565b600061050e610d46565b60006105186108e0565b90508034101561056f5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e6947617350756d703a20696e73756666696369656e742066656500000060448201526064015b60405180910390fd5b600061057b8234611666565b90506034548111156105c75760405162461bcd60e51b815260206004820152601560248201527409edadcd28ec2e6a0eadae07440deeccae440dac2f605b1b6044820152606401610566565b60006103e8603554836105da9190611679565b6105e49190611690565b90506105f08183611666565b915060006105fd83610d77565b6001600160a01b03871660009081526036602052604081208054929350839290919061062a9084906116b2565b909155506106a7905061063b610e8d565b6033546001600160a01b038981166000818152603660205260409081902054905160248101929092526044820152600192919091169060640160408051601f198184030181529190526020810180516001600160e01b0316631decdcfb60e11b179052620222e0610f0a565b506001600160a01b038616600081815260366020908152604091829020548251908152349181019190915290810186905260608101849052608081018390527f7737fe59897f758714c24688a6470bb05235f01af1f4293edd0c290e651dd8319060a00160405180910390a295945050505050565b610724610b69565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610771576040519150601f19603f3d011682016040523d82523d6000602084013e610776565b606091505b50509050806107c75760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e6947617350756d703a207769746864726177206661696c6564000000006044820152606401610566565b5050565b600080606060006107da6108e0565b90508085101561081957505060408051808201909152601081526f696e73756666696369656e742066656560801b6020820152600092508291506108a6565b6108238186611666565b945060345485111561085c5750506040805180820190915260088152670deeccae440dac2f60c31b6020820152600092508291506108a6565b6103e86035548661086d9190611679565b6108779190611690565b6108819086611666565b945061088c85610d77565b600160405180602001604052806000815250935093509350505b9193909250565b6108b5610b69565b6105026000611054565b6108c7610b69565b6104de816110c5565b6108d8610b69565b610502611169565b60006001600160a01b036000196109476108f8610e8d565b6040516001600160a01b03851660248201526044810184905260640160408051601f198184030181529190526020810180516001600160e01b0316631decdcfb60e11b179052620222e06111b2565b9250505090565b610956610b69565b6104de81611230565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109a55750825b905060008267ffffffffffffffff1660011480156109c25750303b155b9050811580156109d0575080155b156109ee5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a1857845460ff60401b1916600160401b1785555b610a30610a2b6040880160208901611586565b6110c5565b610a45610a406020880188611586565b610bc4565b610a528660800135610c6f565b610a5f8660a00135611230565b610a79610a726060880160408901611586565b60016112b6565b610a91610a8c6080880160608901611586565b6112d0565b8315610ad757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600080610aeb836112e1565b90506035546103e8610afd9190611666565b610b096103e883611679565b610b139190611690565b9050610b1d6108e0565b610b2790826116b2565b9392505050565b610b36610b69565b6001600160a01b038116610b6057604051631e4fbdf760e01b815260006004820152602401610566565b6104de81611054565b33610b9b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105025760405163118cdaa760e01b8152336004820152602401610566565b6001600160a01b038116610c1a5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e6947617350756d703a207a65726f2061646472657373000000000000006044820152606401610566565b603380546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd263e3b7583e8397be8a61710d1105cf8c0f111bbac1014d0ec7dbcd1e422f1906020015b60405180910390a150565b60008111610cb75760405162461bcd60e51b815260206004820152601560248201527409edadcd28ec2e6a0eadae07440f4cae4de40dac2f605b1b6044820152606401610566565b60348190556040518181527f343ecf9262f8cafd2e9b0ffdab9f14bf18a17899eeef3e41133e84c354e5298390602001610c64565b610cf46113ad565b600080516020611790833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610c64565b6000805160206117908339815191525460ff16156105025760405163d93c066560e01b815260040160405180910390fd5b6032546000906001600160a01b0316638b7bfd70610d93610e8d565b6040516001600160e01b031960e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc91906116c5565b603260009054906101000a90046001600160a01b03166001600160a01b0316638f9d6ace6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7391906116c5565b610e7d9084611679565b610e879190611690565b92915050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0591906116de565b905090565b60008054604051632376548f60e21b815282916001600160a01b031690638dd9523c90610f3f908a9088908890600401611708565b602060405180830381865afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8091906116c5565b90508047101580610f915750803410155b610fdd5760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e73756666696369656e742066756e647300000000000000006044820152606401610566565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f908390611017908b908b908b908b908b9060040161173f565b6000604051808303818588803b15801561103057600080fd5b505af1158015611044573d6000803e3d6000fd5b50939a9950505050505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b03811661111b5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e6947617350756d703a207a65726f206f7261636c6500000000000000006044820152606401610566565b603280546001600160a01b0319166001600160a01b0383169081179091556040519081527f3f32684a32a11dabdbb8c0177de80aa3ae36a004d75210335b49e544e48cd0aa90602001610c64565b611171610d46565b600080516020611790833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610d2e565b60008054604051632376548f60e21b81526001600160a01b0390911690638dd9523c906111e790879087908790600401611708565b602060405180830381865afa158015611204573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122891906116c5565b949350505050565b6103e881106112815760405162461bcd60e51b815260206004820152601960248201527f4f6d6e6947617350756d703a2070637420746f6f2068696768000000000000006044820152606401610566565b60358190556040518181527f0b3d400288f60ce0f5632cd941b5748faa91ebea844cbe78c5180b7838a0933f90602001610c64565b6112be6113dd565b6112c782611426565b6107c7816114bf565b6112d86113dd565b6104de81611562565b603254604080516347ceb56760e11b815290516000926001600160a01b031691638f9d6ace9160048083019260209291908290030181865afa15801561132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134f91906116c5565b6032546001600160a01b0316638b7bfd70611368610e8d565b6040516001600160e01b031960e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015610e4f573d6000803e3d6000fd5b6000805160206117908339815191525460ff1661050257604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661050257604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b0381166114715760405162461bcd60e51b8152602060048201526012602482015271584170703a206e6f207a65726f206f6d6e6960701b6044820152606401610566565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f4790602001610c64565b6114c88161156a565b6115145760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e76616c696420636f6e66206c6576656c00000000000000006044820152606401610566565b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f8de08a798b4e50b4f351c1eaa91a11530043802be3ffac2df87db0c45a2e848390602001610c64565b610b366113dd565b600060ff821660011480610e87575060ff821660041492915050565b60006020828403121561159857600080fd5b81356001600160a01b0381168114610b2757600080fd5b6000602082840312156115c157600080fd5b5035919050565b6000815180845260005b818110156115ee576020818501810151868301820152016115d2565b506000602082860101526020601f19601f83011685010191505092915050565b838152821515602082015260606040820152600061162f60608301846115c8565b95945050505050565b600060c0828403121561164a57600080fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8757610e87611650565b8082028115828204841417610e8757610e87611650565b6000826116ad57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610e8757610e87611650565b6000602082840312156116d757600080fd5b5051919050565b6000602082840312156116f057600080fd5b815167ffffffffffffffff81168114610b2757600080fd5b600067ffffffffffffffff80861683526060602084015261172c60608401866115c8565b9150808416604084015250949350505050565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a0606084015261177a60a08401866115c8565b9150808416608084015250969550505050505056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a2646970667358221220cc3b1bdeb6e4f7efc1b982591c7d80bbccd23cf9ab913ec6b372fc0ae400303564736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6111fe806100df6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638f9d6ace116100ad578063b48ec86111610071578063b48ec86114610352578063d070415714610385578063d0ebdbe7146103b1578063ee590a53146103c4578063f2fde38b146103d757600080fd5b80638f9d6ace1461030657806393a871881461031057806398563b0314610323578063a34e7abb14610336578063b0e21e8a1461034957600080fd5b8063787dce3d116100f4578063787dce3d146102635780638b7bfd70146102765780638da5cb5b146102b05780638dd9523c146102e05780638df66e34146102f357600080fd5b80632d4634a414610131578063361c019f14610200578063481c6a751461021557806354fd4d5014610240578063715018a61461025b575b600080fd5b6101b261013f366004610e02565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160401b03958616825260038152908490208451928301855280548087168452600160401b9004909516908201526001840154928101929092526002909201549181019190915290565b6040516101f7919060006080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b60405180910390f35b61021361020e366004610e86565b6103ea565b005b600254610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101f7565b60015b6040516001600160401b0390911681526020016101f7565b610213610522565b610213610271366004610f04565b610536565b6102a2610284366004610e02565b6001600160401b031660009081526003602052604090206002015490565b6040519081526020016101f7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610228565b6102a26102ee366004610f1d565b61054a565b600054610243906001600160401b031681565b6102a2620f424081565b61021361031e366004610fb0565b6106d3565b610213610331366004610ff1565b61070b565b610213610344366004610ff1565b61073f565b6102a260015481565b610243610360366004610e02565b6001600160401b03908116600090815260036020526040902054600160401b90041690565b6102a2610393366004610e02565b6001600160401b031660009081526003602052604090206001015490565b6102136103bf36600461101b565b610773565b6102136103d2366004610e02565b6107da565b6102136103e536600461101b565b6107eb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561042f5750825b90506000826001600160401b0316600114801561044b5750303b155b905081158015610459575080155b156104775760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104a157845460ff60401b1916600160401b1785555b6104aa8b610826565b6104b38a610837565b6104bc8961088c565b6104c5886108db565b6104cf8787610910565b831561051557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b61052a610b2b565b6105346000610b86565b565b61053e610b2b565b610547816108db565b50565b6001600160401b038085166000908152600360205260408082208054600160401b900490931682528120600283015460018401549293928491620f424091610592919061104c565b61059c9190611069565b90506000620f4240836002015484600101546105b8919061104c565b6105c29190611069565b9050600082116106195760405162461bcd60e51b815260206004820152601a60248201527f4665654f7261636c6556313a206e6f2066656520706172616d7300000000000060448201526064015b60405180910390fd5b600081116106695760405162461bcd60e51b815260206004820152601a60248201527f4665654f7261636c6556313a206e6f2066656520706172616d730000000000006044820152606401610610565b600061067688601061104c565b9050610682828261104c565b600054849061069b908a906001600160401b031661108b565b6001600160401b03166106ae919061104c565b6001546106bb91906110b2565b6106c591906110b2565b9a9950505050505050505050565b6002546001600160a01b031633146106fd5760405162461bcd60e51b8152600401610610906110c5565b6107078282610910565b5050565b6002546001600160a01b031633146107355760405162461bcd60e51b8152600401610610906110c5565b6107078282610bf7565b6002546001600160a01b031633146107695760405162461bcd60e51b8152600401610610906110c5565b6107078282610ccc565b61077b610b2b565b6001600160a01b0381166107d15760405162461bcd60e51b815260206004820152601c60248201527f4665654f7261636c6556313a206e6f207a65726f206d616e61676572000000006044820152606401610610565b61054781610837565b6107e2610b2b565b6105478161088c565b6107f3610b2b565b6001600160a01b03811661081d57604051631e4fbdf760e01b815260006004820152602401610610565b61054781610b86565b61082e610d95565b61054781610dde565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f60a0f5b9f9e81e98216071b85826681c796256fe3d1354ecb675580fba64fa69906020015b60405180910390a150565b6000805467ffffffffffffffff19166001600160401b0383169081179091556040519081527f6185fbe062d94552cf644f5cb643f583db7b2e7e66fdc4b4c75ff8876a257ba690602001610881565b60018190556040518181527fdb5aafdb29539329e37d4e3ee869bc4031941fd55a5dfc92824fbe34b204e30d90602001610881565b60005b81811015610b2657600083838381811061092f5761092f6110fc565b9050608002018036038101906109459190611112565b9050600081604001511161099b5760405162461bcd60e51b815260206004820152601e60248201527f4665654f7261636c6556313a206e6f207a65726f2067617320707269636500006044820152606401610610565b60008160600151116109eb5760405162461bcd60e51b81526020600482015260196024820152784665654f7261636c6556313a206e6f207a65726f207261746560381b6044820152606401610610565b80516001600160401b0316600003610a155760405162461bcd60e51b815260040161061090611191565b80602001516001600160401b0316600003610a725760405162461bcd60e51b815260206004820152601c60248201527f4665654f7261636c6556313a206e6f207a65726f20706f737473546f000000006044820152606401610610565b80516001600160401b0390811660009081526003602090815260409182902084518154838701519186166fffffffffffffffffffffffffffffffff199091168117600160401b92909616918202959095178255838601516001830181905560608088015160029094018490558551968752938601919091528484015290830152517ff378a0dd98429494eb2e26894562949c4d6e7cef5eb893b1d4c0052078d92fe59181900360800190a150600101610913565b505050565b33610b5d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105345760405163118cdaa760e01b8152336004820152602401610610565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008111610c475760405162461bcd60e51b815260206004820152601e60248201527f4665654f7261636c6556313a206e6f207a65726f2067617320707269636500006044820152606401610610565b816001600160401b0316600003610c705760405162461bcd60e51b815260040161061090611191565b6001600160401b038216600081815260036020908152604091829020600101849055815192835282018390527f3b196e45eaa29099834d3d912ac550e4f3e13fef2e2a998100368e506a44d8ff91015b60405180910390a15050565b60008111610d185760405162461bcd60e51b81526020600482015260196024820152784665654f7261636c6556313a206e6f207a65726f207261746560381b6044820152606401610610565b816001600160401b0316600003610d415760405162461bcd60e51b815260040161061090611191565b6001600160401b038216600081815260036020908152604091829020600201849055815192835282018390527f4b4594c9f06af25bc504eead96f7f0eaa3f1577f8d9b075b236520ec712e13089101610cc0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661053457604051631afcd79f60e31b815260040160405180910390fd5b6107f3610d95565b80356001600160401b0381168114610dfd57600080fd5b919050565b600060208284031215610e1457600080fd5b610e1d82610de6565b9392505050565b80356001600160a01b0381168114610dfd57600080fd5b60008083601f840112610e4d57600080fd5b5081356001600160401b03811115610e6457600080fd5b6020830191508360208260071b8501011115610e7f57600080fd5b9250929050565b60008060008060008060a08789031215610e9f57600080fd5b610ea887610e24565b9550610eb660208801610e24565b9450610ec460408801610de6565b93506060870135925060808701356001600160401b03811115610ee657600080fd5b610ef289828a01610e3b565b979a9699509497509295939492505050565b600060208284031215610f1657600080fd5b5035919050565b60008060008060608587031215610f3357600080fd5b610f3c85610de6565b935060208501356001600160401b0380821115610f5857600080fd5b818701915087601f830112610f6c57600080fd5b813581811115610f7b57600080fd5b886020828501011115610f8d57600080fd5b602083019550809450505050610fa560408601610de6565b905092959194509250565b60008060208385031215610fc357600080fd5b82356001600160401b03811115610fd957600080fd5b610fe585828601610e3b565b90969095509350505050565b6000806040838503121561100457600080fd5b61100d83610de6565b946020939093013593505050565b60006020828403121561102d57600080fd5b610e1d82610e24565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761106357611063611036565b92915050565b60008261108657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190808211156110ab576110ab611036565b5092915050565b8082018082111561106357611063611036565b60208082526018908201527f4665654f7261636c6556313a206e6f74206d616e616765720000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006080828403121561112457600080fd5b604051608081018181106001600160401b038211171561115457634e487b7160e01b600052604160045260246000fd5b60405261116083610de6565b815261116e60208401610de6565b602082015260408301356040820152606083013560608201528091505092915050565b6020808252601d908201527f4665654f7261636c6556313a206e6f207a65726f20636861696e20696400000060408201526060019056fea264697066735822122082524142eaf010a3b766d662e6094d677d259b5d4793c499ebcc81c03e0e011364736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61104b806100df6000396000f3fe6080604052600436106100e15760003560e01c806374eeb8471161007f578063a04feb8611610059578063a04feb8614610282578063bac34036146102a2578063ed116d08146102e8578063f2fde38b1461030857600080fd5b806374eeb847146101fd5780638456cb59146102305780638da5cb5b1461024557600080fd5b80634afa17dd116100bb5780634afa17dd146101615780634e0dc4f0146101815780635c975abb146101b7578063715018a6146101e857600080fd5b806339acf9f1146100ed5780633bd9b9f61461012a5780633f4ba83a1461014c57600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b5060005461010d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013657600080fd5b5061014a610145366004610db3565b610328565b005b34801561015857600080fd5b5061014a6105f5565b34801561016d57600080fd5b5061014a61017c366004610df4565b610607565b34801561018d57600080fd5b5061010d61019c366004610e2d565b6032602052600090815260409020546001600160a01b031681565b3480156101c357600080fd5b50600080516020610ff68339815191525460ff165b6040519015158152602001610121565b3480156101f457600080fd5b5061014a61061d565b34801561020957600080fd5b5060005461021e90600160a01b900460ff1681565b60405160ff9091168152602001610121565b34801561023c57600080fd5b5061014a61062f565b34801561025157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661010d565b34801561028e57600080fd5b5061014a61029d366004610e51565b61063f565b3480156102ae57600080fd5b506102da6102bd366004610ee5565b603360209081526000928352604080842090915290825290205481565b604051908152602001610121565b3480156102f457600080fd5b506101d8610303366004610df4565b6107c9565b34801561031457600080fd5b5061014a610323366004610f13565b61080f565b60005460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190610f30565b8051600180546020909301516001600160a01b0316600160401b026001600160e01b03199093166001600160401b03909216919091179190911790556103d761084d565b6103df61087e565b801561040d575060015461040d906001600160401b03811690600160401b90046001600160a01b03166107c9565b61045e5760405162461bcd60e51b815260206004820152601860248201527f47617353746174696f6e3a20756e617574686f72697a6564000000000000000060448201526064015b60405180910390fd5b6001600160a01b03821660009081526033602090815260408083206001546001600160401b031684529091529020548082116104dc5760405162461bcd60e51b815260206004820152601a60248201527f47617353746174696f6e3a20616c72656164792066756e6465640000000000006044820152606401610455565b60006001600160a01b0384166104f28385610f9c565b604051600081818185875af1925050503d806000811461052e576040519150601f19603f3d011682016040523d82523d6000602084013e610533565b606091505b50509050801561056f576001600160a01b03841660009081526033602090815260408083206001546001600160401b0316845290915290208390555b6001546001600160a01b03851660008181526033602090815260408083206001600160401b0390951680845294825291829020548251888152918201528415158183015290517f4264b2d9471008d8513ddd06a5da387491ccaf43988f604f5eca833d30551c9d9181900360600190a35050600180546001600160e01b03191690555050565b6105fd610911565b61060561096c565b565b61060f610911565b61061982826109cd565b5050565b610625610911565b6106056000610ae0565b610637610911565b610605610b51565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156106845750825b90506000826001600160401b031660011480156106a05750303b155b9050811580156106ae575080155b156106cc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156106f657845460ff60401b1916600160401b1785555b610701896004610b9a565b61070a88610bb4565b60005b868110156107775761076f88888381811061072a5761072a610fbd565b6107409260206040909202019081019150610e2d565b89898481811061075257610752610fbd565b905060400201602001602081019061076a9190610f13565b6109cd565b60010161070d565b5083156107be57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60006001600160a01b0382161580159061080657506001600160401b0383166000908152603260205260409020546001600160a01b038381169116145b90505b92915050565b610817610911565b6001600160a01b03811661084157604051631e4fbdf760e01b815260006004820152602401610455565b61084a81610ae0565b50565b600080516020610ff68339815191525460ff16156106055760405163d93c066560e01b815260040160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b03166355e2448e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f69190610fd3565b801561090c57506000546001600160a01b031633145b905090565b336109437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106055760405163118cdaa760e01b8152336004820152602401610455565b610974610bc5565b600080516020610ff6833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b0390911681526020015b60405180910390a150565b6001600160a01b038116610a1b5760405162461bcd60e51b815260206004820152601560248201527423b0b9a9ba30ba34b7b71d103d32b9379030b2323960591b6044820152606401610455565b816001600160401b0316600003610a745760405162461bcd60e51b815260206004820152601860248201527f47617353746174696f6e3a207a65726f20636861696e496400000000000000006044820152606401610455565b6001600160401b03821660008181526032602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915591519182527f193d7693e9edcedc2357451dd62125041be2c877aa64852b126906cd438f08f5910160405180910390a25050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610b5961084d565b600080516020610ff6833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336109ae565b610ba2610bf5565b610bab82610c3e565b61061981610cd7565b610bbc610bf5565b61084a81610d7a565b600080516020610ff68339815191525460ff1661060557604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661060557604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038116610c895760405162461bcd60e51b8152602060048201526012602482015271584170703a206e6f207a65726f206f6d6e6960701b6044820152606401610455565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f47906020016109c2565b610ce081610d82565b610d2c5760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e76616c696420636f6e66206c6576656c00000000000000006044820152606401610455565b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f8de08a798b4e50b4f351c1eaa91a11530043802be3ffac2df87db0c45a2e8483906020016109c2565b610817610bf5565b600060ff821660011480610809575060ff821660041492915050565b6001600160a01b038116811461084a57600080fd5b60008060408385031215610dc657600080fd5b8235610dd181610d9e565b946020939093013593505050565b6001600160401b038116811461084a57600080fd5b60008060408385031215610e0757600080fd5b8235610e1281610ddf565b91506020830135610e2281610d9e565b809150509250929050565b600060208284031215610e3f57600080fd5b8135610e4a81610ddf565b9392505050565b60008060008060608587031215610e6757600080fd5b8435610e7281610d9e565b93506020850135610e8281610d9e565b925060408501356001600160401b0380821115610e9e57600080fd5b818701915087601f830112610eb257600080fd5b813581811115610ec157600080fd5b8860208260061b8501011115610ed657600080fd5b95989497505060200194505050565b60008060408385031215610ef857600080fd5b8235610f0381610d9e565b91506020830135610e2281610ddf565b600060208284031215610f2557600080fd5b8135610e4a81610d9e565b600060408284031215610f4257600080fd5b604051604081018181106001600160401b0382111715610f7257634e487b7160e01b600052604160045260246000fd5b6040528251610f8081610ddf565b81526020830151610f9081610d9e565b60208201529392505050565b8181038181111561080957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215610fe557600080fd5b81518015158114610e4a57600080fdfecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212209b3264e9832051143cbc4aeb3657ebb622e81387e42d232e79a630544fc3636464736f6c6343000818003360a060405234801561001057600080fd5b506040516200177238038062001772833981016040819052610031916100fe565b6001600160a01b03811660805261004661004c565b5061012e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009c5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100fb5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60006020828403121561011057600080fd5b81516001600160a01b038116811461012757600080fd5b9392505050565b60805161160c62000166600039600081816103a60152818161048901528181610a6f01528181610eb1015261106b015261160c6000f3fe6080604052600436106101095760003560e01c80638456cb5911610095578063c3de453d11610064578063c3de453d14610321578063ed56531a14610334578063f2fde38b14610354578063f3fef3a314610374578063fc0c546a1461039457600080fd5b80638456cb591461027d5780638da5cb5b146102925780638fdcb4c9146102cf578063a10ac97a146102ff57600080fd5b80633794999d116100dc5780633794999d146101db57806339acf9f1146101fb5780633f4ba83a14610233578063485cc95514610248578063715018a61461026857600080fd5b806309839a931461010e578063241b71bb1461015557806325d70f78146101855780632f4dae9f146101b9575b600080fd5b34801561011a57600080fd5b506101427f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561016157600080fd5b506101756101703660046112f9565b6103c8565b604051901515815260200161014c565b34801561019157600080fd5b506101427f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b3480156101c557600080fd5b506101d96101d43660046112f9565b6103d9565b005b3480156101e757600080fd5b506101426101f6366004611327565b6103ed565b34801561020757600080fd5b5060005461021b906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b34801561023f57600080fd5b506101d96105bf565b34801561025457600080fd5b506101d9610263366004611368565b6105d1565b34801561027457600080fd5b506101d96106fd565b34801561028957600080fd5b506101d961070f565b34801561029e57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661021b565b3480156102db57600080fd5b506102e66201388081565b60405167ffffffffffffffff909116815260200161014c565b34801561030b57600080fd5b506101426000805160206115b783398151915281565b6101d961032f3660046113a1565b61071f565b34801561034057600080fd5b506101d961034f3660046112f9565b6107a0565b34801561036057600080fd5b506101d961036f3660046113cd565b6107b1565b34801561038057600080fd5b506101d961038f3660046113a1565b6107ec565b3480156103a057600080fd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b60006103d382610b26565b92915050565b6103e1610ba5565b6103ea81610c00565b50565b600080546040805163110ff5f160e01b815290516001600160a01b0390921691638dd9523c91839163110ff5f1916004808201926020929091908290030181865afa158015610440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104649190611407565b6040516370a0823160e01b815230600482015287908790879081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156104d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f49190611422565b6104fe919061143b565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b179052516001600160e01b031960e085901b16815261057692919062013880906004016114a2565b602060405180830381865afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611422565b949350505050565b6105c7610ba5565b6105cf610cb8565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156106175750825b905060008267ffffffffffffffff1660011480156106345750303b155b905081158015610642575080155b156106605760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561068a57845460ff60401b1916600160401b1785555b61069387610ccf565b600080546001600160a01b0319166001600160a01b03881617905583156106f457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610705610ba5565b6105cf6000610ce0565b610717610ba5565b6105cf610d51565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e61074981610b26565b156107905760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b60448201526064015b60405180910390fd5b61079b338484610d68565b505050565b6107a8610ba5565b6103ea816111f0565b6107b9610ba5565b6001600160a01b0381166107e357604051631e4fbdf760e01b815260006004820152602401610787565b6103ea81610ce0565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761081681610b26565b156108585760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b6044820152606401610787565b6000805460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa1580156108a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c491906114d9565b6000549091506001600160a01b031633146109195760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b6044820152606401610787565b60208101516001600160a01b0316600262048789608a1b01146109775760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b6044820152606401610787565b60008054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec9190611407565b67ffffffffffffffff16816000015167ffffffffffffffff1614610a495760405162461bcd60e51b81526020600482015260146024820152734f6d6e694272696467653a206e6f74206f6d6e6960601b6044820152606401610787565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611544565b50836001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610b1891815260200190565b60405180910390a250505050565b6000805160206115b783398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680610b9e575060008381526020829052604090205460ff165b9392505050565b33610bd77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105cf5760405163118cdaa760e01b8152336004820152602401610787565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610c775760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610787565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6105cf6000805160206115b7833981519152610c00565b610cd76112a8565b6103ea816112f1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6105cf6000805160206115b78339815191526111f0565b60008111610db85760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e203000006044820152606401610787565b6001600160a01b038216610e0e5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f0000006044820152606401610787565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e869190611407565b6040516370a0823160e01b815230600482015290915060009085908590859081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190611422565b610f26919061143b565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b1790526000549051632376548f60e21b81529192506001600160a01b031690638dd9523c90610fb0908590859062013880906004016114a2565b602060405180830381865afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff19190611422565b341461103f5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e694272696467653a20696e636f727265637420666565000000000000006044820152606401610787565b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d89190611544565b6111245760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c656400000000006044820152606401610787565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f90349061116a908690600490600262048789608a1b0190889062013880908401611566565b6000604051808303818588803b15801561118357600080fd5b505af1158015611197573d6000803e3d6000fd5b5050505050836001600160a01b0316856001600160a01b03167f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422856040516111e191815260200190565b60405180910390a35050505050565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156112645760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610787565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105cf57604051631afcd79f60e31b815260040160405180910390fd5b6107b96112a8565b60006020828403121561130b57600080fd5b5035919050565b6001600160a01b03811681146103ea57600080fd5b60008060006060848603121561133c57600080fd5b833561134781611312565b9250602084013561135781611312565b929592945050506040919091013590565b6000806040838503121561137b57600080fd5b823561138681611312565b9150602083013561139681611312565b809150509250929050565b600080604083850312156113b457600080fd5b82356113bf81611312565b946020939093013593505050565b6000602082840312156113df57600080fd5b8135610b9e81611312565b805167ffffffffffffffff8116811461140257600080fd5b919050565b60006020828403121561141957600080fd5b610b9e826113ea565b60006020828403121561143457600080fd5b5051919050565b808201808211156103d357634e487b7160e01b600052601160045260246000fd5b6000815180845260005b8181101561148257602081850181015186830182015201611466565b506000602082860101526020601f19601f83011685010191505092915050565b600067ffffffffffffffff8086168352606060208401526114c6606084018661145c565b9150808416604084015250949350505050565b6000604082840312156114eb57600080fd5b6040516040810181811067ffffffffffffffff8211171561151c57634e487b7160e01b600052604160045260246000fd5b604052611528836113ea565b8152602083015161153881611312565b60208201529392505050565b60006020828403121561155657600080fd5b81518015158114610b9e57600080fd5b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a060608401526115a160a084018661145c565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220816c2e7ecb605154af8fcc3441feff906790db439ca30d88aa08325ac97cabae64736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b506151dd8061003d6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c806385226c811162000097578063b5508aa9116200006e578063b5508aa914620001a2578063ba414fa614620001ac578063e20c9f7114620001c7578063fa7626d414620001d157600080fd5b806385226c811462000166578063916a17c6146200017f578063b0464fdc146200019857600080fd5b80631ed7831c14620000e55780632ade388014620001075780633e5e3c2314620001205780633f7286f4146200012a578063522bb704146200013457806366d9a9a0146200014d575b600080fd5b620000ef620001df565b604051620000fe9190620034ab565b60405180910390f35b6200011162000243565b604051620000fe91906200354e565b620000ef62000391565b620000ef620003f3565b6200014b620001453660046200362a565b62000455565b005b620001576200055c565b604051620000fe919062003699565b62000170620006d5565b604051620000fe919062003726565b62000189620007af565b604051620000fe91906200378e565b6200018962000899565b6200017062000983565b620001b662000a5d565b6040519015158152602001620000fe565b620000ef62000b12565b601f54620001b69060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156200023957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200021a575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200038857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000370578382906000526020600020018054620002dc9062003803565b80601f01602080910402602001604051908101604052809291908181526020018280546200030a9062003803565b80156200035b5780601f106200032f576101008083540402835291602001916200035b565b820191906000526020600020905b8154815290600101906020018083116200033d57829003601f168201915b505050505081526020019060010190620002ba565b50505050815250508152602001906001019062000267565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b60006000805160206200518883398151915260001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af1158015620004aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d091906200383f565b5090915060009050816004811115620004ed57620004ed62003896565b146200052f5760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b60448201526064015b60405180910390fd5b6200053a8262000b74565b6200054462000d79565b6200054e6200140d565b62000558620017c8565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015620003885783829060005260206000209060020201604051806040016040529081600082018054620005b69062003803565b80601f0160208091040260200160405190810160405280929190818152602001828054620005e49062003803565b8015620006355780601f10620006095761010080835404028352916020019162000635565b820191906000526020600020905b8154815290600101906020018083116200061757829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620006bc57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200067d5790505b5050505050815250508152602001906001019062000580565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620003885783829060005260206000200180546200071b9062003803565b80601f0160208091040260200160405190810160405280929190818152602001828054620007499062003803565b80156200079a5780601f106200076e576101008083540402835291602001916200079a565b820191906000526020600020905b8154815290600101906020018083116200077c57829003601f168201915b505050505081526020019060010190620006f9565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015620003885760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200088057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620008415790505b50505050508152505081526020019060010190620007d3565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015620003885760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200096a57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200092b5790505b50505050508152505081526020019060010190620008bd565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101562000388578382906000526020600020018054620009c99062003803565b80601f0160208091040260200160405190810160405280929190818152602001828054620009f79062003803565b801562000a485780601f1062000a1c5761010080835404028352916020019162000a48565b820191906000526020600020905b81548152906001019060200180831162000a2a57829003601f168201915b505050505081526020019060010190620009a7565b60085460009060ff161562000a76575060085460ff1690565b604051630667f9d760e41b8152600090600080516020620051688339815191529063667f9d709062000ac79060008051602062005188833981519152906519985a5b195960d21b90600401620038ac565b602060405180830381865afa15801562000ae5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b0b9190620038c5565b1415905090565b6060601580548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b80601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550601f60019054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c159190620038df565b602180546001600160a01b0319166001600160a01b03928316179055601f5460408051638da5cb5b60e01b8152905161010090920490921691638da5cb5b9160048083019260209291908290030181865afa15801562000c79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9f9190620038df565b602280546001600160a01b0319166001600160a01b039290921691909117905560405162000ccd9062003428565b604051809103906000f08015801562000cea573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b039290921691821790556040516370ca10bb60e01b815260008051602062005168833981519152916370ca10bb9162000d4291859160009190600401620038ff565b600060405180830381600087803b15801562000d5d57600080fd5b505af115801562000d72573d6000803e3d6000fd5b5050505050565b600062000da060405180604001604052806002815260200161746f60f01b81525062001c02565b601f54604051633794999d60e01b815230600482018190526001600160a01b038085166024840152670de0b6b3a764000060448401819052949550909260009261010090910490911690633794999d90606401602060405180830381865afa15801562000e11573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e379190620038c5565b602154601f546040516370a0823160e01b81526001600160a01b03610100909204821660048201529293506000929116906370a0823190602401602060405180830381865afa15801562000e8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000eb59190620038c5565b602080546040805163110ff5f160e01b81529051939450600080516020620051688339815191529363f30c7ba3936001600160a01b03909316928792849263110ff5f1926004808401939192918290030181865afa15801562000f1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f42919062003920565b6004600262048789608a1b01898c8c62000f5d818c62003962565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051808303601f1901815291815260208083018051631effa54360e21b6001600160e01b03909116179052601f548251638fdcb4c960e01b815292516101009091046001600160a01b031692638fdcb4c99260048083019391928290030181865afa15801562000ffc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001022919062003920565b6040516024016200103895949392919062003978565b60408051601f198184030181529181526020820180516001600160e01b031663c21dda4f60e01b179052516001600160e01b031960e086901b1681526200108593929190600401620039ca565b600060405180830381600087803b158015620010a057600080fd5b505af1158015620010b5573d6000803e3d6000fd5b5050602154620010d392506001600160a01b03169050848662001c16565b60405163c88a5e6d60e01b8152600080516020620051688339815191529063c88a5e6d90620011099086908690600401620038ac565b600060405180830381600087803b1580156200112457600080fd5b505af115801562001139573d6000803e3d6000fd5b50506040516303223eab60e11b81526001600160a01b03861660048201526000805160206200516883398151915292506306447d569150602401600060405180830381600087803b1580156200118e57600080fd5b505af1158015620011a3573d6000803e3d6000fd5b5050602154601f5460405163095ea7b360e01b81526001600160a01b03928316945063095ea7b39350620011e692610100909204909116908890600401620038ac565b6020604051808303816000875af115801562001206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200122c9190620039fc565b50601f5460405163c3de453d60e01b81526101009091046001600160a01b03169063c3de453d908490620012679089908990600401620038ac565b6000604051808303818588803b1580156200128157600080fd5b505af115801562001296573d6000803e3d6000fd5b50505050506000805160206200518883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012e957600080fd5b505af1158015620012fe573d6000803e3d6000fd5b5050602154601f546040516370a0823160e01b81526001600160a01b0361010090920482166004820152620013919450911691506370a0823190602401602060405180830381865afa15801562001359573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200137f9190620038c5565b6200138b868462003962565b62001c25565b6021546040516370a0823160e01b81526001600160a01b03858116600483015262000d729216906370a0823190602401602060405180830381865afa158015620013df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014059190620038c5565b600062001c25565b60006200143460405180604001604052806002815260200161746f60f01b81525062001c02565b602154601f546040516370a0823160e01b81526101009091046001600160a01b039081166004830152929350670de0b6b3a76400009260009216906370a0823190602401602060405180830381865afa15801562001496573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014bc9190620038c5565b602154604051919250600080516020620051688339815191529163bd6af434916001600160a01b031690819063a9059cbb90620015009089908990602401620038ac565b60408051808303601f1901815291815260208201805160e094851b6001600160e01b03909116179052519185901b6001600160e01b03191682526200154b9392509060040162003a20565b600060405180830381600087803b1580156200156657600080fd5b505af11580156200157b573d6000803e3d6000fd5b5050602080546040805163110ff5f160e01b815290516001600160a01b0390921694506328d27d639350849263110ff5f1926004808401938290030181865afa158015620015cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015f3919062003920565b601f54604051600262048789608a1b019161010090046001600160a01b031690620016259089908990602401620038ac565b60408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e087901b168152620016789493929190620186a09060040162003a4e565b6020604051808303816000875af115801562001698573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016be9190620038c5565b506021546040516370a0823160e01b81526001600160a01b0385811660048301526200173a9216906370a0823190602401602060405180830381865afa1580156200170d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017339190620038c5565b8362001c25565b602154601f546040516370a0823160e01b81526101009091046001600160a01b039081166004830152620017c39216906370a0823190602401602060405180830381865afa15801562001791573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017b79190620038c5565b6200138b848462003a8e565b505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152600080516020620051688339815191529063ca669fa790602401600060405180830381600087803b1580156200181d57600080fd5b505af115801562001832573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200188757600080fd5b505af11580156200189c573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516200198a94506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa158015620018fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019219190620038c5565b6040518263ffffffff1660e01b81526004016200194091815260200190565b602060405180830381865afa1580156200195e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019849190620039fc565b62001c90565b601f54604080516304bae1ef60e31b81529051620019e49261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa158015620018fb573d6000803e3d6000fd5b60225460405163ca669fa760e01b81526001600160a01b039091166004820152600080516020620051688339815191529063ca669fa790602401600060405180830381600087803b15801562001a3957600080fd5b505af115801562001a4e573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001aa357600080fd5b505af115801562001ab8573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001ba694506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001b17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b3d9190620038c5565b6040518263ffffffff1660e01b815260040162001b5c91815260200190565b602060405180830381865afa15801562001b7a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ba09190620039fc565b62001cee565b601f54604080516304bae1ef60e31b8152905162001c009261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001b17573d6000803e3d6000fd5b565b600062001c0f8262001d23565b5092915050565b620017c3838383600062001e38565b60405163260a5b1560e21b8152600481018390526024810182905260008051602062005168833981519152906398296c549060440160006040518083038186803b15801562001c7357600080fd5b505afa15801562001c88573d6000803e3d6000fd5b505050505050565b604051630c9fd58160e01b815281151560048201526000805160206200516883398151915290630c9fd581906024015b60006040518083038186803b15801562001cd957600080fd5b505afa15801562000d72573d6000803e3d6000fd5b60405163a598288560e01b81528115156004820152600080516020620051688339815191529063a59828859060240162001cc0565b6000808260405160200162001d39919062003aa4565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150600080516020620051688339815191529063ffa1864990602401602060405180830381865afa15801562001da0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dc69190620038df565b6040516318caf8e360e31b8152909250600080516020620051688339815191529063c657c7189062001dff908590879060040162003a20565b600060405180830381600087803b15801562001e1a57600080fd5b505af115801562001e2f573d6000803e3d6000fd5b50505050915091565b604080516001600160a01b0385811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b179052915160009287169162001e8e9162003aa4565b600060405180830381855afa9150503d806000811462001ecb576040519150601f19603f3d011682016040523d82523d6000602084013e62001ed0565b606091505b5091505060008180602001905181019062001eec9190620038c5565b905062001f268462001f1f8762001f186370a0823160e01b62001f11600d8d6200203d565b9062002067565b9062002085565b90620020b1565b821562001c885760408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b17905290516000916001600160a01b0389169162001f71919062003aa4565b600060405180830381855afa9150503d806000811462001fae576040519150601f19603f3d011682016040523d82523d6000602084013e62001fb3565b606091505b5091505060008180602001905181019062001fcf9190620038c5565b90508286101562001ffa5762001fe6868462003a8e565b62001ff2908262003a8e565b905062002015565b62002006838762003a8e565b62002012908262003962565b90505b620020338162001f1f6318160ddd60e01b62001f11600d8d6200203d565b5050505050505050565b6004820180546001600160a01b0319166001600160a01b0383161790556000825b90505b92915050565b60028201805463ffffffff191660e083901c1790556000826200205e565b6001808301805491820181556000908152602081206001600160a01b038416920191909155826200205e565b6200055882826004820154600283015460038401546001600160a01b039092169160e09190911b906000620020e6866200250b565b6001600160a01b0385166000908152602088815260408083206001600160e01b03198816845282528083209051939450926200212791859187910162003ac2565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff1662002167576200216586600062002623565b505b6001600160a01b0384166000908152602087815260408083206001600160e01b0319871684528252808320905190918391620021a891869188910162003ac2565b6040516020818303038152906040528051906020012081526020019081526020016000209050600081600201548260010154620021e6919062003962565b1115620022e25760008160020154826001015462002205919062003962565b620022139061010062003a8e565b6200222090600262003be3565b60405163348051d760e11b815260048101829052909150818810906000805160206200516883398151915290636900a3ae90602401600060405180830381865afa15801562002273573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200229d919081019062003c3b565b604051602001620022af919062003cda565b60405160208183030381529060405290620022df5760405162461bcd60e51b815260040162000526919062003d5a565b50505b8054604051630667f9d760e41b8152600091600080516020620051688339815191529163667f9d70916200231c918a9190600401620038ac565b602060405180830381865afa1580156200233a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023609190620038c5565b6001838101546002850154929350600092908101610100039190911b60001901811b1983169089901b1783546040516370ca10bb60e01b815291925060008051602062005168833981519152916370ca10bb91620023c6918b91908690600401620038ff565b600060405180830381600087803b158015620023e157600080fd5b505af1158015620023f6573d6000803e3d6000fd5b50505050600080620024088b62002639565b915091508115806200241a5750898114155b15620024f35784546040516370ca10bb60e01b815260008051602062005168833981519152916370ca10bb9162002458918d918990600401620038ff565b600060405180830381600087803b1580156200247357600080fd5b505af115801562002488573d6000803e3d6000fd5b505060405162461bcd60e51b815260206004820152603360248201527f73746453746f726167652066696e642853746453746f72616765293a204661696044820152723632b2103a37903bb934ba32903b30b63ab29760691b60648201526084019150620005269050565b620024fe8b62002710565b5050505050505050505050565b60608160070180546200251e9062003803565b9050600003620025875762002061826001018054806020026020016040519081016040528092919081815260200182805480156200257c57602002820191906000526020600020905b81548152602001906001019080831162002567575b50505050506200271e565b816007018054620025989062003803565b80601f0160208091040260200160405190810160405280929190818152602001828054620025c69062003803565b8015620026175780601f10620025eb5761010080835404028352916020019162002617565b820191906000526020600020905b815481529060010190602001808311620025f957829003601f168201915b50505050509050919050565b6000620026318383620027be565b549392505050565b60028101546000908190819060e01b62002653856200250b565b6040516020016200266692919062003d6f565b60408051601f1981840301815290829052600486015490925060009182916001600160a01b0316906200269b90859062003aa4565b600060405180830381855afa9150503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b50915091506000620027028288600301546020620026fc919062003da2565b62002f28565b929792965091945050505050565b6200271b8162002fa6565b50565b606060008251602062002732919062003da2565b67ffffffffffffffff8111156200274d576200274d62003bf1565b6040519080825280601f01601f19166020018201604052801562002778576020820181803683370190505b50905060005b835181101562001c0f5760008482815181106200279f576200279f62003dbc565b602090810291909101810151838202850190910152506001016200277e565b6004820154600283015460038401546000926001600160a01b03169160e01b9083620027ea876200250b565b6001600160a01b0385166000908152602089815260408083206001600160e01b03198816845282528083209051939450926200282b91859187910162003ac2565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff1615620028df5785156200286f576200286f8762002fa6565b6001600160a01b0384166000908152602088815260408083206001600160e01b03198716845282528083209051909291620028af91859187910162003ac2565b60405160208183030381529060405280519060200120815260200190815260200160002094505050505062002061565b6000805160206200518883398151915260001c6001600160a01b031663266cf1096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200292d57600080fd5b505af115801562002942573d6000803e3d6000fd5b505050506000620029538862002639565b6040516365bc948160e01b81526001600160a01b03881660048201529092506000915060008051602062005168833981519152906365bc9481906024016000604051808303816000875af1158015620029b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620029da919081019062003e5b565b509050805160000362002a58576040805162461bcd60e51b81526020600482015260248101919091527f73746453746f726167652066696e642853746453746f72616765293a204e6f2060448201527f73746f726167652075736520646574656374656420666f72207461726765742e606482015260840162000526565b80515b600062002a688262003ec6565b9150811062002dd15760006000805160206200518883398151915260001c6001600160a01b031663667f9d708985858151811062002aaa5762002aaa62003dbc565b60200260200101516040518363ffffffff1660e01b815260040162002ad1929190620038ac565b602060405180830381865afa15801562002aef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b159190620038c5565b90508062002b78577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a58884848151811062002b545762002b5462003dbc565b602002602001015160001c60405162002b6f929190620038ac565b60405180910390a15b62002ba08b84848151811062002b925762002b9262003dbc565b602002602001015162002ffc565b62002bac575062002a5b565b60068b0154600090819060ff161562002c0257600062002be98e87878151811062002bdb5762002bdb62003dbc565b6020026020010151620031d1565b909450925090508062002c00575050505062002a5b565b505b6001828201610100031b60001901811b8316811c86811462002c28575050505062002a5b565b7f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed8b8b8a8c60405160200162002c6092919062003ac2565b6040516020818303038152906040528051906020012089898151811062002c8b5762002c8b62003dbc565b602090810291909101810151604080516001600160a01b0390961686526001600160e01b03199094169185019190915291830152606082015260800160405180910390a1604051806080016040528087878151811062002cef5762002cef62003dbc565b602002602001015160001c8152602001848152602001838152602001600115158152508e60000160008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c6001600160e01b0319166001600160e01b031916815260200190815260200160002060008a8c60405160200162002d7592919062003ac2565b60408051808303601f190181529181528151602092830120835282820193909352908201600020835181559083015160018201559082015160028201556060909101516003909101805460ff1916911515919091179055505050505b506001600160a01b038616600090815260208a815260408083206001600160e01b0319891684528252808320905190929162002e1291879189910162003ac2565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff1662002ea45760405162461bcd60e51b815260206004820152602f60248201527f73746453746f726167652066696e642853746453746f72616765293a20536c6f60448201526e3a143994903737ba103337bab7321760891b606482015260840162000526565b871562002eb65762002eb68962002fa6565b6001600160a01b038616600090815260208a815260408083206001600160e01b0319891684528252808320905190929162002ef691879189910162003ac2565b604051602081830303815290604052805190602001208152602001908152602001600020965050505050505092915050565b6000806000602085511162002f3f57845162002f42565b60205b905060005b8181101562002f9c5762002f5d81600862003da2565b8662002f6a838862003962565b8151811062002f7d5762002f7d62003dbc565b01602001516001600160f81b031916901c929092179160010162002f47565b5090949350505050565b6004810180546001600160a01b031916905560028101805463ffffffff1916905562002fd760018201600062003436565b60006003820181905560068201805460ff191690556200271b90600783019062003456565b600480830154604051630667f9d760e41b81526000928392600080516020620051688339815191529263667f9d709262003043926001600160a01b031691889101620038ac565b602060405180830381865afa15801562003061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030879190620038c5565b9050600080620030978662002639565b909250905060008115620030ad576000620030b1565b6000195b6004808901546040516370ca10bb60e01b815292935060008051602062005168833981519152926370ca10bb92620030f8926001600160a01b0316918b91879101620038ff565b600060405180830381600087803b1580156200311357600080fd5b505af115801562003128573d6000803e3d6000fd5b505050506000620031398862002639565b60048a8101546040516370ca10bb60e01b81529294506000805160206200516883398151915293506370ca10bb9262003183926001600160a01b03909216918c918b9101620038ff565b600060405180830381600087803b1580156200319e57600080fd5b505af1158015620031b3573d6000803e3d6000fd5b50505050838015620031c55750808314155b98975050505050505050565b600482810154604051630667f9d760e41b8152600092839283928392600080516020620051688339815191529263667f9d70926200321e926001600160a01b03909216918a9101620038ac565b602060405180830381865afa1580156200323c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032629190620038c5565b9050600080620032758888600162003325565b915091506000806200328a8a8a600062003325565b60048c8101546040516370ca10bb60e01b815293955091935060008051602062005168833981519152926370ca10bb92620032d6926001600160a01b03909116918e918b9101620038ff565b600060405180830381600087803b158015620032f157600080fd5b505af115801562003306573d6000803e3d6000fd5b50505050838015620033155750815b9a92995097509095505050505050565b60008060005b610100811015620034175760008462003348576001821b6200335a565b620033558260ff62003a8e565b6001901b5b6004808901546040516370ca10bb60e01b815292935060008051602062005168833981519152926370ca10bb92620033a1926001600160a01b0316918b91879101620038ff565b600060405180830381600087803b158015620033bc57600080fd5b505af1158015620033d1573d6000803e3d6000fd5b50505050600080620033e38962002639565b91509150818015620033f457508015155b156200340b57600184955095505050505062003420565b5050506001016200332b565b50600080915091505b935093915050565b6112878062003ee183390190565b50805460008255906000526020600020908101906200271b919062003490565b508054620034649062003803565b6000825580601f1062003475575050565b601f0160209004906000526020600020908101906200271b91905b5b80821115620034a7576000815560010162003491565b5090565b6020808252825182820181905260009190848201906040850190845b81811015620034ee5783516001600160a01b031683529284019291840191600101620034c7565b50909695505050505050565b60005b8381101562003517578181015183820152602001620034fd565b50506000910152565b600081518084526200353a816020860160208601620034fa565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156200360457603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b81811015620035ed57605f19898503018352620035da84865162003520565b948e01949350918d0191600101620035bb565b505050978a01979450509188019160010162003575565b50919a9950505050505050505050565b6001600160a01b03811681146200271b57600080fd5b6000602082840312156200363d57600080fd5b81356200364a8162003614565b9392505050565b60008151808452602080850194506020840160005b838110156200368e5781516001600160e01b0319168752958201959082019060010162003666565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156200371857888303603f1901855281518051878552620036e98886018262003520565b91890151858303868b015291905062003703818362003651565b968901969450505090860190600101620036c2565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156200378157603f198886030184526200376e85835162003520565b945092850192908501906001016200374f565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156200371857888303603f19018552815180516001600160a01b03168452870151878401879052620037ef8785018262003651565b9588019593505090860190600101620037b7565b600181811c908216806200381857607f821691505b6020821081036200383957634e487b7160e01b600052602260045260246000fd5b50919050565b6000806000606084860312156200385557600080fd5b8351600581106200386557600080fd5b6020850151909350620038788162003614565b60408501519092506200388b8162003614565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03929092168252602082015260400190565b600060208284031215620038d857600080fd5b5051919050565b600060208284031215620038f257600080fd5b81516200364a8162003614565b6001600160a01b039390931683526020830191909152604082015260600190565b6000602082840312156200393357600080fd5b815167ffffffffffffffff811681146200364a57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156200206157620020616200394c565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a06060840152620039b560a084018662003520565b91508084166080840152509695505050505050565b60018060a01b0384168152826020820152606060408201526000620039f3606083018462003520565b95945050505050565b60006020828403121562003a0f57600080fd5b815180151581146200364a57600080fd5b6001600160a01b038316815260406020820181905260009062003a469083018462003520565b949350505050565b67ffffffffffffffff86811682526001600160a01b0386811660208401528516604083015260a06060830181905260009190620039b59084018662003520565b818103818111156200206157620020616200394c565b6000825162003ab8818460208701620034fa565b9190910192915050565b6000835162003ad6818460208801620034fa565b9190910191825250602001919050565b600181815b8085111562003b2757816000190482111562003b0b5762003b0b6200394c565b8085161562003b1957918102915b93841c939080029062003aeb565b509250929050565b60008262003b405750600162002061565b8162003b4f5750600062002061565b816001811462003b68576002811462003b735762003b93565b600191505062002061565b60ff84111562003b875762003b876200394c565b50506001821b62002061565b5060208310610133831016604e8410600b841016171562003bb8575081810a62002061565b62003bc4838362003ae6565b806000190482111562003bdb5762003bdb6200394c565b029392505050565b60006200205e838362003b2f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003c335762003c3362003bf1565b604052919050565b60006020828403121562003c4e57600080fd5b815167ffffffffffffffff8082111562003c6757600080fd5b818401915084601f83011262003c7c57600080fd5b81518181111562003c915762003c9162003bf1565b62003ca6601f8201601f191660200162003c07565b915080825285602082850101111562003cbe57600080fd5b62003cd1816020840160208601620034fa565b50949350505050565b7f73746453746f726167652066696e642853746453746f72616765293a2050616381527f6b656420736c6f742e2057652063616e2774206669742076616c756520677265602082015269030ba32b9103a3430b7160b51b60408201526000825162003d4d81604a850160208701620034fa565b91909101604a0192915050565b6020815260006200205e602083018462003520565b6001600160e01b031983168152815160009062003d94816004850160208701620034fa565b919091016004019392505050565b80820281158282048414176200206157620020616200394c565b634e487b7160e01b600052603260045260246000fd5b600082601f83011262003de457600080fd5b8151602067ffffffffffffffff82111562003e035762003e0362003bf1565b8160051b62003e1482820162003c07565b928352848101820192828101908785111562003e2f57600080fd5b83870192505b8483101562003e505782518252918301919083019062003e35565b979650505050505050565b6000806040838503121562003e6f57600080fd5b825167ffffffffffffffff8082111562003e8857600080fd5b62003e968683870162003dd2565b9350602085015191508082111562003ead57600080fd5b5062003ebc8582860162003dd2565b9150509250929050565b60008162003ed85762003ed86200394c565b50600019019056fe60c0604052600080546001600160a01b0319167301004e20000000000000520800000000004c4b4017905534801561003657600080fd5b506001600160401b03461660805260a660a052604051633b9aca009061005b906100a3565b908152602001604051809103906000f08015801561007d573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100b0565b6101d0806110b783390190565b60805160a051610fdb6100dc600039600061019801526000818161041a01526109450152610fdb6000f3fe6080604052600436106101405760003560e01c80636739afca116100b6578063b2b2f5bd1161006f578063b2b2f5bd146104a0578063b4d5afd1146104d4578063c21dda4f14610509578063c26dfc051461051c578063cf84c8181461053e578063d051c97d1461055e57600080fd5b80636739afca1461039f57806378fe5307146103c15780638dd9523c146103e85780639a8a059214610408578063a32eb7c61461043c578063aaf1bc971461047057600080fd5b80632f32700e116101085780632f32700e146102405780633aa87330146102a55780633fd3b15e146102e6578063500b19e71461032757806355e2448e1461035f57806366a1eaf31461037f57600080fd5b80630360d20f1461014557806306c3dc5f14610171578063110ff5f11461018657806324278bbe146101d257806328d27d6314610212575b600080fd5b34801561015157600080fd5b5061015a600281565b60405160ff90911681526020015b60405180910390f35b34801561017d57600080fd5b5061015a600381565b34801561019257600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610168565b3480156101de57600080fd5b506102026101ed366004610bba565b60066020526000908152604090205460ff1681565b6040519015158152602001610168565b34801561021e57600080fd5b5061023261022d366004610c3b565b61059f565b604051908152602001610168565b34801561024c57600080fd5b506040805180820182526000808252602091820152815180830183526007546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610168565b3480156102b157600080fd5b506101ba6102c0366004610cbf565b60026020908152600092835260408084209091529082529020546001600160401b031681565b3480156102f257600080fd5b506101ba610301366004610cbf565b60046020908152600092835260408084209091529082529020546001600160401b031681565b34801561033357600080fd5b50600154610347906001600160a01b031681565b6040516001600160a01b039091168152602001610168565b34801561036b57600080fd5b506007546001600160401b03161515610202565b34801561038b57600080fd5b5061039d61039a366004610cf2565b50565b005b3480156103ab57600080fd5b506103b46107b7565b6040516101689190610d2d565b3480156103cd57600080fd5b506000546101ba90600160401b90046001600160401b031681565b3480156103f457600080fd5b50610232610403366004610dde565b6107fd565b34801561041457600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044857600080fd5b506102327ffeccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1e81565b34801561047c57600080fd5b5061020261048b366004610bba565b60056020526000908152604090205460ff1681565b3480156104ac57600080fd5b506102327fa06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6881565b3480156104e057600080fd5b506000546104f690600160801b900461ffff1681565b60405161ffff9091168152602001610168565b61039d610517366004610e42565b61087e565b34801561052857600080fd5b506000546104f690600160901b900461ffff1681565b34801561054a57600080fd5b506000546101ba906001600160401b031681565b34801561056a57600080fd5b506101ba610579366004610cbf565b60036020908152600092835260408084209091529082529020546001600160401b031681565b600080546001600160401b0390811690831611156106045760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064015b60405180910390fd5b6000546001600160401b03600160401b9091048116908316101561066a5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016105fb565b604080518082019091526001600160401b0388168082526001600160a01b0388166020909201829052600780546001600160e01b031916909117600160401b9092029190911790555a9050600080866001600160a01b0316846001600160401b031687876040516106dc929190610e7a565b60006040518083038160008787f1925050503d806000811461071a576040519150601f19603f3d011682016040523d82523d6000602084013e61071f565b606091505b50915091505a61072f9084610ea0565b600780546001600160e01b03191690559250811580156107585750836001600160401b03168310155b1561079e5760405162461bcd60e51b81526020600482015260166024820152754d6f636b506f7274616c3a206f7574206f662067617360501b60448201526064016105fb565b816107ab57805160208201fd5b50509695505050505050565b604080516000808252602082019092526060916107f7565b6040805180820190915260008152606060208201528152602001906001900390816107cf5790505b50905090565b600154604051632376548f60e21b81526000916001600160a01b031690638dd9523c90610834908890889088908890600401610ee2565b602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190610f1a565b95945050505050565b6000546001600160401b0390811690821611156108dd5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064016105fb565b6000546001600160401b03600160401b909104811690821610156109435760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016105fb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b0316036109c45760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016105fb565b6001600160401b038616610a1a5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016105fb565b6001600160a01b038416610a705760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c000000000060448201526064016105fb565b6000610a7e878585856107fd565b905080341015610ad05760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e74206665650000000060448201526064016105fb565b6001600160401b03808816600090815260026020908152604080832060ff8b1680855292528220805491936001939192610b0c91859116610f33565b82546101009290920a6001600160401b0381810219909316918316021790915589811660008181526002602090815260408083208786168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90610b8c9033908c908c908c908c908c90610f5a565b60405180910390a45050505050505050565b80356001600160401b0381168114610bb557600080fd5b919050565b600060208284031215610bcc57600080fd5b610bd582610b9e565b9392505050565b80356001600160a01b0381168114610bb557600080fd5b60008083601f840112610c0557600080fd5b5081356001600160401b03811115610c1c57600080fd5b602083019150836020828501011115610c3457600080fd5b9250929050565b60008060008060008060a08789031215610c5457600080fd5b610c5d87610b9e565b9550610c6b60208801610bdc565b9450610c7960408801610bdc565b935060608701356001600160401b03811115610c9457600080fd5b610ca089828a01610bf3565b9094509250610cb3905060808801610b9e565b90509295509295509295565b60008060408385031215610cd257600080fd5b610cdb83610b9e565b9150610ce960208401610b9e565b90509250929050565b600060208284031215610d0457600080fd5b81356001600160401b03811115610d1a57600080fd5b82016101808185031215610bd557600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015610dcf57898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b80841015610db957845183168252938c019360019390930192908c0190610d97565b50988b0198965050509288019250600101610d57565b50919998505050505050505050565b60008060008060608587031215610df457600080fd5b610dfd85610b9e565b935060208501356001600160401b03811115610e1857600080fd5b610e2487828801610bf3565b9094509250610e37905060408601610b9e565b905092959194509250565b60008060008060008060a08789031215610e5b57600080fd5b610e6487610b9e565b9550602087013560ff81168114610c6b57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610eb357610eb3610e8a565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b03808716835260606020840152610f06606084018688610eb9565b915080841660408401525095945050505050565b600060208284031215610f2c57600080fd5b5051919050565b6001600160401b03818116838216019080821115610f5357610f53610e8a565b5092915050565b6001600160a01b0387811682528616602082015260a060408201819052600090610f879083018688610eb9565b6001600160401b03949094166060830152506080015294935050505056fea264697066735822122094816f2db6ff15c367e9274ff4084a2574be4d5b966a69654180fd9ffb631c0264736f6c63430008180033608060405234801561001057600080fd5b506040516101d03803806101d083398101604081905261002f91610037565b600055610050565b60006020828403121561004957600080fd5b5051919050565b6101718061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780638dd9523c1461005a578063ddca3f4314610081575b600080fd5b604051600181526020015b60405180910390f35b6100736100683660046100a7565b600054949350505050565b604051908152602001610051565b61007360005481565b803567ffffffffffffffff811681146100a257600080fd5b919050565b600080600080606085870312156100bd57600080fd5b6100c68561008a565b9350602085013567ffffffffffffffff808211156100e357600080fd5b818701915087601f8301126100f757600080fd5b81358181111561010657600080fd5b88602082850101111561011857600080fd5b6020830195508094505050506101306040860161008a565b90509295919450925056fea2646970667358221220721172973248b1811d0ce80fb3c63ecaa4ee2acba92eaf0384d16ccac0f6ebda64736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212205d957fe199712327a1093469de58b17ae1649ea655d66a4195a1f09e76c6385364736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212200990f1fdf99ebbbd4beea3136ad30621ecc5b310462b1ec5f4c435256fde786864736f6c63430008180033", + Bin: "0x6080604052600c805462ff00ff19166201000117905534801561002157600080fd5b506201945780620000336000396000f3fe60806040523480156200001157600080fd5b50600436106200015d5760003560e01c8063a71b82f311620000c7578063c7a275ae1162000086578063c7a275ae14620002d4578063cec93a7a14620002eb578063cfbf9af71462000302578063d3919d631462000319578063d9ce4ea91462000330578063f8ccbf47146200034757600080fd5b8063a71b82f31462000261578063ad1610621462000278578063b90b3ffb146200028f578063becbbd8414620002a6578063c206ac6714620002bd57600080fd5b80635dcb079211620001205780635dcb079214620001d7578063626812e314620001ee5780636e7a983314620002055780637924b9b3146200021c5780637be8840014620002335780639452e25f146200024a57600080fd5b806308de3fd414620001625780631a2b9c80146200017b5780633e1f7dbc14620001925780634bbad78a14620001a95780635a92ef2314620001c0575b600080fd5b6200017962000173366004620026be565b6200036f565b005b620001796200018c366004620026be565b620004ad565b62000179620001a33660046200275b565b6200054f565b62000179620001ba366004620026be565b62000cac565b62000179620001d13660046200275b565b62000d4e565b62000179620001e8366004620027c7565b62000e7b565b62000179620001ff3660046200275b565b62000fa8565b620001796200021636600462002805565b620010cc565b620001796200022d3660046200275b565b620011e4565b620001796200024436600462002805565b62001308565b620001796200025b36600462002805565b62001382565b62000179620002723660046200288a565b620013fc565b620001796200028936600462002805565b6200161d565b62000179620002a0366004620027c7565b62001697565b62000179620002b7366004620027c7565b6200173f565b62000179620002ce366004620026be565b620017e7565b62000179620002e5366004620027c7565b62001889565b62000179620002fc3660046200288a565b62001931565b6200017962000313366004620027c7565b62001b52565b620001796200032a36600462002805565b62001bfa565b6200017962000341366004620027c7565b62002117565b600c546200035b9062010000900460ff1681565b604051901515815260200160405180910390f35b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b158015620003c257600080fd5b505af1158015620003d7573d6000803e3d6000fd5b505060405163d533b44560e01b81526001600160401b03851660048201526001600160a01b038616925063d533b44591506024015b600060405180830381600087803b1580156200042757600080fd5b505af11580156200043c573d6000803e3d6000fd5b505050506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200048e57600080fd5b505af1158015620004a3573d6000803e3d6000fd5b5050505050505050565b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200050057600080fd5b505af115801562000515573d6000803e3d6000fd5b50506040516315fd043360e31b81526001600160401b03851660048201526001600160a01b038616925063afe8219891506024016200040c565b6000600262048789608a1b0190506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200059e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c49190620028d0565b90506000826001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062d9190620028d0565b90506000836001600160a01b031663969b53da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000670573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006969190620028d0565b90506000846001600160a01b03166312622e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ff9190620028f7565b90506000856001600160a01b03166323b051d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000742573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000768919062002917565b604051637fec2a8d60e01b81526001600160a01b038b166004820152909150600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b158015620007bc57600080fd5b505af1158015620007d1573d6000803e3d6000fd5b505050506000604051620007e590620025f5565b604051809103906000f08015801562000802573d6000803e3d6000fd5b5090506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200085357600080fd5b505af115801562000868573d6000803e3d6000fd5b50505050620008848b600262048789608a1b01838c8c620021bf565b856001600160a01b0316876001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f39190620028d0565b6001600160a01b0316146200093f5760405162461bcd60e51b815260206004820152600d60248201526c1bdddb995c8818da185b99d959609a1b60448201526064015b60405180910390fd5b826001600160401b0316876001600160a01b03166312622e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000988573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009ae9190620028f7565b6001600160401b031614620009fa5760405162461bcd60e51b81526020600482015260116024820152701b0c50da185a5b92590818da185b99d959607a1b604482015260640162000936565b846001600160a01b0316876001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a43573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a699190620028d0565b6001600160a01b03161462000ab05760405162461bcd60e51b815260206004820152600c60248201526b1bdb5b9a4818da185b99d95960a21b604482015260640162000936565b81876001600160a01b03166323b051d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000af0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b16919062002917565b1462000b655760405162461bcd60e51b815260206004820152601760248201527f6c3142726964676542616c616e6365206368616e676564000000000000000000604482015260640162000936565b836001600160a01b0316876001600160a01b031663969b53da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bd49190620028d0565b6001600160a01b03161462000c1f5760405162461bcd60e51b815260206004820152601060248201526f1b0c509c9a5919d94818da185b99d95960821b604482015260640162000936565b60405162000c2d9062002603565b604051809103906000f08015801562000c4a573d6000803e3d6000fd5b506001600160a01b031663c04062266040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000c8657600080fd5b505af115801562000c9b573d6000803e3d6000fd5b505050505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b15801562000cff57600080fd5b505af115801562000d14573d6000803e3d6000fd5b505060405163185f372d60e31b81526001600160401b03851660048201526001600160a01b038616925063c2f9b96891506024016200040c565b604051637fec2a8d60e01b81526001600160a01b0384166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b15801562000d9f57600080fd5b505af115801562000db4573d6000803e3d6000fd5b50505050600060405162000dc89062002611565b604051809103906000f08015801562000de5573d6000803e3d6000fd5b5090506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000e3657600080fd5b505af115801562000e4b573d6000803e3d6000fd5b5050505062000e748573cccccc00000000000000000000000000000000028386866000620021cb565b5050505050565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b15801562000ece57600080fd5b505af115801562000ee3573d6000803e3d6000fd5b50505050816001600160a01b03166383d0cbd96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b505af115801562000f38573d6000803e3d6000fd5b505050506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f8a57600080fd5b505af115801562000f9f573d6000803e3d6000fd5b50505050505050565b604051637fec2a8d60e01b81526001600160a01b0384166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b15801562000ff957600080fd5b505af11580156200100e573d6000803e3d6000fd5b50505050600060405162001022906200261f565b604051809103906000f0801580156200103f573d6000803e3d6000fd5b5090506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200109057600080fd5b505af1158015620010a5573d6000803e3d6000fd5b5050505062000e748573cccccc0000000000000000000000000000000001838686620021bf565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200111d57600080fd5b505af115801562001132573d6000803e3d6000fd5b50505050600060405162001146906200262d565b604051809103906000f08015801562001163573d6000803e3d6000fd5b5090506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011b457600080fd5b505af1158015620011c9573d6000803e3d6000fd5b50505050620011dc8685838686620021bf565b505050505050565b604051637fec2a8d60e01b81526001600160a01b0384166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200123557600080fd5b505af11580156200124a573d6000803e3d6000fd5b5050505060006040516200125e906200263b565b604051809103906000f0801580156200127b573d6000803e3d6000fd5b5090506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012cc57600080fd5b505af1158015620012e1573d6000803e3d6000fd5b5050505062000e748573121e240000000000000000000000000000000001838686620021bf565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200135957600080fd5b505af11580156200136e573d6000803e3d6000fd5b505050506000604051620011469062002649565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b158015620013d357600080fd5b505af1158015620013e8573d6000803e3d6000fd5b505050506000604051620011469062002657565b6000829050806001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001466919062002917565b821480620014d75750806001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620014ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014d4919062002917565b82145b80620015465750806001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200151d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001543919062002917565b82145b620015855760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21030b1ba34b7b760911b604482015260640162000936565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b158015620015d657600080fd5b505af1158015620015eb573d6000803e3d6000fd5b5050604051632f4dae9f60e01b8152600481018590526001600160a01b0384169250632f4dae9f91506024016200040c565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200166e57600080fd5b505af115801562001683573d6000803e3d6000fd5b505050506000604051620011469062002665565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b158015620016ea57600080fd5b505af1158015620016ff573d6000803e3d6000fd5b50505050816001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200179257600080fd5b505af1158015620017a7573d6000803e3d6000fd5b50505050816001600160a01b03166354d26bba6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200183a57600080fd5b505af11580156200184f573d6000803e3d6000fd5b50506040516310a5a7f760e01b81526001600160401b03851660048201526001600160a01b03861692506310a5a7f791506024016200040c565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b158015620018dc57600080fd5b505af1158015620018f1573d6000803e3d6000fd5b50505050816001600160a01b03166323dbce506040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b6000829050806001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200199b919062002917565b82148062001a0c5750806001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620019e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a09919062002917565b82145b8062001a7b5750806001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001a52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a78919062002917565b82145b62001aba5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21030b1ba34b7b760911b604482015260640162000936565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b15801562001b0b57600080fd5b505af115801562001b20573d6000803e3d6000fd5b50506040516376ab298d60e11b8152600481018590526001600160a01b038416925063ed56531a91506024016200040c565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b15801562001ba557600080fd5b505af115801562001bba573d6000803e3d6000fd5b50505050816001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b60008390506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001c40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c669190620028d0565b90506000826001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001ca9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ccf9190620028d0565b90506000836001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d389190620028d0565b604051637fec2a8d60e01b81526001600160a01b038a166004820152909150600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b15801562001d8c57600080fd5b505af115801562001da1573d6000803e3d6000fd5b5050505060008260405162001db69062002673565b6001600160a01b039091168152602001604051809103906000f08015801562001de3573d6000803e3d6000fd5b5090506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001e3457600080fd5b505af115801562001e49573d6000803e3d6000fd5b5050505062001e5c8a89838a8a620021bf565b836001600160a01b0316856001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001ea5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ecb9190620028d0565b6001600160a01b03161462001f135760405162461bcd60e51b815260206004820152600d60248201526c1bdddb995c8818da185b99d959609a1b604482015260640162000936565b826001600160a01b0316856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f5c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f829190620028d0565b6001600160a01b03161462001fca5760405162461bcd60e51b815260206004820152600d60248201526c1d1bdad95b8818da185b99d959609a1b604482015260640162000936565b816001600160a01b0316856001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002013573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020399190620028d0565b6001600160a01b031614620020805760405162461bcd60e51b815260206004820152600c60248201526b1bdb5b9a4818da185b99d95960a21b604482015260640162000936565b6040516200208e9062002681565b604051809103906000f080158015620020ab573d6000803e3d6000fd5b5060405163148aedc160e21b81526001600160a01b038a81166004830152919091169063522bb70490602401600060405180830381600087803b158015620020f257600080fd5b505af115801562002107573d6000803e3d6000fd5b5050505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200216a57600080fd5b505af11580156200217f573d6000803e3d6000fd5b50505050816001600160a01b031663c3d8ad676040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f2357600080fd5b62000e74858585858560015b6000620021d886620023d2565b604051637fec2a8d60e01b81526001600160a01b0389166004820152909150600080516020620193e283398151915290637fec2a8d90602401600060405180830381600087803b1580156200222c57600080fd5b505af115801562002241573d6000803e3d6000fd5b5050604051639623609d60e01b81526001600160a01b0384169250639623609d91506200227990899089908990899060040162002931565b600060405180830381600087803b1580156200229457600080fd5b505af1158015620022a9573d6000803e3d6000fd5b505050506000805160206201940283398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620022fb57600080fd5b505af115801562002310573d6000803e3d6000fd5b505050508115620023745762002326856200247c565b620023745760405162461bcd60e51b815260206004820152601960248201527f696e697469616c697a657273206e6f742064697361626c656400000000000000604482015260640162000936565b846001600160a01b03166200238987620024a1565b6001600160a01b03161462000f9f5760405162461bcd60e51b815260206004820152600e60248201526d1d5c19dc9859194819985a5b195960921b604482015260640162000936565b604051630667f9d760e41b81526001600160a01b03821660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152600090600080516020620193e28339815191529063667f9d70906044015b602060405180830381865afa15801562002450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002476919062002917565b92915050565b60006001600160401b03620024918362002506565b6001600160401b03161492915050565b604051630667f9d760e41b81526001600160a01b03821660048201527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6024820152600090600080516020620193e28339815191529063667f9d709060440162002432565b604051630667f9d760e41b81526001600160a01b03821660048201527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060248201526000908190600080516020620193e28339815191529063667f9d7090604401602060405180830381865afa15801562002585573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ab919062002917565b90506001600160401b03811115620024765760405162461bcd60e51b815260206004820152600c60248201526b696e697469616c697a696e6760a01b604482015260640162000936565b6117d4806200297e83390190565b6138fa806200415283390190565b61017e8062007a4c83390190565b610c6b8062007bca83390190565b614bd3806200883583390190565b611982806200d40883390190565b6118c4806200ed8a83390190565b6112dd806201064e83390190565b61112a806201192b83390190565b6117738062012a5583390190565b61521a80620141c883390190565b6001600160a01b0381168114620026a557600080fd5b50565b6001600160401b0381168114620026a557600080fd5b600080600060608486031215620026d457600080fd5b8335620026e1816200268f565b92506020840135620026f3816200268f565b915060408401356200270581620026a8565b809150509250925092565b60008083601f8401126200272357600080fd5b5081356001600160401b038111156200273b57600080fd5b6020830191508360208285010111156200275457600080fd5b9250929050565b600080600080606085870312156200277257600080fd5b84356200277f816200268f565b9350602085013562002791816200268f565b925060408501356001600160401b03811115620027ad57600080fd5b620027bb8782880162002710565b95989497509550505050565b60008060408385031215620027db57600080fd5b8235620027e8816200268f565b91506020830135620027fa816200268f565b809150509250929050565b6000806000806000608086880312156200281e57600080fd5b85356200282b816200268f565b945060208601356200283d816200268f565b935060408601356200284f816200268f565b925060608601356001600160401b038111156200286b57600080fd5b620028798882890162002710565b969995985093965092949392505050565b600080600060608486031215620028a057600080fd5b8335620028ad816200268f565b92506020840135620028bf816200268f565b929592945050506040919091013590565b600060208284031215620028e357600080fd5b8151620028f0816200268f565b9392505050565b6000602082840312156200290a57600080fd5b8151620028f081620026a8565b6000602082840312156200292a57600080fd5b5051919050565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f85011683010190509594505050505056fe608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116f5806100df6000396000f3fe6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113df565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113fc565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113fc565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611415565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113df565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e4610351366004611441565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b506101796000805160206116a083398151915281565b6101e461040f366004611415565b610bad565b34801561042057600080fd5b506101e461042f3660046113df565b610c03565b34801561044057600080fd5b506101e461044f3660046113fc565b610d11565b34801561046057600080fd5b506101e461046f3660046113df565b610d22565b34801561048057600080fd5b506101e461048f36600461149c565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114e7565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611513565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115c5565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115fb565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114e7565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190611513565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b4490849061162a565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114e7565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc3866112b0565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112c1565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b6000805160206116a083398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e16000805160206116a0833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e16000805160206116a08339815191526112c1565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b61112382826107fe565b61112d908261162a565b34101561117c5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20696e73756666696369656e742066756e6473000060448201526064016104db565b806001600082825461118e919061163d565b9091555050600054600160401b90046001600160a01b031663c21dda4f6111b5833461163d565b6000546002546040516001600160a01b038881166024830152604482018890526001600160401b0390931692600492169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e088901b16815261123a94939291906201388090600401611650565b6000604051808303818588803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b50506040518481526001600160a01b03861693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a35050565b6112b8611379565b6107fb816113c2565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113355760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611379565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113f157600080fd5b81356108ca816113ca565b60006020828403121561140e57600080fd5b5035919050565b6000806040838503121561142857600080fd5b8235611433816113ca565b946020939093013593505050565b6000806000806080858703121561145757600080fd5b8435611462816113ca565b93506020850135611472816113ca565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b6000806000606084860312156114b157600080fd5b83356114bc81611487565b925060208401356114cc816113ca565b915060408401356114dc816113ca565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561152557600080fd5b604051604081018181106001600160401b038211171561155557634e487b7160e01b600052604160045260246000fd5b604052825161156381611487565b81526020830151611573816113ca565b60208201529392505050565b6000815180845260005b818110156115a557602081850181015186830182015201611589565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115e8606084018661157f565b9150808416604084015250949350505050565b60006020828403121561160d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611614565b818103818111156107e4576107e4611614565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261168a60a084018661157f565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212207e2b43e80f776959bfee4f00ceda9bc3e4390b2b22a1f6268ff2a3694128f7da64736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b506138bd8061003d6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063916a17c61162000097578063ba414fa6116200006e578063ba414fa61462000193578063c040622614620001ae578063e20c9f7114620001ba578063fa7626d414620001c457600080fd5b8063916a17c61462000166578063b0464fdc146200017f578063b5508aa9146200018957600080fd5b80631ed7831c14620000e55780632ade388014620001075780633e5e3c2314620001205780633f7286f4146200012a57806366d9a9a0146200013457806385226c81146200014d575b600080fd5b620000ef620001d2565b604051620000fe919062001fbc565b60405180910390f35b6200011162000236565b604051620000fe91906200205f565b620000ef62000384565b620000ef620003e6565b6200013e62000448565b604051620000fe91906200216d565b62000157620005c1565b604051620000fe9190620021fa565b620001706200069b565b604051620000fe919062002262565b6200017062000785565b620001576200086f565b6200019d62000949565b6040519015158152602001620000fe565b620001b8620009ec565b005b620000ef62000b0b565b601f546200019d9060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156200022c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200020d575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200037b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000363578382906000526020600020018054620002cf90620022d7565b80601f0160208091040260200160405190810160405280929190818152602001828054620002fd90620022d7565b80156200034e5780601f1062000322576101008083540402835291602001916200034e565b820191906000526020600020905b8154815290600101906020018083116200033057829003601f168201915b505050505081526020019060010190620002ad565b5050505081525050815260200190600101906200025a565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200037b5783829060005260206000209060020201604051806040016040529081600082018054620004a290620022d7565b80601f0160208091040260200160405190810160405280929190818152602001828054620004d090620022d7565b8015620005215780601f10620004f55761010080835404028352916020019162000521565b820191906000526020600020905b8154815290600101906020018083116200050357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620005a857602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620005695790505b505050505081525050815260200190600101906200046c565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156200037b5783829060005260206000200180546200060790620022d7565b80601f01602080910402602001604051908101604052809291908181526020018280546200063590620022d7565b8015620006865780601f106200065a5761010080835404028352916020019162000686565b820191906000526020600020905b8154815290600101906020018083116200066857829003601f168201915b505050505081526020019060010190620005e5565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156200037b5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200076c57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200072d5790505b50505050508152505081526020019060010190620006bf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156200037b5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200085657602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620008175790505b50505050508152505081526020019060010190620007a9565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156200037b578382906000526020600020018054620008b590620022d7565b80601f0160208091040260200160405190810160405280929190818152602001828054620008e390620022d7565b8015620009345780601f10620009085761010080835404028352916020019162000934565b820191906000526020600020905b8154815290600101906020018083116200091657829003601f168201915b50505050508152602001906001019062000893565b60085460009060ff161562000962575060085460ff1690565b604051630667f9d760e41b815260008051602062003868833981519152600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa158015620009bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009e5919062002313565b1415905090565b60007f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af115801562000a52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a7891906200234a565b509091506000905081600481111562000a955762000a9562002399565b1462000ad65760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b604482015260640160405180910390fd5b62000ae062000b6d565b62000aea62000e94565b62000af462001170565b62000afe6200152c565b62000b0862001940565b50565b606060158054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b601f805474121e24000000000000000000000000000000000200610100600160a81b0319909116179081905560408051634b4da9ed60e11b815290516101009092046001600160a01b03169163969b53da916004808201926020929091908290030181865afa15801562000be5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0b9190620023af565b602180546001600160a01b0319166001600160a01b03928316179055601f54604080516312622e5b60e01b81529051610100909204909216916312622e5b9160048083019260209291908290030181865afa15801562000c6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c959190620023d4565b602260146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550601f60019054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d11573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d379190620023af565b602280546001600160a01b0319166001600160a01b039290921691909117905560405162000d659062001fa1565b604051809103906000f08015801562000d82573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b0392831617905560225460405163ca669fa760e01b815291166004820152600080516020620038688339815191529063ca669fa790602401600060405180830381600087803b15801562000deb57600080fd5b505af115801562000e00573d6000803e3d6000fd5b5050601f5460225460205460215460405163f35ea55760e01b8152600160a01b90930467ffffffffffffffff1660048401526001600160a01b03918216602484015281166044830152610100909204909116925063f35ea5579150606401600060405180830381600087803b15801562000e7957600080fd5b505af115801562000e8e573d6000803e3d6000fd5b50505050565b600062000ebb60405180604001604052806002815260200161746f60f01b81525062001d7a565b90506000670de0b6b3a76400009050600062000ef4604051806040016040528060058152602001643830bcb7b960d91b81525062001d7a565b60405163f30c7ba360e01b815290915068056bc75e2d6310000090600080516020620038688339815191529063f30c7ba39062000f38908790879060040162002400565b600060405180830381600087803b15801562000f5357600080fd5b505af115801562000f68573d6000803e3d6000fd5b5050602054602254602154601f546040516001600160a01b0389811660248301528b81166044830152606482018b90526084820189905294851696506328d27d639550600160a01b90930467ffffffffffffffff1693918216926101009091049091169060a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b179052516001600160e01b031960e087901b168152620010229493929190620186a09060040162002428565b6020604051808303816000875af115801562001042573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001068919062002313565b50620010ee601f60019054906101000a90046001600160a01b03166001600160a01b03166323b051d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015620010c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010e7919062002313565b8262001d8e565b601f5460405163402914f560e01b81526001600160a01b03848116600483015262000e8e926101009004169063402914f5906024015b602060405180830381865afa15801562001142573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001168919062002313565b600062001d8e565b60006200119760405180604001604052806002815260200161746f60f01b81525062001d7a565b601f54604051633abfe55f60e01b81526001600160a01b038084166004830152670de0b6b3a76400006024830181905293945060009261010090041690633abfe55f90604401602060405180830381865afa158015620011fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001221919062002313565b6020546022546021546040516001600160a01b03888116602483015260448201889052949550600080516020620038688339815191529463f30c7ba3948116938793600160a01b90910467ffffffffffffffff16926004929091169060640160408051808303601f190181529181526020808301805163f3fef3a360e01b6001600160e01b03909116179052601f548251638fdcb4c960e01b815292516101009091046001600160a01b031692638fdcb4c99260048083019391928290030181865afa158015620012f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200131c9190620023d4565b604051602401620013329594939291906200247d565b60408051601f198184030181529181526020820180516001600160e01b031663c21dda4f60e01b179052516001600160e01b031960e086901b1681526200137f93929190600401620024ba565b600060405180830381600087803b1580156200139a57600080fd5b505af1158015620013af573d6000803e3d6000fd5b5060008051602062003868833981519152925063c88a5e6d9150859050620013d88486620024ec565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156200141f57600080fd5b505af115801562001434573d6000803e3d6000fd5b505060405163ca669fa760e01b81526001600160a01b038616600482015260008051602062003868833981519152925063ca669fa79150602401600060405180830381600087803b1580156200148957600080fd5b505af11580156200149e573d6000803e3d6000fd5b5050601f5461010090046001600160a01b0316915063c3de453d9050620014c68385620024ec565b6040516001600160e01b031960e084901b1681526001600160a01b0387166004820152602481018690526044016000604051808303818588803b1580156200150d57600080fd5b505af115801562001522573d6000803e3d6000fd5b5050505050505050565b60006200155360405180604001604052806002815260200161746f60f01b81525062001d7a565b90506000670de0b6b3a7640000905060006200158c604051806040016040528060058152602001643830bcb7b960d91b81525062001d7a565b9050600068056bc75e2d6310000090506000604051620015ac9062001faf565b604051809103906000f080158015620015c9573d6000803e3d6000fd5b5060405163f30c7ba360e01b8152909150600080516020620038688339815191529063f30c7ba39062001603908490889060040162002400565b600060405180830381600087803b1580156200161e57600080fd5b505af115801562001633573d6000803e3d6000fd5b5050602054602254602154601f546040516001600160a01b038a811660248301528881166044830152606482018c9052608482018a905294851696506328d27d639550600160a01b90930467ffffffffffffffff1693918216926101009091049091169060a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b179052516001600160e01b031960e087901b168152620016ed9493929190620186a09060040162002428565b6020604051808303816000875af11580156200170d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001733919062002313565b50601f5460405163402914f560e01b81526001600160a01b038581166004830152620017b4926101009004169063402914f590602401602060405180830381865afa15801562001787573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ad919062002313565b8562001d8e565b60405163f30c7ba360e01b8152600080516020620038688339815191529063f30c7ba390620017ea908890889060040162002400565b600060405180830381600087803b1580156200180557600080fd5b505af11580156200181a573d6000803e3d6000fd5b5050602054602254601f546040516001600160a01b038b8116602483015293841695506328d27d639450600160a01b90920467ffffffffffffffff16928892610100909204169060440160408051601f198184030181529181526020820180516001600160e01b0316630f41a04d60e11b179052516001600160e01b031960e087901b168152620018b79493929190620186a09060040162002428565b6020604051808303816000875af1158015620018d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018fd919062002313565b50601f5460405163402914f560e01b81526001600160a01b03858116600483015262001939926101009004169063402914f59060240162001124565b5050505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152600080516020620038688339815191529063ca669fa790602401600060405180830381600087803b1580156200199557600080fd5b505af1158015620019aa573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620019ff57600080fd5b505af115801562001a14573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001b0294506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001a73573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a99919062002313565b6040518263ffffffff1660e01b815260040162001ab891815260200190565b602060405180830381865afa15801562001ad6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001afc919062002514565b62001df9565b601f54604080516304bae1ef60e31b8152905162001b5c9261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001a73573d6000803e3d6000fd5b60225460405163ca669fa760e01b81526001600160a01b039091166004820152600080516020620038688339815191529063ca669fa790602401600060405180830381600087803b15801562001bb157600080fd5b505af115801562001bc6573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001c1b57600080fd5b505af115801562001c30573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001d1e94506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001c8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cb5919062002313565b6040518263ffffffff1660e01b815260040162001cd491815260200190565b602060405180830381865afa15801562001cf2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d18919062002514565b62001e57565b601f54604080516304bae1ef60e31b8152905162001d789261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001c8f573d6000803e3d6000fd5b565b600062001d878262001e8c565b5092915050565b60405163260a5b1560e21b8152600481018390526024810182905260008051602062003868833981519152906398296c549060440160006040518083038186803b15801562001ddc57600080fd5b505afa15801562001df1573d6000803e3d6000fd5b505050505050565b604051630c9fd58160e01b815281151560048201526000805160206200386883398151915290630c9fd581906024015b60006040518083038186803b15801562001e4257600080fd5b505afa15801562001939573d6000803e3d6000fd5b60405163a598288560e01b81528115156004820152600080516020620038688339815191529063a59828859060240162001e29565b6000808260405160200162001ea2919062002538565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150600080516020620038688339815191529063ffa1864990602401602060405180830381865afa15801562001f09573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2f9190620023af565b6040516318caf8e360e31b8152909250600080516020620038688339815191529063c657c7189062001f68908590879060040162002556565b600060405180830381600087803b15801562001f8357600080fd5b505af115801562001f98573d6000803e3d6000fd5b50505050915091565b611287806200258583390190565b605c806200380c83390190565b6020808252825182820181905260009190848201906040850190845b8181101562001fff5783516001600160a01b03168352928401929184019160010162001fd8565b50909695505050505050565b60005b83811015620020285781810151838201526020016200200e565b50506000910152565b600081518084526200204b8160208601602086016200200b565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156200211557603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b81811015620020fe57605f19898503018352620020eb84865162002031565b948e01949350918d0191600101620020cc565b505050978a01979450509188019160010162002086565b50919a9950505050505050505050565b60008151808452602080850194506020840160005b83811015620021625781516001600160e01b031916875295820195908201906001016200213a565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620021ec57888303603f1901855281518051878552620021bd8886018262002031565b91890151858303868b0152919050620021d7818362002125565b96890196945050509086019060010162002196565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156200225557603f198886030184526200224285835162002031565b9450928501929085019060010162002223565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620021ec57888303603f19018552815180516001600160a01b03168452870151878401879052620022c38785018262002125565b95880195935050908601906001016200228b565b600181811c90821680620022ec57607f821691505b6020821081036200230d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156200232657600080fd5b5051919050565b80516001600160a01b03811681146200234557600080fd5b919050565b6000806000606084860312156200236057600080fd5b8351600581106200237057600080fd5b925062002380602085016200232d565b915062002390604085016200232d565b90509250925092565b634e487b7160e01b600052602160045260246000fd5b600060208284031215620023c257600080fd5b620023cd826200232d565b9392505050565b600060208284031215620023e757600080fd5b815167ffffffffffffffff81168114620023cd57600080fd5b6001600160a01b03929092168252602082015260606040820181905260009082015260800190565b67ffffffffffffffff86811682526001600160a01b0386811660208401528516604083015260a06060830181905260009190620024689084018662002031565b91508084166080840152509695505050505050565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a060608401526200246860a084018662002031565b60018060a01b0384168152826020820152606060408201526000620024e3606083018462002031565b95945050505050565b808201808211156200250e57634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200252757600080fd5b81518015158114620023cd57600080fd5b600082516200254c8184602087016200200b565b9190910192915050565b6001600160a01b03831681526040602082018190526000906200257c9083018462002031565b94935050505056fe60c0604052600080546001600160a01b0319167301004e20000000000000520800000000004c4b4017905534801561003657600080fd5b506001600160401b03461660805260a660a052604051633b9aca009061005b906100a3565b908152602001604051809103906000f08015801561007d573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100b0565b6101d0806110b783390190565b60805160a051610fdb6100dc600039600061019801526000818161041a01526109450152610fdb6000f3fe6080604052600436106101405760003560e01c80636739afca116100b6578063b2b2f5bd1161006f578063b2b2f5bd146104a0578063b4d5afd1146104d4578063c21dda4f14610509578063c26dfc051461051c578063cf84c8181461053e578063d051c97d1461055e57600080fd5b80636739afca1461039f57806378fe5307146103c15780638dd9523c146103e85780639a8a059214610408578063a32eb7c61461043c578063aaf1bc971461047057600080fd5b80632f32700e116101085780632f32700e146102405780633aa87330146102a55780633fd3b15e146102e6578063500b19e71461032757806355e2448e1461035f57806366a1eaf31461037f57600080fd5b80630360d20f1461014557806306c3dc5f14610171578063110ff5f11461018657806324278bbe146101d257806328d27d6314610212575b600080fd5b34801561015157600080fd5b5061015a600281565b60405160ff90911681526020015b60405180910390f35b34801561017d57600080fd5b5061015a600381565b34801561019257600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610168565b3480156101de57600080fd5b506102026101ed366004610bba565b60066020526000908152604090205460ff1681565b6040519015158152602001610168565b34801561021e57600080fd5b5061023261022d366004610c3b565b61059f565b604051908152602001610168565b34801561024c57600080fd5b506040805180820182526000808252602091820152815180830183526007546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610168565b3480156102b157600080fd5b506101ba6102c0366004610cbf565b60026020908152600092835260408084209091529082529020546001600160401b031681565b3480156102f257600080fd5b506101ba610301366004610cbf565b60046020908152600092835260408084209091529082529020546001600160401b031681565b34801561033357600080fd5b50600154610347906001600160a01b031681565b6040516001600160a01b039091168152602001610168565b34801561036b57600080fd5b506007546001600160401b03161515610202565b34801561038b57600080fd5b5061039d61039a366004610cf2565b50565b005b3480156103ab57600080fd5b506103b46107b7565b6040516101689190610d2d565b3480156103cd57600080fd5b506000546101ba90600160401b90046001600160401b031681565b3480156103f457600080fd5b50610232610403366004610dde565b6107fd565b34801561041457600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044857600080fd5b506102327ffeccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1e81565b34801561047c57600080fd5b5061020261048b366004610bba565b60056020526000908152604090205460ff1681565b3480156104ac57600080fd5b506102327fa06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6881565b3480156104e057600080fd5b506000546104f690600160801b900461ffff1681565b60405161ffff9091168152602001610168565b61039d610517366004610e42565b61087e565b34801561052857600080fd5b506000546104f690600160901b900461ffff1681565b34801561054a57600080fd5b506000546101ba906001600160401b031681565b34801561056a57600080fd5b506101ba610579366004610cbf565b60036020908152600092835260408084209091529082529020546001600160401b031681565b600080546001600160401b0390811690831611156106045760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064015b60405180910390fd5b6000546001600160401b03600160401b9091048116908316101561066a5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016105fb565b604080518082019091526001600160401b0388168082526001600160a01b0388166020909201829052600780546001600160e01b031916909117600160401b9092029190911790555a9050600080866001600160a01b0316846001600160401b031687876040516106dc929190610e7a565b60006040518083038160008787f1925050503d806000811461071a576040519150601f19603f3d011682016040523d82523d6000602084013e61071f565b606091505b50915091505a61072f9084610ea0565b600780546001600160e01b03191690559250811580156107585750836001600160401b03168310155b1561079e5760405162461bcd60e51b81526020600482015260166024820152754d6f636b506f7274616c3a206f7574206f662067617360501b60448201526064016105fb565b816107ab57805160208201fd5b50509695505050505050565b604080516000808252602082019092526060916107f7565b6040805180820190915260008152606060208201528152602001906001900390816107cf5790505b50905090565b600154604051632376548f60e21b81526000916001600160a01b031690638dd9523c90610834908890889088908890600401610ee2565b602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190610f1a565b95945050505050565b6000546001600160401b0390811690821611156108dd5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064016105fb565b6000546001600160401b03600160401b909104811690821610156109435760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016105fb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b0316036109c45760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016105fb565b6001600160401b038616610a1a5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016105fb565b6001600160a01b038416610a705760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c000000000060448201526064016105fb565b6000610a7e878585856107fd565b905080341015610ad05760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e74206665650000000060448201526064016105fb565b6001600160401b03808816600090815260026020908152604080832060ff8b1680855292528220805491936001939192610b0c91859116610f33565b82546101009290920a6001600160401b0381810219909316918316021790915589811660008181526002602090815260408083208786168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90610b8c9033908c908c908c908c908c90610f5a565b60405180910390a45050505050505050565b80356001600160401b0381168114610bb557600080fd5b919050565b600060208284031215610bcc57600080fd5b610bd582610b9e565b9392505050565b80356001600160a01b0381168114610bb557600080fd5b60008083601f840112610c0557600080fd5b5081356001600160401b03811115610c1c57600080fd5b602083019150836020828501011115610c3457600080fd5b9250929050565b60008060008060008060a08789031215610c5457600080fd5b610c5d87610b9e565b9550610c6b60208801610bdc565b9450610c7960408801610bdc565b935060608701356001600160401b03811115610c9457600080fd5b610ca089828a01610bf3565b9094509250610cb3905060808801610b9e565b90509295509295509295565b60008060408385031215610cd257600080fd5b610cdb83610b9e565b9150610ce960208401610b9e565b90509250929050565b600060208284031215610d0457600080fd5b81356001600160401b03811115610d1a57600080fd5b82016101808185031215610bd557600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015610dcf57898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b80841015610db957845183168252938c019360019390930192908c0190610d97565b50988b0198965050509288019250600101610d57565b50919998505050505050505050565b60008060008060608587031215610df457600080fd5b610dfd85610b9e565b935060208501356001600160401b03811115610e1857600080fd5b610e2487828801610bf3565b9094509250610e37905060408601610b9e565b905092959194509250565b60008060008060008060a08789031215610e5b57600080fd5b610e6487610b9e565b9550602087013560ff81168114610c6b57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610eb357610eb3610e8a565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b03808716835260606020840152610f06606084018688610eb9565b915080841660408401525095945050505050565b600060208284031215610f2c57600080fd5b5051919050565b6001600160401b03818116838216019080821115610f5357610f53610e8a565b5092915050565b6001600160a01b0387811682528616602082015260a060408201819052600090610f879083018688610eb9565b6001600160401b03949094166060830152506080015294935050505056fea264697066735822122094816f2db6ff15c367e9274ff4084a2574be4d5b966a69654180fd9ffb631c0264736f6c63430008180033608060405234801561001057600080fd5b506040516101d03803806101d083398101604081905261002f91610037565b600055610050565b60006020828403121561004957600080fd5b5051919050565b6101718061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780638dd9523c1461005a578063ddca3f4314610081575b600080fd5b604051600181526020015b60405180910390f35b6100736100683660046100a7565b600054949350505050565b604051908152602001610051565b61007360005481565b803567ffffffffffffffff811681146100a257600080fd5b919050565b600080600080606085870312156100bd57600080fd5b6100c68561008a565b9350602085013567ffffffffffffffff808211156100e357600080fd5b818701915087601f8301126100f757600080fd5b81358181111561010657600080fd5b88602082850101111561011857600080fd5b6020830195508094505050506101306040860161008a565b90509295919450925056fea2646970667358221220721172973248b1811d0ce80fb3c63ecaa4ee2acba92eaf0384d16ccac0f6ebda64736f6c634300081800336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220f0047128a938cbb6f0aeb9b91bc379cc849c3afc53b352b8da02c82089ad30e064736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da264697066735822122029906a06ad9c717ce9766ccefcc08418db98853060303221e5b9aaf01774e6c064736f6c63430008180033608060405234801561001057600080fd5b5061015e806100206000396000f3fe6080604052600436106100295760003560e01c8063bef7a2f01461002e578063f679d3051461005c575b600080fd5b34801561003a57600080fd5b5061004a67016345785d8a000081565b60405190815260200160405180910390f35b610064610066565b005b61006e61009b565b60405133907fc3ef55ddda4bc9300706e15ab3aed03c762d8afd43a7d358a7b9503cb39f281b90600090a2565b67016345785d8a00003410156100f75760405162461bcd60e51b815260206004820152601a60248201527f536c617368696e673a20696e73756666696369656e7420666565000000000000604482015260640160405180910390fd5b60405161dead903480156108fc02916000818181858888f19350505050158015610125573d6000803e3d6000fd5b5056fea2646970667358221220e54f4616555ca48641e09d52a300c51bd72300171829e999a6cc770bf9fb372e64736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610b8c806100df6000396000f3fe6080604052600436106100dd5760003560e01c806384768b7a1161007f578063c6a2aac811610059578063c6a2aac814610252578063cf8e629a14610267578063d146fd1b1461027c578063f2fde38b1461029657600080fd5b806384768b7a146101b85780638da5cb5b146101f8578063a5a470ad1461023f57600080fd5b8063400ada75116100bb578063400ada751461015457806359bcddde146101745780635c19a95c14610190578063715018a6146101a357600080fd5b8063117407e3146100e257806311bcd830146101045780633f0b1edf14610134575b600080fd5b3480156100ee57600080fd5b506101026100fd3660046109b8565b6102b6565b005b34801561011057600080fd5b5061012168056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561014057600080fd5b5061010261014f3660046109b8565b610386565b34801561016057600080fd5b5061010261016f366004610a49565b610452565b34801561018057600080fd5b50610121670de0b6b3a764000081565b61010261019e366004610a85565b610571565b3480156101af57600080fd5b50610102610669565b3480156101c457600080fd5b506101e86101d3366004610a85565b60016020526000908152604090205460ff1681565b604051901515815260200161012b565b34801561020457600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161012b565b61010261024d366004610aa7565b61067d565b34801561025e57600080fd5b506101026107d3565b34801561027357600080fd5b50610102610811565b34801561028857600080fd5b506000546101e89060ff1681565b3480156102a257600080fd5b506101026102b1366004610a85565b61084c565b6102be61088a565b60005b818110156103815760018060008585858181106102e0576102e0610b07565b90506020020160208101906102f59190610a85565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061032f5761032f610b07565b90506020020160208101906103449190610a85565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a26001016102c1565b505050565b61038e61088a565b60005b81811015610381576000600160008585858181106103b1576103b1610b07565b90506020020160208101906103c69190610a85565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061040057610400610b07565b90506020020160208101906104159190610a85565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a2600101610391565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104985750825b905060008267ffffffffffffffff1660011480156104b55750303b155b9050811580156104c3575080155b156104e15760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561050b57845460ff60401b1916600160401b1785555b610514876108e5565b6000805460ff1916871515179055831561056857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b670de0b6b3a76400003410156105ce5760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a20696e73756666696369656e74206465706f73697400000060448201526064015b60405180910390fd5b336001600160a01b038216146106265760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a206f6e6c792073656c662064656c65676174696f6e00000060448201526064016105c5565b6040513481526001600160a01b0382169033907f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a350565b61067161088a565b61067b60006108f6565b565b60005460ff16158061069e57503360009081526001602052604090205460ff165b6106e15760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b60448201526064016105c5565b602181146107315760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e677468000060448201526064016105c5565b68056bc75e2d6310000034101561078a5760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a20696e73756666696369656e74206465706f73697400000060448201526064016105c5565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538383346040516107c793929190610b1d565b60405180910390a25050565b6107db61088a565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b61081961088a565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b61085461088a565b6001600160a01b03811661087e57604051631e4fbdf760e01b8152600060048201526024016105c5565b610887816108f6565b50565b336108bc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461067b5760405163118cdaa760e01b81523360048201526024016105c5565b6108ed610967565b610887816109b0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661067b57604051631afcd79f60e31b815260040160405180910390fd5b610854610967565b600080602083850312156109cb57600080fd5b823567ffffffffffffffff808211156109e357600080fd5b818501915085601f8301126109f757600080fd5b813581811115610a0657600080fd5b8660208260051b8501011115610a1b57600080fd5b60209290920196919550909350505050565b80356001600160a01b0381168114610a4457600080fd5b919050565b60008060408385031215610a5c57600080fd5b610a6583610a2d565b915060208301358015158114610a7a57600080fd5b809150509250929050565b600060208284031215610a9757600080fd5b610aa082610a2d565b9392505050565b60008060208385031215610aba57600080fd5b823567ffffffffffffffff80821115610ad257600080fd5b818501915085601f830112610ae657600080fd5b813581811115610af557600080fd5b866020828501011115610a1b57600080fd5b634e487b7160e01b600052603260045260246000fd5b604081528260408201528284606083013760006060848301015260006060601f19601f860116830101905082602083015294935050505056fea264697066735822122045470f898cb2934a31276e4ca2304db83cfec5fa14d15fdfc851bfc62fde336264736f6c6343000818003360806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b614aed80620000e66000396000f3fe60806040526004361061036b5760003560e01c80638532eb9f116101c6578063b4d5afd1116100f7578063c3d8ad6711610095578063d051c97d1161006f578063d051c97d14610af8578063d533b44514610b39578063f2fde38b14610b59578063f45cc7b814610b7957600080fd5b8063c3d8ad6714610a9a578063c4ab80bc14610aaf578063cf84c81814610acf57600080fd5b8063bff0e84d116100d1578063bff0e84d14610a27578063c21dda4f14610a47578063c26dfc0514610a5a578063c2f9b96814610a7a57600080fd5b8063b4d5afd1146109b2578063b521466d146109e7578063bb8590ad14610a0757600080fd5b8063a480ca7911610164578063afe821981161013e578063afe8219814610925578063afe8af9c14610945578063b187bd261461097b578063b2b2f5bd1461099057600080fd5b8063a480ca79146108b5578063a8a98962146108d5578063aaf1bc97146108f557600080fd5b806397b52062116101a057806397b520621461083e5780639a8a05921461085e578063a10ac97a14610871578063a32eb7c61461089357600080fd5b80638532eb9f146107b35780638da5cb5b146107d35780638dd9523c1461081057600080fd5b80633f4ba83a116102a0578063575420501161023e578063715018a611610218578063715018a61461074d57806378fe53071461076257806383d0cbd9146107895780638456cb591461079e57600080fd5b806357542050146106ca57806366a1eaf31461070b5780636739afca1461072b57600080fd5b806349cc3bf61161027a57806349cc3bf614610643578063500b19e71461065d57806354d26bba1461069557806355e2448e146106aa57600080fd5b80633f4ba83a146105cd5780633fd3b15e146105e2578063461ab4881461062357600080fd5b8063241b71bb1161030d57806330632e8b116102e757806330632e8b1461052557806336d219121461054557806336d853f91461056c5780633aa873301461058c57600080fd5b8063241b71bb1461046057806324278bbe146104905780632f32700e146104c057600080fd5b806310a5a7f71161034957806310a5a7f7146103d3578063110ff5f1146103f35780631d3eb6e31461042b57806323dbce501461044b57600080fd5b80630360d20f1461037057806306c3dc5f1461039c578063103ba701146103b1575b600080fd5b34801561037c57600080fd5b50610385600281565b60405160ff90911681526020015b60405180910390f35b3480156103a857600080fd5b50610385600381565b3480156103bd57600080fd5b506103d16103cc366004613dbe565b610ba0565b005b3480156103df57600080fd5b506103d16103ee366004613df9565b610bb4565b3480156103ff57600080fd5b50600154610413906001600160401b031681565b6040516001600160401b039091168152602001610393565b34801561043757600080fd5b506103d1610446366004613e16565b610c13565b34801561045757600080fd5b506103d1610d2e565b34801561046c57600080fd5b5061048061047b366004613e8a565b610d78565b6040519015158152602001610393565b34801561049c57600080fd5b506104806104ab366004613df9565b60056020526000908152604090205460ff1681565b3480156104cc57600080fd5b50604080518082018252600080825260209182015281518083018352600b546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610393565b34801561053157600080fd5b506103d1610540366004613ea3565b610d89565b34801561055157600080fd5b5060015461041390600160401b90046001600160401b031681565b34801561057857600080fd5b506103d1610587366004613df9565b61102a565b34801561059857600080fd5b506104136105a7366004613ede565b60066020908152600092835260408084209091529082529020546001600160401b031681565b3480156105d957600080fd5b506103d161103b565b3480156105ee57600080fd5b506104136105fd366004613ede565b60086020908152600092835260408084209091529082529020546001600160401b031681565b34801561062f57600080fd5b5061048061063e366004613f17565b611076565b34801561064f57600080fd5b506000546103859060ff1681565b34801561066957600080fd5b5060025461067d906001600160a01b031681565b6040516001600160a01b039091168152602001610393565b3480156106a157600080fd5b506103d1611092565b3480156106b657600080fd5b50600b546001600160401b03161515610480565b3480156106d657600080fd5b506104136106e5366004613f53565b600a6020908152600092835260408084209091529082529020546001600160401b031681565b34801561071757600080fd5b506103d1610726366004613f88565b6110dc565b34801561073757600080fd5b5061074061147c565b6040516103939190613fc3565b34801561075957600080fd5b506103d1611570565b34801561076e57600080fd5b5060005461041390600160681b90046001600160401b031681565b34801561079557600080fd5b506103d1611584565b3480156107aa57600080fd5b506103d16115ce565b3480156107bf57600080fd5b506103d16107ce366004614074565b611609565b3480156107df57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661067d565b34801561081c57600080fd5b5061083061082b366004614143565b61171c565b604051908152602001610393565b34801561084a57600080fd5b506103d16108593660046141aa565b61179d565b34801561086a57600080fd5b5046610413565b34801561087d57600080fd5b50610830600080516020614a5883398151915281565b34801561089f57600080fd5b50610830600080516020614a9883398151915281565b3480156108c157600080fd5b506103d16108d03660046141f5565b6117b0565b3480156108e157600080fd5b506103d16108f03660046141f5565b611838565b34801561090157600080fd5b50610480610910366004613df9565b60046020526000908152604090205460ff1681565b34801561093157600080fd5b506103d1610940366004613df9565b611849565b34801561095157600080fd5b50610413610960366004613df9565b6009602052600090815260409020546001600160401b031681565b34801561098757600080fd5b506104806118a3565b34801561099c57600080fd5b50610830600080516020614a3883398151915281565b3480156109be57600080fd5b506000546109d4906301000000900461ffff1681565b60405161ffff9091168152602001610393565b3480156109f357600080fd5b506103d1610a02366004614210565b6118f9565b348015610a1357600080fd5b506103d1610a22366004613df9565b61190a565b348015610a3357600080fd5b506103d1610a42366004614210565b61191b565b6103d1610a55366004614234565b61192c565b348015610a6657600080fd5b506000546109d490610100900461ffff1681565b348015610a8657600080fd5b506103d1610a95366004613df9565b611d06565b348015610aa657600080fd5b506103d1611d65565b348015610abb57600080fd5b506103d1610aca3660046141aa565b611daf565b348015610adb57600080fd5b50600054610413906501000000000090046001600160401b031681565b348015610b0457600080fd5b50610413610b13366004613ede565b60076020908152600092835260408084209091529082529020546001600160401b031681565b348015610b4557600080fd5b506103d1610b54366004613df9565b611dc2565b348015610b6557600080fd5b506103d1610b743660046141f5565b611e1c565b348015610b8557600080fd5b5060005461041390600160a81b90046001600160401b031681565b610ba8611e57565b610bb181611eb2565b50565b610bbc611e57565b610bdc610bd7600080516020614a3883398151915283611f4e565b611f97565b6040516001600160401b038216907fcd7910e1c5569d8433ce4ef8e5d51c1bdc03168f614b576da47dc3d2b51d033a90600090a250565b333014610c5f5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b60448201526064015b60405180910390fd5b600154600b546001600160401b03908116600160401b9092041614610cc05760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610c56565b600b54600160401b90046001600160a01b031615610d205760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610c56565b610d2a828261203d565b5050565b610d36611e57565b610d4d600080516020614a98833981519152611f97565b6040517f3d0f9c56dac46156a2db0aa09ee7804770ad9fc9549d21023164f22d69475ed890600090a1565b6000610d83826121b7565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610dce5750825b90506000826001600160401b03166001148015610dea5750303b155b905081158015610df8575080155b15610e165760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e4057845460ff60401b1916600160401b1785555b610e55610e5060208801886141f5565b61221e565b610e6d610e6860408801602089016141f5565b61222f565b610e85610e8060a0880160808901613df9565b6122d3565b610e9d610e9860c0880160a08901613df9565b61238b565b610eb5610eb060e0880160c08901614210565b61243f565b610ece610ec9610100880160e08901614210565b6124e3565b610ee8610ee361012088016101008901613dbe565b611eb2565b610f10610efd61018088016101608901613df9565b610f0b6101808901896142bd565b612583565b610f206060870160408801613df9565b6001805467ffffffffffffffff19166001600160401b0392909216919091179055610f516080870160608801613df9565b600180546001600160401b0392909216600160401b026fffffffffffffffff000000000000000019909216919091179055610104610fb0610f986080890160608a01613df9565b82610fab6101408b016101208c01613df9565b6128b2565b610fdb610fc36080890160608a01613df9565b82610fd66101608b016101408c01613df9565b612927565b50831561102257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b611032611e57565b610bb1816122d3565b611043611e57565b61104b612993565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b600061108b836110868585611f4e565b6129aa565b9392505050565b61109a611e57565b6110b1600080516020614a38833981519152612a31565b6040517f4c48c7b71557216a3192842746bdfc381f98d7536d9eb1c6764f3b45e679482790600090a1565b600080516020614a988339815191526110fb6060830160408401613df9565b611109826110868484611f4e565b1561114b5760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610c56565b611153612ad7565b366000611164610100860186614306565b909250905060408501600061117c8260208901613df9565b600154909150600160401b90046001600160401b03166111a26040840160208501613df9565b6001600160401b0316146111f85760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a2077726f6e672063636861696e20494400000000006044820152606401610c56565b8261123c5760405162461bcd60e51b81526020600482015260146024820152734f6d6e69506f7274616c3a206e6f20786d73677360601b6044820152606401610c56565b6001600160401b03808216600090815260096020526040902054166112a35760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a20756e6b6e6f776e2076616c2073657400000000006044820152606401610c56565b6112ab612b21565b6001600160401b0316816001600160401b0316101561130c5760405162461bcd60e51b815260206004820152601760248201527f4f6d6e69506f7274616c3a206f6c642076616c207365740000000000000000006044820152606401610c56565b611350873561131f6101608a018a614306565b6001600160401b038086166000908152600a6020908152604080832060099092529091205490911660026003612b71565b6113945760405162461bcd60e51b81526020600482015260156024820152744f6d6e69506f7274616c3a206e6f2071756f72756d60581b6044820152606401610c56565b6113bd87358386866113aa6101208d018d614306565b6113b86101408f018f614306565b612d25565b6114095760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c69642070726f6f66000000000000006044820152606401610c56565b60005b83811015611449576114418386868481811061142a5761142a61434f565b905060200281019061143c9190614365565b612da0565b60010161140c565b505050505061147760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156115675760008481526020908190206040805180820182526002860290920180546001600160401b0316835260018101805483518187028101870190945280845293949193858301939283018282801561154f57602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b03168152602001906008019060208260070104928301926001038202915080841161150c5790505b505050505081525050815260200190600101906114a0565b50505050905090565b611578611e57565b61158260006132c9565b565b61158c611e57565b6115a3600080516020614a38833981519152611f97565b6040517f5f335a4032d4cfb6aca7835b0c2225f36d4d9eaa4ed43ee59ed537e02dff6b3990600090a1565b6115d6611e57565b6115de61333a565b6040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b3330146116505760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b6044820152606401610c56565b600154600b546001600160401b03908116600160401b90920416146116b15760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610c56565b600b54600160401b90046001600160a01b0316156117115760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610c56565b611477838383612583565b600254604051632376548f60e21b81526000916001600160a01b031690638dd9523c906117539088908890889088906004016143ae565b602060405180830381865afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179491906143e6565b95945050505050565b6117a5611e57565b611477838383612927565b6117b8611e57565b60405147906001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117f0573d6000803e3d6000fd5b50816001600160a01b03167f9dc46f23cfb5ddcad0ae7ea2be38d47fec07bb9382ec7e564efc69e036dd66ce8260405161182c91815260200190565b60405180910390a25050565b611840611e57565b610bb18161222f565b611851611e57565b61186c610bd7600080516020614a9883398151915283611f4e565b6040516001600160401b038216907fab78810a0515df65f9f10bfbcb92d03d5df71d9fd3b9414e9ad831a5117d6daa90600090a250565b60006118f4600080516020614a58833981519152600052600080516020614a788339815191526020527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1690565b905090565b611901611e57565b610bb18161243f565b611912611e57565b610bb18161238b565b611923611e57565b610bb1816124e3565b600080516020614a388339815191528661194a826110868484611f4e565b1561198c5760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610c56565b6001600160401b03881660009081526005602052604090205460ff166119f45760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610c56565b6001600160a01b038616611a4a5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610c56565b6000546001600160401b036501000000000090910481169084161115611ab25760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610c56565b6000546001600160401b03600160681b90910481169084161015611b185760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610c56565b6000546301000000900461ffff16841115611b755760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206461746120746f6f206c617267650000000000006044820152606401610c56565b60ff808816600081815260046020526040902054909116611bd85760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642073686172640000006044820152606401610c56565b6000611be68a88888861171c565b905080341015611c385760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610c56565b6001600160401b03808b166000908152600660209081526040808320868516845290915281208054600193919291611c7291859116614415565b82546101009290920a6001600160401b038181021990931691831602179091558b811660008181526006602090815260408083208886168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90611cf29033908e908e908e908e908b9061443c565b60405180910390a450505050505050505050565b611d0e611e57565b611d2e611d29600080516020614a9883398151915283611f4e565b612a31565b6040516001600160401b038216907fc551305d9bd408be4327b7f8aba28b04ccf6b6c76925392d195ecf9cc764294d90600090a250565b611d6d611e57565b611d84600080516020614a98833981519152612a31565b6040517f2cb9d71d4c31860b70e9b707c69aa2f5953e03474f00cfcfff205c4745f8287590600090a1565b611db7611e57565b6114778383836128b2565b611dca611e57565b611de5611d29600080516020614a3883398151915283611f4e565b6040516001600160401b038216907f1ed9223556fb0971076c30172f1f00630efd313b6a05290a562aef95928e712590600090a250565b611e24611e57565b6001600160a01b038116611e4e57604051631e4fbdf760e01b815260006004820152602401610c56565b610bb1816132c9565b33611e897f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146115825760405163118cdaa760e01b8152336004820152602401610c56565b60008160ff1611611f055760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206375746f66660000000000006044820152606401610c56565b6000805460ff191660ff83169081179091556040519081527f1683dc51426224f6e37a3b41dd5849e2db1bfe22366d1d913fa0ef6f757e828f906020015b60405180910390a150565b60008282604051602001611f7992919091825260c01b6001600160c01b031916602082015260280190565b60405160208183030381529060405280519060200120905092915050565b6000818152600080516020614a78833981519152602081905260409091205460ff1615611ff95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c56565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b612045613351565b3660005b828110156121b1578383828181106120635761206361434f565b90506020028101906120759190614487565b6003805460018101825560009190915290925082906002027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016120b98282614550565b50506120c24690565b6001600160401b03166120d86020840184613df9565b6001600160401b031614612126576001600560006120f96020860186613df9565b6001600160401b031681526020810191909152604001600020805460ff19169115159190911790556121a9565b60005b6121366020840184614306565b90508110156121a7576001600460006121526020870187614306565b858181106121625761216261434f565b90506020020160208101906121779190613df9565b6001600160401b031681526020810191909152604001600020805460ff1916911515919091179055600101612129565b505b600101612049565b50505050565b600080516020614a588339815191526000908152600080516020614a7883398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff168061108b5750600092835260205250604090205460ff1690565b612226613450565b610bb181613499565b6001600160a01b0381166122855760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206665654f7261636c650000006044820152606401610c56565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd97bdb0db82b52a85aa07f8da78033b1d6e159d94f1e3cbd4109d946c3bcfd3290602001611f43565b6000816001600160401b03161161232c5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782067617300000000006044820152606401610c56565b600080546cffffffffffffffff00000000001916650100000000006001600160401b038416908102919091179091556040519081527f1153561ac5effc2926ba6c612f86a397c997bc43dfbfc718da08065be0c5fe4d90602001611f43565b6000816001600160401b0316116123e45760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d696e2067617300000000006044820152606401610c56565b6000805467ffffffffffffffff60681b1916600160681b6001600160401b038416908102919091179091556040519081527f8c852a6291aa436654b167353bca4a4b0c3d024c7562cb5082e7c869bddabf3e90602001611f43565b60008161ffff16116124935760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610c56565b6000805464ffff0000001916630100000061ffff8416908102919091179091556040519081527f65923e04419dc810d0ea08a94a7f608d4c4d949818d95c3788f895e575dd206490602001611f43565b60008161ffff16116125375760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610c56565b6000805462ffff00191661010061ffff8416908102919091179091556040519081527f620bbea084306b66a8cc6b5b63830d6b3874f9d2438914e259ffd5065c33f7b090602001611f43565b80806125d15760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f2076616c696461746f7273000000000000006044820152606401610c56565b6001600160401b0380851660009081526009602052604090205416156126395760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c207365740000006044820152606401610c56565b604080518082018252600080825260208083018290526001600160401b0388168252600a9052918220825b848110156128115786868281811061267e5761267e61434f565b9050604002018036038101906126949190614678565b80519093506001600160a01b03166126ee5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f2076616c696461746f720000006044820152606401610c56565b600083602001516001600160401b03161161274b5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f207a65726f20706f776572000000000000006044820152606401610c56565b82516001600160a01b03166000908152602083905260409020546001600160401b0316156127bb5760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c696461746f72006044820152606401610c56565b60208301516127ca9085614415565b60208481015185516001600160a01b03166000908152918590526040909120805467ffffffffffffffff19166001600160401b039092169190911790559350600101612664565b506001600160401b038781166000818152600960205260408120805467ffffffffffffffff191687851617905554600160a81b90049091161015612875576000805467ffffffffffffffff60a81b1916600160a81b6001600160401b038a16021790555b6040516001600160401b038816907f3a7c2f997a87ba92aedaecd1127f4129cae1283e2809ebf5304d321b943fd10790600090a250505050505050565b6001600160401b03838116600081815260076020908152604080832087861680855290835292819020805467ffffffffffffffff191695871695861790555193845290927f8647aae68c8456a1dcbfaf5eaadc94278ae423526d3f09c7b972bff7355d55c791015b60405180910390a3505050565b6001600160401b03838116600081815260086020908152604080832087861680855290835292819020805467ffffffffffffffff191695871695861790555193845290927fe070f08cae8464c91238e8cbea64ccee5e7b48dd79a843f144e3721ee6bdd9b5910161291a565b611582600080516020614a58833981519152612a31565b600080516020614a588339815191526000908152600080516020614a7883398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680612a10575060008481526020829052604090205460ff165b80612a29575060008381526020829052604090205460ff165b949350505050565b6000818152600080516020614a78833981519152602081905260409091205460ff16612a965760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c56565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901612b1b57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000805460ff8116600160a81b9091046001600160401b031611612b455750600190565b600054612b669060ff811690600160a81b90046001600160401b03166146d4565b6118f4906001614415565b6000803660005b88811015612d1257898982818110612b9257612b9261434f565b9050602002810190612ba49190614487565b91508015612c5857368a8a612bba6001856146f4565b818110612bc957612bc961434f565b9050602002810190612bdb9190614487565b9050612bea60208201826141f5565b6001600160a01b0316612c0060208501856141f5565b6001600160a01b031611612c565760405162461bcd60e51b815260206004820152601f60248201527f51756f72756d3a2073696773206e6f7420646564757065642f736f72746564006044820152606401610c56565b505b612c62828c6134a1565b612cae5760405162461bcd60e51b815260206004820152601960248201527f51756f72756d3a20696e76616c6964207369676e6174757265000000000000006044820152606401610c56565b876000612cbe60208501856141f5565b6001600160a01b03168152602081019190915260400160002054612ceb906001600160401b031684614415565b9250612cf983888888613515565b15612d0a5760019350505050612d1a565b600101612b78565b506000925050505b979650505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050612d6086868686612d5b8d8d61354d565b61361a565b81600081518110612d7357612d7361434f565b602002602001018181525050612d92818b612d8d8c61387b565b613893565b9a9950505050505050505050565b6000612daf6020840184613df9565b90506000612dc06020840184613df9565b90506000612dd46040850160208601613df9565b90506000612de86060860160408701613df9565b9050466001600160401b0316836001600160401b03161480612e1157506001600160401b038316155b612e5d5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e67206465737420636861696e000000006044820152606401610c56565b6001600160401b0380851660009081526007602090815260408083208685168452909152902054612e9091166001614415565b6001600160401b0316816001600160401b031614612ef05760405162461bcd60e51b815260206004820152601860248201527f4f6d6e69506f7274616c3a2077726f6e67206f666673657400000000000000006044820152606401610c56565b612f006060870160408801613dbe565b60ff16600460ff161480612f28575060ff8216612f236060880160408901613dbe565b60ff16145b612f745760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e6720636f6e66206c6576656c000000006044820152606401610c56565b612f846080870160608801613df9565b6001600160401b03858116600090815260086020908152604080832087851684529091529020549181169116101561300457612fc66080870160608801613df9565b6001600160401b03858116600090815260086020908152604080832087851684529091529020805467ffffffffffffffff1916929091169190911790555b6001600160401b03808516600090815260076020908152604080832086851684529091528120805460019391929161303e91859116614415565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550306001600160a01b031685608001602081019061307f91906141f5565b6001600160a01b03160361315957806001600160401b0316826001600160401b0316856001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b6000336000604051602401613112906020808252601e908201527f4f6d6e69506f7274616c3a206e6f207863616c6c20746f20706f7274616c0000604082015260600190565b60408051601f198184030181529181526020820180516001600160e01b031662461bcd60e51b179052516131499493929190614757565b60405180910390a4505050505050565b604080518082019091526001600160401b03851681526020810161318360808801606089016141f5565b6001600160a01b039081169091528151600b8054602090940151909216600160401b026001600160e01b03199093166001600160401b039091161791909117905560008080806131d960a08a0160808b016141f5565b6001600160a01b03161461322a576132256131fa60a08a0160808b016141f5565b61320a60e08b0160c08c01613df9565b6001600160401b031661322060a08c018c614793565b6138a9565b61323f565b61323f61323a60a08a018a614793565b613969565b600b80546001600160e01b0319169055919450925090506000836132635782613274565b604051806020016040528060008152505b9050846001600160401b0316866001600160401b0316896001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b85338987604051611cf29493929190614757565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611582600080516020614a58833981519152611f97565b6000805b60035481101561344357600381815481106133725761337261434f565b906000526020600020906002020191506133894690565b82546001600160401b039081169116146133c35781546001600160401b03166000908152600560205260409020805460ff1916905561343b565b60005b6001830154811015613439576000600460008560010184815481106133ed576133ed61434f565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b031683528201929092526040019020805460ff19169115159190911790556001016133c6565b505b600101613355565b50610bb160036000613d23565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661158257604051631afcd79f60e31b815260040160405180910390fd5b611e24613450565b60006134b060208401846141f5565b6001600160a01b0316613504836134ca6020870187614793565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613a0092505050565b6001600160a01b0316149392505050565b600061352d60ff84166001600160401b0386166144c0565b61354360ff84166001600160401b0388166144c0565b1195945050505050565b60606000826001600160401b03811115613569576135696144aa565b604051908082528060200260200182016040528015613592578160200160208202803683370190505b50905060005b83811015613612576135ed60028686848181106135b7576135b761434f565b90506020028101906135c99190614365565b6040516020016135d9919061481e565b604051602081830303815290604052613a2a565b8282815181106135ff576135ff61434f565b6020908102919091010152600101613598565b509392505050565b8051600090858461362c8160016148ed565b61363683856148ed565b1461365457604051631a8a024960e11b815260040160405180910390fd5b6000816001600160401b0381111561366e5761366e6144aa565b604051908082528060200260200182016040528015613697578160200160208202803683370190505b5090506000806000805b858110156137e45760008885106136dc5785846136bd81614900565b9550815181106136cf576136cf61434f565b6020026020010151613702565b8a856136e781614900565b9650815181106136f9576136f961434f565b60200260200101515b905060008d8d848181106137185761371861434f565b905060200201602081019061372d9190614919565b61375a578f8f8561373d81614900565b965081811061374e5761374e61434f565b905060200201356137b1565b89861061378b57868561376c81614900565b96508151811061377e5761377e61434f565b60200260200101516137b1565b8b8661379681614900565b9750815181106137a8576137a861434f565b60200260200101515b90506137bd8282613a61565b8784815181106137cf576137cf61434f565b602090810291909101015250506001016136a1565b5084156138365785811461380b57604051631a8a024960e11b815260040160405180910390fd5b8360018603815181106138205761382061434f565b6020026020010151975050505050505050611794565b861561384f57886000815181106138205761382061434f565b8c8c60008181106138625761386261434f565b9050602002013597505050505050505095945050505050565b6000610d836001836040516020016135d9919061493b565b6000826138a08584613a90565b14949350505050565b600060606000805a905060008061392c8960008060019054906101000a900461ffff168b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e6001600160a01b0316613acb90949392919063ffffffff16565b9150915060005a9050613940603f8b6149c0565b811161394857fe5b828261395483876146f4565b965096509650505050505b9450945094915050565b600060606000805a9050600080306001600160a01b031688886040516139909291906149e2565b6000604051808303816000865af19150503d80600081146139cd576040519150601f19603f3d011682016040523d82523d6000602084013e6139d2565b606091505b50915091505a6139e290846146f4565b9250816139f157805160208201fd5b909450925090505b9250925092565b600080600080613a108686613b55565b925092509250613a208282613b9f565b5090949350505050565b60008282604051602001613a3f9291906149f2565b60408051601f1981840301815282825280516020918201209083015201611f79565b6000818310613a7d57600082815260208490526040902061108b565b600083815260208390526040902061108b565b600081815b845181101561361257613ac182868381518110613ab457613ab461434f565b6020026020010151613a61565b9150600101613a95565b6000606060008060008661ffff166001600160401b03811115613af057613af06144aa565b6040519080825280601f01601f191660200182016040528015613b1a576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115613b3b578692505b828152826000602083013e90999098509650505050505050565b60008060008351604103613b8f5760208401516040850151606086015160001a613b8188828585613c58565b9550955095505050506139f9565b50508151600091506002906139f9565b6000826003811115613bb357613bb3614a21565b03613bbc575050565b6001826003811115613bd057613bd0614a21565b03613bee5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115613c0257613c02614a21565b03613c235760405163fce698f760e01b815260048101829052602401610c56565b6003826003811115613c3757613c37614a21565b03610d2a576040516335e2f38360e21b815260048101829052602401610c56565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613c93575060009150600390508261395f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613ce7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d135750600092506001915082905061395f565b9760009750879650945050505050565b5080546000825560020290600052602060002090810190610bb191905b80821115613d6f57805467ffffffffffffffff191681556000613d666001830182613d73565b50600201613d40565b5090565b508054600082556003016004900490600052602060002090810190610bb191905b80821115613d6f5760008155600101613d94565b803560ff81168114613db957600080fd5b919050565b600060208284031215613dd057600080fd5b61108b82613da8565b6001600160401b0381168114610bb157600080fd5b8035613db981613dd9565b600060208284031215613e0b57600080fd5b813561108b81613dd9565b60008060208385031215613e2957600080fd5b82356001600160401b0380821115613e4057600080fd5b818501915085601f830112613e5457600080fd5b813581811115613e6357600080fd5b8660208260051b8501011115613e7857600080fd5b60209290920196919550909350505050565b600060208284031215613e9c57600080fd5b5035919050565b600060208284031215613eb557600080fd5b81356001600160401b03811115613ecb57600080fd5b82016101a0818503121561108b57600080fd5b60008060408385031215613ef157600080fd5b8235613efc81613dd9565b91506020830135613f0c81613dd9565b809150509250929050565b60008060408385031215613f2a57600080fd5b823591506020830135613f0c81613dd9565b80356001600160a01b0381168114613db957600080fd5b60008060408385031215613f6657600080fd5b8235613f7181613dd9565b9150613f7f60208401613f3c565b90509250929050565b600060208284031215613f9a57600080fd5b81356001600160401b03811115613fb057600080fd5b8201610180818503121561108b57600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b8481101561406557898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b8084101561404f57845183168252938c019360019390930192908c019061402d565b50988b0198965050509288019250600101613fed565b50919998505050505050505050565b60008060006040848603121561408957600080fd5b833561409481613dd9565b925060208401356001600160401b03808211156140b057600080fd5b818601915086601f8301126140c457600080fd5b8135818111156140d357600080fd5b8760208260061b85010111156140e857600080fd5b6020830194508093505050509250925092565b60008083601f84011261410d57600080fd5b5081356001600160401b0381111561412457600080fd5b60208301915083602082850101111561413c57600080fd5b9250929050565b6000806000806060858703121561415957600080fd5b843561416481613dd9565b935060208501356001600160401b0381111561417f57600080fd5b61418b878288016140fb565b909450925050604085013561419f81613dd9565b939692955090935050565b6000806000606084860312156141bf57600080fd5b83356141ca81613dd9565b925060208401356141da81613dd9565b915060408401356141ea81613dd9565b809150509250925092565b60006020828403121561420757600080fd5b61108b82613f3c565b60006020828403121561422257600080fd5b813561ffff8116811461108b57600080fd5b60008060008060008060a0878903121561424d57600080fd5b863561425881613dd9565b955061426660208801613da8565b945061427460408801613f3c565b935060608701356001600160401b0381111561428f57600080fd5b61429b89828a016140fb565b90945092505060808701356142af81613dd9565b809150509295509295509295565b6000808335601e198436030181126142d457600080fd5b8301803591506001600160401b038211156142ee57600080fd5b6020019150600681901b360382131561413c57600080fd5b6000808335601e1984360301811261431d57600080fd5b8301803591506001600160401b0382111561433757600080fd5b6020019150600581901b360382131561413c57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560de1983360301811261437b57600080fd5b9190910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b038087168352606060208401526143d2606084018688614385565b915080841660408401525095945050505050565b6000602082840312156143f857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03818116838216019080821115614435576144356143ff565b5092915050565b6001600160a01b0387811682528616602082015260a0604082018190526000906144699083018688614385565b6001600160401b039490941660608301525060800152949350505050565b60008235603e1983360301811261437b57600080fd5b60008135610d8381613dd9565b634e487b7160e01b600052604160045260246000fd5b8082028115828204841417610d8357610d836143ff565b600160401b8211156144eb576144eb6144aa565b8054828255808310156114775760008260005260206000206003850160021c81016003840160021c8201915060188660031b16801561453b576000198083018054828460200360031b1c16815550505b505b818110156110225782815560010161453d565b813561455b81613dd9565b815467ffffffffffffffff19166001600160401b0391821617825560019081830160208581013536879003601e1901811261459557600080fd5b86018035848111156145a657600080fd5b6020820194508060051b36038513156145be57600080fd5b6145c881856144d7565b60009384526020842093600282901c92505b82811015614631576000805b6004811015614625576146186145fb8961449d565b6001600160401b03908116600684901b90811b91901b1984161790565b97860197915088016145e6565b508582015586016145da565b50600319811680820381831461466c576000805b82811015614666576146596145fb8a61449d565b9887019891508901614645565b50868501555b50505050505050505050565b60006040828403121561468a57600080fd5b604051604081018181106001600160401b03821117156146ac576146ac6144aa565b6040526146b883613f3c565b815260208301356146c881613dd9565b60208201529392505050565b6001600160401b03828116828216039080821115614435576144356143ff565b81810381811115610d8357610d836143ff565b60005b8381101561472257818101518382015260200161470a565b50506000910152565b60008151808452614743816020860160208601614707565b601f01601f19169290920160200192915050565b8481526001600160a01b038416602082015282151560408201526080606082018190526000906147899083018461472b565b9695505050505050565b6000808335601e198436030181126147aa57600080fd5b8301803591506001600160401b038211156147c457600080fd5b60200191503681900382131561413c57600080fd5b6000808335601e198436030181126147f057600080fd5b83016020810192503590506001600160401b0381111561480f57600080fd5b80360382131561413c57600080fd5b602081526000823561482f81613dd9565b6001600160401b0380821660208501526020850135915061484f82613dd9565b80821660408501526040850135915061486782613dd9565b166060838101919091526001600160a01b0390614885908501613f3c565b16608083015261489760808401613f3c565b6001600160a01b03811660a0840152506148b460a08401846147d9565b60e060c08501526148ca61010085018284614385565b9150506148d960c08501613dee565b6001600160401b03811660e0850152613612565b80820180821115610d8357610d836143ff565b600060018201614912576149126143ff565b5060010190565b60006020828403121561492b57600080fd5b8135801515811461108b57600080fd5b60c08101823561494a81613dd9565b6001600160401b03908116835260208401359061496682613dd9565b808216602085015260ff61497c60408701613da8565b1660408501526060850135915061499282613dd9565b90811660608401526080840135906149a982613dd9565b16608083015260a092830135929091019190915290565b6000826149dd57634e487b7160e01b600052601260045260246000fd5b500490565b8183823760009101908152919050565b60ff60f81b8360f81b16815260008251614a13816001850160208701614707565b919091016001019392505050565b634e487b7160e01b600052602160045260246000fdfea06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6876e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9ff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400feccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1ea2646970667358221220c69186e7f7ad44a0e0b553ce4822187af916cecd868070f19c6ef9977873292064736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6118a3806100df6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101395780638da5cb5b14610141578063ada867981461017b578063c4d66de81461019b578063f2fde38b146101ae57600080fd5b80630f560cd7146100a357806321d93090146100c157806347153cbf146100ec578063473d04521461010157806352d482e214610126575b600080fd5b6100ab6101c1565b6040516100b891906110e6565b60405180910390f35b6100d46100cf36600461114a565b610462565b6040516001600160401b0390911681526020016100b8565b6100ff6100fa366004611163565b61049f565b005b61011461010f3660046111b9565b6104b3565b6040516100b8969594939291906111d6565b6100ff610134366004611221565b610597565b6100ff6105ff565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016100b8565b61018e6101893660046111b9565b610613565b6040516100b89190611295565b6100ff6101a93660046112bd565b6107d8565b6100ff6101bc3660046112bd565b6108e6565b60008054606091906001600160401b038111156101e0576101e06112da565b60405190808252806020026020018201604052801561024957816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282526000199092019101816101fe5790505b50905060005b6000546001600160401b038216101561045c576001600080836001600160401b031681548110610281576102816112f0565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b039081168452838201949094526040928301909120825160e08101845281546001600160a01b0381168252600160a01b9004851681840152600182015480861682860152600160401b810486166060830152600160801b90049094166080850152600281018054845181850281018501909552808552919360a086019390929083018282801561038857602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116103455790505b505050505081526020016003820180546103a190611306565b80601f01602080910402602001604051908101604052809291908181526020018280546103cd90611306565b801561041a5780601f106103ef5761010080835404028352916020019161041a565b820191906000526020600020905b8154815290600101906020018083116103fd57829003601f168201915b50505050508152505082826001600160401b03168151811061043e5761043e6112f0565b602002602001018190525080806104549061133a565b91505061024f565b50919050565b6000818154811061047257600080fd5b9060005260206000209060049182820401919006600802915054906101000a90046001600160401b031681565b6104a7610926565b6104b081610981565b50565b60016020819052600091825260409091208054918101546003820180546001600160a01b038516946001600160401b03600160a01b90910481169484821694600160401b8104831694600160801b9091049092169290919061051490611306565b80601f016020809104026020016040519081016040528092919081815260200182805461054090611306565b801561058d5780601f106105625761010080835404028352916020019161058d565b820191906000526020600020905b81548152906001019060200180831161057057829003601f168201915b5050505050905086565b61059f610926565b60005b6001600160401b0381168211156105fa576105e88383836001600160401b03168181106105d1576105d16112f0565b90506020028101906105e3919061136e565b610981565b806105f28161133a565b9150506105a2565b505050565b610607610926565b6106116000610ef6565b565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c08101919091526001600160401b03808316600090815260016020818152604092839020835160e08101855281546001600160a01b0381168252600160a01b90048616818401529281015480861684860152600160401b810486166060850152600160801b9004909416608083015260028401805484518184028101840190955280855292949360a0860193909283018282801561073657602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116106f35790505b5050505050815260200160038201805461074f90611306565b80601f016020809104026020016040519081016040528092919081815260200182805461077b90611306565b80156107c85780601f1061079d576101008083540402835291602001916107c8565b820191906000526020600020905b8154815290600101906020018083116107ab57829003601f168201915b5050505050815250509050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561081d5750825b90506000826001600160401b031660011480156108395750303b155b905081158015610847575080155b156108655760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561088f57845460ff60401b1916600160401b1785555b61089886610f67565b83156108de57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6108ee610926565b6001600160a01b03811661091d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6104b081610ef6565b336109587f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106115760405163118cdaa760e01b8152336004820152602401610914565b600061099060208301836112bd565b6001600160a01b0316036109e65760405162461bcd60e51b815260206004820152601960248201527f506f7274616c52656769737472793a207a65726f2061646472000000000000006044820152606401610914565b60006109f860408301602084016111b9565b6001600160401b031611610a4e5760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a207a65726f20636861696e2049440000006044820152606401610914565b6000610a6060808301606084016111b9565b6001600160401b031611610ab65760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a207a65726f20696e74657276616c0000006044820152606401610914565b677fffffffffffffff610acf60a08301608084016111b9565b6001600160401b03161115610b265760405162461bcd60e51b815260206004820181905260248201527f506f7274616c52656769737472793a20706572696f6420746f6f206c617267656044820152606401610914565b6000610b3860a08301608084016111b9565b6001600160401b031611610b8e5760405162461bcd60e51b815260206004820152601b60248201527f506f7274616c52656769737472793a207a65726f20706572696f6400000000006044820152606401610914565b6000610b9d60c083018361138e565b905011610bec5760405162461bcd60e51b815260206004820152601760248201527f506f7274616c52656769737472793a206e6f206e616d650000000000000000006044820152606401610914565b6000610bfb60a08301836113db565b905011610c4a5760405162461bcd60e51b815260206004820152601960248201527f506f7274616c52656769737472793a206e6f20736861726473000000000000006044820152606401610914565b6000600181610c5f60408501602086016111b9565b6001600160401b031681526020810191909152604001600020546001600160a01b031614610ccf5760405162461bcd60e51b815260206004820152601b60248201527f506f7274616c52656769737472793a20616c72656164792073657400000000006044820152606401610914565b60005b610cdf60a08301836113db565b9050816001600160401b03161015610dae576000610d0060a08401846113db565b836001600160401b0316818110610d1957610d196112f0565b9050602002016020810190610d2e91906111b9565b90508060ff16816001600160401b0316148015610d4f5750610d4f81610f78565b610d9b5760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a20696e76616c69642073686172640000006044820152606401610914565b5080610da68161133a565b915050610cd2565b508060016000610dc460408401602085016111b9565b6001600160401b031681526020810191909152604001600020610de7828261168b565b5060009050610dfc60408301602084016111b9565b815460018101835560009283526020928390206004820401805460039092166008026101000a6001600160401b03818102199093169390921691909102919091179055610e4b908201826112bd565b6001600160a01b0316610e6460408301602084016111b9565b6001600160401b03167fb08d1911b978b0c040fa5e01711aa326770a97c5f00039d45e7ae8dec7409e73610e9e60608501604086016111b9565b610eae60808601606087016111b9565b610ebe60a08701608088016111b9565b610ecb60a08801886113db565b610ed860c08a018a61138e565b604051610eeb97969594939291906117d4565b60405180910390a350565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610f6f610f95565b6104b081610fde565b600060ff821660011480610f8f575060ff82166004145b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661061157604051631afcd79f60e31b815260040160405180910390fd5b6108ee610f95565b6000815180845260005b8181101561100c57602081850181015186830182015201610ff0565b506000602082860101526020601f19601f83011685010191505092915050565b600060e0830160018060a01b0383511684526020808401516001600160401b03808216602088015280604087015116604088015280606087015116606088015280608087015116608088015260a0860151915060e060a088015283825180865261010089019150602084019550600093505b808410156110c05785518316825294840194600193909301929084019061109e565b5060c0870151945087810360c08901526110da8186610fe6565b98975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561113d57603f1988860301845261112b85835161102c565b9450928501929085019060010161110f565b5092979650505050505050565b60006020828403121561115c57600080fd5b5035919050565b60006020828403121561117557600080fd5b81356001600160401b0381111561118b57600080fd5b820160e0818503121561119d57600080fd5b9392505050565b6001600160401b03811681146104b057600080fd5b6000602082840312156111cb57600080fd5b813561119d816111a4565b6001600160a01b03871681526001600160401b038681166020830152858116604083015284811660608301528316608082015260c060a082018190526000906110da90830184610fe6565b6000806020838503121561123457600080fd5b82356001600160401b038082111561124b57600080fd5b818501915085601f83011261125f57600080fd5b81358181111561126e57600080fd5b8660208260051b850101111561128357600080fd5b60209290920196919550909350505050565b60208152600061119d602083018461102c565b6001600160a01b03811681146104b057600080fd5b6000602082840312156112cf57600080fd5b813561119d816112a8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061131a57607f821691505b60208210810361045c57634e487b7160e01b600052602260045260246000fd5b60006001600160401b0380831681810361136457634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6000823560de1983360301811261138457600080fd5b9190910192915050565b6000808335601e198436030181126113a557600080fd5b8301803591506001600160401b038211156113bf57600080fd5b6020019150368190038213156113d457600080fd5b9250929050565b6000808335601e198436030181126113f257600080fd5b8301803591506001600160401b0382111561140c57600080fd5b6020019150600581901b36038213156113d457600080fd5b60008135610f8f816111a4565b5b818110156114465760008155600101611432565b5050565b600160401b82111561145e5761145e6112da565b8054828255808310156105fa578160005260206000206003840160021c810160188560031b1680156114a1576000198083018054828460200360031b1c16815550505b506114b46003840160021c830182611431565b5050505050565b6001600160401b038311156114d2576114d26112da565b6114dc838261144a565b60008181526020902082908460021c60005b8181101561154a576000805b600481101561153d5761152c61150f87611424565b6001600160401b03908116600684901b90811b91901b1984161790565b6020969096019591506001016114fa565b50838201556001016114ee565b506003198616808703818814611589576000805b828110156115835761157261150f88611424565b60209790970196915060010161155e565b50848401555b5050505050505050565b601f8211156105fa57806000526020600020601f840160051c810160208510156115ba5750805b6114b4601f850160051c830182611431565b6001600160401b038311156115e3576115e36112da565b6115f7836115f18354611306565b83611593565b6000601f84116001811461162b57600085156116135750838201355b600019600387901b1c1916600186901b1783556114b4565b600083815260209020601f19861690835b8281101561165c578685013582556020948501946001909201910161163c565b50868210156116795760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135611696816112a8565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356116c2816111a4565b6001600160e01b03199190911690911760a09190911b67ffffffffffffffff60a01b16178155600181016117196116fb60408501611424565b825467ffffffffffffffff19166001600160401b0391909116178255565b61175a61172860608501611424565b82546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff000000000000000016178255565b61179561176960808501611424565b82805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b16919091179055565b506117a360a08301836113db565b6117b18183600286016114bb565b50506117c060c083018361138e565b6117ce8183600386016115cc565b50505050565b600060a082016001600160401b03808b1684526020818b1681860152818a16604086015260a060608601528288845260c08601905089935060005b89811015611836578435611822816111a4565b84168252938201939082019060010161180f565b5085810360808701528681528688838301376000818801830152601f909601601f19169095019094019a995050505050505050505056fea2646970667358221220255fd5ad41605f03b0fdee0c74365d3bd6155928b8705f1dbfd81bd803ec801064736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6117e5806100df6000396000f3fe6080604052600436106101665760003560e01c80637adbf973116100d1578063a67265b11161008a578063dbb602fd11610064578063dbb602fd14610440578063df18e04714610460578063ed1bd76c1461048d578063f2fde38b146104ad57600080fd5b8063a67265b1146103da578063c4918b4e146103fa578063ca48b20b1461041057600080fd5b80637adbf973146103135780637dc0d1d0146103335780638456cb59146103535780638aec67fe146103685780638da5cb5b1461037d578063a3dace5d146103ba57600080fd5b80634b260981116101235780634b2609811461023657806351cff8d91461024c57806355e0af6b1461026c5780635c975abb1461029b578063715018a6146102cb57806374eeb847146102e057600080fd5b806308a957a91461016b5780630e6e91d81461018d578063285aaa20146101ad57806339acf9f1146101d65780633f4ba83a1461020e5780634ae809ee14610223575b600080fd5b34801561017757600080fd5b5061018b610186366004611586565b6104cd565b005b34801561019957600080fd5b5061018b6101a83660046115af565b6104e1565b3480156101b957600080fd5b506101c360355481565b6040519081526020015b60405180910390f35b3480156101e257600080fd5b506000546101f6906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b34801561021a57600080fd5b5061018b6104f2565b6101c3610231366004611586565b610504565b34801561024257600080fd5b506101c36103e881565b34801561025857600080fd5b5061018b610267366004611586565b61071c565b34801561027857600080fd5b5061028c6102873660046115af565b6107cb565b6040516101cd9392919061160e565b3480156102a757600080fd5b506000805160206117908339815191525460ff1660405190151581526020016101cd565b3480156102d757600080fd5b5061018b6108ad565b3480156102ec57600080fd5b5060005461030190600160a01b900460ff1681565b60405160ff90911681526020016101cd565b34801561031f57600080fd5b5061018b61032e366004611586565b6108bf565b34801561033f57600080fd5b506032546101f6906001600160a01b031681565b34801561035f57600080fd5b5061018b6108d0565b34801561037457600080fd5b506101c36108e0565b34801561038957600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101f6565b3480156103c657600080fd5b5061018b6103d53660046115af565b61094e565b3480156103e657600080fd5b5061018b6103f5366004611638565b61095f565b34801561040657600080fd5b506101c360345481565b34801561041c57600080fd5b50610427620222e081565b60405167ffffffffffffffff90911681526020016101cd565b34801561044c57600080fd5b506033546101f6906001600160a01b031681565b34801561046c57600080fd5b506101c361047b366004611586565b60366020526000908152604090205481565b34801561049957600080fd5b506101c36104a83660046115af565b610adf565b3480156104b957600080fd5b5061018b6104c8366004611586565b610b2e565b6104d5610b69565b6104de81610bc4565b50565b6104e9610b69565b6104de81610c6f565b6104fa610b69565b610502610cec565b565b600061050e610d46565b60006105186108e0565b90508034101561056f5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e6947617350756d703a20696e73756666696369656e742066656500000060448201526064015b60405180910390fd5b600061057b8234611666565b90506034548111156105c75760405162461bcd60e51b815260206004820152601560248201527409edadcd28ec2e6a0eadae07440deeccae440dac2f605b1b6044820152606401610566565b60006103e8603554836105da9190611679565b6105e49190611690565b90506105f08183611666565b915060006105fd83610d77565b6001600160a01b03871660009081526036602052604081208054929350839290919061062a9084906116b2565b909155506106a7905061063b610e8d565b6033546001600160a01b038981166000818152603660205260409081902054905160248101929092526044820152600192919091169060640160408051601f198184030181529190526020810180516001600160e01b0316631decdcfb60e11b179052620222e0610f0a565b506001600160a01b038616600081815260366020908152604091829020548251908152349181019190915290810186905260608101849052608081018390527f7737fe59897f758714c24688a6470bb05235f01af1f4293edd0c290e651dd8319060a00160405180910390a295945050505050565b610724610b69565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610771576040519150601f19603f3d011682016040523d82523d6000602084013e610776565b606091505b50509050806107c75760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e6947617350756d703a207769746864726177206661696c6564000000006044820152606401610566565b5050565b600080606060006107da6108e0565b90508085101561081957505060408051808201909152601081526f696e73756666696369656e742066656560801b6020820152600092508291506108a6565b6108238186611666565b945060345485111561085c5750506040805180820190915260088152670deeccae440dac2f60c31b6020820152600092508291506108a6565b6103e86035548661086d9190611679565b6108779190611690565b6108819086611666565b945061088c85610d77565b600160405180602001604052806000815250935093509350505b9193909250565b6108b5610b69565b6105026000611054565b6108c7610b69565b6104de816110c5565b6108d8610b69565b610502611169565b60006001600160a01b036000196109476108f8610e8d565b6040516001600160a01b03851660248201526044810184905260640160408051601f198184030181529190526020810180516001600160e01b0316631decdcfb60e11b179052620222e06111b2565b9250505090565b610956610b69565b6104de81611230565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109a55750825b905060008267ffffffffffffffff1660011480156109c25750303b155b9050811580156109d0575080155b156109ee5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a1857845460ff60401b1916600160401b1785555b610a30610a2b6040880160208901611586565b6110c5565b610a45610a406020880188611586565b610bc4565b610a528660800135610c6f565b610a5f8660a00135611230565b610a79610a726060880160408901611586565b60016112b6565b610a91610a8c6080880160608901611586565b6112d0565b8315610ad757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600080610aeb836112e1565b90506035546103e8610afd9190611666565b610b096103e883611679565b610b139190611690565b9050610b1d6108e0565b610b2790826116b2565b9392505050565b610b36610b69565b6001600160a01b038116610b6057604051631e4fbdf760e01b815260006004820152602401610566565b6104de81611054565b33610b9b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105025760405163118cdaa760e01b8152336004820152602401610566565b6001600160a01b038116610c1a5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e6947617350756d703a207a65726f2061646472657373000000000000006044820152606401610566565b603380546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd263e3b7583e8397be8a61710d1105cf8c0f111bbac1014d0ec7dbcd1e422f1906020015b60405180910390a150565b60008111610cb75760405162461bcd60e51b815260206004820152601560248201527409edadcd28ec2e6a0eadae07440f4cae4de40dac2f605b1b6044820152606401610566565b60348190556040518181527f343ecf9262f8cafd2e9b0ffdab9f14bf18a17899eeef3e41133e84c354e5298390602001610c64565b610cf46113ad565b600080516020611790833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610c64565b6000805160206117908339815191525460ff16156105025760405163d93c066560e01b815260040160405180910390fd5b6032546000906001600160a01b0316638b7bfd70610d93610e8d565b6040516001600160e01b031960e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc91906116c5565b603260009054906101000a90046001600160a01b03166001600160a01b0316638f9d6ace6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7391906116c5565b610e7d9084611679565b610e879190611690565b92915050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0591906116de565b905090565b60008054604051632376548f60e21b815282916001600160a01b031690638dd9523c90610f3f908a9088908890600401611708565b602060405180830381865afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8091906116c5565b90508047101580610f915750803410155b610fdd5760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e73756666696369656e742066756e647300000000000000006044820152606401610566565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f908390611017908b908b908b908b908b9060040161173f565b6000604051808303818588803b15801561103057600080fd5b505af1158015611044573d6000803e3d6000fd5b50939a9950505050505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b03811661111b5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e6947617350756d703a207a65726f206f7261636c6500000000000000006044820152606401610566565b603280546001600160a01b0319166001600160a01b0383169081179091556040519081527f3f32684a32a11dabdbb8c0177de80aa3ae36a004d75210335b49e544e48cd0aa90602001610c64565b611171610d46565b600080516020611790833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610d2e565b60008054604051632376548f60e21b81526001600160a01b0390911690638dd9523c906111e790879087908790600401611708565b602060405180830381865afa158015611204573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122891906116c5565b949350505050565b6103e881106112815760405162461bcd60e51b815260206004820152601960248201527f4f6d6e6947617350756d703a2070637420746f6f2068696768000000000000006044820152606401610566565b60358190556040518181527f0b3d400288f60ce0f5632cd941b5748faa91ebea844cbe78c5180b7838a0933f90602001610c64565b6112be6113dd565b6112c782611426565b6107c7816114bf565b6112d86113dd565b6104de81611562565b603254604080516347ceb56760e11b815290516000926001600160a01b031691638f9d6ace9160048083019260209291908290030181865afa15801561132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134f91906116c5565b6032546001600160a01b0316638b7bfd70611368610e8d565b6040516001600160e01b031960e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015610e4f573d6000803e3d6000fd5b6000805160206117908339815191525460ff1661050257604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661050257604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b0381166114715760405162461bcd60e51b8152602060048201526012602482015271584170703a206e6f207a65726f206f6d6e6960701b6044820152606401610566565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f4790602001610c64565b6114c88161156a565b6115145760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e76616c696420636f6e66206c6576656c00000000000000006044820152606401610566565b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f8de08a798b4e50b4f351c1eaa91a11530043802be3ffac2df87db0c45a2e848390602001610c64565b610b366113dd565b600060ff821660011480610e87575060ff821660041492915050565b60006020828403121561159857600080fd5b81356001600160a01b0381168114610b2757600080fd5b6000602082840312156115c157600080fd5b5035919050565b6000815180845260005b818110156115ee576020818501810151868301820152016115d2565b506000602082860101526020601f19601f83011685010191505092915050565b838152821515602082015260606040820152600061162f60608301846115c8565b95945050505050565b600060c0828403121561164a57600080fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8757610e87611650565b8082028115828204841417610e8757610e87611650565b6000826116ad57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610e8757610e87611650565b6000602082840312156116d757600080fd5b5051919050565b6000602082840312156116f057600080fd5b815167ffffffffffffffff81168114610b2757600080fd5b600067ffffffffffffffff80861683526060602084015261172c60608401866115c8565b9150808416604084015250949350505050565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a0606084015261177a60a08401866115c8565b9150808416608084015250969550505050505056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a2646970667358221220cc3b1bdeb6e4f7efc1b982591c7d80bbccd23cf9ab913ec6b372fc0ae400303564736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6111fe806100df6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638f9d6ace116100ad578063b48ec86111610071578063b48ec86114610352578063d070415714610385578063d0ebdbe7146103b1578063ee590a53146103c4578063f2fde38b146103d757600080fd5b80638f9d6ace1461030657806393a871881461031057806398563b0314610323578063a34e7abb14610336578063b0e21e8a1461034957600080fd5b8063787dce3d116100f4578063787dce3d146102635780638b7bfd70146102765780638da5cb5b146102b05780638dd9523c146102e05780638df66e34146102f357600080fd5b80632d4634a414610131578063361c019f14610200578063481c6a751461021557806354fd4d5014610240578063715018a61461025b575b600080fd5b6101b261013f366004610e02565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160401b03958616825260038152908490208451928301855280548087168452600160401b9004909516908201526001840154928101929092526002909201549181019190915290565b6040516101f7919060006080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b60405180910390f35b61021361020e366004610e86565b6103ea565b005b600254610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101f7565b60015b6040516001600160401b0390911681526020016101f7565b610213610522565b610213610271366004610f04565b610536565b6102a2610284366004610e02565b6001600160401b031660009081526003602052604090206002015490565b6040519081526020016101f7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610228565b6102a26102ee366004610f1d565b61054a565b600054610243906001600160401b031681565b6102a2620f424081565b61021361031e366004610fb0565b6106d3565b610213610331366004610ff1565b61070b565b610213610344366004610ff1565b61073f565b6102a260015481565b610243610360366004610e02565b6001600160401b03908116600090815260036020526040902054600160401b90041690565b6102a2610393366004610e02565b6001600160401b031660009081526003602052604090206001015490565b6102136103bf36600461101b565b610773565b6102136103d2366004610e02565b6107da565b6102136103e536600461101b565b6107eb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561042f5750825b90506000826001600160401b0316600114801561044b5750303b155b905081158015610459575080155b156104775760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104a157845460ff60401b1916600160401b1785555b6104aa8b610826565b6104b38a610837565b6104bc8961088c565b6104c5886108db565b6104cf8787610910565b831561051557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b61052a610b2b565b6105346000610b86565b565b61053e610b2b565b610547816108db565b50565b6001600160401b038085166000908152600360205260408082208054600160401b900490931682528120600283015460018401549293928491620f424091610592919061104c565b61059c9190611069565b90506000620f4240836002015484600101546105b8919061104c565b6105c29190611069565b9050600082116106195760405162461bcd60e51b815260206004820152601a60248201527f4665654f7261636c6556313a206e6f2066656520706172616d7300000000000060448201526064015b60405180910390fd5b600081116106695760405162461bcd60e51b815260206004820152601a60248201527f4665654f7261636c6556313a206e6f2066656520706172616d730000000000006044820152606401610610565b600061067688601061104c565b9050610682828261104c565b600054849061069b908a906001600160401b031661108b565b6001600160401b03166106ae919061104c565b6001546106bb91906110b2565b6106c591906110b2565b9a9950505050505050505050565b6002546001600160a01b031633146106fd5760405162461bcd60e51b8152600401610610906110c5565b6107078282610910565b5050565b6002546001600160a01b031633146107355760405162461bcd60e51b8152600401610610906110c5565b6107078282610bf7565b6002546001600160a01b031633146107695760405162461bcd60e51b8152600401610610906110c5565b6107078282610ccc565b61077b610b2b565b6001600160a01b0381166107d15760405162461bcd60e51b815260206004820152601c60248201527f4665654f7261636c6556313a206e6f207a65726f206d616e61676572000000006044820152606401610610565b61054781610837565b6107e2610b2b565b6105478161088c565b6107f3610b2b565b6001600160a01b03811661081d57604051631e4fbdf760e01b815260006004820152602401610610565b61054781610b86565b61082e610d95565b61054781610dde565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f60a0f5b9f9e81e98216071b85826681c796256fe3d1354ecb675580fba64fa69906020015b60405180910390a150565b6000805467ffffffffffffffff19166001600160401b0383169081179091556040519081527f6185fbe062d94552cf644f5cb643f583db7b2e7e66fdc4b4c75ff8876a257ba690602001610881565b60018190556040518181527fdb5aafdb29539329e37d4e3ee869bc4031941fd55a5dfc92824fbe34b204e30d90602001610881565b60005b81811015610b2657600083838381811061092f5761092f6110fc565b9050608002018036038101906109459190611112565b9050600081604001511161099b5760405162461bcd60e51b815260206004820152601e60248201527f4665654f7261636c6556313a206e6f207a65726f2067617320707269636500006044820152606401610610565b60008160600151116109eb5760405162461bcd60e51b81526020600482015260196024820152784665654f7261636c6556313a206e6f207a65726f207261746560381b6044820152606401610610565b80516001600160401b0316600003610a155760405162461bcd60e51b815260040161061090611191565b80602001516001600160401b0316600003610a725760405162461bcd60e51b815260206004820152601c60248201527f4665654f7261636c6556313a206e6f207a65726f20706f737473546f000000006044820152606401610610565b80516001600160401b0390811660009081526003602090815260409182902084518154838701519186166fffffffffffffffffffffffffffffffff199091168117600160401b92909616918202959095178255838601516001830181905560608088015160029094018490558551968752938601919091528484015290830152517ff378a0dd98429494eb2e26894562949c4d6e7cef5eb893b1d4c0052078d92fe59181900360800190a150600101610913565b505050565b33610b5d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105345760405163118cdaa760e01b8152336004820152602401610610565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008111610c475760405162461bcd60e51b815260206004820152601e60248201527f4665654f7261636c6556313a206e6f207a65726f2067617320707269636500006044820152606401610610565b816001600160401b0316600003610c705760405162461bcd60e51b815260040161061090611191565b6001600160401b038216600081815260036020908152604091829020600101849055815192835282018390527f3b196e45eaa29099834d3d912ac550e4f3e13fef2e2a998100368e506a44d8ff91015b60405180910390a15050565b60008111610d185760405162461bcd60e51b81526020600482015260196024820152784665654f7261636c6556313a206e6f207a65726f207261746560381b6044820152606401610610565b816001600160401b0316600003610d415760405162461bcd60e51b815260040161061090611191565b6001600160401b038216600081815260036020908152604091829020600201849055815192835282018390527f4b4594c9f06af25bc504eead96f7f0eaa3f1577f8d9b075b236520ec712e13089101610cc0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661053457604051631afcd79f60e31b815260040160405180910390fd5b6107f3610d95565b80356001600160401b0381168114610dfd57600080fd5b919050565b600060208284031215610e1457600080fd5b610e1d82610de6565b9392505050565b80356001600160a01b0381168114610dfd57600080fd5b60008083601f840112610e4d57600080fd5b5081356001600160401b03811115610e6457600080fd5b6020830191508360208260071b8501011115610e7f57600080fd5b9250929050565b60008060008060008060a08789031215610e9f57600080fd5b610ea887610e24565b9550610eb660208801610e24565b9450610ec460408801610de6565b93506060870135925060808701356001600160401b03811115610ee657600080fd5b610ef289828a01610e3b565b979a9699509497509295939492505050565b600060208284031215610f1657600080fd5b5035919050565b60008060008060608587031215610f3357600080fd5b610f3c85610de6565b935060208501356001600160401b0380821115610f5857600080fd5b818701915087601f830112610f6c57600080fd5b813581811115610f7b57600080fd5b886020828501011115610f8d57600080fd5b602083019550809450505050610fa560408601610de6565b905092959194509250565b60008060208385031215610fc357600080fd5b82356001600160401b03811115610fd957600080fd5b610fe585828601610e3b565b90969095509350505050565b6000806040838503121561100457600080fd5b61100d83610de6565b946020939093013593505050565b60006020828403121561102d57600080fd5b610e1d82610e24565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761106357611063611036565b92915050565b60008261108657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190808211156110ab576110ab611036565b5092915050565b8082018082111561106357611063611036565b60208082526018908201527f4665654f7261636c6556313a206e6f74206d616e616765720000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006080828403121561112457600080fd5b604051608081018181106001600160401b038211171561115457634e487b7160e01b600052604160045260246000fd5b60405261116083610de6565b815261116e60208401610de6565b602082015260408301356040820152606083013560608201528091505092915050565b6020808252601d908201527f4665654f7261636c6556313a206e6f207a65726f20636861696e20696400000060408201526060019056fea264697066735822122082524142eaf010a3b766d662e6094d677d259b5d4793c499ebcc81c03e0e011364736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61104b806100df6000396000f3fe6080604052600436106100e15760003560e01c806374eeb8471161007f578063a04feb8611610059578063a04feb8614610282578063bac34036146102a2578063ed116d08146102e8578063f2fde38b1461030857600080fd5b806374eeb847146101fd5780638456cb59146102305780638da5cb5b1461024557600080fd5b80634afa17dd116100bb5780634afa17dd146101615780634e0dc4f0146101815780635c975abb146101b7578063715018a6146101e857600080fd5b806339acf9f1146100ed5780633bd9b9f61461012a5780633f4ba83a1461014c57600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b5060005461010d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013657600080fd5b5061014a610145366004610db3565b610328565b005b34801561015857600080fd5b5061014a6105f5565b34801561016d57600080fd5b5061014a61017c366004610df4565b610607565b34801561018d57600080fd5b5061010d61019c366004610e2d565b6032602052600090815260409020546001600160a01b031681565b3480156101c357600080fd5b50600080516020610ff68339815191525460ff165b6040519015158152602001610121565b3480156101f457600080fd5b5061014a61061d565b34801561020957600080fd5b5060005461021e90600160a01b900460ff1681565b60405160ff9091168152602001610121565b34801561023c57600080fd5b5061014a61062f565b34801561025157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661010d565b34801561028e57600080fd5b5061014a61029d366004610e51565b61063f565b3480156102ae57600080fd5b506102da6102bd366004610ee5565b603360209081526000928352604080842090915290825290205481565b604051908152602001610121565b3480156102f457600080fd5b506101d8610303366004610df4565b6107c9565b34801561031457600080fd5b5061014a610323366004610f13565b61080f565b60005460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190610f30565b8051600180546020909301516001600160a01b0316600160401b026001600160e01b03199093166001600160401b03909216919091179190911790556103d761084d565b6103df61087e565b801561040d575060015461040d906001600160401b03811690600160401b90046001600160a01b03166107c9565b61045e5760405162461bcd60e51b815260206004820152601860248201527f47617353746174696f6e3a20756e617574686f72697a6564000000000000000060448201526064015b60405180910390fd5b6001600160a01b03821660009081526033602090815260408083206001546001600160401b031684529091529020548082116104dc5760405162461bcd60e51b815260206004820152601a60248201527f47617353746174696f6e3a20616c72656164792066756e6465640000000000006044820152606401610455565b60006001600160a01b0384166104f28385610f9c565b604051600081818185875af1925050503d806000811461052e576040519150601f19603f3d011682016040523d82523d6000602084013e610533565b606091505b50509050801561056f576001600160a01b03841660009081526033602090815260408083206001546001600160401b0316845290915290208390555b6001546001600160a01b03851660008181526033602090815260408083206001600160401b0390951680845294825291829020548251888152918201528415158183015290517f4264b2d9471008d8513ddd06a5da387491ccaf43988f604f5eca833d30551c9d9181900360600190a35050600180546001600160e01b03191690555050565b6105fd610911565b61060561096c565b565b61060f610911565b61061982826109cd565b5050565b610625610911565b6106056000610ae0565b610637610911565b610605610b51565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156106845750825b90506000826001600160401b031660011480156106a05750303b155b9050811580156106ae575080155b156106cc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156106f657845460ff60401b1916600160401b1785555b610701896004610b9a565b61070a88610bb4565b60005b868110156107775761076f88888381811061072a5761072a610fbd565b6107409260206040909202019081019150610e2d565b89898481811061075257610752610fbd565b905060400201602001602081019061076a9190610f13565b6109cd565b60010161070d565b5083156107be57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60006001600160a01b0382161580159061080657506001600160401b0383166000908152603260205260409020546001600160a01b038381169116145b90505b92915050565b610817610911565b6001600160a01b03811661084157604051631e4fbdf760e01b815260006004820152602401610455565b61084a81610ae0565b50565b600080516020610ff68339815191525460ff16156106055760405163d93c066560e01b815260040160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b03166355e2448e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f69190610fd3565b801561090c57506000546001600160a01b031633145b905090565b336109437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106055760405163118cdaa760e01b8152336004820152602401610455565b610974610bc5565b600080516020610ff6833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b0390911681526020015b60405180910390a150565b6001600160a01b038116610a1b5760405162461bcd60e51b815260206004820152601560248201527423b0b9a9ba30ba34b7b71d103d32b9379030b2323960591b6044820152606401610455565b816001600160401b0316600003610a745760405162461bcd60e51b815260206004820152601860248201527f47617353746174696f6e3a207a65726f20636861696e496400000000000000006044820152606401610455565b6001600160401b03821660008181526032602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915591519182527f193d7693e9edcedc2357451dd62125041be2c877aa64852b126906cd438f08f5910160405180910390a25050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610b5961084d565b600080516020610ff6833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336109ae565b610ba2610bf5565b610bab82610c3e565b61061981610cd7565b610bbc610bf5565b61084a81610d7a565b600080516020610ff68339815191525460ff1661060557604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661060557604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038116610c895760405162461bcd60e51b8152602060048201526012602482015271584170703a206e6f207a65726f206f6d6e6960701b6044820152606401610455565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f47906020016109c2565b610ce081610d82565b610d2c5760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e76616c696420636f6e66206c6576656c00000000000000006044820152606401610455565b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f8de08a798b4e50b4f351c1eaa91a11530043802be3ffac2df87db0c45a2e8483906020016109c2565b610817610bf5565b600060ff821660011480610809575060ff821660041492915050565b6001600160a01b038116811461084a57600080fd5b60008060408385031215610dc657600080fd5b8235610dd181610d9e565b946020939093013593505050565b6001600160401b038116811461084a57600080fd5b60008060408385031215610e0757600080fd5b8235610e1281610ddf565b91506020830135610e2281610d9e565b809150509250929050565b600060208284031215610e3f57600080fd5b8135610e4a81610ddf565b9392505050565b60008060008060608587031215610e6757600080fd5b8435610e7281610d9e565b93506020850135610e8281610d9e565b925060408501356001600160401b0380821115610e9e57600080fd5b818701915087601f830112610eb257600080fd5b813581811115610ec157600080fd5b8860208260061b8501011115610ed657600080fd5b95989497505060200194505050565b60008060408385031215610ef857600080fd5b8235610f0381610d9e565b91506020830135610e2281610ddf565b600060208284031215610f2557600080fd5b8135610e4a81610d9e565b600060408284031215610f4257600080fd5b604051604081018181106001600160401b0382111715610f7257634e487b7160e01b600052604160045260246000fd5b6040528251610f8081610ddf565b81526020830151610f9081610d9e565b60208201529392505050565b8181038181111561080957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215610fe557600080fd5b81518015158114610e4a57600080fdfecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212209b3264e9832051143cbc4aeb3657ebb622e81387e42d232e79a630544fc3636464736f6c6343000818003360a060405234801561001057600080fd5b506040516200177338038062001773833981016040819052610031916100fe565b6001600160a01b03811660805261004661004c565b5061012e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009c5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100fb5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60006020828403121561011057600080fd5b81516001600160a01b038116811461012757600080fd5b9392505050565b60805161160d62000166600039600081816103a60152818161048901528181610a6f01528181610eb1015261106c015261160d6000f3fe6080604052600436106101095760003560e01c80638456cb5911610095578063c3de453d11610064578063c3de453d14610321578063ed56531a14610334578063f2fde38b14610354578063f3fef3a314610374578063fc0c546a1461039457600080fd5b80638456cb591461027d5780638da5cb5b146102925780638fdcb4c9146102cf578063a10ac97a146102ff57600080fd5b80633794999d116100dc5780633794999d146101db57806339acf9f1146101fb5780633f4ba83a14610233578063485cc95514610248578063715018a61461026857600080fd5b806309839a931461010e578063241b71bb1461015557806325d70f78146101855780632f4dae9f146101b9575b600080fd5b34801561011a57600080fd5b506101427f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561016157600080fd5b506101756101703660046112fa565b6103c8565b604051901515815260200161014c565b34801561019157600080fd5b506101427f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b3480156101c557600080fd5b506101d96101d43660046112fa565b6103d9565b005b3480156101e757600080fd5b506101426101f6366004611328565b6103ed565b34801561020757600080fd5b5060005461021b906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b34801561023f57600080fd5b506101d96105bf565b34801561025457600080fd5b506101d9610263366004611369565b6105d1565b34801561027457600080fd5b506101d96106fd565b34801561028957600080fd5b506101d961070f565b34801561029e57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661021b565b3480156102db57600080fd5b506102e66201388081565b60405167ffffffffffffffff909116815260200161014c565b34801561030b57600080fd5b506101426000805160206115b883398151915281565b6101d961032f3660046113a2565b61071f565b34801561034057600080fd5b506101d961034f3660046112fa565b6107a0565b34801561036057600080fd5b506101d961036f3660046113ce565b6107b1565b34801561038057600080fd5b506101d961038f3660046113a2565b6107ec565b3480156103a057600080fd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b60006103d382610b26565b92915050565b6103e1610ba5565b6103ea81610c00565b50565b600080546040805163110ff5f160e01b815290516001600160a01b0390921691638dd9523c91839163110ff5f1916004808201926020929091908290030181865afa158015610440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104649190611408565b6040516370a0823160e01b815230600482015287908790879081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156104d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f49190611423565b6104fe919061143c565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b179052516001600160e01b031960e085901b16815261057692919062013880906004016114a3565b602060405180830381865afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611423565b949350505050565b6105c7610ba5565b6105cf610cb8565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156106175750825b905060008267ffffffffffffffff1660011480156106345750303b155b905081158015610642575080155b156106605760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561068a57845460ff60401b1916600160401b1785555b61069387610ccf565b600080546001600160a01b0319166001600160a01b03881617905583156106f457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610705610ba5565b6105cf6000610ce0565b610717610ba5565b6105cf610d51565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e61074981610b26565b156107905760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b60448201526064015b60405180910390fd5b61079b338484610d68565b505050565b6107a8610ba5565b6103ea816111f1565b6107b9610ba5565b6001600160a01b0381166107e357604051631e4fbdf760e01b815260006004820152602401610787565b6103ea81610ce0565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761081681610b26565b156108585760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b6044820152606401610787565b6000805460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa1580156108a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c491906114da565b6000549091506001600160a01b031633146109195760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b6044820152606401610787565b60208101516001600160a01b0316600262048789608a1b01146109775760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b6044820152606401610787565b60008054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec9190611408565b67ffffffffffffffff16816000015167ffffffffffffffff1614610a495760405162461bcd60e51b81526020600482015260146024820152734f6d6e694272696467653a206e6f74206f6d6e6960601b6044820152606401610787565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611545565b50836001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610b1891815260200190565b60405180910390a250505050565b6000805160206115b883398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680610b9e575060008381526020829052604090205460ff165b9392505050565b33610bd77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105cf5760405163118cdaa760e01b8152336004820152602401610787565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610c775760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610787565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6105cf6000805160206115b8833981519152610c00565b610cd76112a9565b6103ea816112f2565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6105cf6000805160206115b88339815191526111f1565b60008111610db85760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e203000006044820152606401610787565b6001600160a01b038216610e0e5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f0000006044820152606401610787565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e869190611408565b6040516370a0823160e01b815230600482015290915060009085908590859081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190611423565b610f26919061143c565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b1790526000549051632376548f60e21b81529192506001600160a01b031690638dd9523c90610fb0908590859062013880906004016114a3565b602060405180830381865afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff19190611423565b3410156110405760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a20696e73756666696369656e7420666565000000006044820152606401610787565b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af11580156110b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d99190611545565b6111255760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c656400000000006044820152606401610787565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f90349061116b908690600490600262048789608a1b0190889062013880908401611567565b6000604051808303818588803b15801561118457600080fd5b505af1158015611198573d6000803e3d6000fd5b5050505050836001600160a01b0316856001600160a01b03167f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422856040516111e291815260200190565b60405180910390a35050505050565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156112655760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610787565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105cf57604051631afcd79f60e31b815260040160405180910390fd5b6107b96112a9565b60006020828403121561130c57600080fd5b5035919050565b6001600160a01b03811681146103ea57600080fd5b60008060006060848603121561133d57600080fd5b833561134881611313565b9250602084013561135881611313565b929592945050506040919091013590565b6000806040838503121561137c57600080fd5b823561138781611313565b9150602083013561139781611313565b809150509250929050565b600080604083850312156113b557600080fd5b82356113c081611313565b946020939093013593505050565b6000602082840312156113e057600080fd5b8135610b9e81611313565b805167ffffffffffffffff8116811461140357600080fd5b919050565b60006020828403121561141a57600080fd5b610b9e826113eb565b60006020828403121561143557600080fd5b5051919050565b808201808211156103d357634e487b7160e01b600052601160045260246000fd5b6000815180845260005b8181101561148357602081850181015186830182015201611467565b506000602082860101526020601f19601f83011685010191505092915050565b600067ffffffffffffffff8086168352606060208401526114c7606084018661145d565b9150808416604084015250949350505050565b6000604082840312156114ec57600080fd5b6040516040810181811067ffffffffffffffff8211171561151d57634e487b7160e01b600052604160045260246000fd5b604052611529836113eb565b8152602083015161153981611313565b60208201529392505050565b60006020828403121561155757600080fd5b81518015158114610b9e57600080fd5b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a060608401526115a260a084018661145d565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212203426eb7f4b338998744fc3b12117b06a89ca8ceaecb795a2858bd258ffbdcde264736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b506151dd8061003d6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c806385226c811162000097578063b5508aa9116200006e578063b5508aa914620001a2578063ba414fa614620001ac578063e20c9f7114620001c7578063fa7626d414620001d157600080fd5b806385226c811462000166578063916a17c6146200017f578063b0464fdc146200019857600080fd5b80631ed7831c14620000e55780632ade388014620001075780633e5e3c2314620001205780633f7286f4146200012a578063522bb704146200013457806366d9a9a0146200014d575b600080fd5b620000ef620001df565b604051620000fe9190620034ab565b60405180910390f35b6200011162000243565b604051620000fe91906200354e565b620000ef62000391565b620000ef620003f3565b6200014b620001453660046200362a565b62000455565b005b620001576200055c565b604051620000fe919062003699565b62000170620006d5565b604051620000fe919062003726565b62000189620007af565b604051620000fe91906200378e565b6200018962000899565b6200017062000983565b620001b662000a5d565b6040519015158152602001620000fe565b620000ef62000b12565b601f54620001b69060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156200023957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200021a575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200038857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000370578382906000526020600020018054620002dc9062003803565b80601f01602080910402602001604051908101604052809291908181526020018280546200030a9062003803565b80156200035b5780601f106200032f576101008083540402835291602001916200035b565b820191906000526020600020905b8154815290600101906020018083116200033d57829003601f168201915b505050505081526020019060010190620002ba565b50505050815250508152602001906001019062000267565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b60006000805160206200518883398151915260001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af1158015620004aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d091906200383f565b5090915060009050816004811115620004ed57620004ed62003896565b146200052f5760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b60448201526064015b60405180910390fd5b6200053a8262000b74565b6200054462000d79565b6200054e6200140d565b62000558620017c8565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015620003885783829060005260206000209060020201604051806040016040529081600082018054620005b69062003803565b80601f0160208091040260200160405190810160405280929190818152602001828054620005e49062003803565b8015620006355780601f10620006095761010080835404028352916020019162000635565b820191906000526020600020905b8154815290600101906020018083116200061757829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620006bc57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200067d5790505b5050505050815250508152602001906001019062000580565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620003885783829060005260206000200180546200071b9062003803565b80601f0160208091040260200160405190810160405280929190818152602001828054620007499062003803565b80156200079a5780601f106200076e576101008083540402835291602001916200079a565b820191906000526020600020905b8154815290600101906020018083116200077c57829003601f168201915b505050505081526020019060010190620006f9565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015620003885760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200088057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620008415790505b50505050508152505081526020019060010190620007d3565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015620003885760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200096a57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200092b5790505b50505050508152505081526020019060010190620008bd565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101562000388578382906000526020600020018054620009c99062003803565b80601f0160208091040260200160405190810160405280929190818152602001828054620009f79062003803565b801562000a485780601f1062000a1c5761010080835404028352916020019162000a48565b820191906000526020600020905b81548152906001019060200180831162000a2a57829003601f168201915b505050505081526020019060010190620009a7565b60085460009060ff161562000a76575060085460ff1690565b604051630667f9d760e41b8152600090600080516020620051688339815191529063667f9d709062000ac79060008051602062005188833981519152906519985a5b195960d21b90600401620038ac565b602060405180830381865afa15801562000ae5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b0b9190620038c5565b1415905090565b6060601580548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b80601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550601f60019054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c159190620038df565b602180546001600160a01b0319166001600160a01b03928316179055601f5460408051638da5cb5b60e01b8152905161010090920490921691638da5cb5b9160048083019260209291908290030181865afa15801562000c79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9f9190620038df565b602280546001600160a01b0319166001600160a01b039290921691909117905560405162000ccd9062003428565b604051809103906000f08015801562000cea573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b039290921691821790556040516370ca10bb60e01b815260008051602062005168833981519152916370ca10bb9162000d4291859160009190600401620038ff565b600060405180830381600087803b15801562000d5d57600080fd5b505af115801562000d72573d6000803e3d6000fd5b5050505050565b600062000da060405180604001604052806002815260200161746f60f01b81525062001c02565b601f54604051633794999d60e01b815230600482018190526001600160a01b038085166024840152670de0b6b3a764000060448401819052949550909260009261010090910490911690633794999d90606401602060405180830381865afa15801562000e11573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e379190620038c5565b602154601f546040516370a0823160e01b81526001600160a01b03610100909204821660048201529293506000929116906370a0823190602401602060405180830381865afa15801562000e8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000eb59190620038c5565b602080546040805163110ff5f160e01b81529051939450600080516020620051688339815191529363f30c7ba3936001600160a01b03909316928792849263110ff5f1926004808401939192918290030181865afa15801562000f1c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f42919062003920565b6004600262048789608a1b01898c8c62000f5d818c62003962565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051808303601f1901815291815260208083018051631effa54360e21b6001600160e01b03909116179052601f548251638fdcb4c960e01b815292516101009091046001600160a01b031692638fdcb4c99260048083019391928290030181865afa15801562000ffc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001022919062003920565b6040516024016200103895949392919062003978565b60408051601f198184030181529181526020820180516001600160e01b031663c21dda4f60e01b179052516001600160e01b031960e086901b1681526200108593929190600401620039ca565b600060405180830381600087803b158015620010a057600080fd5b505af1158015620010b5573d6000803e3d6000fd5b5050602154620010d392506001600160a01b03169050848662001c16565b60405163c88a5e6d60e01b8152600080516020620051688339815191529063c88a5e6d90620011099086908690600401620038ac565b600060405180830381600087803b1580156200112457600080fd5b505af115801562001139573d6000803e3d6000fd5b50506040516303223eab60e11b81526001600160a01b03861660048201526000805160206200516883398151915292506306447d569150602401600060405180830381600087803b1580156200118e57600080fd5b505af1158015620011a3573d6000803e3d6000fd5b5050602154601f5460405163095ea7b360e01b81526001600160a01b03928316945063095ea7b39350620011e692610100909204909116908890600401620038ac565b6020604051808303816000875af115801562001206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200122c9190620039fc565b50601f5460405163c3de453d60e01b81526101009091046001600160a01b03169063c3de453d908490620012679089908990600401620038ac565b6000604051808303818588803b1580156200128157600080fd5b505af115801562001296573d6000803e3d6000fd5b50505050506000805160206200518883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012e957600080fd5b505af1158015620012fe573d6000803e3d6000fd5b5050602154601f546040516370a0823160e01b81526001600160a01b0361010090920482166004820152620013919450911691506370a0823190602401602060405180830381865afa15801562001359573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200137f9190620038c5565b6200138b868462003962565b62001c25565b6021546040516370a0823160e01b81526001600160a01b03858116600483015262000d729216906370a0823190602401602060405180830381865afa158015620013df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014059190620038c5565b600062001c25565b60006200143460405180604001604052806002815260200161746f60f01b81525062001c02565b602154601f546040516370a0823160e01b81526101009091046001600160a01b039081166004830152929350670de0b6b3a76400009260009216906370a0823190602401602060405180830381865afa15801562001496573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014bc9190620038c5565b602154604051919250600080516020620051688339815191529163bd6af434916001600160a01b031690819063a9059cbb90620015009089908990602401620038ac565b60408051808303601f1901815291815260208201805160e094851b6001600160e01b03909116179052519185901b6001600160e01b03191682526200154b9392509060040162003a20565b600060405180830381600087803b1580156200156657600080fd5b505af11580156200157b573d6000803e3d6000fd5b5050602080546040805163110ff5f160e01b815290516001600160a01b0390921694506328d27d639350849263110ff5f1926004808401938290030181865afa158015620015cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015f3919062003920565b601f54604051600262048789608a1b019161010090046001600160a01b031690620016259089908990602401620038ac565b60408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e087901b168152620016789493929190620186a09060040162003a4e565b6020604051808303816000875af115801562001698573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016be9190620038c5565b506021546040516370a0823160e01b81526001600160a01b0385811660048301526200173a9216906370a0823190602401602060405180830381865afa1580156200170d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017339190620038c5565b8362001c25565b602154601f546040516370a0823160e01b81526101009091046001600160a01b039081166004830152620017c39216906370a0823190602401602060405180830381865afa15801562001791573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017b79190620038c5565b6200138b848462003a8e565b505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152600080516020620051688339815191529063ca669fa790602401600060405180830381600087803b1580156200181d57600080fd5b505af115801562001832573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200188757600080fd5b505af11580156200189c573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516200198a94506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa158015620018fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019219190620038c5565b6040518263ffffffff1660e01b81526004016200194091815260200190565b602060405180830381865afa1580156200195e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019849190620039fc565b62001c90565b601f54604080516304bae1ef60e31b81529051620019e49261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa158015620018fb573d6000803e3d6000fd5b60225460405163ca669fa760e01b81526001600160a01b039091166004820152600080516020620051688339815191529063ca669fa790602401600060405180830381600087803b15801562001a3957600080fd5b505af115801562001a4e573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001aa357600080fd5b505af115801562001ab8573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001ba694506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001b17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b3d9190620038c5565b6040518263ffffffff1660e01b815260040162001b5c91815260200190565b602060405180830381865afa15801562001b7a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ba09190620039fc565b62001cee565b601f54604080516304bae1ef60e31b8152905162001c009261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001b17573d6000803e3d6000fd5b565b600062001c0f8262001d23565b5092915050565b620017c3838383600062001e38565b60405163260a5b1560e21b8152600481018390526024810182905260008051602062005168833981519152906398296c549060440160006040518083038186803b15801562001c7357600080fd5b505afa15801562001c88573d6000803e3d6000fd5b505050505050565b604051630c9fd58160e01b815281151560048201526000805160206200516883398151915290630c9fd581906024015b60006040518083038186803b15801562001cd957600080fd5b505afa15801562000d72573d6000803e3d6000fd5b60405163a598288560e01b81528115156004820152600080516020620051688339815191529063a59828859060240162001cc0565b6000808260405160200162001d39919062003aa4565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150600080516020620051688339815191529063ffa1864990602401602060405180830381865afa15801562001da0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dc69190620038df565b6040516318caf8e360e31b8152909250600080516020620051688339815191529063c657c7189062001dff908590879060040162003a20565b600060405180830381600087803b15801562001e1a57600080fd5b505af115801562001e2f573d6000803e3d6000fd5b50505050915091565b604080516001600160a01b0385811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b179052915160009287169162001e8e9162003aa4565b600060405180830381855afa9150503d806000811462001ecb576040519150601f19603f3d011682016040523d82523d6000602084013e62001ed0565b606091505b5091505060008180602001905181019062001eec9190620038c5565b905062001f268462001f1f8762001f186370a0823160e01b62001f11600d8d6200203d565b9062002067565b9062002085565b90620020b1565b821562001c885760408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b17905290516000916001600160a01b0389169162001f71919062003aa4565b600060405180830381855afa9150503d806000811462001fae576040519150601f19603f3d011682016040523d82523d6000602084013e62001fb3565b606091505b5091505060008180602001905181019062001fcf9190620038c5565b90508286101562001ffa5762001fe6868462003a8e565b62001ff2908262003a8e565b905062002015565b62002006838762003a8e565b62002012908262003962565b90505b620020338162001f1f6318160ddd60e01b62001f11600d8d6200203d565b5050505050505050565b6004820180546001600160a01b0319166001600160a01b0383161790556000825b90505b92915050565b60028201805463ffffffff191660e083901c1790556000826200205e565b6001808301805491820181556000908152602081206001600160a01b038416920191909155826200205e565b6200055882826004820154600283015460038401546001600160a01b039092169160e09190911b906000620020e6866200250b565b6001600160a01b0385166000908152602088815260408083206001600160e01b03198816845282528083209051939450926200212791859187910162003ac2565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff1662002167576200216586600062002623565b505b6001600160a01b0384166000908152602087815260408083206001600160e01b0319871684528252808320905190918391620021a891869188910162003ac2565b6040516020818303038152906040528051906020012081526020019081526020016000209050600081600201548260010154620021e6919062003962565b1115620022e25760008160020154826001015462002205919062003962565b620022139061010062003a8e565b6200222090600262003be3565b60405163348051d760e11b815260048101829052909150818810906000805160206200516883398151915290636900a3ae90602401600060405180830381865afa15801562002273573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200229d919081019062003c3b565b604051602001620022af919062003cda565b60405160208183030381529060405290620022df5760405162461bcd60e51b815260040162000526919062003d5a565b50505b8054604051630667f9d760e41b8152600091600080516020620051688339815191529163667f9d70916200231c918a9190600401620038ac565b602060405180830381865afa1580156200233a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023609190620038c5565b6001838101546002850154929350600092908101610100039190911b60001901811b1983169089901b1783546040516370ca10bb60e01b815291925060008051602062005168833981519152916370ca10bb91620023c6918b91908690600401620038ff565b600060405180830381600087803b158015620023e157600080fd5b505af1158015620023f6573d6000803e3d6000fd5b50505050600080620024088b62002639565b915091508115806200241a5750898114155b15620024f35784546040516370ca10bb60e01b815260008051602062005168833981519152916370ca10bb9162002458918d918990600401620038ff565b600060405180830381600087803b1580156200247357600080fd5b505af115801562002488573d6000803e3d6000fd5b505060405162461bcd60e51b815260206004820152603360248201527f73746453746f726167652066696e642853746453746f72616765293a204661696044820152723632b2103a37903bb934ba32903b30b63ab29760691b60648201526084019150620005269050565b620024fe8b62002710565b5050505050505050505050565b60608160070180546200251e9062003803565b9050600003620025875762002061826001018054806020026020016040519081016040528092919081815260200182805480156200257c57602002820191906000526020600020905b81548152602001906001019080831162002567575b50505050506200271e565b816007018054620025989062003803565b80601f0160208091040260200160405190810160405280929190818152602001828054620025c69062003803565b8015620026175780601f10620025eb5761010080835404028352916020019162002617565b820191906000526020600020905b815481529060010190602001808311620025f957829003601f168201915b50505050509050919050565b6000620026318383620027be565b549392505050565b60028101546000908190819060e01b62002653856200250b565b6040516020016200266692919062003d6f565b60408051601f1981840301815290829052600486015490925060009182916001600160a01b0316906200269b90859062003aa4565b600060405180830381855afa9150503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b50915091506000620027028288600301546020620026fc919062003da2565b62002f28565b929792965091945050505050565b6200271b8162002fa6565b50565b606060008251602062002732919062003da2565b67ffffffffffffffff8111156200274d576200274d62003bf1565b6040519080825280601f01601f19166020018201604052801562002778576020820181803683370190505b50905060005b835181101562001c0f5760008482815181106200279f576200279f62003dbc565b602090810291909101810151838202850190910152506001016200277e565b6004820154600283015460038401546000926001600160a01b03169160e01b9083620027ea876200250b565b6001600160a01b0385166000908152602089815260408083206001600160e01b03198816845282528083209051939450926200282b91859187910162003ac2565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff1615620028df5785156200286f576200286f8762002fa6565b6001600160a01b0384166000908152602088815260408083206001600160e01b03198716845282528083209051909291620028af91859187910162003ac2565b60405160208183030381529060405280519060200120815260200190815260200160002094505050505062002061565b6000805160206200518883398151915260001c6001600160a01b031663266cf1096040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200292d57600080fd5b505af115801562002942573d6000803e3d6000fd5b505050506000620029538862002639565b6040516365bc948160e01b81526001600160a01b03881660048201529092506000915060008051602062005168833981519152906365bc9481906024016000604051808303816000875af1158015620029b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620029da919081019062003e5b565b509050805160000362002a58576040805162461bcd60e51b81526020600482015260248101919091527f73746453746f726167652066696e642853746453746f72616765293a204e6f2060448201527f73746f726167652075736520646574656374656420666f72207461726765742e606482015260840162000526565b80515b600062002a688262003ec6565b9150811062002dd15760006000805160206200518883398151915260001c6001600160a01b031663667f9d708985858151811062002aaa5762002aaa62003dbc565b60200260200101516040518363ffffffff1660e01b815260040162002ad1929190620038ac565b602060405180830381865afa15801562002aef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b159190620038c5565b90508062002b78577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a58884848151811062002b545762002b5462003dbc565b602002602001015160001c60405162002b6f929190620038ac565b60405180910390a15b62002ba08b84848151811062002b925762002b9262003dbc565b602002602001015162002ffc565b62002bac575062002a5b565b60068b0154600090819060ff161562002c0257600062002be98e87878151811062002bdb5762002bdb62003dbc565b6020026020010151620031d1565b909450925090508062002c00575050505062002a5b565b505b6001828201610100031b60001901811b8316811c86811462002c28575050505062002a5b565b7f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed8b8b8a8c60405160200162002c6092919062003ac2565b6040516020818303038152906040528051906020012089898151811062002c8b5762002c8b62003dbc565b602090810291909101810151604080516001600160a01b0390961686526001600160e01b03199094169185019190915291830152606082015260800160405180910390a1604051806080016040528087878151811062002cef5762002cef62003dbc565b602002602001015160001c8152602001848152602001838152602001600115158152508e60000160008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c6001600160e01b0319166001600160e01b031916815260200190815260200160002060008a8c60405160200162002d7592919062003ac2565b60408051808303601f190181529181528151602092830120835282820193909352908201600020835181559083015160018201559082015160028201556060909101516003909101805460ff1916911515919091179055505050505b506001600160a01b038616600090815260208a815260408083206001600160e01b0319891684528252808320905190929162002e1291879189910162003ac2565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff1662002ea45760405162461bcd60e51b815260206004820152602f60248201527f73746453746f726167652066696e642853746453746f72616765293a20536c6f60448201526e3a143994903737ba103337bab7321760891b606482015260840162000526565b871562002eb65762002eb68962002fa6565b6001600160a01b038616600090815260208a815260408083206001600160e01b0319891684528252808320905190929162002ef691879189910162003ac2565b604051602081830303815290604052805190602001208152602001908152602001600020965050505050505092915050565b6000806000602085511162002f3f57845162002f42565b60205b905060005b8181101562002f9c5762002f5d81600862003da2565b8662002f6a838862003962565b8151811062002f7d5762002f7d62003dbc565b01602001516001600160f81b031916901c929092179160010162002f47565b5090949350505050565b6004810180546001600160a01b031916905560028101805463ffffffff1916905562002fd760018201600062003436565b60006003820181905560068201805460ff191690556200271b90600783019062003456565b600480830154604051630667f9d760e41b81526000928392600080516020620051688339815191529263667f9d709262003043926001600160a01b031691889101620038ac565b602060405180830381865afa15801562003061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030879190620038c5565b9050600080620030978662002639565b909250905060008115620030ad576000620030b1565b6000195b6004808901546040516370ca10bb60e01b815292935060008051602062005168833981519152926370ca10bb92620030f8926001600160a01b0316918b91879101620038ff565b600060405180830381600087803b1580156200311357600080fd5b505af115801562003128573d6000803e3d6000fd5b505050506000620031398862002639565b60048a8101546040516370ca10bb60e01b81529294506000805160206200516883398151915293506370ca10bb9262003183926001600160a01b03909216918c918b9101620038ff565b600060405180830381600087803b1580156200319e57600080fd5b505af1158015620031b3573d6000803e3d6000fd5b50505050838015620031c55750808314155b98975050505050505050565b600482810154604051630667f9d760e41b8152600092839283928392600080516020620051688339815191529263667f9d70926200321e926001600160a01b03909216918a9101620038ac565b602060405180830381865afa1580156200323c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032629190620038c5565b9050600080620032758888600162003325565b915091506000806200328a8a8a600062003325565b60048c8101546040516370ca10bb60e01b815293955091935060008051602062005168833981519152926370ca10bb92620032d6926001600160a01b03909116918e918b9101620038ff565b600060405180830381600087803b158015620032f157600080fd5b505af115801562003306573d6000803e3d6000fd5b50505050838015620033155750815b9a92995097509095505050505050565b60008060005b610100811015620034175760008462003348576001821b6200335a565b620033558260ff62003a8e565b6001901b5b6004808901546040516370ca10bb60e01b815292935060008051602062005168833981519152926370ca10bb92620033a1926001600160a01b0316918b91879101620038ff565b600060405180830381600087803b158015620033bc57600080fd5b505af1158015620033d1573d6000803e3d6000fd5b50505050600080620033e38962002639565b91509150818015620033f457508015155b156200340b57600184955095505050505062003420565b5050506001016200332b565b50600080915091505b935093915050565b6112878062003ee183390190565b50805460008255906000526020600020908101906200271b919062003490565b508054620034649062003803565b6000825580601f1062003475575050565b601f0160209004906000526020600020908101906200271b91905b5b80821115620034a7576000815560010162003491565b5090565b6020808252825182820181905260009190848201906040850190845b81811015620034ee5783516001600160a01b031683529284019291840191600101620034c7565b50909695505050505050565b60005b8381101562003517578181015183820152602001620034fd565b50506000910152565b600081518084526200353a816020860160208601620034fa565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156200360457603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b81811015620035ed57605f19898503018352620035da84865162003520565b948e01949350918d0191600101620035bb565b505050978a01979450509188019160010162003575565b50919a9950505050505050505050565b6001600160a01b03811681146200271b57600080fd5b6000602082840312156200363d57600080fd5b81356200364a8162003614565b9392505050565b60008151808452602080850194506020840160005b838110156200368e5781516001600160e01b0319168752958201959082019060010162003666565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156200371857888303603f1901855281518051878552620036e98886018262003520565b91890151858303868b015291905062003703818362003651565b968901969450505090860190600101620036c2565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156200378157603f198886030184526200376e85835162003520565b945092850192908501906001016200374f565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156200371857888303603f19018552815180516001600160a01b03168452870151878401879052620037ef8785018262003651565b9588019593505090860190600101620037b7565b600181811c908216806200381857607f821691505b6020821081036200383957634e487b7160e01b600052602260045260246000fd5b50919050565b6000806000606084860312156200385557600080fd5b8351600581106200386557600080fd5b6020850151909350620038788162003614565b60408501519092506200388b8162003614565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03929092168252602082015260400190565b600060208284031215620038d857600080fd5b5051919050565b600060208284031215620038f257600080fd5b81516200364a8162003614565b6001600160a01b039390931683526020830191909152604082015260600190565b6000602082840312156200393357600080fd5b815167ffffffffffffffff811681146200364a57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156200206157620020616200394c565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a06060840152620039b560a084018662003520565b91508084166080840152509695505050505050565b60018060a01b0384168152826020820152606060408201526000620039f3606083018462003520565b95945050505050565b60006020828403121562003a0f57600080fd5b815180151581146200364a57600080fd5b6001600160a01b038316815260406020820181905260009062003a469083018462003520565b949350505050565b67ffffffffffffffff86811682526001600160a01b0386811660208401528516604083015260a06060830181905260009190620039b59084018662003520565b818103818111156200206157620020616200394c565b6000825162003ab8818460208701620034fa565b9190910192915050565b6000835162003ad6818460208801620034fa565b9190910191825250602001919050565b600181815b8085111562003b2757816000190482111562003b0b5762003b0b6200394c565b8085161562003b1957918102915b93841c939080029062003aeb565b509250929050565b60008262003b405750600162002061565b8162003b4f5750600062002061565b816001811462003b68576002811462003b735762003b93565b600191505062002061565b60ff84111562003b875762003b876200394c565b50506001821b62002061565b5060208310610133831016604e8410600b841016171562003bb8575081810a62002061565b62003bc4838362003ae6565b806000190482111562003bdb5762003bdb6200394c565b029392505050565b60006200205e838362003b2f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003c335762003c3362003bf1565b604052919050565b60006020828403121562003c4e57600080fd5b815167ffffffffffffffff8082111562003c6757600080fd5b818401915084601f83011262003c7c57600080fd5b81518181111562003c915762003c9162003bf1565b62003ca6601f8201601f191660200162003c07565b915080825285602082850101111562003cbe57600080fd5b62003cd1816020840160208601620034fa565b50949350505050565b7f73746453746f726167652066696e642853746453746f72616765293a2050616381527f6b656420736c6f742e2057652063616e2774206669742076616c756520677265602082015269030ba32b9103a3430b7160b51b60408201526000825162003d4d81604a850160208701620034fa565b91909101604a0192915050565b6020815260006200205e602083018462003520565b6001600160e01b031983168152815160009062003d94816004850160208701620034fa565b919091016004019392505050565b80820281158282048414176200206157620020616200394c565b634e487b7160e01b600052603260045260246000fd5b600082601f83011262003de457600080fd5b8151602067ffffffffffffffff82111562003e035762003e0362003bf1565b8160051b62003e1482820162003c07565b928352848101820192828101908785111562003e2f57600080fd5b83870192505b8483101562003e505782518252918301919083019062003e35565b979650505050505050565b6000806040838503121562003e6f57600080fd5b825167ffffffffffffffff8082111562003e8857600080fd5b62003e968683870162003dd2565b9350602085015191508082111562003ead57600080fd5b5062003ebc8582860162003dd2565b9150509250929050565b60008162003ed85762003ed86200394c565b50600019019056fe60c0604052600080546001600160a01b0319167301004e20000000000000520800000000004c4b4017905534801561003657600080fd5b506001600160401b03461660805260a660a052604051633b9aca009061005b906100a3565b908152602001604051809103906000f08015801561007d573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100b0565b6101d0806110b783390190565b60805160a051610fdb6100dc600039600061019801526000818161041a01526109450152610fdb6000f3fe6080604052600436106101405760003560e01c80636739afca116100b6578063b2b2f5bd1161006f578063b2b2f5bd146104a0578063b4d5afd1146104d4578063c21dda4f14610509578063c26dfc051461051c578063cf84c8181461053e578063d051c97d1461055e57600080fd5b80636739afca1461039f57806378fe5307146103c15780638dd9523c146103e85780639a8a059214610408578063a32eb7c61461043c578063aaf1bc971461047057600080fd5b80632f32700e116101085780632f32700e146102405780633aa87330146102a55780633fd3b15e146102e6578063500b19e71461032757806355e2448e1461035f57806366a1eaf31461037f57600080fd5b80630360d20f1461014557806306c3dc5f14610171578063110ff5f11461018657806324278bbe146101d257806328d27d6314610212575b600080fd5b34801561015157600080fd5b5061015a600281565b60405160ff90911681526020015b60405180910390f35b34801561017d57600080fd5b5061015a600381565b34801561019257600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610168565b3480156101de57600080fd5b506102026101ed366004610bba565b60066020526000908152604090205460ff1681565b6040519015158152602001610168565b34801561021e57600080fd5b5061023261022d366004610c3b565b61059f565b604051908152602001610168565b34801561024c57600080fd5b506040805180820182526000808252602091820152815180830183526007546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610168565b3480156102b157600080fd5b506101ba6102c0366004610cbf565b60026020908152600092835260408084209091529082529020546001600160401b031681565b3480156102f257600080fd5b506101ba610301366004610cbf565b60046020908152600092835260408084209091529082529020546001600160401b031681565b34801561033357600080fd5b50600154610347906001600160a01b031681565b6040516001600160a01b039091168152602001610168565b34801561036b57600080fd5b506007546001600160401b03161515610202565b34801561038b57600080fd5b5061039d61039a366004610cf2565b50565b005b3480156103ab57600080fd5b506103b46107b7565b6040516101689190610d2d565b3480156103cd57600080fd5b506000546101ba90600160401b90046001600160401b031681565b3480156103f457600080fd5b50610232610403366004610dde565b6107fd565b34801561041457600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044857600080fd5b506102327ffeccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1e81565b34801561047c57600080fd5b5061020261048b366004610bba565b60056020526000908152604090205460ff1681565b3480156104ac57600080fd5b506102327fa06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6881565b3480156104e057600080fd5b506000546104f690600160801b900461ffff1681565b60405161ffff9091168152602001610168565b61039d610517366004610e42565b61087e565b34801561052857600080fd5b506000546104f690600160901b900461ffff1681565b34801561054a57600080fd5b506000546101ba906001600160401b031681565b34801561056a57600080fd5b506101ba610579366004610cbf565b60036020908152600092835260408084209091529082529020546001600160401b031681565b600080546001600160401b0390811690831611156106045760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064015b60405180910390fd5b6000546001600160401b03600160401b9091048116908316101561066a5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016105fb565b604080518082019091526001600160401b0388168082526001600160a01b0388166020909201829052600780546001600160e01b031916909117600160401b9092029190911790555a9050600080866001600160a01b0316846001600160401b031687876040516106dc929190610e7a565b60006040518083038160008787f1925050503d806000811461071a576040519150601f19603f3d011682016040523d82523d6000602084013e61071f565b606091505b50915091505a61072f9084610ea0565b600780546001600160e01b03191690559250811580156107585750836001600160401b03168310155b1561079e5760405162461bcd60e51b81526020600482015260166024820152754d6f636b506f7274616c3a206f7574206f662067617360501b60448201526064016105fb565b816107ab57805160208201fd5b50509695505050505050565b604080516000808252602082019092526060916107f7565b6040805180820190915260008152606060208201528152602001906001900390816107cf5790505b50905090565b600154604051632376548f60e21b81526000916001600160a01b031690638dd9523c90610834908890889088908890600401610ee2565b602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190610f1a565b95945050505050565b6000546001600160401b0390811690821611156108dd5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064016105fb565b6000546001600160401b03600160401b909104811690821610156109435760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016105fb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b0316036109c45760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016105fb565b6001600160401b038616610a1a5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016105fb565b6001600160a01b038416610a705760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c000000000060448201526064016105fb565b6000610a7e878585856107fd565b905080341015610ad05760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e74206665650000000060448201526064016105fb565b6001600160401b03808816600090815260026020908152604080832060ff8b1680855292528220805491936001939192610b0c91859116610f33565b82546101009290920a6001600160401b0381810219909316918316021790915589811660008181526002602090815260408083208786168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90610b8c9033908c908c908c908c908c90610f5a565b60405180910390a45050505050505050565b80356001600160401b0381168114610bb557600080fd5b919050565b600060208284031215610bcc57600080fd5b610bd582610b9e565b9392505050565b80356001600160a01b0381168114610bb557600080fd5b60008083601f840112610c0557600080fd5b5081356001600160401b03811115610c1c57600080fd5b602083019150836020828501011115610c3457600080fd5b9250929050565b60008060008060008060a08789031215610c5457600080fd5b610c5d87610b9e565b9550610c6b60208801610bdc565b9450610c7960408801610bdc565b935060608701356001600160401b03811115610c9457600080fd5b610ca089828a01610bf3565b9094509250610cb3905060808801610b9e565b90509295509295509295565b60008060408385031215610cd257600080fd5b610cdb83610b9e565b9150610ce960208401610b9e565b90509250929050565b600060208284031215610d0457600080fd5b81356001600160401b03811115610d1a57600080fd5b82016101808185031215610bd557600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015610dcf57898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b80841015610db957845183168252938c019360019390930192908c0190610d97565b50988b0198965050509288019250600101610d57565b50919998505050505050505050565b60008060008060608587031215610df457600080fd5b610dfd85610b9e565b935060208501356001600160401b03811115610e1857600080fd5b610e2487828801610bf3565b9094509250610e37905060408601610b9e565b905092959194509250565b60008060008060008060a08789031215610e5b57600080fd5b610e6487610b9e565b9550602087013560ff81168114610c6b57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610eb357610eb3610e8a565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b03808716835260606020840152610f06606084018688610eb9565b915080841660408401525095945050505050565b600060208284031215610f2c57600080fd5b5051919050565b6001600160401b03818116838216019080821115610f5357610f53610e8a565b5092915050565b6001600160a01b0387811682528616602082015260a060408201819052600090610f879083018688610eb9565b6001600160401b03949094166060830152506080015294935050505056fea264697066735822122094816f2db6ff15c367e9274ff4084a2574be4d5b966a69654180fd9ffb631c0264736f6c63430008180033608060405234801561001057600080fd5b506040516101d03803806101d083398101604081905261002f91610037565b600055610050565b60006020828403121561004957600080fd5b5051919050565b6101718061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780638dd9523c1461005a578063ddca3f4314610081575b600080fd5b604051600181526020015b60405180910390f35b6100736100683660046100a7565b600054949350505050565b604051908152602001610051565b61007360005481565b803567ffffffffffffffff811681146100a257600080fd5b919050565b600080600080606085870312156100bd57600080fd5b6100c68561008a565b9350602085013567ffffffffffffffff808211156100e357600080fd5b818701915087601f8301126100f757600080fd5b81358181111561010657600080fd5b88602082850101111561011857600080fd5b6020830195508094505050506101306040860161008a565b90509295919450925056fea2646970667358221220721172973248b1811d0ce80fb3c63ecaa4ee2acba92eaf0384d16ccac0f6ebda64736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220408e7690c8f235c4535e0ea1acca39d80d8ef2940c35353465b402fe4afd0eed64736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212208552645694ed09f117e689d7b2934cbb2e50a585a25900362cecbcadab66b50364736f6c63430008180033", } // AdminABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/allocpredeploys.go b/contracts/bindings/allocpredeploys.go index ea198065d..df3c7ba12 100644 --- a/contracts/bindings/allocpredeploys.go +++ b/contracts/bindings/allocpredeploys.go @@ -41,7 +41,7 @@ type AllocPredeploysConfig struct { // AllocPredeploysMetaData contains all meta data concerning the AllocPredeploys contract. var AllocPredeploysMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_SCRIPT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"run\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structAllocPredeploys.Config\",\"components\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nativeBridgeBalance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"enableStakingAllowlist\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"output\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"runNoStateDump\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structAllocPredeploys.Config\",\"components\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nativeBridgeBalance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"enableStakingAllowlist\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"output\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", - Bin: "0x6080604052600c80546201000162ff00ff19909116179055601280546001600160a01b03191673dddddddddddddddddddddddddddddddddddddddd17905534801561004957600080fd5b506201d8ae806200005b6000396000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063051ae5a9146200004b5780630ff273a41462000064578063f8ccbf47146200007b575b600080fd5b620000626200005c36600462002745565b620000a3565b005b620000626200007536600462002745565b6200024b565b600c546200008f9062010000900460ff1681565b604051901515815260200160405180910390f35b620000ae8162000259565b604051635a6b63c160e11b815260008051602062003b4a8339815191529063b4d6c78290620000e29033906004016200278a565b600060405180830381600087803b158015620000fd57600080fd5b505af115801562000112573d6000803e3d6000fd5b5050604051631c72346d60e01b815233600482015260008051602062003b4a8339815191529250631c72346d9150602401600060405180830381600087803b1580156200015e57600080fd5b505af115801562000173573d6000803e3d6000fd5b505060405163c88a5e6d60e01b81523360048201526000602482015260008051602062003b4a833981519152925063c88a5e6d9150604401600060405180830381600087803b158015620001c657600080fd5b505af1158015620001db573d6000803e3d6000fd5b505060405163709ecd3f60e01b815260008051602062003b4a833981519152925063709ecd3f91506200021490601190600401620027e9565b600060405180830381600087803b1580156200022f57600080fd5b505af115801562000244573d6000803e3d6000fd5b5050505050565b620002568162000259565b50565b80600d62000268828262002a06565b5050600e54604051632024eee960e11b8152600481019190915260008051602062003b4a83398151915290634049ddd290602401600060405180830381600087803b158015620002b757600080fd5b505af1158015620002cc573d6000803e3d6000fd5b50506012546040516303223eab60e11b81526001600160a01b03909116600482015260008051602062003b4a83398151915292506306447d569150602401600060405180830381600087803b1580156200032557600080fd5b505af11580156200033a573d6000803e3d6000fd5b5050505062000348620003a0565b62000352620003e8565b6000805160206200e55c83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200022f57600080fd5b620003aa6200155f565b620003b4620015ae565b620003be62001716565b620003c8620018f7565b620003d2620019be565b620003dc62001b1f565b620003e662001bfc565b565b6000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273ca11bde05977b3631167028862be2a173976ca1160405180610f000160405280610ee081526020016201bf73610ee091396040518363ffffffff1660e01b81526004016200045a92919062002ab4565b600060405180830381600087803b1580156200047557600080fd5b505af11580156200048a573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c7827313b0d85ccb8bf860b6b79af3029fca081ae9bef260405180610660016040528061063081526020016200df2c61063091396040518363ffffffff1660e01b81526004016200050092919062002ab4565b600060405180830381600087803b1580156200051b57600080fd5b505af115801562000530573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c7827369f4d1788e39c87893c980c06edf4b7f686e2938604051806159e001604052806159ae81526020016200e57c6159ae91396040518363ffffffff1660e01b8152600401620005a692919062002ab4565b600060405180830381600087803b158015620005c157600080fd5b505af1158015620005d6573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273fb1bffc9d739b8d520daf37df666da4c687191ea60405180615d200160405280615cf8815260200162003b6a615cf891396040518363ffffffff1660e01b81526004016200064c92919062002ab4565b600060405180830381600087803b1580156200066757600080fd5b505af11580156200067c573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273a1dabef33b3b82c7814b6d82a79e50f4ac44102b604051806101c0016040528061019a81526020016200db8261019a91396040518363ffffffff1660e01b8152600401620006f292919062002ab4565b600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273914d7fec6aac8cd542e72bca78b30650d45643d760405180608001604052806045815260200162009a25604591396040518363ffffffff1660e01b81526004016200079592919062002ab4565b600060405180830381600087803b158015620007b057600080fd5b505af1158015620007c5573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782734e59b44847b379578588920ca78fbf26c0b4956c60405180608001604052806045815260200162009a25604591396040518363ffffffff1660e01b81526004016200083892919062002ab4565b600060405180830381600087803b1580156200085357600080fd5b505af115801562000868573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273998739bfdaadde7c933b942a68053933098f9eda604051806102a00160405280610275815260200162009a6a61027591396040518363ffffffff1660e01b8152600401620008de92919062002ab4565b600060405180830381600087803b158015620008f957600080fd5b505af11580156200090e573d6000803e3d6000fd5b5050600e5460008051602062003b4a833981519152925063b4d6c78291506e22d473030f116ddee9f6b43ac78ba390620009489062001d50565b6040518363ffffffff1660e01b81526004016200096792919062002ab4565b600060405180830381600087803b1580156200098257600080fd5b505af115801562000997573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782737fc98430eaedbb6070b35b39d79872504908834860405180610240016040528061021081526020016200dd1c61021091396040518363ffffffff1660e01b815260040162000a0d92919062002ab4565b600060405180830381600087803b15801562000a2857600080fd5b505af115801562000a3d573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782735ff137d4b0fdcd49dca30c7cf57e578a026d278960405180615cc00160405280615c898152602001620162ea615c8991396040518363ffffffff1660e01b815260040162000ab392919062002ab4565b600060405180830381600087803b15801562000ace57600080fd5b505af115801562000ae3573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273efc2c1444ebcc4db75e7613d20c6a62ff67a167c6040518061020001604052806101c38152602001620098626101c391396040518363ffffffff1660e01b815260040162000b5992919062002ab4565b600060405180830381600087803b15801562000b7457600080fd5b505af115801562000b89573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c7826f71727de22e5e9d8baf0edac6f37da03260405180613ee00160405280613ea3815260200162009cdf613ea391396040518363ffffffff1660e01b815260040162000bfb92919062002ab4565b600060405180830381600087803b15801562000c1657600080fd5b505af115801562000c2b573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782731820a4b7618bde71dce8cdc73aab6c95905fad2460405180610a0001604052806109c581526020016201ce536109c591396040518363ffffffff1660e01b815260040162000ca192919062002ab4565b600060405180830381600087803b15801562000cbc57600080fd5b505af115801562000cd1573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782720f3df6d732807ef1319fb7b8bb8522d0beac026040518060a00160405280606181526020016201d818606191396040518363ffffffff1660e01b815260040162000d4392919062002ab4565b600060405180830381600087803b15801562000d5e57600080fd5b505af115801562000d73573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000dc290730b799c86a49deeb90402691f1041aa3af2d3c8759060019060040162002af8565b600060405180830381600087803b15801562000ddd57600080fd5b505af115801562000df2573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000e419073ca11bde05977b3631167028862be2a173976ca119060019060040162002af8565b600060405180830381600087803b15801562000e5c57600080fd5b505af115801562000e71573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000ec0907313b0d85ccb8bf860b6b79af3029fca081ae9bef29060019060040162002af8565b600060405180830381600087803b15801562000edb57600080fd5b505af115801562000ef0573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000f3f907369f4d1788e39c87893c980c06edf4b7f686e29389060019060040162002af8565b600060405180830381600087803b15801562000f5a57600080fd5b505af115801562000f6f573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000fbe9073fb1bffc9d739b8d520daf37df666da4c687191ea9060019060040162002af8565b600060405180830381600087803b15801562000fd957600080fd5b505af115801562000fee573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200103d9073a1dabef33b3b82c7814b6d82a79e50f4ac44102b9060019060040162002af8565b600060405180830381600087803b1580156200105857600080fd5b505af11580156200106d573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620010bc9073914d7fec6aac8cd542e72bca78b30650d45643d79060019060040162002af8565b600060405180830381600087803b158015620010d757600080fd5b505af1158015620010ec573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200113b90734e59b44847b379578588920ca78fbf26c0b4956c9060019060040162002af8565b600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620011ba9073998739bfdaadde7c933b942a68053933098f9eda9060019060040162002af8565b600060405180830381600087803b158015620011d557600080fd5b505af1158015620011ea573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062001234906e22d473030f116ddee9f6b43ac78ba39060019060040162002af8565b600060405180830381600087803b1580156200124f57600080fd5b505af115801562001264573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620012b390737fc98430eaedbb6070b35b39d7987250490883489060019060040162002af8565b600060405180830381600087803b158015620012ce57600080fd5b505af1158015620012e3573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200133290735ff137d4b0fdcd49dca30c7cf57e578a026d27899060019060040162002af8565b600060405180830381600087803b1580156200134d57600080fd5b505af115801562001362573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620013b19073efc2c1444ebcc4db75e7613d20c6a62ff67a167c9060019060040162002af8565b600060405180830381600087803b158015620013cc57600080fd5b505af1158015620013e1573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200142c906f71727de22e5e9d8baf0edac6f37da0329060019060040162002af8565b600060405180830381600087803b1580156200144757600080fd5b505af11580156200145c573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620014ab90731820a4b7618bde71dce8cdc73aab6c95905fad249060019060040162002af8565b600060405180830381600087803b158015620014c657600080fd5b505af1158015620014db573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200152990720f3df6d732807ef1319fb7b8bb8522d0beac029060019060040162002af8565b600060405180830381600087803b1580156200154457600080fd5b505af115801562001559573d6000803e3d6000fd5b50505050565b60006200156b62001e86565b905060005b8151811015620015aa57620015a182828151811062001593576200159362002b1b565b602002602001015162001f23565b60010162001570565b5050565b6000620015c4600162048789608a1b016200235f565b604051630fafdced60e21b815260206004820152602160248201527f506f7274616c52656769737472792e736f6c3a506f7274616c526567697374726044820152607960f81b606482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490608401600060405180830381865afa15801562001654573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200167e919081019062002b31565b6040518363ffffffff1660e01b81526004016200169d92919062002ab4565b600060405180830381600087803b158015620016b857600080fd5b505af1158015620016cd573d6000803e3d6000fd5b50505050620016dc8162002436565b600d5460405163189acdbd60e31b81526001600160a01b039091166004820152600162048789608a1b019063c4d66de89060240162000214565b600f5460405163c88a5e6d60e01b8152600262048789608a1b016004820152602481019190915260008051602062003b4a8339815191529063c88a5e6d90604401600060405180830381600087803b1580156200177257600080fd5b505af115801562001787573d6000803e3d6000fd5b505050506000620017a1600262048789608a1b016200235f565b604051630fafdced60e21b815260206004820152602560248201527f4f6d6e694272696467654e61746976652e736f6c3a4f6d6e694272696467654e604482015264617469766560d81b606482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490608401600060405180830381865afa15801562001835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200185f919081019062002b31565b6040518363ffffffff1660e01b81526004016200187e92919062002ab4565b600060405180830381600087803b1580156200189957600080fd5b505af1158015620018ae573d6000803e3d6000fd5b50505050620018bd8162002436565b600d5460405163189acdbd60e31b81526001600160a01b039091166004820152600262048789608a1b019063c4d66de89060240162000214565b604051630fafdced60e21b815260206004820152600f60248201526e574f6d6e692e736f6c3a574f6d6e6960881b604482015260008051602062003b4a8339815191529063b4d6c78290600362048789608a1b01908390633ebf73b490606401600060405180830381865afa15801562001975573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200199f919081019062002b31565b6040518363ffffffff1660e01b81526004016200152992919062002ab4565b6000620019d4600162333333608a1b016200235f565b604051630fafdced60e21b81526020600482015260136024820152725374616b696e672e736f6c3a5374616b696e6760681b604482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001a50573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001a7a919081019062002b31565b6040518363ffffffff1660e01b815260040162001a9992919062002ab4565b600060405180830381600087803b15801562001ab457600080fd5b505af115801562001ac9573d6000803e3d6000fd5b5050505062001ad88162002436565b600d5460105460405163400ada7560e01b81526001600160a01b03909216600483015260ff1615156024820152600162333333608a1b019063400ada759060440162000214565b600062001b35600262333333608a1b016200235f565b604051630fafdced60e21b8152602060048201526015602482015274536c617368696e672e736f6c3a536c617368696e6760581b604482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001bb3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001bdd919081019062002b31565b6040518363ffffffff1660e01b81526004016200021492919062002ab4565b600062001c12600362333333608a1b016200235f565b604051630fafdced60e21b8152602060048201526013602482015272557067726164652e736f6c3a5570677261646560681b604482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001c8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001cb8919081019062002b31565b6040518363ffffffff1660e01b815260040162001cd792919062002ab4565b600060405180830381600087803b15801562001cf257600080fd5b505af115801562001d07573d6000803e3d6000fd5b5050505062001d168162002436565b600d5460405163189acdbd60e31b81526001600160a01b039091166004820152600362333333608a1b019063c4d66de89060240162000214565b6060600060405160200162001d7290662832b936b4ba1960c91b815260070190565b604051602081830303815290604052805190602001209050600060405160200162001df2907f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430190565b60408051601f198184030181528282528051602091820120908301819052908201849052606082018690526e22d473030f116ddee9f6b43ac78ba36080830152915060009060a001604051602081830303815290604052805190602001209050604051806123e001604052806123c0815260200162013f2a6123c09139611b41810195909552611b67850152509192915050565b604080516002808252606080830184529260208301908036833701905050905062048789608a1b8160008151811062001ec35762001ec362002b1b565b60200260200101906001600160a01b031690816001600160a01b03168152505062333333608a1b8160018151811062001f005762001f0062002b1b565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b63ffffffff81161562001f715760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206e616d65737061636560781b60448201526064015b60405180910390fd5b60015b610400816001600160a01b0316116200232957600062001f95828462002c00565b9050600362048789608a1b016001600160a01b0382160362001fb8575062002314565b600062001fc582620024a6565b62001fd257600062001fdd565b62001fdd826200235f565b90506001600160a01b0381163b156200202c5760405162461bcd60e51b815260206004820152601060248201526f1a5b5c1b08185b1c9958591e481cd95d60821b604482015260640162001f68565b60408051635a6b63c160e11b81526001600160a01b038316600482015260248101919091526002604482015261030360f41b606482015260008051602062003b4a8339815191529063b4d6c78290608401600060405180830381600087803b1580156200209857600080fd5b505af1158015620020ad573d6000803e3d6000fd5b5050600d54604051600093508492506001600160a01b0390911690620020d39062002737565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562002116573d6000803e3d6000fd5b5090506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78284836001600160a01b0316803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b81526004016200218092919062002ab4565b600060405180830381600087803b1580156200219b57600080fd5b505af1158015620021b0573d6000803e3d6000fd5b50505050620021c0838362002553565b620021d683620021d083620025f0565b62002693565b604051635a6b63c160e11b815260008051602062003b4a8339815191529063b4d6c782906200220a9085906004016200278a565b600060405180830381600087803b1580156200222557600080fd5b505af11580156200223a573d6000803e3d6000fd5b5050604051635a6b63c160e11b815260008051602062003b4a833981519152925063b4d6c7829150620022729084906004016200278a565b600060405180830381600087803b1580156200228d57600080fd5b505af1158015620022a2573d6000803e3d6000fd5b5050604051631c72346d60e01b81526001600160a01b038416600482015260008051602062003b4a8339815191529250631c72346d9150602401600060405180830381600087803b158015620022f757600080fd5b505af11580156200230c573d6000803e3d6000fd5b505050505050505b80620023208162002c2a565b91505062001f74565b50604051635a6b63c160e11b815260008051602062003b4a8339815191529063b4d6c7829062000214906000906004016200278a565b60006200236c82620026fd565b620023ba5760405162461bcd60e51b815260206004820152601b60248201527f5072656465706c6f79733a206e6f742061207072656465706c6f790000000000604482015260640162001f68565b600362048789608a1b016001600160a01b038316036200241d5760405162461bcd60e51b815260206004820152601760248201527f5072656465706c6f79733a206e6f742070726f78696564000000000000000000604482015260640162001f68565b62002430826001600160a01b0362002c5b565b92915050565b6040516370ca10bb60e01b81526001600160a01b03821660048201527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00602482015267ffffffffffffffff604482015260008051602062003b4a833981519152906370ca10bb9060640162000214565b60006001600160a01b038216600162048789608a1b011480620024da57506001600160a01b038216600262048789608a1b01145b80620024f757506001600160a01b038216600362048789608a1b01145b806200251457506001600160a01b038216600162333333608a1b01145b806200253157506001600160a01b038216600262333333608a1b01145b806200243057506001600160a01b038216600362333333608a1b011492915050565b6040516370ca10bb60e01b81526001600160a01b0380841660048301527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60248301528216604482015260008051602062003b4a833981519152906370ca10bb906064015b600060405180830381600087803b158015620025d357600080fd5b505af1158015620025e8573d6000803e3d6000fd5b505050505050565b604051630667f9d760e41b81526001600160a01b03821660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103602482015260009060008051602062003b4a8339815191529063667f9d7090604401602060405180830381865afa1580156200266d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002430919062002c7e565b6040516370ca10bb60e01b81526001600160a01b0380841660048301527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360248301528216604482015260008051602062003b4a833981519152906370ca10bb90606401620025b8565b60006001600160961b03600a83901c166204878960801b1480620024305750506233333360801b600a9190911c6001600160961b03161490565b610eb18062002c9983390190565b6000602082840312156200275857600080fd5b813567ffffffffffffffff8111156200277057600080fd5b820160a081850312156200278357600080fd5b9392505050565b6001600160a01b0391909116815260406020820181905260009082015260600190565b600181811c90821680620027c257607f821691505b602082108103620027e357634e487b7160e01b600052602260045260246000fd5b50919050565b6000602080835260008454620027ff81620027ad565b8060208701526040600180841660008114620028245760018114620028415762002873565b60ff19851660408a0152604084151560051b8a0101955062002873565b89600052602060002060005b858110156200286a5781548b82018601529083019088016200284d565b8a016040019650505b509398975050505050505050565b6000808335601e198436030181126200289957600080fd5b83018035915067ffffffffffffffff821115620028b557600080fd5b602001915036819003821315620028cb57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b601f82111562002934576000816000526020600020601f850160051c81016020861015620029135750805b601f850160051c820191505b81811015620025e8578281556001016200291f565b505050565b67ffffffffffffffff831115620029545762002954620028d2565b6200296c83620029658354620027ad565b83620028e8565b6000601f841160018114620029a357600085156200298a5750838201355b600019600387901b1c1916600186901b17835562000244565b600083815260209020601f19861690835b82811015620029d65786850135825560209485019460019092019101620029b4565b5086821015620029f45760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81356001600160a01b03811680821462002a1f57600080fd5b82546001600160a01b03191617825550602082013560018201556040820135600282015560038101606083013580151580821462002a5c57600080fd5b60ff19835416915060ff81168217835550505062002a7e608083018362002881565b6200155981836004860162002939565b60005b8381101562002aab57818101518382015260200162002a91565b50506000910152565b60018060a01b0383168152604060208201526000825180604084015262002ae381606085016020870162002a8e565b601f01601f1916919091016060019392505050565b6001600160a01b0392909216825267ffffffffffffffff16602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562002b4457600080fd5b815167ffffffffffffffff8082111562002b5d57600080fd5b818401915084601f83011262002b7257600080fd5b81518181111562002b875762002b87620028d2565b604051601f8201601f19908116603f0116810190838211818310171562002bb25762002bb2620028d2565b8160405282815287602084870101111562002bcc57600080fd5b62002bdf83602083016020880162002a8e565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381811683821601908082111562002c235762002c2362002bea565b5092915050565b60006001600160a01b038281166002600160a01b0319810162002c515762002c5162002bea565b6001019392505050565b6001600160a01b0382811682821603908082111562002c235762002c2362002bea565b60006020828403121562002c9157600080fd5b505191905056fe60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea2646970667358221220c17af8d0947036ca2b24a0469bf1d1b8206c0500a8c423d45a13f6b005cab40164736f6c63430008180033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea26469706673582212206805e8f1728dc5f8977bb2f65489ba8d4a41dee49e47fd7efa70dd84957908a264736f6c63430008180033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61030000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506126fc565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b810190808035906020019092919080359060200190929190505050612732565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b81019080803590602001909291905050506127b9565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d1565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612b63565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c9d565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612edc565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612f01565b005b348015610d3457600080fd5b50610d3d612f90565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613139565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061313f565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613161565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff16906020019092919050505061331f565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613447565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613639565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137d8565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613805565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b96565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c1a565b005b34801561148957600080fd5b5061149261428c565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614296565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061443e565b005b3480156116a457600080fd5b506116ad61449f565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061451d565b005b34801561174a57600080fd5b50611753614950565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614989565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612b63565b5b5050565b611bd2604182614a2c90919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614a66565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614a2c90919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614a9590919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614a9590919063ffffffff16565b614a9590919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b60007fb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e3386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183600181111561266b57fe5b8152602001828103825284818151815260200191508051906020019080838360005b838110156126a857808201518184015260208101905061268d565b50505050905090810190601f1680156126d55780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16126f285858585614ab4565b9050949350505050565b6000606061270c868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561275057600080fd5b506040519080825280601f01601f1916602001820160405280156127835781602001600182028036833780820191505090505b50905060005b838110156127ae57808501548060208302602085010152508080600101915050612789565b508091505092915050565b60076020528060005260406000206000915090505481565b6127d9614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128435750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612b6b614989565b600354811115612be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000606060055433600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed8d8d8d8d8d8d8d8d8d8d8d8c604051808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612d5057fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528e8e82818152602001925080828437600081840152601f19601f820116905080830192505050848103835286818151815260200191508051906020019080838360005b83811015612e0a578082015181840152602081019050612def565b50505050905090810190601f168015612e375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612e70578082015181840152602081019050612e55565b50505050905090810190601f168015612e9d5780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390a1612eca8d8d8d8d8d8d8d8d8d8d8d614c9a565b9150509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111612f7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f8a84848484611bbe565b50505050565b6060600060035467ffffffffffffffff81118015612fad57600080fd5b50604051908082528060200260200182016040528015612fdc5781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613130578083838151811061308757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050613046565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6131ac8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050896151d7565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146131ea576131e9846156d7565b5b6132388787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615706565b60008211156132525761325082600060018685615941565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a9050613376878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a615b47565b61337f57600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561340c5780820151818401526020810190506133f1565b50505050905090810190601f1680156134395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561346257600080fd5b506040519080825280602002602001820160405280156134915781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156135645750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561356f57508482105b1561362a578084838151811061358157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506134fa565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561373b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b60006137ed8c8c8c8c8c8c8c8c8c8c8c614296565b8051906020012090509b9a5050505050505050505050565b61380d614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156138775750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6138e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613b9e614989565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613c22614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c8c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613cc457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613d36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613ea15750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613f13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614013576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561432757fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6143b361449f565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614446614989565b61444f816156d7565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6144cd6125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614525614989565b8060016003540310156145a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561460a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61467c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461477c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1806004541461494b5761494a81612b63565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614a3f5760009050614a60565b6000828402905082848281614a5057fe5b0414614a5b57600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614aaa57600080fd5b8091505092915050565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614b7f5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b614bf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b614bfe858585855a615b47565b90508015614c4e573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2614c92565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000806000614cb48e8e8e8e8e8e8e8e8e8e600554614296565b905060056000815480929190600101919050555080805190602001209150614cdd828286612f01565b506000614ce8615b93565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ece578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115614d8b57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015614e5d578082015181840152602081019050614e42565b50505050905090810190601f168015614e8a5780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015614eb557600080fd5b505af1158015614ec9573d6000803e3d6000fd5b505050505b6101f4614ef56109c48b01603f60408d0281614ee657fe5b04615bc490919063ffffffff16565b015a1015614f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a9050614fd48f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d14614fc9578e614fcf565b6109c45a035b615b47565b9350614fe95a82615bde90919063ffffffff16565b90508380614ff8575060008a14155b80615004575060008814155b615076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808911156150905761508d828b8b8b8b615941565b90505b84156150da577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a161511a565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146151c6578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b1580156151ad57600080fd5b505af11580156151c1573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b60006004541461524f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81518111156152c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600181101561533d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b835181101561564357600084828151811061535d57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153d15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561540957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561544157508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6154b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146155b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809250508080600101915050615346565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461593d576158ca8260008360015a615b47565b61593c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461597e5782615980565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a98576159ea3a86106159c7573a6159c9565b855b6159dc888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615b3d565b615abd85615aaf888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b9150615aca848284615bfe565b615b3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600180811115615b5557fe5b836001811115615b6157fe5b1415615b7a576000808551602087018986f49050615b8a565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015615bd45781615bd6565b825b905092915050565b600082821115615bed57600080fd5b600082840390508091505092915050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615ca55760208114615cad5760009350615cb8565b819350615cb8565b600051158215171593505b505050939250505056fea2646970667358221220047fac33099ca576d1c4f1ac6a8abdb0396e42ad6a397d2cb2f4dc1624cc0c5b64736f6c634300070600336080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c634300081700337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf360806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b7f000000000000000000000000998739bfdaadde7c933b942a68053933098f9eda73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102106030913960400191505060405180910390fd5b805160205b8181101561020a578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101cd57600181146101dd576101e8565b6000808585888a5af191506101e8565b6000808585895af491505b5060008114156101f757600080fd5b8260550187019650505050505050610188565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212205c784303626eec02b71940b551976170b500a8a36cc5adcbeb2c19751a76d05464736f6c6343000706003360806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c1690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b805160205b8181101561015f578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461012857600181146101385761013d565b6000808585888a5af1915061013d565b600080fd5b50600081141561014c57600080fd5b82605501870196505050505050506100e3565b50505056fea264697066735822122035246402746c96964495cae5b36461fd44dfb89f8e6cf6f6b8d60c0aa89f414864736f6c634300070600336080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c634300081100336080604052600436106100435760003560e01c8063076c37b21461004f578063481286e61461007157806356299481146100ba57806366cfa057146100da57600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5061006f61006a366004610327565b6100fa565b005b34801561007d57600080fd5b5061009161008c366004610327565b61014a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b506100916100d5366004610349565b61015d565b3480156100e657600080fd5b5061006f6100f53660046103ca565b610172565b61014582826040518060200161010f9061031a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052610183565b505050565b600061015683836102e7565b9392505050565b600061016a8484846102f0565b949350505050565b61017d838383610183565b50505050565b6000834710156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b815160000361025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016101eb565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016101eb565b60006101568383305b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61014e806104ad83390190565b6000806040838503121561033a57600080fd5b50508035926020909101359150565b60008060006060848603121561035e57600080fd5b8335925060208401359150604084013573ffffffffffffffffffffffffffffffffffffffff8116811461039057600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156103df57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561040557600080fd5b818601915086601f83011261041957600080fd5b81358181111561042b5761042b61039b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104715761047161039b565b8160405282815289602084870101111561048a57600080fd5b826020860160208301376000602084830101528095505050505050925092509256fe608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460b1565b604e565b60405190815260200160405180910390f35b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16608857600060aa565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560c357600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811460ed57600080fd5b80915050925092905056fea26469706673582212205ffd4e6cede7d06a5daf93d48d0541fc68189eeb16608c1999a82063b666eb1164736f6c63430008130033a2646970667358221220fdc4a0fe96e3b21c108ca155438d37c9143fb01278a3c1d274948bad89c564ba64736f6c63430008130033885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506127d7565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b81019080803590602001909291908035906020019092919050505061280d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b8101908080359060200190929190505050612894565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ac565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612c3e565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612d78565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132b5565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506132da565b005b348015610d3457600080fd5b50610d3d613369565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613512565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613518565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061353a565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff1690602001909291905050506136f8565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613820565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613a12565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bb1565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bde565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f6f565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ff3565b005b34801561148957600080fd5b50611492614665565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061466f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614817565b005b3480156116a457600080fd5b506116ad614878565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506148f6565b005b34801561174a57600080fd5b50611753614d29565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612c3e565b5b5050565b611bd2604182614e0590919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614e3f565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614e0590919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614e6e90919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614e6e90919063ffffffff16565b614e6e90919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126bc5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61273b858585855a614e8d565b9050801561278b573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a26127cf565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b600060606127e7868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561282b57600080fd5b506040519080825280601f01601f19166020018201604052801561285e5781602001600182028036833780820191505090505b50905060005b8381101561288957808501548060208302602085010152508080600101915050612864565b508091505092915050565b60076020528060005260406000206000915090505481565b6128b4614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612c46614d62565b600354811115612cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612d928e8e8e8e8e8e8e8e8e8e60055461466f565b905060056000815480929190600101919050555080805190602001209150612dbb8282866132da565b506000612dc6614ed9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612fac578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612e6957fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015612f3b578082015181840152602081019050612f20565b50505050905090810190601f168015612f685780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015612f9357600080fd5b505af1158015612fa7573d6000803e3d6000fd5b505050505b6101f4612fd36109c48b01603f60408d0281612fc457fe5b04614f0a90919063ffffffff16565b015a1015613049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506130b28f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146130a7578e6130ad565b6109c45a035b614e8d565b93506130c75a82614f2490919063ffffffff16565b905083806130d6575060008a14155b806130e2575060008814155b613154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561316e5761316b828b8b8b8b614f44565b90505b84156131b8577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a16131f8565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146132a4578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561328b57600080fd5b505af115801561329f573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111613357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61336384848484611bbe565b50505050565b6060600060035467ffffffffffffffff8111801561338657600080fd5b506040519080825280602002602001820160405280156133b55781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613509578083838151811061346057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818060010192505061341f565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6135858a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508961514a565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135c3576135c28461564a565b5b6136118787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615679565b600082111561362b5761362982600060018685614f44565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a905061374f878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a614e8d565b61375857600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137e55780820151818401526020810190506137ca565b50505050905090810190601f1680156138125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561383b57600080fd5b5060405190808252806020026020018201604052801561386a5781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561393d5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561394857508482105b15613a03578084838151811061395a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506138d3565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613b14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613bc68c8c8c8c8c8c8c8c8c8c8c61466f565b8051906020012090509b9a5050505050505050505050565b613be6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c505750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613cc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613f77614d62565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613ffb614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156140655750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561409d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61410f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561427a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6142ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561470057fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b61478c614878565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b61481f614d62565b6148288161564a565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6148a66125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b6148fe614d62565b806001600354031015614979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156149e35750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614b55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414614d2457614d2381612c3e565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614e185760009050614e39565b6000828402905082848281614e2957fe5b0414614e3457600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614e8357600080fd5b8091505092915050565b6000600180811115614e9b57fe5b836001811115614ea757fe5b1415614ec0576000808551602087018986f49050614ed0565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015614f1a5781614f1c565b825b905092915050565b600082821115614f3357600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614f815782614f83565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561509b57614fed3a8610614fca573a614fcc565b855b614fdf888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615140565b6150c0856150b2888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91506150cd8482846158b4565b61513f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146151c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8151811115615239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156152b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156155b65760008482815181106152d057fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153445750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561537c57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156153b457508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b615426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506152b9565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461577b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146158b05761583d8260008360015a614e8d565b6158af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d6000811461595b5760208114615963576000935061596e565b81935061596e565b600051158215171593505b505050939250505056fea26469706673582212203874bcf92e1722cc7bfa0cef1a0985cf0dc3485ba0663db3747ccdf1605df53464736f6c634300070600336040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000103611b69577f866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f2890565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000007fc98430eaedbb6070b35b39d798725049088348165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c0033608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00293373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500a26469706673582212208da6cf93e88e606ac272d7477a1770909a5422bcd1e154844b13d08b7b65b6d464736f6c63430008180033", + Bin: "0x6080604052600c80546201000162ff00ff19909116179055601280546001600160a01b03191673dddddddddddddddddddddddddddddddddddddddd17905534801561004957600080fd5b506201d8ae806200005b6000396000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063051ae5a9146200004b5780630ff273a41462000064578063f8ccbf47146200007b575b600080fd5b620000626200005c36600462002745565b620000a3565b005b620000626200007536600462002745565b6200024b565b600c546200008f9062010000900460ff1681565b604051901515815260200160405180910390f35b620000ae8162000259565b604051635a6b63c160e11b815260008051602062003b4a8339815191529063b4d6c78290620000e29033906004016200278a565b600060405180830381600087803b158015620000fd57600080fd5b505af115801562000112573d6000803e3d6000fd5b5050604051631c72346d60e01b815233600482015260008051602062003b4a8339815191529250631c72346d9150602401600060405180830381600087803b1580156200015e57600080fd5b505af115801562000173573d6000803e3d6000fd5b505060405163c88a5e6d60e01b81523360048201526000602482015260008051602062003b4a833981519152925063c88a5e6d9150604401600060405180830381600087803b158015620001c657600080fd5b505af1158015620001db573d6000803e3d6000fd5b505060405163709ecd3f60e01b815260008051602062003b4a833981519152925063709ecd3f91506200021490601190600401620027e9565b600060405180830381600087803b1580156200022f57600080fd5b505af115801562000244573d6000803e3d6000fd5b5050505050565b620002568162000259565b50565b80600d62000268828262002a06565b5050600e54604051632024eee960e11b8152600481019190915260008051602062003b4a83398151915290634049ddd290602401600060405180830381600087803b158015620002b757600080fd5b505af1158015620002cc573d6000803e3d6000fd5b50506012546040516303223eab60e11b81526001600160a01b03909116600482015260008051602062003b4a83398151915292506306447d569150602401600060405180830381600087803b1580156200032557600080fd5b505af11580156200033a573d6000803e3d6000fd5b5050505062000348620003a0565b62000352620003e8565b6000805160206200e55c83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200022f57600080fd5b620003aa6200155f565b620003b4620015ae565b620003be62001716565b620003c8620018f7565b620003d2620019be565b620003dc62001b1f565b620003e662001bfc565b565b6000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273ca11bde05977b3631167028862be2a173976ca1160405180610f000160405280610ee081526020016201bf73610ee091396040518363ffffffff1660e01b81526004016200045a92919062002ab4565b600060405180830381600087803b1580156200047557600080fd5b505af11580156200048a573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c7827313b0d85ccb8bf860b6b79af3029fca081ae9bef260405180610660016040528061063081526020016200df2c61063091396040518363ffffffff1660e01b81526004016200050092919062002ab4565b600060405180830381600087803b1580156200051b57600080fd5b505af115801562000530573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c7827369f4d1788e39c87893c980c06edf4b7f686e2938604051806159e001604052806159ae81526020016200e57c6159ae91396040518363ffffffff1660e01b8152600401620005a692919062002ab4565b600060405180830381600087803b158015620005c157600080fd5b505af1158015620005d6573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273fb1bffc9d739b8d520daf37df666da4c687191ea60405180615d200160405280615cf8815260200162003b6a615cf891396040518363ffffffff1660e01b81526004016200064c92919062002ab4565b600060405180830381600087803b1580156200066757600080fd5b505af11580156200067c573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273a1dabef33b3b82c7814b6d82a79e50f4ac44102b604051806101c0016040528061019a81526020016200db8261019a91396040518363ffffffff1660e01b8152600401620006f292919062002ab4565b600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273914d7fec6aac8cd542e72bca78b30650d45643d760405180608001604052806045815260200162009a25604591396040518363ffffffff1660e01b81526004016200079592919062002ab4565b600060405180830381600087803b158015620007b057600080fd5b505af1158015620007c5573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782734e59b44847b379578588920ca78fbf26c0b4956c60405180608001604052806045815260200162009a25604591396040518363ffffffff1660e01b81526004016200083892919062002ab4565b600060405180830381600087803b1580156200085357600080fd5b505af115801562000868573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273998739bfdaadde7c933b942a68053933098f9eda604051806102a00160405280610275815260200162009a6a61027591396040518363ffffffff1660e01b8152600401620008de92919062002ab4565b600060405180830381600087803b158015620008f957600080fd5b505af11580156200090e573d6000803e3d6000fd5b5050600e5460008051602062003b4a833981519152925063b4d6c78291506e22d473030f116ddee9f6b43ac78ba390620009489062001d50565b6040518363ffffffff1660e01b81526004016200096792919062002ab4565b600060405180830381600087803b1580156200098257600080fd5b505af115801562000997573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782737fc98430eaedbb6070b35b39d79872504908834860405180610240016040528061021081526020016200dd1c61021091396040518363ffffffff1660e01b815260040162000a0d92919062002ab4565b600060405180830381600087803b15801562000a2857600080fd5b505af115801562000a3d573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782735ff137d4b0fdcd49dca30c7cf57e578a026d278960405180615cc00160405280615c898152602001620162ea615c8991396040518363ffffffff1660e01b815260040162000ab392919062002ab4565b600060405180830381600087803b15801562000ace57600080fd5b505af115801562000ae3573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78273efc2c1444ebcc4db75e7613d20c6a62ff67a167c6040518061020001604052806101c38152602001620098626101c391396040518363ffffffff1660e01b815260040162000b5992919062002ab4565b600060405180830381600087803b15801562000b7457600080fd5b505af115801562000b89573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c7826f71727de22e5e9d8baf0edac6f37da03260405180613ee00160405280613ea3815260200162009cdf613ea391396040518363ffffffff1660e01b815260040162000bfb92919062002ab4565b600060405180830381600087803b15801562000c1657600080fd5b505af115801562000c2b573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782731820a4b7618bde71dce8cdc73aab6c95905fad2460405180610a0001604052806109c581526020016201ce536109c591396040518363ffffffff1660e01b815260040162000ca192919062002ab4565b600060405180830381600087803b15801562000cbc57600080fd5b505af115801562000cd1573d6000803e3d6000fd5b505050506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c782720f3df6d732807ef1319fb7b8bb8522d0beac026040518060a00160405280606181526020016201d818606191396040518363ffffffff1660e01b815260040162000d4392919062002ab4565b600060405180830381600087803b15801562000d5e57600080fd5b505af115801562000d73573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000dc290730b799c86a49deeb90402691f1041aa3af2d3c8759060019060040162002af8565b600060405180830381600087803b15801562000ddd57600080fd5b505af115801562000df2573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000e419073ca11bde05977b3631167028862be2a173976ca119060019060040162002af8565b600060405180830381600087803b15801562000e5c57600080fd5b505af115801562000e71573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000ec0907313b0d85ccb8bf860b6b79af3029fca081ae9bef29060019060040162002af8565b600060405180830381600087803b15801562000edb57600080fd5b505af115801562000ef0573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000f3f907369f4d1788e39c87893c980c06edf4b7f686e29389060019060040162002af8565b600060405180830381600087803b15801562000f5a57600080fd5b505af115801562000f6f573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062000fbe9073fb1bffc9d739b8d520daf37df666da4c687191ea9060019060040162002af8565b600060405180830381600087803b15801562000fd957600080fd5b505af115801562000fee573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200103d9073a1dabef33b3b82c7814b6d82a79e50f4ac44102b9060019060040162002af8565b600060405180830381600087803b1580156200105857600080fd5b505af11580156200106d573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620010bc9073914d7fec6aac8cd542e72bca78b30650d45643d79060019060040162002af8565b600060405180830381600087803b158015620010d757600080fd5b505af1158015620010ec573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200113b90734e59b44847b379578588920ca78fbf26c0b4956c9060019060040162002af8565b600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620011ba9073998739bfdaadde7c933b942a68053933098f9eda9060019060040162002af8565b600060405180830381600087803b158015620011d557600080fd5b505af1158015620011ea573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b57915062001234906e22d473030f116ddee9f6b43ac78ba39060019060040162002af8565b600060405180830381600087803b1580156200124f57600080fd5b505af115801562001264573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620012b390737fc98430eaedbb6070b35b39d7987250490883489060019060040162002af8565b600060405180830381600087803b158015620012ce57600080fd5b505af1158015620012e3573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200133290735ff137d4b0fdcd49dca30c7cf57e578a026d27899060019060040162002af8565b600060405180830381600087803b1580156200134d57600080fd5b505af115801562001362573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620013b19073efc2c1444ebcc4db75e7613d20c6a62ff67a167c9060019060040162002af8565b600060405180830381600087803b158015620013cc57600080fd5b505af1158015620013e1573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200142c906f71727de22e5e9d8baf0edac6f37da0329060019060040162002af8565b600060405180830381600087803b1580156200144757600080fd5b505af11580156200145c573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b579150620014ab90731820a4b7618bde71dce8cdc73aab6c95905fad249060019060040162002af8565b600060405180830381600087803b158015620014c657600080fd5b505af1158015620014db573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003b4a833981519152925063f8e18b5791506200152990720f3df6d732807ef1319fb7b8bb8522d0beac029060019060040162002af8565b600060405180830381600087803b1580156200154457600080fd5b505af115801562001559573d6000803e3d6000fd5b50505050565b60006200156b62001e86565b905060005b8151811015620015aa57620015a182828151811062001593576200159362002b1b565b602002602001015162001f23565b60010162001570565b5050565b6000620015c4600162048789608a1b016200235f565b604051630fafdced60e21b815260206004820152602160248201527f506f7274616c52656769737472792e736f6c3a506f7274616c526567697374726044820152607960f81b606482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490608401600060405180830381865afa15801562001654573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200167e919081019062002b31565b6040518363ffffffff1660e01b81526004016200169d92919062002ab4565b600060405180830381600087803b158015620016b857600080fd5b505af1158015620016cd573d6000803e3d6000fd5b50505050620016dc8162002436565b600d5460405163189acdbd60e31b81526001600160a01b039091166004820152600162048789608a1b019063c4d66de89060240162000214565b600f5460405163c88a5e6d60e01b8152600262048789608a1b016004820152602481019190915260008051602062003b4a8339815191529063c88a5e6d90604401600060405180830381600087803b1580156200177257600080fd5b505af115801562001787573d6000803e3d6000fd5b505050506000620017a1600262048789608a1b016200235f565b604051630fafdced60e21b815260206004820152602560248201527f4f6d6e694272696467654e61746976652e736f6c3a4f6d6e694272696467654e604482015264617469766560d81b606482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490608401600060405180830381865afa15801562001835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200185f919081019062002b31565b6040518363ffffffff1660e01b81526004016200187e92919062002ab4565b600060405180830381600087803b1580156200189957600080fd5b505af1158015620018ae573d6000803e3d6000fd5b50505050620018bd8162002436565b600d5460405163189acdbd60e31b81526001600160a01b039091166004820152600262048789608a1b019063c4d66de89060240162000214565b604051630fafdced60e21b815260206004820152600f60248201526e574f6d6e692e736f6c3a574f6d6e6960881b604482015260008051602062003b4a8339815191529063b4d6c78290600362048789608a1b01908390633ebf73b490606401600060405180830381865afa15801562001975573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200199f919081019062002b31565b6040518363ffffffff1660e01b81526004016200152992919062002ab4565b6000620019d4600162333333608a1b016200235f565b604051630fafdced60e21b81526020600482015260136024820152725374616b696e672e736f6c3a5374616b696e6760681b604482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001a50573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001a7a919081019062002b31565b6040518363ffffffff1660e01b815260040162001a9992919062002ab4565b600060405180830381600087803b15801562001ab457600080fd5b505af115801562001ac9573d6000803e3d6000fd5b5050505062001ad88162002436565b600d5460105460405163400ada7560e01b81526001600160a01b03909216600483015260ff1615156024820152600162333333608a1b019063400ada759060440162000214565b600062001b35600262333333608a1b016200235f565b604051630fafdced60e21b8152602060048201526015602482015274536c617368696e672e736f6c3a536c617368696e6760581b604482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001bb3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001bdd919081019062002b31565b6040518363ffffffff1660e01b81526004016200021492919062002ab4565b600062001c12600362333333608a1b016200235f565b604051630fafdced60e21b8152602060048201526013602482015272557067726164652e736f6c3a5570677261646560681b604482015290915060008051602062003b4a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001c8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001cb8919081019062002b31565b6040518363ffffffff1660e01b815260040162001cd792919062002ab4565b600060405180830381600087803b15801562001cf257600080fd5b505af115801562001d07573d6000803e3d6000fd5b5050505062001d168162002436565b600d5460405163189acdbd60e31b81526001600160a01b039091166004820152600362333333608a1b019063c4d66de89060240162000214565b6060600060405160200162001d7290662832b936b4ba1960c91b815260070190565b604051602081830303815290604052805190602001209050600060405160200162001df2907f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430190565b60408051601f198184030181528282528051602091820120908301819052908201849052606082018690526e22d473030f116ddee9f6b43ac78ba36080830152915060009060a001604051602081830303815290604052805190602001209050604051806123e001604052806123c0815260200162013f2a6123c09139611b41810195909552611b67850152509192915050565b604080516002808252606080830184529260208301908036833701905050905062048789608a1b8160008151811062001ec35762001ec362002b1b565b60200260200101906001600160a01b031690816001600160a01b03168152505062333333608a1b8160018151811062001f005762001f0062002b1b565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b63ffffffff81161562001f715760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206e616d65737061636560781b60448201526064015b60405180910390fd5b60015b610400816001600160a01b0316116200232957600062001f95828462002c00565b9050600362048789608a1b016001600160a01b0382160362001fb8575062002314565b600062001fc582620024a6565b62001fd257600062001fdd565b62001fdd826200235f565b90506001600160a01b0381163b156200202c5760405162461bcd60e51b815260206004820152601060248201526f1a5b5c1b08185b1c9958591e481cd95d60821b604482015260640162001f68565b60408051635a6b63c160e11b81526001600160a01b038316600482015260248101919091526002604482015261030360f41b606482015260008051602062003b4a8339815191529063b4d6c78290608401600060405180830381600087803b1580156200209857600080fd5b505af1158015620020ad573d6000803e3d6000fd5b5050600d54604051600093508492506001600160a01b0390911690620020d39062002737565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562002116573d6000803e3d6000fd5b5090506000805160206200e55c83398151915260001c6001600160a01b031663b4d6c78284836001600160a01b0316803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b81526004016200218092919062002ab4565b600060405180830381600087803b1580156200219b57600080fd5b505af1158015620021b0573d6000803e3d6000fd5b50505050620021c0838362002553565b620021d683620021d083620025f0565b62002693565b604051635a6b63c160e11b815260008051602062003b4a8339815191529063b4d6c782906200220a9085906004016200278a565b600060405180830381600087803b1580156200222557600080fd5b505af11580156200223a573d6000803e3d6000fd5b5050604051635a6b63c160e11b815260008051602062003b4a833981519152925063b4d6c7829150620022729084906004016200278a565b600060405180830381600087803b1580156200228d57600080fd5b505af1158015620022a2573d6000803e3d6000fd5b5050604051631c72346d60e01b81526001600160a01b038416600482015260008051602062003b4a8339815191529250631c72346d9150602401600060405180830381600087803b158015620022f757600080fd5b505af11580156200230c573d6000803e3d6000fd5b505050505050505b80620023208162002c2a565b91505062001f74565b50604051635a6b63c160e11b815260008051602062003b4a8339815191529063b4d6c7829062000214906000906004016200278a565b60006200236c82620026fd565b620023ba5760405162461bcd60e51b815260206004820152601b60248201527f5072656465706c6f79733a206e6f742061207072656465706c6f790000000000604482015260640162001f68565b600362048789608a1b016001600160a01b038316036200241d5760405162461bcd60e51b815260206004820152601760248201527f5072656465706c6f79733a206e6f742070726f78696564000000000000000000604482015260640162001f68565b62002430826001600160a01b0362002c5b565b92915050565b6040516370ca10bb60e01b81526001600160a01b03821660048201527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00602482015267ffffffffffffffff604482015260008051602062003b4a833981519152906370ca10bb9060640162000214565b60006001600160a01b038216600162048789608a1b011480620024da57506001600160a01b038216600262048789608a1b01145b80620024f757506001600160a01b038216600362048789608a1b01145b806200251457506001600160a01b038216600162333333608a1b01145b806200253157506001600160a01b038216600262333333608a1b01145b806200243057506001600160a01b038216600362333333608a1b011492915050565b6040516370ca10bb60e01b81526001600160a01b0380841660048301527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60248301528216604482015260008051602062003b4a833981519152906370ca10bb906064015b600060405180830381600087803b158015620025d357600080fd5b505af1158015620025e8573d6000803e3d6000fd5b505050505050565b604051630667f9d760e41b81526001600160a01b03821660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103602482015260009060008051602062003b4a8339815191529063667f9d7090604401602060405180830381865afa1580156200266d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002430919062002c7e565b6040516370ca10bb60e01b81526001600160a01b0380841660048301527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360248301528216604482015260008051602062003b4a833981519152906370ca10bb90606401620025b8565b60006001600160961b03600a83901c166204878960801b1480620024305750506233333360801b600a9190911c6001600160961b03161490565b610eb18062002c9983390190565b6000602082840312156200275857600080fd5b813567ffffffffffffffff8111156200277057600080fd5b820160a081850312156200278357600080fd5b9392505050565b6001600160a01b0391909116815260406020820181905260009082015260600190565b600181811c90821680620027c257607f821691505b602082108103620027e357634e487b7160e01b600052602260045260246000fd5b50919050565b6000602080835260008454620027ff81620027ad565b8060208701526040600180841660008114620028245760018114620028415762002873565b60ff19851660408a0152604084151560051b8a0101955062002873565b89600052602060002060005b858110156200286a5781548b82018601529083019088016200284d565b8a016040019650505b509398975050505050505050565b6000808335601e198436030181126200289957600080fd5b83018035915067ffffffffffffffff821115620028b557600080fd5b602001915036819003821315620028cb57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b601f82111562002934576000816000526020600020601f850160051c81016020861015620029135750805b601f850160051c820191505b81811015620025e8578281556001016200291f565b505050565b67ffffffffffffffff831115620029545762002954620028d2565b6200296c83620029658354620027ad565b83620028e8565b6000601f841160018114620029a357600085156200298a5750838201355b600019600387901b1c1916600186901b17835562000244565b600083815260209020601f19861690835b82811015620029d65786850135825560209485019460019092019101620029b4565b5086821015620029f45760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81356001600160a01b03811680821462002a1f57600080fd5b82546001600160a01b03191617825550602082013560018201556040820135600282015560038101606083013580151580821462002a5c57600080fd5b60ff19835416915060ff81168217835550505062002a7e608083018362002881565b6200155981836004860162002939565b60005b8381101562002aab57818101518382015260200162002a91565b50506000910152565b60018060a01b0383168152604060208201526000825180604084015262002ae381606085016020870162002a8e565b601f01601f1916919091016060019392505050565b6001600160a01b0392909216825267ffffffffffffffff16602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562002b4457600080fd5b815167ffffffffffffffff8082111562002b5d57600080fd5b818401915084601f83011262002b7257600080fd5b81518181111562002b875762002b87620028d2565b604051601f8201601f19908116603f0116810190838211818310171562002bb25762002bb2620028d2565b8160405282815287602084870101111562002bcc57600080fd5b62002bdf83602083016020880162002a8e565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381811683821601908082111562002c235762002c2362002bea565b5092915050565b60006001600160a01b038281166002600160a01b0319810162002c515762002c5162002bea565b6001019392505050565b6001600160a01b0382811682821603908082111562002c235762002c2362002bea565b60006020828403121562002c9157600080fd5b505191905056fe60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea2646970667358221220c17af8d0947036ca2b24a0469bf1d1b8206c0500a8c423d45a13f6b005cab40164736f6c63430008180033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea26469706673582212206805e8f1728dc5f8977bb2f65489ba8d4a41dee49e47fd7efa70dd84957908a264736f6c63430008180033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61030000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506126fc565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b810190808035906020019092919080359060200190929190505050612732565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b81019080803590602001909291905050506127b9565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d1565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612b63565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c9d565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612edc565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612f01565b005b348015610d3457600080fd5b50610d3d612f90565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613139565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061313f565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613161565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff16906020019092919050505061331f565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613447565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613639565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137d8565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613805565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b96565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c1a565b005b34801561148957600080fd5b5061149261428c565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614296565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061443e565b005b3480156116a457600080fd5b506116ad61449f565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061451d565b005b34801561174a57600080fd5b50611753614950565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614989565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612b63565b5b5050565b611bd2604182614a2c90919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614a66565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614a2c90919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614a9590919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614a9590919063ffffffff16565b614a9590919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b60007fb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e3386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183600181111561266b57fe5b8152602001828103825284818151815260200191508051906020019080838360005b838110156126a857808201518184015260208101905061268d565b50505050905090810190601f1680156126d55780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16126f285858585614ab4565b9050949350505050565b6000606061270c868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561275057600080fd5b506040519080825280601f01601f1916602001820160405280156127835781602001600182028036833780820191505090505b50905060005b838110156127ae57808501548060208302602085010152508080600101915050612789565b508091505092915050565b60076020528060005260406000206000915090505481565b6127d9614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128435750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612b6b614989565b600354811115612be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000606060055433600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed8d8d8d8d8d8d8d8d8d8d8d8c604051808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612d5057fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528e8e82818152602001925080828437600081840152601f19601f820116905080830192505050848103835286818151815260200191508051906020019080838360005b83811015612e0a578082015181840152602081019050612def565b50505050905090810190601f168015612e375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612e70578082015181840152602081019050612e55565b50505050905090810190601f168015612e9d5780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390a1612eca8d8d8d8d8d8d8d8d8d8d8d614c9a565b9150509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111612f7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f8a84848484611bbe565b50505050565b6060600060035467ffffffffffffffff81118015612fad57600080fd5b50604051908082528060200260200182016040528015612fdc5781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613130578083838151811061308757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050613046565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6131ac8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050896151d7565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146131ea576131e9846156d7565b5b6132388787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615706565b60008211156132525761325082600060018685615941565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a9050613376878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a615b47565b61337f57600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561340c5780820151818401526020810190506133f1565b50505050905090810190601f1680156134395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561346257600080fd5b506040519080825280602002602001820160405280156134915781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156135645750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561356f57508482105b1561362a578084838151811061358157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506134fa565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561373b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b60006137ed8c8c8c8c8c8c8c8c8c8c8c614296565b8051906020012090509b9a5050505050505050505050565b61380d614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156138775750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6138e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613b9e614989565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613c22614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c8c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613cc457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613d36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613ea15750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613f13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614013576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561432757fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6143b361449f565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614446614989565b61444f816156d7565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6144cd6125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614525614989565b8060016003540310156145a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561460a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61467c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461477c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1806004541461494b5761494a81612b63565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614a3f5760009050614a60565b6000828402905082848281614a5057fe5b0414614a5b57600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614aaa57600080fd5b8091505092915050565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614b7f5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b614bf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b614bfe858585855a615b47565b90508015614c4e573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2614c92565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000806000614cb48e8e8e8e8e8e8e8e8e8e600554614296565b905060056000815480929190600101919050555080805190602001209150614cdd828286612f01565b506000614ce8615b93565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ece578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115614d8b57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015614e5d578082015181840152602081019050614e42565b50505050905090810190601f168015614e8a5780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015614eb557600080fd5b505af1158015614ec9573d6000803e3d6000fd5b505050505b6101f4614ef56109c48b01603f60408d0281614ee657fe5b04615bc490919063ffffffff16565b015a1015614f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a9050614fd48f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d14614fc9578e614fcf565b6109c45a035b615b47565b9350614fe95a82615bde90919063ffffffff16565b90508380614ff8575060008a14155b80615004575060008814155b615076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808911156150905761508d828b8b8b8b615941565b90505b84156150da577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a161511a565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146151c6578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b1580156151ad57600080fd5b505af11580156151c1573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b60006004541461524f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81518111156152c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600181101561533d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b835181101561564357600084828151811061535d57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153d15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561540957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561544157508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6154b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146155b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809250508080600101915050615346565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461593d576158ca8260008360015a615b47565b61593c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461597e5782615980565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a98576159ea3a86106159c7573a6159c9565b855b6159dc888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615b3d565b615abd85615aaf888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b9150615aca848284615bfe565b615b3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600180811115615b5557fe5b836001811115615b6157fe5b1415615b7a576000808551602087018986f49050615b8a565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015615bd45781615bd6565b825b905092915050565b600082821115615bed57600080fd5b600082840390508091505092915050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615ca55760208114615cad5760009350615cb8565b819350615cb8565b600051158215171593505b505050939250505056fea2646970667358221220047fac33099ca576d1c4f1ac6a8abdb0396e42ad6a397d2cb2f4dc1624cc0c5b64736f6c634300070600336080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c634300081700337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf360806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b7f000000000000000000000000998739bfdaadde7c933b942a68053933098f9eda73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102106030913960400191505060405180910390fd5b805160205b8181101561020a578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101cd57600181146101dd576101e8565b6000808585888a5af191506101e8565b6000808585895af491505b5060008114156101f757600080fd5b8260550187019650505050505050610188565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212205c784303626eec02b71940b551976170b500a8a36cc5adcbeb2c19751a76d05464736f6c6343000706003360806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c1690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b805160205b8181101561015f578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461012857600181146101385761013d565b6000808585888a5af1915061013d565b600080fd5b50600081141561014c57600080fd5b82605501870196505050505050506100e3565b50505056fea264697066735822122035246402746c96964495cae5b36461fd44dfb89f8e6cf6f6b8d60c0aa89f414864736f6c634300070600336080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c634300081100336080604052600436106100435760003560e01c8063076c37b21461004f578063481286e61461007157806356299481146100ba57806366cfa057146100da57600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5061006f61006a366004610327565b6100fa565b005b34801561007d57600080fd5b5061009161008c366004610327565b61014a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b506100916100d5366004610349565b61015d565b3480156100e657600080fd5b5061006f6100f53660046103ca565b610172565b61014582826040518060200161010f9061031a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052610183565b505050565b600061015683836102e7565b9392505050565b600061016a8484846102f0565b949350505050565b61017d838383610183565b50505050565b6000834710156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b815160000361025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016101eb565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016101eb565b60006101568383305b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61014e806104ad83390190565b6000806040838503121561033a57600080fd5b50508035926020909101359150565b60008060006060848603121561035e57600080fd5b8335925060208401359150604084013573ffffffffffffffffffffffffffffffffffffffff8116811461039057600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156103df57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561040557600080fd5b818601915086601f83011261041957600080fd5b81358181111561042b5761042b61039b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104715761047161039b565b8160405282815289602084870101111561048a57600080fd5b826020860160208301376000602084830101528095505050505050925092509256fe608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460b1565b604e565b60405190815260200160405180910390f35b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16608857600060aa565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560c357600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811460ed57600080fd5b80915050925092905056fea26469706673582212205ffd4e6cede7d06a5daf93d48d0541fc68189eeb16608c1999a82063b666eb1164736f6c63430008130033a2646970667358221220fdc4a0fe96e3b21c108ca155438d37c9143fb01278a3c1d274948bad89c564ba64736f6c63430008130033885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506127d7565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b81019080803590602001909291908035906020019092919050505061280d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b8101908080359060200190929190505050612894565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ac565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612c3e565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612d78565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132b5565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506132da565b005b348015610d3457600080fd5b50610d3d613369565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613512565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613518565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061353a565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff1690602001909291905050506136f8565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613820565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613a12565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bb1565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bde565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f6f565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ff3565b005b34801561148957600080fd5b50611492614665565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061466f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614817565b005b3480156116a457600080fd5b506116ad614878565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506148f6565b005b34801561174a57600080fd5b50611753614d29565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612c3e565b5b5050565b611bd2604182614e0590919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614e3f565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614e0590919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614e6e90919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614e6e90919063ffffffff16565b614e6e90919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126bc5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61273b858585855a614e8d565b9050801561278b573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a26127cf565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b600060606127e7868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561282b57600080fd5b506040519080825280601f01601f19166020018201604052801561285e5781602001600182028036833780820191505090505b50905060005b8381101561288957808501548060208302602085010152508080600101915050612864565b508091505092915050565b60076020528060005260406000206000915090505481565b6128b4614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612c46614d62565b600354811115612cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612d928e8e8e8e8e8e8e8e8e8e60055461466f565b905060056000815480929190600101919050555080805190602001209150612dbb8282866132da565b506000612dc6614ed9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612fac578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612e6957fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015612f3b578082015181840152602081019050612f20565b50505050905090810190601f168015612f685780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015612f9357600080fd5b505af1158015612fa7573d6000803e3d6000fd5b505050505b6101f4612fd36109c48b01603f60408d0281612fc457fe5b04614f0a90919063ffffffff16565b015a1015613049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506130b28f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146130a7578e6130ad565b6109c45a035b614e8d565b93506130c75a82614f2490919063ffffffff16565b905083806130d6575060008a14155b806130e2575060008814155b613154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561316e5761316b828b8b8b8b614f44565b90505b84156131b8577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a16131f8565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146132a4578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561328b57600080fd5b505af115801561329f573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111613357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61336384848484611bbe565b50505050565b6060600060035467ffffffffffffffff8111801561338657600080fd5b506040519080825280602002602001820160405280156133b55781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613509578083838151811061346057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818060010192505061341f565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6135858a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508961514a565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135c3576135c28461564a565b5b6136118787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615679565b600082111561362b5761362982600060018685614f44565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a905061374f878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a614e8d565b61375857600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137e55780820151818401526020810190506137ca565b50505050905090810190601f1680156138125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561383b57600080fd5b5060405190808252806020026020018201604052801561386a5781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561393d5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561394857508482105b15613a03578084838151811061395a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506138d3565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613b14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613bc68c8c8c8c8c8c8c8c8c8c8c61466f565b8051906020012090509b9a5050505050505050505050565b613be6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c505750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613cc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613f77614d62565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613ffb614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156140655750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561409d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61410f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561427a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6142ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561470057fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b61478c614878565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b61481f614d62565b6148288161564a565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6148a66125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b6148fe614d62565b806001600354031015614979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156149e35750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614b55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414614d2457614d2381612c3e565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614e185760009050614e39565b6000828402905082848281614e2957fe5b0414614e3457600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614e8357600080fd5b8091505092915050565b6000600180811115614e9b57fe5b836001811115614ea757fe5b1415614ec0576000808551602087018986f49050614ed0565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015614f1a5781614f1c565b825b905092915050565b600082821115614f3357600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614f815782614f83565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561509b57614fed3a8610614fca573a614fcc565b855b614fdf888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615140565b6150c0856150b2888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91506150cd8482846158b4565b61513f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146151c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8151811115615239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156152b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156155b65760008482815181106152d057fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153445750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561537c57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156153b457508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b615426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506152b9565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461577b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146158b05761583d8260008360015a614e8d565b6158af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d6000811461595b5760208114615963576000935061596e565b81935061596e565b600051158215171593505b505050939250505056fea26469706673582212203874bcf92e1722cc7bfa0cef1a0985cf0dc3485ba0663db3747ccdf1605df53464736f6c634300070600336040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000103611b69577f866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f2890565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000007fc98430eaedbb6070b35b39d798725049088348165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c0033608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00293373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500a26469706673582212205b7ad19cfa38abb07b74b42dcdf5046945d998d86f5797612eb2e6d571705da864736f6c63430008180033", } // AllocPredeploysABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/omnibridgel1.go b/contracts/bindings/omnibridgel1.go index 80e6a365f..1fb1f5bf5 100644 --- a/contracts/bindings/omnibridgel1.go +++ b/contracts/bindings/omnibridgel1.go @@ -32,7 +32,7 @@ var ( // OmniBridgeL1MetaData contains all meta data concerning the OmniBridgeL1 contract. var OmniBridgeL1MetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ACTION_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ACTION_WITHDRAW\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"KeyPauseAll\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XCALL_WITHDRAW_GAS_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridge\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeFee\",\"inputs\":[{\"name\":\"payor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"omni_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isPaused\",\"inputs\":[{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omni\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOmniPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"token\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Bridge\",\"inputs\":[{\"name\":\"payor\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"key\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"key\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]}]", - Bin: "0x60a060405234801561001057600080fd5b506040516200177238038062001772833981016040819052610031916100fe565b6001600160a01b03811660805261004661004c565b5061012e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009c5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100fb5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60006020828403121561011057600080fd5b81516001600160a01b038116811461012757600080fd5b9392505050565b60805161160c62000166600039600081816103a60152818161048901528181610a6f01528181610eb1015261106b015261160c6000f3fe6080604052600436106101095760003560e01c80638456cb5911610095578063c3de453d11610064578063c3de453d14610321578063ed56531a14610334578063f2fde38b14610354578063f3fef3a314610374578063fc0c546a1461039457600080fd5b80638456cb591461027d5780638da5cb5b146102925780638fdcb4c9146102cf578063a10ac97a146102ff57600080fd5b80633794999d116100dc5780633794999d146101db57806339acf9f1146101fb5780633f4ba83a14610233578063485cc95514610248578063715018a61461026857600080fd5b806309839a931461010e578063241b71bb1461015557806325d70f78146101855780632f4dae9f146101b9575b600080fd5b34801561011a57600080fd5b506101427f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561016157600080fd5b506101756101703660046112f9565b6103c8565b604051901515815260200161014c565b34801561019157600080fd5b506101427f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b3480156101c557600080fd5b506101d96101d43660046112f9565b6103d9565b005b3480156101e757600080fd5b506101426101f6366004611327565b6103ed565b34801561020757600080fd5b5060005461021b906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b34801561023f57600080fd5b506101d96105bf565b34801561025457600080fd5b506101d9610263366004611368565b6105d1565b34801561027457600080fd5b506101d96106fd565b34801561028957600080fd5b506101d961070f565b34801561029e57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661021b565b3480156102db57600080fd5b506102e66201388081565b60405167ffffffffffffffff909116815260200161014c565b34801561030b57600080fd5b506101426000805160206115b783398151915281565b6101d961032f3660046113a1565b61071f565b34801561034057600080fd5b506101d961034f3660046112f9565b6107a0565b34801561036057600080fd5b506101d961036f3660046113cd565b6107b1565b34801561038057600080fd5b506101d961038f3660046113a1565b6107ec565b3480156103a057600080fd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b60006103d382610b26565b92915050565b6103e1610ba5565b6103ea81610c00565b50565b600080546040805163110ff5f160e01b815290516001600160a01b0390921691638dd9523c91839163110ff5f1916004808201926020929091908290030181865afa158015610440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104649190611407565b6040516370a0823160e01b815230600482015287908790879081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156104d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f49190611422565b6104fe919061143b565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b179052516001600160e01b031960e085901b16815261057692919062013880906004016114a2565b602060405180830381865afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611422565b949350505050565b6105c7610ba5565b6105cf610cb8565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156106175750825b905060008267ffffffffffffffff1660011480156106345750303b155b905081158015610642575080155b156106605760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561068a57845460ff60401b1916600160401b1785555b61069387610ccf565b600080546001600160a01b0319166001600160a01b03881617905583156106f457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610705610ba5565b6105cf6000610ce0565b610717610ba5565b6105cf610d51565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e61074981610b26565b156107905760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b60448201526064015b60405180910390fd5b61079b338484610d68565b505050565b6107a8610ba5565b6103ea816111f0565b6107b9610ba5565b6001600160a01b0381166107e357604051631e4fbdf760e01b815260006004820152602401610787565b6103ea81610ce0565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761081681610b26565b156108585760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b6044820152606401610787565b6000805460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa1580156108a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c491906114d9565b6000549091506001600160a01b031633146109195760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b6044820152606401610787565b60208101516001600160a01b0316600262048789608a1b01146109775760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b6044820152606401610787565b60008054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec9190611407565b67ffffffffffffffff16816000015167ffffffffffffffff1614610a495760405162461bcd60e51b81526020600482015260146024820152734f6d6e694272696467653a206e6f74206f6d6e6960601b6044820152606401610787565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611544565b50836001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610b1891815260200190565b60405180910390a250505050565b6000805160206115b783398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680610b9e575060008381526020829052604090205460ff165b9392505050565b33610bd77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105cf5760405163118cdaa760e01b8152336004820152602401610787565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610c775760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610787565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6105cf6000805160206115b7833981519152610c00565b610cd76112a8565b6103ea816112f1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6105cf6000805160206115b78339815191526111f0565b60008111610db85760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e203000006044820152606401610787565b6001600160a01b038216610e0e5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f0000006044820152606401610787565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e869190611407565b6040516370a0823160e01b815230600482015290915060009085908590859081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190611422565b610f26919061143b565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b1790526000549051632376548f60e21b81529192506001600160a01b031690638dd9523c90610fb0908590859062013880906004016114a2565b602060405180830381865afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff19190611422565b341461103f5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e694272696467653a20696e636f727265637420666565000000000000006044820152606401610787565b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d89190611544565b6111245760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c656400000000006044820152606401610787565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f90349061116a908690600490600262048789608a1b0190889062013880908401611566565b6000604051808303818588803b15801561118357600080fd5b505af1158015611197573d6000803e3d6000fd5b5050505050836001600160a01b0316856001600160a01b03167f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422856040516111e191815260200190565b60405180910390a35050505050565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156112645760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610787565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105cf57604051631afcd79f60e31b815260040160405180910390fd5b6107b96112a8565b60006020828403121561130b57600080fd5b5035919050565b6001600160a01b03811681146103ea57600080fd5b60008060006060848603121561133c57600080fd5b833561134781611312565b9250602084013561135781611312565b929592945050506040919091013590565b6000806040838503121561137b57600080fd5b823561138681611312565b9150602083013561139681611312565b809150509250929050565b600080604083850312156113b457600080fd5b82356113bf81611312565b946020939093013593505050565b6000602082840312156113df57600080fd5b8135610b9e81611312565b805167ffffffffffffffff8116811461140257600080fd5b919050565b60006020828403121561141957600080fd5b610b9e826113ea565b60006020828403121561143457600080fd5b5051919050565b808201808211156103d357634e487b7160e01b600052601160045260246000fd5b6000815180845260005b8181101561148257602081850181015186830182015201611466565b506000602082860101526020601f19601f83011685010191505092915050565b600067ffffffffffffffff8086168352606060208401526114c6606084018661145c565b9150808416604084015250949350505050565b6000604082840312156114eb57600080fd5b6040516040810181811067ffffffffffffffff8211171561151c57634e487b7160e01b600052604160045260246000fd5b604052611528836113ea565b8152602083015161153881611312565b60208201529392505050565b60006020828403121561155657600080fd5b81518015158114610b9e57600080fd5b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a060608401526115a160a084018661145c565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220816c2e7ecb605154af8fcc3441feff906790db439ca30d88aa08325ac97cabae64736f6c63430008180033", + Bin: "0x60a060405234801561001057600080fd5b506040516200177338038062001773833981016040819052610031916100fe565b6001600160a01b03811660805261004661004c565b5061012e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009c5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100fb5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60006020828403121561011057600080fd5b81516001600160a01b038116811461012757600080fd5b9392505050565b60805161160d62000166600039600081816103a60152818161048901528181610a6f01528181610eb1015261106c015261160d6000f3fe6080604052600436106101095760003560e01c80638456cb5911610095578063c3de453d11610064578063c3de453d14610321578063ed56531a14610334578063f2fde38b14610354578063f3fef3a314610374578063fc0c546a1461039457600080fd5b80638456cb591461027d5780638da5cb5b146102925780638fdcb4c9146102cf578063a10ac97a146102ff57600080fd5b80633794999d116100dc5780633794999d146101db57806339acf9f1146101fb5780633f4ba83a14610233578063485cc95514610248578063715018a61461026857600080fd5b806309839a931461010e578063241b71bb1461015557806325d70f78146101855780632f4dae9f146101b9575b600080fd5b34801561011a57600080fd5b506101427f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561016157600080fd5b506101756101703660046112fa565b6103c8565b604051901515815260200161014c565b34801561019157600080fd5b506101427f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b3480156101c557600080fd5b506101d96101d43660046112fa565b6103d9565b005b3480156101e757600080fd5b506101426101f6366004611328565b6103ed565b34801561020757600080fd5b5060005461021b906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b34801561023f57600080fd5b506101d96105bf565b34801561025457600080fd5b506101d9610263366004611369565b6105d1565b34801561027457600080fd5b506101d96106fd565b34801561028957600080fd5b506101d961070f565b34801561029e57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661021b565b3480156102db57600080fd5b506102e66201388081565b60405167ffffffffffffffff909116815260200161014c565b34801561030b57600080fd5b506101426000805160206115b883398151915281565b6101d961032f3660046113a2565b61071f565b34801561034057600080fd5b506101d961034f3660046112fa565b6107a0565b34801561036057600080fd5b506101d961036f3660046113ce565b6107b1565b34801561038057600080fd5b506101d961038f3660046113a2565b6107ec565b3480156103a057600080fd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b60006103d382610b26565b92915050565b6103e1610ba5565b6103ea81610c00565b50565b600080546040805163110ff5f160e01b815290516001600160a01b0390921691638dd9523c91839163110ff5f1916004808201926020929091908290030181865afa158015610440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104649190611408565b6040516370a0823160e01b815230600482015287908790879081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156104d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f49190611423565b6104fe919061143c565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b179052516001600160e01b031960e085901b16815261057692919062013880906004016114a3565b602060405180830381865afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611423565b949350505050565b6105c7610ba5565b6105cf610cb8565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156106175750825b905060008267ffffffffffffffff1660011480156106345750303b155b905081158015610642575080155b156106605760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561068a57845460ff60401b1916600160401b1785555b61069387610ccf565b600080546001600160a01b0319166001600160a01b03881617905583156106f457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610705610ba5565b6105cf6000610ce0565b610717610ba5565b6105cf610d51565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e61074981610b26565b156107905760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b60448201526064015b60405180910390fd5b61079b338484610d68565b505050565b6107a8610ba5565b6103ea816111f1565b6107b9610ba5565b6001600160a01b0381166107e357604051631e4fbdf760e01b815260006004820152602401610787565b6103ea81610ce0565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761081681610b26565b156108585760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b6044820152606401610787565b6000805460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa1580156108a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c491906114da565b6000549091506001600160a01b031633146109195760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b6044820152606401610787565b60208101516001600160a01b0316600262048789608a1b01146109775760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b6044820152606401610787565b60008054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec9190611408565b67ffffffffffffffff16816000015167ffffffffffffffff1614610a495760405162461bcd60e51b81526020600482015260146024820152734f6d6e694272696467653a206e6f74206f6d6e6960601b6044820152606401610787565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611545565b50836001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610b1891815260200190565b60405180910390a250505050565b6000805160206115b883398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680610b9e575060008381526020829052604090205460ff165b9392505050565b33610bd77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105cf5760405163118cdaa760e01b8152336004820152602401610787565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610c775760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610787565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6105cf6000805160206115b8833981519152610c00565b610cd76112a9565b6103ea816112f2565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6105cf6000805160206115b88339815191526111f1565b60008111610db85760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e203000006044820152606401610787565b6001600160a01b038216610e0e5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f0000006044820152606401610787565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e869190611408565b6040516370a0823160e01b815230600482015290915060009085908590859081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c9190611423565b610f26919061143c565b6040516001600160a01b0394851660248201529390921660448401526064830152608482015260a40160408051601f198184030181529181526020820180516001600160e01b0316631effa54360e21b1790526000549051632376548f60e21b81529192506001600160a01b031690638dd9523c90610fb0908590859062013880906004016114a3565b602060405180830381865afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff19190611423565b3410156110405760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a20696e73756666696369656e7420666565000000006044820152606401610787565b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af11580156110b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d99190611545565b6111255760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c656400000000006044820152606401610787565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f90349061116b908690600490600262048789608a1b0190889062013880908401611567565b6000604051808303818588803b15801561118457600080fd5b505af1158015611198573d6000803e3d6000fd5b5050505050836001600160a01b0316856001600160a01b03167f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422856040516111e291815260200190565b60405180910390a35050505050565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156112655760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610787565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105cf57604051631afcd79f60e31b815260040160405180910390fd5b6107b96112a9565b60006020828403121561130c57600080fd5b5035919050565b6001600160a01b03811681146103ea57600080fd5b60008060006060848603121561133d57600080fd5b833561134881611313565b9250602084013561135881611313565b929592945050506040919091013590565b6000806040838503121561137c57600080fd5b823561138781611313565b9150602083013561139781611313565b809150509250929050565b600080604083850312156113b557600080fd5b82356113c081611313565b946020939093013593505050565b6000602082840312156113e057600080fd5b8135610b9e81611313565b805167ffffffffffffffff8116811461140357600080fd5b919050565b60006020828403121561141a57600080fd5b610b9e826113eb565b60006020828403121561143557600080fd5b5051919050565b808201808211156103d357634e487b7160e01b600052601160045260246000fd5b6000815180845260005b8181101561148357602081850181015186830182015201611467565b506000602082860101526020601f19601f83011685010191505092915050565b600067ffffffffffffffff8086168352606060208401526114c7606084018661145d565b9150808416604084015250949350505050565b6000604082840312156114ec57600080fd5b6040516040810181811067ffffffffffffffff8211171561151d57634e487b7160e01b600052604160045260246000fd5b604052611529836113eb565b8152602083015161153981611313565b60208201529392505050565b60006020828403121561155757600080fd5b81518015158114610b9e57600080fd5b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a060608401526115a260a084018661145d565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212203426eb7f4b338998744fc3b12117b06a89ca8ceaecb795a2858bd258ffbdcde264736f6c63430008180033", } // OmniBridgeL1ABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/omnibridgenative.go b/contracts/bindings/omnibridgenative.go index d283269e9..611d89c6b 100644 --- a/contracts/bindings/omnibridgenative.go +++ b/contracts/bindings/omnibridgenative.go @@ -32,7 +32,7 @@ var ( // OmniBridgeNativeMetaData contains all meta data concerning the OmniBridgeNative contract. var OmniBridgeNativeMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ACTION_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ACTION_WITHDRAW\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"KeyPauseAll\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XCALL_WITHDRAW_GAS_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridge\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeFee\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claim\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimable\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isPaused\",\"inputs\":[{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1BridgeBalance\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omni\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOmniPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setup\",\"inputs\":[{\"name\":\"l1ChainId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"omni_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1Bridge_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"payor\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"l1Balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Bridge\",\"inputs\":[{\"name\":\"payor\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Claimed\",\"inputs\":[{\"name\":\"claimant\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"key\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Setup\",\"inputs\":[{\"name\":\"l1ChainId\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"omni\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"l1Bridge\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"key\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"payor\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]}]", - Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116e1806100df6000396000f3fe6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113cb565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113e8565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113e8565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611401565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113cb565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e461035136600461142d565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b5061017960008051602061168c83398151915281565b6101e461040f366004611401565b610bad565b34801561042057600080fd5b506101e461042f3660046113cb565b610c03565b34801561044057600080fd5b506101e461044f3660046113e8565b610d11565b34801561046057600080fd5b506101e461046f3660046113cb565b610d22565b34801561048057600080fd5b506101e461048f366004611488565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114d3565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b91906114ff565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115b1565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115e7565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114d3565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b391906114ff565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b44908490611616565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114d3565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc38661129c565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112ad565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b60008051602061168c83398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e160008051602061168c833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e160008051602061168c8339815191526112ad565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b600061112583836107fe565b90506111318183611616565b341461117f5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a20696e636f72726563742066756e6473000000000060448201526064016104db565b81600160008282546111919190611629565b9091555050600054600254604080516001600160a01b038781166024830152604480830188905283518084039091018152606490920183526020820180516001600160e01b031663f3fef3a360e01b179052915163c21dda4f60e01b8152600160401b850483169463c21dda4f948794611225946001600160401b039093169360049391909216916201388090840161163c565b6000604051808303818588803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b50506040518581526001600160a01b03871693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a3505050565b6112a4611365565b6107fb816113ae565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113215760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611365565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113dd57600080fd5b81356108ca816113b6565b6000602082840312156113fa57600080fd5b5035919050565b6000806040838503121561141457600080fd5b823561141f816113b6565b946020939093013593505050565b6000806000806080858703121561144357600080fd5b843561144e816113b6565b9350602085013561145e816113b6565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b60008060006060848603121561149d57600080fd5b83356114a881611473565b925060208401356114b8816113b6565b915060408401356114c8816113b6565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561151157600080fd5b604051604081018181106001600160401b038211171561154157634e487b7160e01b600052604160045260246000fd5b604052825161154f81611473565b8152602083015161155f816113b6565b60208201529392505050565b6000815180845260005b8181101561159157602081850181015186830182015201611575565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115d4606084018661156b565b9150808416604084015250949350505050565b6000602082840312156115f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611600565b818103818111156107e4576107e4611600565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261167660a084018661156b565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220954ec61ffbef1747b0bc6170ad124f69b3aaf05577309cc053716a7c0eddd7fc64736f6c63430008180033", + Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6116f5806100df6000396000f3fe6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113df565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113fc565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113fc565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611415565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113df565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e4610351366004611441565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b506101796000805160206116a083398151915281565b6101e461040f366004611415565b610bad565b34801561042057600080fd5b506101e461042f3660046113df565b610c03565b34801561044057600080fd5b506101e461044f3660046113fc565b610d11565b34801561046057600080fd5b506101e461046f3660046113df565b610d22565b34801561048057600080fd5b506101e461048f36600461149c565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114e7565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611513565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115c5565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115fb565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114e7565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190611513565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b4490849061162a565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114e7565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc3866112b0565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112c1565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b6000805160206116a083398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e16000805160206116a0833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e16000805160206116a08339815191526112c1565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b61112382826107fe565b61112d908261162a565b34101561117c5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20696e73756666696369656e742066756e6473000060448201526064016104db565b806001600082825461118e919061163d565b9091555050600054600160401b90046001600160a01b031663c21dda4f6111b5833461163d565b6000546002546040516001600160a01b038881166024830152604482018890526001600160401b0390931692600492169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e088901b16815261123a94939291906201388090600401611650565b6000604051808303818588803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b50506040518481526001600160a01b03861693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a35050565b6112b8611379565b6107fb816113c2565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113355760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611379565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113f157600080fd5b81356108ca816113ca565b60006020828403121561140e57600080fd5b5035919050565b6000806040838503121561142857600080fd5b8235611433816113ca565b946020939093013593505050565b6000806000806080858703121561145757600080fd5b8435611462816113ca565b93506020850135611472816113ca565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b6000806000606084860312156114b157600080fd5b83356114bc81611487565b925060208401356114cc816113ca565b915060408401356114dc816113ca565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561152557600080fd5b604051604081018181106001600160401b038211171561155557634e487b7160e01b600052604160045260246000fd5b604052825161156381611487565b81526020830151611573816113ca565b60208201529392505050565b6000815180845260005b818110156115a557602081850181015186830182015201611589565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115e8606084018661157f565b9150808416604084015250949350505050565b60006020828403121561160d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611614565b818103818111156107e4576107e4611614565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261168a60a084018661157f565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212207e2b43e80f776959bfee4f00ceda9bc3e4390b2b22a1f6268ff2a3694128f7da64736f6c63430008180033", } // OmniBridgeNativeABI is the input ABI used to generate the binding from. diff --git a/contracts/core/.gas-snapshot b/contracts/core/.gas-snapshot index 8ad4de3a5..76151f769 100644 --- a/contracts/core/.gas-snapshot +++ b/contracts/core/.gas-snapshot @@ -1,8 +1,8 @@ -Admin_Test:test_pause_unpause() (gas: 26104285) -Admin_Test:test_pause_unpause_bridge() (gas: 21279753) -Admin_Test:test_pause_unpause_xcall() (gas: 26058227) -Admin_Test:test_pause_unpause_xsubmit() (gas: 26057978) -Admin_Test:test_upgrade() (gas: 29993873) +Admin_Test:test_pause_unpause() (gas: 26108503) +Admin_Test:test_pause_unpause_bridge() (gas: 21283971) +Admin_Test:test_pause_unpause_xcall() (gas: 26062445) +Admin_Test:test_pause_unpause_xsubmit() (gas: 26062196) +Admin_Test:test_upgrade() (gas: 29998091) AllocPredeploys_Test:test_num_allocs() (gas: 1181021629) AllocPredeploys_Test:test_predeploys() (gas: 1180958103) AllocPredeploys_Test:test_preinstalls() (gas: 1181593197) @@ -24,13 +24,13 @@ FeeOracleV2_Test:test_setProtocolFee() (gas: 31508) FeeOracleV2_Test:test_setToNativeRate() (gas: 43377) InitializableHelper_Test:test_disableInitalizers() (gas: 181686) InitializableHelper_Test:test_getInitialized() (gas: 178023) -OmniBridgeL1_Test:test_bridge() (gas: 252423) +OmniBridgeL1_Test:test_bridge() (gas: 233678) OmniBridgeL1_Test:test_pauseAll() (gas: 49368) -OmniBridgeL1_Test:test_pauseBridging() (gas: 59610) +OmniBridgeL1_Test:test_pauseBridging() (gas: 59580) OmniBridgeL1_Test:test_pauseWithdraws() (gas: 48975) OmniBridgeL1_Test:test_stub() (gas: 143) -OmniBridgeL1_Test:test_withdraw() (gas: 1382984) -OmniBridgeNative_Test:test_bridge() (gas: 190446) +OmniBridgeL1_Test:test_withdraw() (gas: 1386987) +OmniBridgeNative_Test:test_bridge() (gas: 156805) OmniBridgeNative_Test:test_claim() (gas: 287756) OmniBridgeNative_Test:test_pauseAll() (gas: 52904) OmniBridgeNative_Test:test_pauseBridging() (gas: 44449) diff --git a/contracts/core/src/token/OmniBridgeL1.sol b/contracts/core/src/token/OmniBridgeL1.sol index 3883425ea..e96133a1f 100644 --- a/contracts/core/src/token/OmniBridgeL1.sol +++ b/contracts/core/src/token/OmniBridgeL1.sol @@ -85,7 +85,9 @@ contract OmniBridgeL1 is OmniBridgeCommon { bytes memory xcalldata = abi.encodeCall(OmniBridgeNative.withdraw, (payor, to, amount, token.balanceOf(address(this)) + amount)); - require(msg.value == omni.feeFor(omniChainId, xcalldata, XCALL_WITHDRAW_GAS_LIMIT), "OmniBridge: incorrect fee"); + require( + msg.value >= omni.feeFor(omniChainId, xcalldata, XCALL_WITHDRAW_GAS_LIMIT), "OmniBridge: insufficient fee" + ); require(token.transferFrom(payor, address(this), amount), "OmniBridge: transfer failed"); omni.xcall{ value: msg.value }( diff --git a/contracts/core/src/token/OmniBridgeNative.sol b/contracts/core/src/token/OmniBridgeNative.sol index 70046a41a..fbddd3faf 100644 --- a/contracts/core/src/token/OmniBridgeNative.sol +++ b/contracts/core/src/token/OmniBridgeNative.sol @@ -125,13 +125,13 @@ contract OmniBridgeNative is OmniBridgeCommon { require(to != address(0), "OmniBridge: no bridge to zero"); require(amount > 0, "OmniBridge: amount must be > 0"); require(amount <= l1BridgeBalance, "OmniBridge: no liquidity"); - - uint256 fee = bridgeFee(to, amount); - require(msg.value == amount + fee, "OmniBridge: incorrect funds"); + require(msg.value >= amount + bridgeFee(to, amount), "OmniBridge: insufficient funds"); l1BridgeBalance -= amount; - omni.xcall{ value: fee }( + // if fee is overpaid, forward excess to portal. + // balance of this contract should continue to reflect funds bridged to L1. + omni.xcall{ value: msg.value - amount }( l1ChainId, ConfLevel.Finalized, l1Bridge, diff --git a/contracts/core/test/token/OmniBridgeL1.t.sol b/contracts/core/test/token/OmniBridgeL1.t.sol index 42616f247..20292d4ba 100644 --- a/contracts/core/test/token/OmniBridgeL1.t.sol +++ b/contracts/core/test/token/OmniBridgeL1.t.sol @@ -62,10 +62,8 @@ contract OmniBridgeL1_Test is Test { vm.expectRevert("OmniBridge: no bridge to zero"); b.bridge(address(0), amount); - // value must equal fee - vm.expectRevert("OmniBridge: incorrect fee"); - b.bridge{ value: fee + 1 }(to, amount); - vm.expectRevert("OmniBridge: incorrect fee"); + // value must be greater than or equal fee + vm.expectRevert("OmniBridge: insufficient fee"); b.bridge{ value: fee - 1 }(to, amount); // requires allowance @@ -191,8 +189,8 @@ contract OmniBridgeL1_Test is Test { // assert unpaused assertFalse(b.isPaused(action)); - // bridge succeeds - vm.expectRevert("OmniBridge: incorrect fee"); + // bridge not paused (reverts, but not due to pause) + vm.expectRevert("OmniBridge: insufficient fee"); b.bridge(to, amount); } diff --git a/contracts/core/test/token/OmniBridgeNative.t.sol b/contracts/core/test/token/OmniBridgeNative.t.sol index 5d523cce6..93b723662 100644 --- a/contracts/core/test/token/OmniBridgeNative.t.sol +++ b/contracts/core/test/token/OmniBridgeNative.t.sol @@ -74,15 +74,9 @@ contract OmniBridgeNative_Test is Test { b.setL1BridgeBalance(amount); - // requires msg.value == fee + amount - vm.expectRevert("OmniBridge: incorrect funds"); - b.bridge{ value: amount }(to, amount); - vm.expectRevert("OmniBridge: incorrect funds"); - b.bridge{ value: amount + 1 }(to, amount); - - // must equal amount + fee - vm.expectRevert("OmniBridge: incorrect funds"); - b.bridge{ value: amount + fee + 1 }(to, amount); + // requires msg.value >= fee + amount + vm.expectRevert("OmniBridge: insufficient funds"); + b.bridge{ value: amount + fee - 1 }(to, amount); // succeeds // @@ -92,9 +86,10 @@ contract OmniBridgeNative_Test is Test { emit Bridge(address(this), to, amount); // emits xcall + uint256 feeWithExcess = fee + 1; // test that bridge forwards excess fee to portal vm.expectCall( address(portal), - fee, + feeWithExcess, abi.encodeCall( IOmniPortal.xcall, ( @@ -106,7 +101,7 @@ contract OmniBridgeNative_Test is Test { ) ) ); - b.bridge{ value: amount + fee }(to, amount); + b.bridge{ value: amount + feeWithExcess }(to, amount); // decrements l1BridgeBalance assertEq(b.l1BridgeBalance(), 0); diff --git a/halo/genutil/evm/testdata/TestMakeEVMGenesis.golden b/halo/genutil/evm/testdata/TestMakeEVMGenesis.golden index 725927bf7..a420a7a65 100644 --- a/halo/genutil/evm/testdata/TestMakeEVMGenesis.golden +++ b/halo/genutil/evm/testdata/TestMakeEVMGenesis.golden @@ -31666,7 +31666,7 @@ "nonce": "0x1" }, "ede1dbfffffffffffffffffffffffffffffffffd": { - "code": "0x6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113cb565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113e8565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113e8565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611401565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113cb565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e461035136600461142d565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b5061017960008051602061168c83398151915281565b6101e461040f366004611401565b610bad565b34801561042057600080fd5b506101e461042f3660046113cb565b610c03565b34801561044057600080fd5b506101e461044f3660046113e8565b610d11565b34801561046057600080fd5b506101e461046f3660046113cb565b610d22565b34801561048057600080fd5b506101e461048f366004611488565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114d3565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b91906114ff565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115b1565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115e7565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114d3565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b391906114ff565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b44908490611616565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114d3565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc38661129c565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112ad565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b60008051602061168c83398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e160008051602061168c833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e160008051602061168c8339815191526112ad565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b600061112583836107fe565b90506111318183611616565b341461117f5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a20696e636f72726563742066756e6473000000000060448201526064016104db565b81600160008282546111919190611629565b9091555050600054600254604080516001600160a01b038781166024830152604480830188905283518084039091018152606490920183526020820180516001600160e01b031663f3fef3a360e01b179052915163c21dda4f60e01b8152600160401b850483169463c21dda4f948794611225946001600160401b039093169360049391909216916201388090840161163c565b6000604051808303818588803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b50506040518581526001600160a01b03871693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a3505050565b6112a4611365565b6107fb816113ae565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113215760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611365565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113dd57600080fd5b81356108ca816113b6565b6000602082840312156113fa57600080fd5b5035919050565b6000806040838503121561141457600080fd5b823561141f816113b6565b946020939093013593505050565b6000806000806080858703121561144357600080fd5b843561144e816113b6565b9350602085013561145e816113b6565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b60008060006060848603121561149d57600080fd5b83356114a881611473565b925060208401356114b8816113b6565b915060408401356114c8816113b6565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561151157600080fd5b604051604081018181106001600160401b038211171561154157634e487b7160e01b600052604160045260246000fd5b604052825161154f81611473565b8152602083015161155f816113b6565b60208201529392505050565b6000815180845260005b8181101561159157602081850181015186830182015201611575565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115d4606084018661156b565b9150808416604084015250949350505050565b6000602082840312156115f957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611600565b818103818111156107e4576107e4611600565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261167660a084018661156b565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220954ec61ffbef1747b0bc6170ad124f69b3aaf05577309cc053716a7c0eddd7fc64736f6c63430008180033", + "code": "0x6080604052600436106101405760003560e01c8063715018a6116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063ed56531a14610434578063f2fde38b14610454578063f35ea5571461047457600080fd5b8063715018a6146103215780637bfe950c146103365780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b806325d70f781161010857806325d70f781461022c5780632f4dae9f1461026057806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c457806323b051d9146101e6578063241b71bb146101fc575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113df565b610494565b005b3480156101f257600080fd5b5061017960015481565b34801561020857600080fd5b5061021c6102173660046113fc565b6107d9565b6040519015158152602001610183565b34801561023857600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561026c57600080fd5b506101e461027b3660046113fc565b6107ea565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611415565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113df565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e46108e3565b34801561034257600080fd5b506101e4610351366004611441565b6108f5565b34801561036257600080fd5b506101e4610b9d565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b506101796000805160206116a083398151915281565b6101e461040f366004611415565b610bad565b34801561042057600080fd5b506101e461042f3660046113df565b610c03565b34801561044057600080fd5b506101e461044f3660046113fc565b610d11565b34801561046057600080fd5b506101e461046f3660046113df565b610d22565b34801561048057600080fd5b506101e461048f36600461149c565b610d5d565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610df6565b156104e45760405162461bcd60e51b81526004016104db906114e7565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611513565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610df6565b92915050565b6107f2610e6f565b6107fb81610eca565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115c5565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca91906115fb565b9392505050565b6108d9610e6f565b6108e1610f82565b565b6108eb610e6f565b6108e16000610f99565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7761091f81610df6565b1561093c5760405162461bcd60e51b81526004016104db906114e7565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190611513565b600054909150600160401b90046001600160a01b03163314610a0f5760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610a6a5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610abe5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b60018390556040516000906001600160a01b0387169086908381818185875af1925050503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5050905080610b4a576001600160a01b03871660009081526003602052604081208054879290610b4490849061162a565b90915550505b6040805186815282151560208201526001600160a01b0380891692908a16917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f61910160405180910390a350505050505050565b610ba5610e6f565b6108e161100a565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e610bd781610df6565b15610bf45760405162461bcd60e51b81526004016104db906114e7565b610bfe8383611021565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c485750825b90506000826001600160401b03166001148015610c645750303b155b905081158015610c72575080155b15610c905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845460ff60401b1916600160401b1785555b610cc3866112b0565b8315610d0957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610d19610e6f565b6107fb816112c1565b610d2a610e6f565b6001600160a01b038116610d5457604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610f99565b610d65610e6f565b600080546001600160a01b03848116600160401b81026001600160e01b03199093166001600160401b03881690811793909317909355600280549185166001600160a01b0319909216821790556040805192835260208301939093528183015290517f623e3eab84ae714ebdf0dad4ee15dcfdc9be63dc30bbc950d513c4a7c254a3d29181900360600190a1505050565b6000805160206116a083398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610ea17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f415760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e16000805160206116a0833981519152610eca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e16000805160206116a08339815191526112c1565b6001600160a01b0382166110775760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110c75760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b6001548111156111195760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b61112382826107fe565b61112d908261162a565b34101561117c5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20696e73756666696369656e742066756e6473000060448201526064016104db565b806001600082825461118e919061163d565b9091555050600054600160401b90046001600160a01b031663c21dda4f6111b5833461163d565b6000546002546040516001600160a01b038881166024830152604482018890526001600160401b0390931692600492169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e088901b16815261123a94939291906201388090600401611650565b6000604051808303818588803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b50506040518481526001600160a01b03861693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a35050565b6112b8611379565b6107fb816113c2565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113355760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610d2a611379565b6001600160a01b03811681146107fb57600080fd5b6000602082840312156113f157600080fd5b81356108ca816113ca565b60006020828403121561140e57600080fd5b5035919050565b6000806040838503121561142857600080fd5b8235611433816113ca565b946020939093013593505050565b6000806000806080858703121561145757600080fd5b8435611462816113ca565b93506020850135611472816113ca565b93969395505050506040820135916060013590565b6001600160401b03811681146107fb57600080fd5b6000806000606084860312156114b157600080fd5b83356114bc81611487565b925060208401356114cc816113ca565b915060408401356114dc816113ca565b809150509250925092565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561152557600080fd5b604051604081018181106001600160401b038211171561155557634e487b7160e01b600052604160045260246000fd5b604052825161156381611487565b81526020830151611573816113ca565b60208201529392505050565b6000815180845260005b818110156115a557602081850181015186830182015201611589565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115e8606084018661157f565b9150808416604084015250949350505050565b60006020828403121561160d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611614565b818103818111156107e4576107e4611614565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261168a60a084018661157f565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212207e2b43e80f776959bfee4f00ceda9bc3e4390b2b22a1f6268ff2a3694128f7da64736f6c63430008180033", "storage": { "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" },