1 tx
14.6k calls
constructor
constructor(address _aaveProtocolDataProvider, address _aaveLendingPool, address _swapper, address _onchainSwapRouter, uint256 _mismatchDelta, uint256 _mismatchDeltaDenominator, uint256 _slippageToleranceDenominator)
functions
aaveLendingPool
viewfunction aaveLendingPool() view returns (address)
aaveProtocolDataProvider
viewfunction aaveProtocolDataProvider() view returns (address)
convert32toAddress
purefunction convert32toAddress(bytes32 data) pure returns (address o)
flashloanProcessing
viewfunction flashloanProcessing(address _pool, address _repayAsset, uint256 _repayAmount, uint256 _premium, bytes _params) view returns (tuple[] transactions)
getArrayIndex
purefunction getArrayIndex(bytes data, uint8 inputNum, uint8 arrayIndex) pure returns (bytes32)
getArrayLast
purefunction getArrayLast(bytes data, uint8 inputNum) pure returns (bytes32)
getArrayLength
purefunction getArrayLength(bytes data, uint8 inputNum) pure returns (uint256)
getBalance
viewfunction getBalance(address _pool, address) view returns (uint256 balance)
getBytes
purefunction getBytes(bytes data, uint8 inputNum, uint256 offset) pure returns (bytes)
getDecimals
purefunction getDecimals(address) pure returns (uint256 decimals)
getInput
purefunction getInput(bytes data, uint8 inputNum) pure returns (bytes32)
getMethod
purefunction getMethod(bytes data) pure returns (bytes4)
getParams
purefunction getParams(bytes data) pure returns (bytes)
isSlippageCheckingGuard
viewfunction isSlippageCheckingGuard() view returns (bool)
onchainSwapRouter
viewfunction onchainSwapRouter() view returns (address)
read32
purefunction read32(bytes data, uint256 offset, uint256 length) pure returns (bytes32 o)
read4left
purefunction read4left(bytes data, uint256 offset) pure returns (bytes4 o)
removeAssetCheck
viewfunction removeAssetCheck(address _pool, address) view
swapper
viewfunction swapper() view returns (address)
txGuard
purefunction txGuard(address, address, bytes) pure returns (uint16 txType, bool)
withdrawProcessing
viewfunction withdrawProcessing(address _pool, address, uint256 _portion, address _to, bytes _swapData) view returns (address withdrawAsset, uint256 withdrawBalance, tuple[] transactions)
withdrawProcessing
viewfunction withdrawProcessing(address _pool, address, uint256 _portion, address _to) view returns (address withdrawAsset, uint256 withdrawBalance, tuple[] transactions)
calculateSwapDataParams
nonpayablefunction calculateSwapDataParams(address _pool, uint256 _poolTokenAmount, uint256 _slippageTolerance) returns (tuple swapDataParams)
events
ExchangeFrom
event ExchangeFrom(address fundAddress, address sourceAsset, uint256 sourceAmount, address dstAsset, uint256 time)
ExchangeTo
event ExchangeTo(address fundAddress, address sourceAsset, address dstAsset, uint256 dstAmount, uint256 time)
errors
No errors.
creation bytecode
0x6101606040526000805460ff191660011790553480156200001f57600080fd5b50604051620044a1380380620044a1833981016040819052620000429162000144565b6001600160a01b038716158015906200006357506001600160a01b03861615155b80156200007857506001600160a01b03851615155b80156200008d57506001600160a01b03841615155b620000b55760405162461bcd60e51b8152600401620000ac90620001f4565b60405180910390fd5b600082118015620000c65750818311155b620000e55760405162461bcd60e51b8152600401620000ac90620001bd565b6001600160601b0319606097881b811660805295871b861660a05293861b851660c0529190941b90921660e0526101009290925261012052610140526200021d565b80516001600160a01b03811681146200013f57600080fd5b919050565b600080600080600080600060e0888a0312156200015f578283fd5b6200016a8862000127565b96506200017a6020890162000127565b95506200018a6040890162000127565b94506200019a6060890162000127565b93506080880151925060a0880151915060c0880151905092959891949750929550565b60208082526016908201527f6e756d657261746f72206d757374206265206c65737300000000000000000000604082015260600190565b6020808252600f908201526e696e76616c6964206164647265737360881b604082015260600190565b60805160601c60a05160601c60c05160601c60e05160601c6101005161012051610140516141d4620002cd600039806112f052806117165250806108f0528061234c528061240c52508061237052806124305250806105f5528061210e52806121f45250806104ea5280611d655280611e1e525080610c6e528061180952806118bf528061194f5280611c235280611fae528061268f528061292b5250806106195280612f4c52506141d46000f3fe608060405234801561001057600080fd5b506004361061011d5760003560e01c8063056f626f1461012257806309ff5c7d1461014d5780631053f9521461016d5780631eba30771461018d578063293d8063146101ad5780632b3297f9146101cd5780633e65a346146101d557806341dc16c3146101ea578063445fad1f146101fd5780635f9d4d2e146102055780636179309d1461020d578063689015131461022e5780636d5fae54146102415780636f8ae20214610256578063759f32831461026957806382f86acc14610289578063989dccf81461029c578063998546e3146102bc578063c3c6279f146102cf578063cf54aaa0146102e2578063d4fac45d146102f5578063db896b5714610308578063e9d337b81461031b575b600080fd5b6101356101303660046132e4565b610323565b60405161014493929190613c77565b60405180910390f35b61016061015b366004613701565b610352565b6040516101449190613cf3565b61018061017b366004613745565b6103e5565b6040516101449190613d11565b6101a061019b36600461362a565b61047f565b6040516101449190613b90565b6101c06101bb366004613674565b610486565b6040516101449190613cfc565b6101a06104e8565b6101dd61050c565b6040516101449190613ce8565b6101606101f836600461379c565b610515565b6101a06105f3565b6101a0610617565b61022061021b366004613230565b61063b565b604051610144929190614016565b61018061023c366004613642565b610647565b61025461024f3660046131ac565b610662565b005b610135610264366004613292565b6106ab565b61027c6102773660046133d9565b6106d7565b6040516101449190613fab565b610160610297366004613701565b610974565b6102af6102aa366004613360565b61098b565b6040516101449190613cd5565b6101606102ca366004613701565b610b7d565b6101c06102dd366004613642565b610bae565b6101606102f0366004613174565b610bbb565b6101606103033660046131ac565b610bc1565b6101606103163660046136b6565b610bed565b6101a0610c6c565b60008060606103408887876103398c8b8a610c90565b6000610d66565b9250925092505b955095509592505050565b60008061036a848460200260040160ff166020610bed565b9050600061037d85600484016020610bed565b9050806103c6576040805162461bcd60e51b8152602060048201526012602482015271696e707574206973206e6f7420617272617960701b604482015290519081900360640190fd5b6103da856020808402850160040190610bed565b925050505b92915050565b60606014821061042d576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081bd9999cd95d60921b604482015290519081900360640190fd5b816020029150600061044c85848660200260040160ff16016020610bed565b90506000610461868584016004016020610bed565b90506104738660248487010183610dc1565b925050505b9392505050565b805b919050565b600081600401835110156104df576040805162461bcd60e51b815260206004820152601b60248201527a52656164696e67206279746573206f7574206f6620626f756e647360281b604482015290519081900360640190fd5b50016020015190565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1681565b60008061052d858560200260040160ff166020610bed565b9050600061054086600484016020610bed565b905080610589576040805162461bcd60e51b8152602060048201526012602482015271696e707574206973206e6f7420617272617960701b604482015290519081900360640190fd5b60ff841681116105d9576040805162461bcd60e51b815260206004820152601660248201527534b73b30b634b21030b93930bc903837b9b4ba34b7b760511b604482015290519081900360640190fd5b610473866020600160ff8816018102850160040190610bed565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008094509492505050565b60606103df60048084510384610dc19092919063ffffffff16565b60008061066e84610f12565b91509150816000148015610680575080155b6106a55760405162461bcd60e51b815260040161069c90613db1565b60405180910390fd5b50505050565b60008060606106b8612ff2565b6106c6888787846001610d66565b935093509350509450945094915050565b6106df613019565b836001600160a01b031663cc3c6df66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050600080856001600160a01b0316631e50a4a66040518163ffffffff1660e01b815260040160206040518083038186803b15801561076e57600080fd5b505afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190613190565b6001600160a01b031663ced72f876040518163ffffffff1660e01b815260040160a06040518083038186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081691906139e4565b9450945050505060008211156108475761084461083d8261083788866111cc565b90611225565b8690611289565b94505b60006108cf876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd91906138e4565b61083788670de0b6b3a76400006111cc565b90506108dc8782876112e6565b935060005b845151811015610969576109457f000000000000000000000000000000000000000000000000000000000000000061083761091d826001611289565b885180518690811061092b57fe5b6020026020010151602001516111cc90919063ffffffff16565b855180518390811061095357fe5b60209081029190910181015101526001016108e1565b505050509392505050565b6000610478838360200260040160ff166020610bed565b60606000808061099d858701876138fc565b925092509250600060405180606001604052808b6001600160a01b031681526020018a815260200189815250905060006109d78c83611781565b90506000836109f0576109eb8d8787611a11565b6109ff565b6109ff8d878560000151611ed8565b905080518251016001600160401b0381118015610a1b57600080fd5b50604051908082528060200260200182016040528015610a5557816020015b610a42613038565b815260200190600190039081610a3a5790505b5096506000805b8351821015610ae157838281518110610a7157fe5b602002602001015160000151898281518110610a8957fe5b60209081029190910101516001600160a01b0390911690528351849083908110610aaf57fe5b602002602001015160200151898281518110610ac757fe5b602090810291909101810151015260019182019101610a5c565b600091505b8251821015610b6b57828281518110610afb57fe5b602002602001015160000151898281518110610b1357fe5b60209081029190910101516001600160a01b0390911690528251839083908110610b3957fe5b602002602001015160200151898281518110610b5157fe5b602090810291909101810151015260019182019101610ae6565b50505050505050509695505050505050565b600080610b95848460200260040160ff166020610bed565b9050610ba684600483016020610bed565b949350505050565b60006103df826000610486565b50601290565b6000806000610bcf85610f12565b9150915080821115610be5576103da8282611289565b505092915050565b600081830184511015610c45576040805162461bcd60e51b815260206004820152601b60248201527a52656164696e67206279746573206f7574206f6620626f756e647360281b604482015290519081900360640190fd5b826020018401519050816020038015610c64576008810260020a820491505b509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610c98612ff2565b81806020019051810190610cac91906137f2565b90506000610cbf858584604001516112e6565b905060008260000151806020019051810190610cdb91906134e6565b8251518151919250908114610d025760405162461bcd60e51b815260040161069c90613e14565b60005b81811015610d4957610d41838281518110610d1c57fe5b602002602001015185600001518381518110610d3457fe5b60200260200101516122f1565b600101610d05565b50610d5c846020015184602001516123d7565b5050509392505050565b60008060606000610d7789896124ba565b80519091506001600160a01b0316610da357610d9489888a612618565b91506000809350935050610347565b610db08989838989612841565b905193509050955095509592505050565b60608182601f011015610e0c576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b828284011015610e54576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b81830184511015610ea0576040805162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015290519081900360640190fd5b606082158015610ebf5760405191506000825260208201604052610f09565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610ef8578051835260209283019201610ee0565b5050858452601f01601f1916604052505b50949350505050565b600080600080610f2185612a1d565b915091506000806000806000808a6001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f6757600080fd5b505afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190613190565b905060005b878110156111be57888181518110610fb857fe5b6020026020010151600001519650816001600160a01b031663032c49ed886040518263ffffffff1660e01b8152600401610ff29190613b90565b60206040518083038186803b15801561100a57600080fd5b505afa15801561101e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104291906138c2565b61ffff16600414806110d3575060405163032c49ed60e01b81526001600160a01b0383169063032c49ed9061107b908a90600401613b90565b60206040518083038186803b15801561109357600080fd5b505afa1580156110a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cb91906138c2565b61ffff16600e145b156111b6576110e28c88612b11565b97509094509250831515806110f657508215155b156111b65760405163b3596f0760e01b81526001600160a01b0383169063b3596f0790611127908a90600401613b90565b60206040518083038186803b15801561113f57600080fd5b505afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117791906138e4565b945061119561118e600a88900a61083788886111cc565b8c90612cb3565b9a506111b36111ac600a88900a61083788876111cc565b8b90612cb3565b99505b600101610fa4565b505050505050505050915091565b6000826111db575060006103df565b828202828482816111e857fe5b04146104785760405162461bcd60e51b815260040180806020018281038252602181526020018061417e6021913960400191505060405180910390fd5b6000808211611278576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b81838161128157fe5b049392505050565b6000828211156112e0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6112ee613019565b7f000000000000000000000000000000000000000000000000000000000000000082111561132e5760405162461bcd60e51b815260040161069c90613d24565b600061133a85856124ba565b80519091506001600160a01b03166113525750610478565b60008060006113618888612d0b565b915091506000816001600160401b038111801561137d57600080fd5b506040519080825280602002602001820160405280156113b757816020015b6113a4613050565b81526020019060019003908161139c5790505b50905060005b828110156114335785600001516001600160a01b03168482815181106113df57fe5b6020026020010151600001516001600160a01b03161461142b5783818151811061140557fe5b602002602001015182868151811061141957fe5b60209081029190910101526001909401935b6001016113bd565b5060006114408386611289565b8251038252508552505060408051630f28525360e11b815290516000916001600160a01b03891691631e50a4a691600480820192602092909190829003018186803b15801561148e57600080fd5b505afa1580156114a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c69190613190565b90506000805b8381101561159c57611592836001600160a01b03166329c07fba886000015184815181106114f657fe5b6020026020010151600001518960000151858151811061151257fe5b6020026020010151602001516040518363ffffffff1660e01b815260040161153b929190613c3b565b60206040518083038186803b15801561155357600080fd5b505afa158015611567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158b91906138e4565b8390612cb3565b91506001016114cc565b506000886001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116109190613190565b855160405163b3596f0760e01b81526001600160a01b03929092169163b3596f079161163e91600401613b90565b60206040518083038186803b15801561165657600080fd5b505afa15801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e91906138e4565b9050600085600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cf57600080fd5b505afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117079190613a23565b60ff16600a0a905060006117567f0000000000000000000000000000000000000000000000000000000000000000610837611742828d611289565b611750876108378a896111cc565b906111cc565b96516020808a0180516001600160a01b03909316909252905101969096525050505050509392505050565b6040805160028082526060828101909352816020015b61179f613038565b8152602001906001900390816117975790505090506000806118876117e085604001516117da600288602001516111cc90919063ffffffff16565b90612cb3565b8551604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e90611831908a907f000000000000000000000000000000000000000000000000000000000000000090600401613ba4565b60206040518083038186803b15801561184957600080fd5b505afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188191906138e4565b90612f1e565b9150915083600001518360008151811061189d57fe5b60209081029190910101516001600160a01b03909116905263095ea7b360e01b7f0000000000000000000000000000000000000000000000000000000000000000836118eb576000196118ed565b825b6040516024016118fe929190613c3b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508360008151811061193e57fe5b6020026020010151602001819052507f00000000000000000000000000000000000000000000000000000000000000008360018151811061197b57fe5b6020908102919091018101516001600160a01b0390921690915284519085015160405163573ade8160e01b926119ba9290916002908a90602401613ca7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050836001815181106119fa57fe5b602002602001015160200181905250505092915050565b6060600080611a208686612d0b565b91509150611a2c613019565b604080516001808252818301909252600091816020015b611a4b613067565b815260200190600190039081611a4357505086518051919250611a76918101602090810191016134e6565b81600081518110611a8357fe5b602002602001015160000181905250600081600081518110611aa157fe5b602002602001015160200151600001906002811115611abc57fe5b90816002811115611ac957fe5b90525080825260208087015190830152805160009082908290611ae857fe5b602090810291909101015151519050611b0660016117da8684612cb3565b6001600160401b0381118015611b1b57600080fd5b50604051908082528060200260200182016040528015611b5557816020015b611b42613038565b815260200190600190039081611b3a5790505b5095506000806000805b87811015611cf65785600081518110611b7457fe5b6020026020010151600001518381518110611b8b57fe5b6020026020010151600001516001600160a01b0316898281518110611bac57fe5b6020026020010151600001516001600160a01b03161415611c065785600081518110611bd457fe5b6020026020010151600001518381518110611beb57fe5b60200260200101516020015191508280600101935050611c21565b888181518110611c1257fe5b60200260200101516020015191505b7f00000000000000000000000000000000000000000000000000000000000000008a8581518110611c4e57fe5b60209081029190910101516001600160a01b0390911690528851631a4ca37b60e21b908a9083908110611c7d57fe5b602002602001015160000151838f604051602401611c9d93929190613c54565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508a8581518110611cdc57fe5b602090810291909101810151015260019384019301611b5f565b5060005b84811015611e1b5786518051600090611d0f57fe5b6020026020010151600001518181518110611d2657fe5b6020026020010151600001518a8581518110611d3e57fe5b60209081029190910101516001600160a01b0390911690528651805163095ea7b360e01b917f000000000000000000000000000000000000000000000000000000000000000091600090611d8e57fe5b6020026020010151600001518381518110611da557fe5b602002602001015160200151604051602401611dc2929190613c3b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508a8581518110611e0157fe5b602090810291909101810151015260019384019301611cfa565b507f0000000000000000000000000000000000000000000000000000000000000000898481518110611e4957fe5b60209081029190910101516001600160a01b039091169052604051630bffcd2560e41b90611e7b908890602401613e9d565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050898481518110611eba57fe5b60200260200101516020018190525050505050505050509392505050565b6060600080611ee78686612d0b565b90925090506000611ef98260036111cc565b9050806001600160401b0381118015611f1157600080fd5b50604051908082528060200260200182016040528015611f4b57816020015b611f38613038565b815260200190600190039081611f305790505b5060408051600280825260608201835292965060009290916020830190803683370190505090508581600181518110611f8057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506000805b848110156122d1577f0000000000000000000000000000000000000000000000000000000000000000878381518110611fd957fe5b60209081029190910101516001600160a01b0390911690528551631a4ca37b60e21b9087908390811061200857fe5b60200260200101516000015187838151811061202057fe5b6020026020010151602001518c60405160240161203f93929190613c54565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505087838151811061207e57fe5b6020026020010151602001819052508180600101925050876001600160a01b03168682815181106120ab57fe5b6020026020010151600001516001600160a01b0316146122c9578581815181106120d157fe5b6020026020010151600001518783815181106120e957fe5b60209081029190910101516001600160a01b039091169052855163095ea7b360e01b907f00000000000000000000000000000000000000000000000000000000000000009088908490811061213a57fe5b602002602001015160200151604051602401612157929190613c3b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505087838151811061219657fe5b60200260200101516020018190525081806001019250508581815181106121b957fe5b602002602001015160000151836000815181106121d257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000087838151811061221f57fe5b60209081029190910101516001600160a01b03909116905285516338ed173960e01b9087908390811061224e57fe5b6020026020010151602001516000858d60001960405160240161227595949392919061402c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508783815181106122b457fe5b60209081029190910181015101526001909101905b600101611fa4565b5060006122de8483611289565b8751038752509498975050505050505050565b805182516001600160a01b0390811691161461231f5760405162461bcd60e51b815260040161069c90613de8565b8060200151826020015111156123475760405162461bcd60e51b815260040161069c90613e47565b6123a27f00000000000000000000000000000000000000000000000000000000000000006108377f000000000000000000000000000000000000000000000000000000000000000084602001516111cc90919063ffffffff16565b602080840151908301516123b591611289565b11156123d35760405162461bcd60e51b815260040161069c90613d84565b5050565b805182516001600160a01b039081169116146124055760405162461bcd60e51b815260040161069c90613d58565b60006124627f00000000000000000000000000000000000000000000000000000000000000006108377f000000000000000000000000000000000000000000000000000000000000000085602001516111cc90919063ffffffff16565b60208301519091506124749082612cb3565b836020015111158015612499575060208201516124919082611289565b836020015110155b6124b55760405162461bcd60e51b815260040161069c90613e70565b505050565b6124c2613050565b6000806124ce85612a1d565b915091506000805b8281101561260e576124fe8482815181106124ed57fe5b602002602001015160000151612f47565b9250506001600160a01b03821615612606576040516370a0823160e01b81526001600160a01b038316906370a082319061253c908a90600401613b90565b60206040518083038186803b15801561255457600080fd5b505afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c91906138e4565b60208601819052156126065760006125ad670de0b6b3a76400006001611289565b90506125d6670de0b6b3a7640000610837836117da8b8b602001516111cc90919063ffffffff16565b602087015284518590839081106125e957fe5b6020908102919091010151516001600160a01b031686525061260e565b6001016124d6565b5050505092915050565b60606000806126278685612d0b565b91509150806002026001600160401b038111801561264457600080fd5b5060405190808252806020026020018201604052801561267e57816020015b61266b613038565b8152602001906001900390816126635790505b5092506000805b82811015610969577f00000000000000000000000000000000000000000000000000000000000000008583815181106126ba57fe5b60209081029190910101516001600160a01b0390911690528351631a4ca37b60e21b908590839081106126e957fe5b60200260200101516000015185838151811061270157fe5b6020026020010151602001518a60405160240161272093929190613c54565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505085838151811061275f57fe5b602002602001015160200181905250818060010192505083818151811061278257fe5b60200260200101516000015185838151811061279a57fe5b60209081029190910101516001600160a01b039091169052835163a9059cbb60e01b9088908690849081106127cb57fe5b6020026020010151602001516040516024016127e8929190613c3b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505085838151811061282757fe5b602090810291909101810151015260019182019101612685565b604080516001808252818301909252606091600091906020808301908036833701905050905084600001518160008151811061287957fe5b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092526000918160200160208202803683370190505090508560200151816000815181106128c857fe5b602090810291909101015260408051600180825281830190925260009181602001602082028036833701905050604080516001808252818301909252919250816020015b612914613038565b81526020019060019003908161290c5790505093507f00000000000000000000000000000000000000000000000000000000000000008460008151811061295757fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505063ab9c4b5d60e01b898484848d8d8c8c60405160200161299d9392919061406b565b60408051601f19818403018152908290526129c296959493929160c490602401613bbe565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505084600081518110612a0257fe5b60200260200101516020018190525050505095945050505050565b60606000826001600160a01b0316631e50a4a66040518163ffffffff1660e01b815260040160206040518083038186803b158015612a5a57600080fd5b505afa158015612a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a929190613190565b6001600160a01b031663e5406dbf6040518163ffffffff1660e01b815260040160006040518083038186803b158015612aca57600080fd5b505afa158015612ade573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b06919081019061340d565b915081519050915091565b6000806000806000612b2286612f47565b90925090506001600160a01b03821615612c34576040516370a0823160e01b81526001600160a01b038316906370a0823190612b62908a90600401613b90565b60206040518083038186803b158015612b7a57600080fd5b505afa158015612b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb291906138e4565b6040516370a0823160e01b81529095506001600160a01b038216906370a0823190612be1908a90600401613b90565b60206040518083038186803b158015612bf957600080fd5b505afa158015612c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3191906138e4565b93505b856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c6d57600080fd5b505afa158015612c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca59190613a23565b60ff16925050509250925092565b600082820183811015610478576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60606000806000612d1b86612a1d565b91509150806001600160401b0381118015612d3557600080fd5b50604051908082528060200260200182016040528015612d6f57816020015b612d5c613050565b815260200190600190039081612d545790505b5093506000805b82811015612efe57612d8d8482815181106124ed57fe5b5091506001600160a01b03821615612ef6576040516370a0823160e01b81526001600160a01b038316906370a0823190612dcb908b90600401613b90565b60206040518083038186803b158015612de357600080fd5b505afa158015612df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1b91906138e4565b868681518110612e2757fe5b60200260200101516020018181525050858581518110612e4357fe5b602002602001015160200151600014612ef657612e72670de0b6b3a76400006108378989898151811061092b57fe5b868681518110612e7e57fe5b60200260200101516020018181525050858581518110612e9a57fe5b60200260200101516020015160001415612eb357612ef6565b838181518110612ebf57fe5b602002602001015160000151868681518110612ed757fe5b60209081029190910101516001600160a01b0390911690526001909401935b600101612d76565b506000612f0b8386611289565b9050808651038652505050509250929050565b60008083830184811015612f39576000809250925050612f40565b6001925090505b9250929050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d2493b6c846040518263ffffffff1660e01b8152600401612f969190613b90565b60606040518083038186803b158015612fae57600080fd5b505afa158015612fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe691906131e4565b91959194509092505050565b60405180606001604052806060815260200161300c613050565b8152602001600081525090565b604051806040016040528060608152602001613033613050565b905290565b60408051808201909152600081526060602082015290565b604080518082019091526000808252602082015290565b604051806040016040528060608152602001613033604080518082019091528060008152602001606081525090565b803561048181614160565b60008083601f8401126130b2578182fd5b5081356001600160401b038111156130c8578182fd5b602083019150836020828501011115612f4057600080fd5b600082601f8301126130f0578081fd5b81356131036130fe826140fb565b6140bb565b818152846020838601011115613117578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112613141578081fd5b815161314f6130fe826140fb565b818152846020838601011115613163578283fd5b610ba682602083016020870161411c565b600060208284031215613185578081fd5b813561047881614148565b6000602082840312156131a1578081fd5b815161047881614148565b600080604083850312156131be578081fd5b82356131c981614148565b915060208301356131d981614148565b809150509250929050565b6000806000606084860312156131f8578081fd5b835161320381614148565b602085015190935061321481614148565b604085015190925061322581614148565b809150509250925092565b60008060008060608587031215613245578182fd5b843561325081614148565b9350602085013561326081614148565b925060408501356001600160401b0381111561327a578283fd5b613286878288016130a1565b95989497509550505050565b600080600080608085870312156132a7578182fd5b84356132b281614148565b935060208501356132c281614148565b92506040850135915060608501356132d981614148565b939692955090935050565b600080600080600060a086880312156132fb578283fd5b853561330681614148565b9450602086013561331681614148565b935060408601359250606086013561332d81614148565b915060808601356001600160401b03811115613347578182fd5b613353888289016130e0565b9150509295509295909350565b60008060008060008060a08789031215613378578384fd5b863561338381614148565b9550602087013561339381614148565b9450604087013593506060870135925060808701356001600160401b038111156133bb578182fd5b6133c789828a016130a1565b979a9699509497509295939492505050565b6000806000606084860312156133ed578081fd5b83356133f881614148565b95602085013595506040909401359392505050565b6000602080838503121561341f578182fd5b82516001600160401b0380821115613435578384fd5b818501915085601f830112613448578384fd5b81516134566130fe826140de565b818152848101908486016040808502870188018b1015613474578889fd5b8896505b848710156134d75780828c03121561348e578889fd5b805181810181811088821117156134a157fe5b825282516134ae81614148565b8152828901516134bd81614160565b818a01528452600196909601959287019290810190613478565b50909998505050505050505050565b6000602082840312156134f7578081fd5b81516001600160401b038082111561350d578283fd5b818401915084601f830112613520578283fd5b815161352e6130fe826140de565b818152602080820191908501865b8481101561361c5781518701601f196060828d038201121561355c57898afd5b604051606081018181108a8211171561357157fe5b604052602083015161358281614148565b81526040830151602082015260608301518981111561359f578b8cfd5b92909201916040838e03830112156135b5578a8bfd5b6040519150604082018281108a821117156135cc57fe5b604090815260208401518352830151898111156135e7578b8cfd5b6135f68e602083870101613131565b60208481019190915260408301939093525086529485019492909201915060010161353c565b509098975050505050505050565b60006020828403121561363b578081fd5b5035919050565b600060208284031215613653578081fd5b81356001600160401b03811115613668578182fd5b610ba6848285016130e0565b60008060408385031215613686578182fd5b82356001600160401b0381111561369b578283fd5b6136a7858286016130e0565b95602094909401359450505050565b6000806000606084860312156136ca578081fd5b83356001600160401b038111156136df578182fd5b6136eb868287016130e0565b9660208601359650604090950135949350505050565b60008060408385031215613713578182fd5b82356001600160401b03811115613728578283fd5b613734858286016130e0565b92505060208301356131d98161416e565b600080600060608486031215613759578081fd5b83356001600160401b0381111561376e578182fd5b61377a868287016130e0565b935050602084013561378b8161416e565b929592945050506040919091013590565b6000806000606084860312156137b0578081fd5b83356001600160401b038111156137c5578182fd5b6137d1868287016130e0565b93505060208401356137e28161416e565b915060408401356132258161416e565b600060208284031215613803578081fd5b81516001600160401b0380821115613819578283fd5b90830190818503608081121561382d578384fd5b6040805160608101818110858211171561384357fe5b8252845184811115613853578687fd5b61385f89828801613131565b82525081601f1984011215613872578586fd5b81519250818301838110858211171561388757fe5b82526020850151935061389984614148565b838352818501516020840152826020820152606085015182820152809550505050505092915050565b6000602082840312156138d3578081fd5b815161ffff81168114610478578182fd5b6000602082840312156138f5578081fd5b5051919050565b600080600060608486031215613910578081fd5b8335925060208401356001600160401b038082111561392d578283fd5b908501908187036080811215613941578384fd5b6040805160608101818110858211171561395757fe5b8252843584811115613967578687fd5b6139738b8288016130e0565b82525081601f1984011215613986578586fd5b81519250818301838110858211171561399b57fe5b8252602085013593506139ad84614148565b838352818501356020840152826020820152606085013582820152809650506139d7818901613096565b9450505050509250925092565b600080600080600060a086880312156139fb578283fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600060208284031215613a34578081fd5b81516104788161416e565b6000815180845260208085019450808401835b83811015613a775781516001600160a01b031687529582019590820190600101613a52565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b85811015613ae5578284038952815180516001600160a01b031685528501516040868601819052613ad181870183613b21565b9a87019a9550505090840190600101613a9e565b5091979650505050505050565b6000815180845260208085019450808401835b83811015613a7757815187529582019590820190600101613b05565b60008151808452613b3981602086016020860161411c565b601f01601f19169290920160200192915050565b80516001600160a01b03168252602090810151910152565b6000815160038110613b7357fe5b80845250602082015160406020850152610ba66040850182613b21565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b600060018060a01b03808a16835260e06020840152613be060e084018a613a3f565b8381036040850152613bf2818a613af2565b90508381036060850152613c068189613af2565b9050818716608085015283810360a0850152613c228187613b21565b9250505060ff831660c083015298975050505050505050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060018060a01b038516825283602083015260606040830152613c9e6060830184613a82565b95945050505050565b6001600160a01b039485168152602081019390935260ff919091166040830152909116606082015260800190565b6000602082526104786020830184613a82565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b6000602082526104786020830184613b21565b6020808252601a9082015279696e76616c696420736c69707061676520746f6c6572616e636560301b604082015260600190565b6020808252601290820152710c8e6e840c2e6e6cae840dad2e6dac2e8c6d60731b604082015260600190565b6020808252601390820152720e6e4c640c2dadeeadce840dad2e6dac2e8c6d606b1b604082015260600190565b6020808252601d908201527f63616e6e6f742072656d6f7665206e6f6e2d656d707479206173736574000000604082015260600190565b6020808252601290820152710e6e4c640c2e6e6cae840dad2e6dac2e8c6d60731b604082015260600190565b6020808252601990820152780e6eec2e040c8c2e8c240d8cadccee8d040dad2e6dac2e8c6d603b1b604082015260600190565b6020808252600f908201526e0c2dadeeadce840e8dede40d0d2ced608b1b604082015260600190565b6020808252601390820152720c8e6e840c2dadeeadce840dad2e6dac2e8c6d606b1b604082015260600190565b600060208083526080830184516060808487015282825180855260a08801915060a086820289010194508584019350865b81811015613f9457888603609f190183528451805160408089528151818a0181905290918a82028a01880191908b0190888b01908d5b81811015613f65578c8503605f19018352835180516001600160a01b031686528e8101518f8701528601518686018c905280518c8701528e015160808601879052613f5260a0870182613b21565b955050928d0192918d0191600101613f04565b5050505091890151888303898b015291613f7f8184613b65565b98505050948701945091860191600101613ece565b50505050918501519150610ba66040850183613b4d565b6020808252825160608383015280516080840181905260009291820190839060a08601905b80831015613ff957613fe3828551613b4d565b6040820191508484019350600183019250613fd0565b50928601519261400c6040870185613b4d565b9695505050505050565b61ffff9290921682521515602082015260400190565b600086825260ff8616602083015260a0604083015261404e60a0830186613a3f565b6001600160a01b0394909416606083015250608001529392505050565b60008482526060602083015283516080606084015261408d60e0840182613b21565b905060208501516140a16080850182613b4d565b5060409485015160c0840152921515919093015292915050565b6040518181016001600160401b03811182821017156140d657fe5b604052919050565b60006001600160401b038211156140f157fe5b5060209081020190565b60006001600160401b0382111561410e57fe5b50601f01601f191660200190565b60005b8381101561413757818101518382015260200161411f565b838111156106a55750506000910152565b6001600160a01b038116811461415d57600080fd5b50565b801515811461415d57600080fd5b60ff8116811461415d57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122068ed064a80a853e4b3c7542ffef85b38951a3f148e413c6ff25ac69bf7ec157764736f6c634300070600330000000000000000000000002d8a3c5677189723c4cb8873cfc9c8976fdf38ac000000000000000000000000a238dd80c259a72e81d7e4664a9801593f98d1c50000000000000000000000004f754e0f0924afd74980886b0b479fa1d7c58d0d0000000000000000000000009be950d8bff36f09e5d460271859f94c7c58344c000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710