3 txs
2.78m calls
constructor
No constructor.
functions
_APPROVE_PROXY
viewfunction _APPROVE_PROXY() view returns (address)
_WETH
viewfunction _WETH() view returns (address)
_WNATIVE_RELAY
viewfunction _WNATIVE_RELAY() view returns (address)
admin
viewfunction admin() view returns (address)
approveProxy
viewfunction approveProxy() view returns (address)
commissionRateLimit
viewfunction commissionRateLimit() view returns (uint256)
feeRateAndReceiver_UNUSED
viewfunction feeRateAndReceiver_UNUSED() view returns (uint256)
operator_UNUSED
viewfunction operator_UNUSED(address) view returns (address)
orderRemaining_UNUSED
viewfunction orderRemaining_UNUSED(bytes32) view returns (uint256)
owner
viewfunction owner() view returns (address)
priorityAddresses
viewfunction priorityAddresses(address) view returns (bool)
wNativeRelayer
viewfunction wNativeRelayer() view returns (address)
initialize
nonpayablefunction initialize()
renounceOwnership
nonpayablefunction renounceOwnership()
setPriorityAddress
nonpayablefunction setPriorityAddress(address _priorityAddress, bool valid)
setProtocolAdmin
nonpayablefunction setProtocolAdmin(address _newAdmin)
smartSwapByInvest
payablefunction smartSwapByInvest(tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData, address to) payable returns (uint256 returnAmount)
smartSwapByInvestWithRefund
payablefunction smartSwapByInvestWithRefund(tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData, address to, address refundTo) payable returns (uint256 returnAmount)
smartSwapByOrderId
payablefunction smartSwapByOrderId(uint256 orderId, tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData) payable returns (uint256 returnAmount)
smartSwapByOrderIdByXBridge
payablefunction smartSwapByOrderIdByXBridge(uint256 orderId, tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData) payable returns (uint256 returnAmount)
smartSwapTo
payablefunction smartSwapTo(uint256 orderId, address receiver, tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData) payable returns (uint256 returnAmount)
swapWrap
payablefunction swapWrap(uint256 orderId, uint256 rawdata) payable
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes)
uniswapV3SwapTo
payablefunction uniswapV3SwapTo(uint256 receiver, uint256 amount, uint256 minReturn, uint256[] pools) payable returns (uint256 returnAmount)
uniswapV3SwapToByXBridge
payablefunction uniswapV3SwapToByXBridge(uint256 receiver, uint256 amount, uint256 minReturn, uint256[] pools) payable returns (uint256 returnAmount)
uniswapV3SwapToWithPermit
nonpayablefunction uniswapV3SwapToWithPermit(uint256 receiver, address srcToken, uint256 amount, uint256 minReturn, uint256[] pools, bytes permit) returns (uint256 returnAmount)
unxswapByOrderId
payablefunction unxswapByOrderId(uint256 srcToken, uint256 amount, uint256 minReturn, bytes32[] pools) payable returns (uint256 returnAmount)
unxswapByOrderIdByXBridge
payablefunction unxswapByOrderIdByXBridge(uint256 srcToken, uint256 amount, uint256 minReturn, bytes32[] pools) payable returns (uint256 returnAmount)
unxswapTo
payablefunction unxswapTo(uint256 srcToken, uint256 amount, uint256 minReturn, address receiver, bytes32[] pools) payable returns (uint256 returnAmount)
events
AdminChanged
event AdminChanged(address newAdmin)
CommissionRecord
event CommissionRecord(uint256 commissionAmount, address referrerAddress)
Initialized
event Initialized(uint8 version)
OrderRecord
event OrderRecord(address fromToken, address toToken, address sender, uint256 fromAmount, uint256 returnAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PriorityAddressChanged
event PriorityAddressChanged(address priorityAddress, bool valid)
SwapOrderId
event SwapOrderId(uint256 id)
errors
SafeTransferFailed
error SafeTransferFailed()
creation bytecode
0x608060405234801561001057600080fd5b50614ece806100206000396000f3fe6080604052600436106101d15760003560e01c80639a09b285116100f7578063e0af361611610095578063f3dced3c11610064578063f3dced3c14610526578063f3e144b614610546578063f851a44014610566578063fa461e331461058657600080fd5b8063e0af3616146104ab578063e99bfa95146104c6578063f1489b9f146104d9578063f2fde38b1461050657600080fd5b8063d13a35e6116100d1578063d13a35e61461044f578063d1b260d41461046f578063d3507df514610482578063d8837daf1461049857600080fd5b80639a09b28514610406578063b80c2f0914610426578063ca68d8f61461043957600080fd5b8063715018a61161016f5780638575654f1161013e5780638575654f14610382578063869c6b4b146103955780638da5cb5b146103d55780639871efa4146103f357600080fd5b8063715018a61461031057806373679b6b14610325578063779e45fc1461034d5780638129fc1c1461036d57600080fd5b80630d5f0e3b116101ab5780630d5f0e3b1461027457806327f9fa1e14610287578063591b3d08146102d55780636aa47645146102e857600080fd5b806301617fab1461022857806303b87e5f1461023b57806308298b5a1461026157600080fd5b36610223573233036102215760405162461bcd60e51b81526020600482015260146024820152731155120819195c1bdcda5d081c995a9958dd195960621b60448201526064015b60405180910390fd5b005b600080fd5b610221610236366004613ec2565b6105a6565b61024e610249366004613f6c565b61093a565b6040519081526020015b60405180910390f35b61024e61026f366004614038565b6109fe565b61024e6102823660046140aa565b610a40565b34801561029357600080fd5b506102bd6102a236600461410a565b60b4602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610258565b61024e6102e33660046146fe565b610a80565b3480156102f457600080fd5b506102bd731b5d39419c268b76db06de49e38b010fbfb5e22681565b34801561031c57600080fd5b50610221610cf9565b34801561033157600080fd5b506102bd73d2f0ac2012c8433f235c8e5e97f2368197dd06c781565b34801561035957600080fd5b506102216103683660046147c0565b610d0d565b34801561037957600080fd5b50610221610dc4565b61024e6103903660046140aa565b610ede565b3480156103a157600080fd5b506103c56103b036600461410a565b60996020526000908152604090205460ff1681565b6040519015158152602001610258565b3480156103e157600080fd5b506033546001600160a01b03166102bd565b61024e6104013660046140aa565b610fe1565b34801561041257600080fd5b5061022161042136600461410a565b611018565b61024e6104343660046147f9565b6110ba565b34801561044557600080fd5b5061024e61012c81565b34801561045b57600080fd5b506098546102bd906001600160a01b031681565b61024e61047d3660046147f9565b611138565b34801561048e57600080fd5b5061024e60b65481565b61024e6104a63660046140aa565b6112bf565b3480156104b757600080fd5b506102bd6006602160991b0181565b61024e6104d43660046148af565b6113be565b3480156104e557600080fd5b5061024e6104f436600461495f565b60b56020526000908152604090205481565b34801561051257600080fd5b5061022161052136600461410a565b6113ce565b34801561053257600080fd5b506097546102bd906001600160a01b031681565b34801561055257600080fd5b5061024e6105613660046149b9565b611444565b34801561057257600080fd5b5060ad546102bd906001600160a01b031681565b34801561059257600080fd5b506102216105a1366004614a43565b611492565b600160ff1b81166001600160801b038216806105f95760405162461bcd60e51b81526020600482015260126024820152710616d6f756e74206d757374206265203e20360741b6044820152606401610218565b81156107a45760405163052f523360e11b81526006602160991b01600482015233602482015273d2f0ac2012c8433f235c8e5e97f2368197dd06c760448201526001600160801b0382166064820152731b5d39419c268b76db06de49e38b010fbfb5e22690630a5ea46690608401600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b81526001600160801b038416600482015273d2f0ac2012c8433f235c8e5e97f2368197dd06c79250632e1a7d4d9150602401600060405180830381600087803b1580156106ee57600080fd5b505af1158015610702573d6000803e3d6000fd5b50506040516000925033915047908381818185875af1925050503d8060008114610748576040519150601f19603f3d011682016040523d82523d6000602084013e61074d565b606091505b505090508061079e5760405162461bcd60e51b815260206004820152601c60248201527f7472616e73666572206e617469766520746f6b656e206661696c6564000000006044820152606401610218565b50610874565b806001600160801b031634146107f55760405162461bcd60e51b81526020600482015260166024820152751d985b1d59481b9bdd08195c5d585b08185b5bdd5b9d60521b6044820152606401610218565b6006602160991b016001600160a01b031663d0e30db0826001600160801b03166040518263ffffffff1660e01b81526004016000604051808303818588803b15801561084057600080fd5b505af1158015610854573d6000803e3d6000fd5b50505050506108746006602160991b0133836001600160801b03166116e1565b604051848152600080516020614e798339815191529060200160405180910390a1600080516020614e59833981519152826108c35773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6108cc565b6006602160991b015b836108de576006602160991b016108f4565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b604080516001600160a01b03938416815292909116602083015233908201526001600160801b03831660608201819052608082015260a00160405180910390a150505050565b60008760800135428110156109615760405162461bcd60e51b815260040161021890614a95565b610969611711565b6040518b8152600080516020614e798339815191529060200160405180910390a16109e433808c61099f368e90038e018e614abd565b8c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506109df92508d91508e9050614ad9565b61176a565b91506109f06001606555565b509998505050505050505050565b60405160a087901c8152600090600080516020614e798339815191529060200160405180910390a1610a3587878733888888611818565b979650505050505050565b60405160a086901c8152600090600080516020614e798339815191529060200160405180910390a1610a763387878787876118a6565b9695505050505050565b6000866080015142811015610aa75760405162461bcd60e51b815260040161021890614a95565b610aaf611711565b87516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed198101610b155760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21039b7bab931b2903a37b5b2b760611b6044820152606401610218565b6001600160a01b038416610b645760405162461bcd60e51b8152602060048201526016602482015275726566756e64546f206973206164647265737328302960501b6044820152606401610218565b6001600160a01b038516610bad5760405162461bcd60e51b815260206004820152601060248201526f746f206973206164647265737328302960801b6044820152606401610218565b6000896040015111610bf85760405162461bcd60e51b8152602060048201526014602482015273066726f6d546f6b656e416d6f756e7420697320360641b6044820152606401610218565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190614ae6565b905060005b8951811015610cca578a60400151828b8381518110610c8957610c89614aff565b6020026020010151610c9b9190614b2b565b610ca59190614b42565b8a8281518110610cb757610cb7614aff565b6020908102919091010152600101610c68565b5060408a01819052610ce08a8a8a30898b611901565b93505050610cee6001606555565b509695505050505050565b610d01611c31565b610d0b6000611c8b565b565b60ad546001600160a01b0316331480610d3057506033546001600160a01b031633145b610d615760405162461bcd60e51b81526020600482015260026024820152616e6160f01b6044820152606401610218565b6001600160a01b038216600081815260996020908152604091829020805460ff19168515159081179091558251938452908301527fede97de789011d2becb9fba8441864c3b17f4a20f7ebf0a77e93f30adc30e207910160405180910390a15050565b600054610100900460ff1615808015610de45750600054600160ff909116105b80610dfe5750303b158015610dfe575060005460ff166001145b610e615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610218565b6000805460ff191660011790558015610e84576000805461ff0019166101001790555b610e8c611cdd565b610e94611d0c565b8015610edb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b50565b3360009081526099602052604081205460ff161515600114610f125760405162461bcd60e51b815260040161021890614b64565b60405160a087901c8152600080516020614e798339815191529060200160405180910390a1600080336001600160a01b031663534015b36040518163ffffffff1660e01b81526004016040805180830381865afa158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b9190614b8b565b90925090506001600160a01b038116610fc65760405162461bcd60e51b815260040161021890614bba565b610fd588888885858a8a611818565b98975050505050505050565b60405160a086901c8152600090600080516020614e798339815191529060200160405180910390a1610a7686868633338888611818565b60ad546001600160a01b031633148061103b57506033546001600160a01b031633145b61106c5760405162461bcd60e51b81526020600482015260026024820152616e6160f01b6044820152606401610218565b60ad80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7ce7ec0b50378fb6c0186ffb5f48325f6593fcb4ca4386f21861af3129188f5c90602001610ed2565b60008760800135428110156110e15760405162461bcd60e51b815260040161021890614a95565b6110e9611711565b6040518a8152600080516020614e798339815191529060200160405180910390a161111f33808061099f368e90038e018e614abd565b915061112b6001606555565b5098975050505050505050565b600087608001354281101561115f5760405162461bcd60e51b815260040161021890614a95565b611167611711565b3360009081526099602052604090205460ff16151560011461119b5760405162461bcd60e51b815260040161021890614b64565b6040518a8152600080516020614e798339815191529060200160405180910390a1600080336001600160a01b031663534015b36040518163ffffffff1660e01b81526004016040805180830381865afa1580156111fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112209190614b8b565b90925090506001600160a01b03811661124b5760405162461bcd60e51b815260040161021890614bba565b6112b18283838e8036038101906112629190614abd565b8e8e80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d8d906109df9190614ad9565b9350505061112b6001606555565b3360009081526099602052604081205460ff1615156001146112f35760405162461bcd60e51b815260040161021890614b64565b60405160a087901c8152600080516020614e798339815191529060200160405180910390a1600080336001600160a01b031663534015b36040518163ffffffff1660e01b81526004016040805180830381865afa158015611358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137c9190614b8b565b90925090506001600160a01b0381166113a75760405162461bcd60e51b815260040161021890614bba565b610fd582826001600160a01b0316898989896118a6565b6000610a76868686868687610a80565b6113d6611c31565b6001600160a01b03811661143b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610218565b610edb81611c8b565b60405160a089901c8152600090600080516020614e798339815191529060200160405180910390a1611477888484611d3b565b611485338a898989896118a6565b9998505050505050505050565b611533565b3d6000803e3d6000fd5b67a9059cbb70a0823160c01b815230816008015260206000602483600401855afa6114ce576114ce611497565b60005180156114f95760a4356004830152602482018190526114f96020600060448582885af16114fe565b505050565b8061150b5761150b611497565b600160005114601f3d11163d15178061152f57633c9fd93960e21b60005260046000fd5b5050565b604051601581017306ff0b40e9091053eee51fa1d482ce5d852f523360611b825260206000600484335afa61156a5761156a611497565b6020806004808501335afa61158157611581611497565b60206040600460088501335afa61159a5761159a611497565b60008060008813600181146115b65760205192508791506115bf565b60005192508891505b507fff33128a8fc17869897dce68ed026d694621f6fdfd00000000000000000000008452606060002083527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460208401526001600160a01b036055852016925033831461163757635960139160e11b60005260046000fd5b60843592507306ff0b40e9091053eee51fa1d482ce5d852f523360611b8452308314600181146116a9578260148601528360348601523360548601528160748601526116a4602060006084601089016000731b5d39419c268b76db06de49e38b010fbfb5e2265af16114fe565b6116d6565b3360108601528160308601526116cc602060006044600c89016000885af16114fe565b6116d683866114a1565b505050505050505050565b6116f48363a9059cbb60e01b8484611ea1565b6114f95760405163fb7f507960e01b815260040160405180910390fd5b6002606554036117635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610218565b6002606555565b60006001600160a01b0385166117b05760405162461bcd60e51b815260206004820152600b60248201526a6e6f74206164647228302960a81b6044820152606401610218565b60006117ba611ef5565b90506000806117cf838b8a8a60400151611f9d565b90925090508960006117e5898989858f89611901565b905060006117f4868c86612167565b90506118008183614be2565b9d9c50505050505050505050505050565b6001606555565b60006001600160a01b03841661185e5760405162461bcd60e51b815260206004820152600b60248201526a6e6f74206164647228302960a81b6044820152606401610218565b6000611868611ef5565b90506000806118798389898d611f9d565b9150915060006118976001600160a01b038d168c8c8a8a8e896123e4565b905060006117f4858a85612167565b6000806118b1611ef5565b90506000806118c2838b8b8b611f9d565b9150915060006118d68b848b8b8b8b612bf6565b905060006118e5858c85612167565b90506118f18183614be2565b9c9b505050505050505050505050565b604086015160009087906119625760405162461bcd60e51b815260206004820152602260248201527f526f7574653a2066726f6d546f6b656e416d6f756e74206d757374206265203e604482015261020360f41b6064820152608401610218565b805160208201516001600160a01b039182169161198091168561310b565b925061198b8161319f565b156119f3576006602160991b016001600160a01b031663d0e30db083604001516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156119d657600080fd5b505af11580156119ea573d6000803e3d6000fd5b50505050503095505b6000805b8951811015611a2f57898181518110611a1257611a12614aff565b602002602001015182611a259190614bf5565b91506001016119f7565b508260400151811115611aa25760405162461bcd60e51b815260206004820152603560248201527f526f7574653a206e756d626572206f6620626174636865732073686f756c64206044820152741899480f0f48199c9bdb551bdad95b905b5bdd5b9d605a1b6064820152608401610218565b508651885114611ae65760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610218565b60005b8751811015611b4f57611b47878787611b0e87602001516001600160a01b031661319f565b8d8681518110611b2057611b20614aff565b60200260200101518d8781518110611b3a57611b3a614aff565b60200260200101516131c1565b600101611ae9565b50611b5e826020015185613339565b60208201518390611b78906001600160a01b03168661310b565b611b829190614be2565b92508160600151831015611bd15760405162461bcd60e51b8152602060048201526016602482015275135a5b881c995d1d5c9b881b9bdd081c995858da195960521b6044820152606401610218565b60208083015160408085015181516001600160a01b038087168252909316938301939093523290820152606081019190915260808101849052600080516020614e598339815191529060a00160405180910390a150509695505050505050565b6033546001600160a01b03163314610d0b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610218565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611d045760405162461bcd60e51b815260040161021890614c08565b610d0b6135f3565b600054610100900460ff16611d335760405162461bcd60e51b815260040161021890614c08565b610d0b613623565b80156114f9576000606060e0839003611ddc576040516001600160a01b03861690611d759063d505accf60e01b9087908790602001614c53565b60408051601f1981840301815290829052611d8f91614c9b565b6000604051808303816000865af19150503d8060008114611dcc576040519150601f19603f3d011682016040523d82523d6000602084013e611dd1565b606091505b509092509050611e4b565b610100839003611e0d576040516001600160a01b03861690611d75906323f2ebc360e21b9087908790602001614c53565b60405162461bcd60e51b81526020600482015260136024820152720aee4dedcce40e0cae4dad2e840d8cadccee8d606b1b6044820152606401610218565b81611e9a57611e81816040518060400160405280600f81526020016e02832b936b4ba103330b4b632b21d1608d1b81525061364a565b60405162461bcd60e51b81526004016102189190614ce3565b5050505050565b60006040518481528360048201528260248201526020600060448360008a5af19150508015611eed573d8015611ee357600160005114601f3d11169150611eeb565b6000863b1191505b505b949350505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260405160a081016040525060203603356001600160d01b03198116651e51057e155560d11b1482526001600160d01b03198116653ca20afc2bbb60d01b14826020015265ffffffffffff60a01b811660a01c82604001526001600160a01b0381168260600152506001600160a01b03604036033516816080015290565b600080856020015115611fc25730611fb98760800151306137ad565b9150915061215e565b8551611fd35750829050600061215e565b611ff4565b62461bcd60e51b600052600160e51b6020528060405250806000fd5b604086015161012c81111561202b5761202b605f7c1b6572726f7220636f6d6d697373696f6e2072617465206c696d697400611fd8565b60808701516060880151826127100383870204925073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8214600181146120df576040516084810160405263052f523360e11b81528360048201528960248201528260448201528460648201526000806084836000731b5d39419c268b76db06de49e38b010fbfb5e2265af19050806120d9576120d960577c13636c61696d20746f6b656e73206661696c6564000000000000000000611fd8565b50612118565b60008060008087865af18061211657612116605f7c1b636f6d6d697373696f6e2077697468206574686572206572726f7200611fd8565b505b50604051915060408201604052828252806020830152507fffc60ee157a42f4d8edbd1897e6581a96d9ed04e44fb2ab53a47ce1eb8f2775b604082a15050836000915091505b94509492505050565b6000836020015161217a575060006123dd565b604084015161012c8111156121b1576121b1605f7c1b6572726f7220636f6d6d697373696f6e2072617465206c696d697400611fd8565b6080850151606086015173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8214600181146122fc57604051604881016040526ba9059cbba9059cbb70a0823160a01b815230600c82015260206000602460088401875afa80612231576122316058740519d95d0818985b185b98d953d98819985a5b195960421b611fd8565b6000518881101561225557612255604d6a029cdd588819985a5b195960961b611fd8565b888103905061271087820204975084600884015287602884015260008060446004860160008a5af19150816122ac576122ac605f7c1b7472616e7366657220746f6b656e2072656665726572206661696c00611fd8565b8960048401528781036024840152506000806044846000895af19050806122f5576122f560607c1c7472616e7366657220746f6b656e207265636569766572206661696c611fd8565b505061239e565b8547101561231d5761231d604d6a029cdd588819985a5b195960961b611fd8565b85470361271085820204955060008060008089875af18061236057612360605d7c197472616e73666572206574682072656665726572206661696c000000611fd8565b6000806000808a86038d5af190508061239b5761239b605e7c1a7472616e7366657220657468207265636569766572206661696c0000611fd8565b50505b5060405192506040830160405283835280602084015250507fffc60ee157a42f4d8edbd1897e6581a96d9ed04e44fb2ab53a47ce1eb8f2775b604082a1505b9392505050565b6000612614565b828152600060206000600484600401865afa612420576124206054700419d95d081d1bdad95b8819985a5b195960621b611fd8565b505060005192915050565b6770a082310dfe168160c01b815260008060206000600485600401875afa61246e5761246e605672049d1bdad95b8c0818d85b1b0819985a5b195960521b611fd8565b600051915083836004015260206000602485855afa6124af576124af60597c1562616c616e63654f662063616c6c206661696c656400000000000000611fd8565b60005190509250929050565b6770a08231d21220a760c01b815260008060206000600485600401875afa61246e5761246e605672049d1bdad95b8c4818d85b1b0819985a5b195960521b611fd8565b668b0367c240bc6b60c21b8152600060406000600484600401875afa6125465761254660587c1472657365727665732063616c6c206661696c65640000000000000000611fd8565b60005160205186801561257257891561256a5761256387866124bb565b8390039650505b909190612589565b881561258957612582878661242b565b8490039650505b50668b0367c240bc6b60c21b8452898502633b9aca0092909202820191020490508480156125c357816004840152600060248401526125d1565b600060048401528160248401525b50886044830152608060648301526000608483015260008060a4846000885af1610fd557610fd5605470041cddd85c0818d85b1b0819985a5b195960621b611fd8565b84602085028101858061263b5761263b604e6b0b656d70747920706f6f6c7360901b611fd8565b5060405182358b15600181146126e55734156126715761267160557111696e76616c6964206d73672e76616c756560581b611fd8565b63052f523360e11b83528c60048401528760248401526001600160a01b03821660448401528b60648401526000806084856000731b5d39419c268b76db06de49e38b010fbfb5e2265af16126e0576126e06056720498db185a5b481d1bdad95b8819985a5b195960521b611fd8565b6127a4565b60018c34100361270f5761270f60557111696e76616c6964206d73672e76616c756560581b611fd8565b670a9059cbbd0e30db60c41b835260008060048086018f6006602160991b015af1612755576127556056720499195c1bdcda5d081155120819985a5b195960521b611fd8565b6001600160a01b03821683600401528b83602401526020600060448560006006602160991b015af16127a4576127a4605874051d1c985b9cd9995c8815d155120819985a5b195960421b611fd8565b508a9450602084015b838110156128035780356127f76001600160a01b03821663ffffffff60a01b851660a01c600160fd1b8616600160fc1b8716600160ff1b88166001600160a01b0389168d8b6124fe565b965091506020016127ad565b5060009350600160fe1b8116801561294a57600094506128503063ffffffff60a01b841660a01c600160fd1b8516600160fc1b8616600160ff1b87166001600160a01b0388168c8a6124fe565b9550672e1a7d4da9059cbb60c01b835273d2f0ac2012c8433f235c8e5e97f2368197dd06c760088401528560288401526020600060448560040160006006602160991b015af16128bd576128bd605874051d1c985b9cd9995c8815d155120819985a5b195960421b611fd8565b85600484015260206000602485600073d2f0ac2012c8433f235c8e5e97f2368197dd06c75af161290f5761290f60577c13776974686472617720455448206661696c6564000000000000000000611fd8565b600080600080898b5af16129455761294560577c137472616e7366657220455448206661696c6564000000000000000000611fd8565b612b88565b60009350600160ff1b821680156129fc57600160fc1b8316156129f7576770a082310dfe168160c01b8452602060006004866004016001600160a01b0387165afa6129b0576129b0605672049d1bdad95b8c0818d85b1b0819985a5b195960521b611fd8565b600051955087846004015260206000602486895afa6129f1576129f160567c15746f6b656e302062616c616e6365206661696c656400000000000000611fd8565b60005194505b612a98565b600160fd1b831615612a98576770a08231d21220a760c01b8452602060006004866004016001600160a01b0387165afa612a5157612a51605672049d1bdad95b8c4818d85b1b0819985a5b195960521b611fd8565b600051955087846004015260206000602486895afa612a9257612a9260597c15746f6b656e312062616c616e6365206661696c656400000000000000611fd8565b60005194505b50612ad08763ffffffff60a01b841660a01c600160fd1b8516600160fc1b8616600160ff1b87166001600160a01b0388168c8a6124fe565b95508460001060018114612b3957600160ff1b83168015612b1157612b0a6770a082310dfe168160c01b6001600160a01b038616876123eb565b9650612b33565b612b306770a08231d21220a760c01b6001600160a01b038616876123eb565b96505b50612b86565b6770a082310dfe168160c01b845287846004015260206000602486895afa612b7e57612b7e6058740519d95d0818985b185b98d953d98819985a5b195960421b611fd8565b846000510396505b505b505088841015612bba57612bba605a7c164d696e2072657475726e206e6f742072656163686564000000000000611fd8565b8a8152826020820152326040820152896060820152836080820152600080516020614e5983398151915260a082a1505050979650505050505050565b600061300c565b6000856001600160ff1b031015612c1f57630b3f79fd60e41b60005260046000fd5b604051600160ff1b8616156001600160a01b0387168160018114612cb357630251596160e31b845260048401868152600060208201528a604082015273fffd8963efd1fc6a506488495d951d5263988d25606082015260a06080820152604060a08201528760c08201528860e082015250600080610104866000865af180612ca75760206000fd5b5060206000803e612d16565b630251596160e31b845260048401868152600160208201528a60408201526401000276a4606082015260a06080820152604060a08201528760c08201528860e082015250600080610104866000865af180612d0e5760206000fd5b5060208060003e5b505050506000519050600160ff1b811015612d3c576322323ba760e21b60005260046000fd5b1960010195945050505050565b600181341003612d6457631841b4e160e01b60005260046000fd5b600080600080846006602160991b015af18061152f5761152f60577c1357455448206465706f736974206661696c6564000000000000000000611fd8565b60405160048101672e1a7d4da9059cbb60c01b825273d2f0ac2012c8433f235c8e5e97f2368197dd06c7600482015283602482015260008060448360006006602160991b015af1905080612e1857612e1860587c147472616e736665722077657468206661696c65640000000000000000611fd8565b836004830152600080602484600073d2f0ac2012c8433f235c8e5e97f2368197dd06c75af1905080612e6c57612e6c60587c1477697468647261772077657468206661696c65640000000000000000611fd8565b60008060008087875af1905080612e9d57612e9d605571045cd95b9908195d1a195c8819985a5b1959605a1b611fd8565b50505050565b60006040517306ff0b40e9091053eee51fa1d482ce5d852f523360611b8152600080600483865afa905080612ef257612ef26055710459d95d081d1bdad95b8c0819985a5b1959605a1b611fd8565b5060206000803e505060005190565b60006040517306ff0b40e9091053eee51fa1d482ce5d852f523360611b81526000806004808401865afa905080612ef257612ef26054710459d95d081d1bdad95b8c4819985a5b1959605a1b611fd8565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8034612f9e578235600160ff1b81161560018114612f8f57612f8882612f01565b9350612f9b565b612f9882612ea3565b93505b50505b8335600160fd1b16612fdb578335600160ff1b81161560018114612fcc57612fc582612ea3565b9250612fd8565b612fd582612f01565b92505b50505b60405182600052816020523260405285608052600080516020614e5983398151915260a06000a16040525050505050565b82601f1960208402820101838061302e576333f3e07b60e11b60005260046000fd5b50886000341180156130475761304389612d49565b309a505b5087606052825b8281101561307157613064898235848e30612bfd565b309b50985060200161304e565b506000600160fd1b8335161180600181146130915780156130b0576130c1565b61309f8a8535858f30612bfd565b95506130ab868c612da2565b6130c1565b6130be8a8535858f8f612bfd565b95505b505050858310156130f4576130f4605a7c164d696e2072657475726e206e6f742072656163686564000000000000611fd8565b6130ff838284612f52565b50509695505050505050565b60006131168361319f565b1561312c57506001600160a01b03811631613199565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015613172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131969190614ae6565b90505b92915050565b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b60006131f1826000815181106131d9576131d9614aff565b6020026020010151608001516001600160a01b031690565b905060008060008451905060005b8181101561332c57801561323d576132228682815181106131d9576131d9614aff565b94506132376001600160a01b0386163061310b565b9650309a505b30613249600184614be2565b82148015613255575088155b156132615750886132f9565b61326c600184614be2565b821080156132a2575086613281836001614bf5565b8151811061329157613291614aff565b602002602001015160200151516001145b156132f457866132b3836001614bf5565b815181106132c3576132c3614aff565b6020026020010151602001516000815181106132e1576132e1614aff565b60200260200101519050600194506132f9565b600094505b6133208c8c838b8b878151811061331257613312614aff565b602002602001015189613832565b508392506001016131ff565b5050505050505050505050565b61334b826001600160a01b031661319f565b15613565576040516370a0823160e01b81523060048201526000906006602160991b01906370a0823190602401602060405180830381865afa158015613395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b99190614ae6565b905080156134ab5760405163a9059cbb60e01b815273d2f0ac2012c8433f235c8e5e97f2368197dd06c76004820152602481018290526006602160991b019063a9059cbb906044016020604051808303816000875af1158015613420573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134449190614cf6565b50604051632e1a7d4d60e01b81526004810182905273d2f0ac2012c8433f235c8e5e97f2368197dd06c790632e1a7d4d90602401600060405180830381600087803b15801561349257600080fd5b505af11580156134a6573d6000803e3d6000fd5b505050505b6001600160a01b03821630146114f957478015612e9d576000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461350f576040519150601f19603f3d011682016040523d82523d6000602084013e613514565b606091505b5050905080611e9a5760405162461bcd60e51b815260206004820152601c60248201527f7472616e73666572206e617469766520746f6b656e206661696c6564000000006044820152606401610218565b6001600160a01b038116301461152f576040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156135bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e09190614ae6565b905080156114f9576114f98383836116e1565b600054610100900460ff1661361a5760405162461bcd60e51b815260040161021890614c08565b610d0b33611c8b565b600054610100900460ff166118115760405162461bcd60e51b815260040161021890614c08565b6060600483511061377b5760208301516001600160e01b0319811662461bcd60e51b14801561367b57506044845110155b1561371b5760248481015180860182018051919290919061369d908490614bf5565b6136a79190614bf5565b865110156136ef5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610218565b8481604051602001613702929190614d13565b6040516020818303038152906040529350505050613199565b6001600160e01b03198116634e487b7160e01b14801561373c575083516024145b1561377957602484015183613750826139e9565b604051602001613761929190614d62565b60405160208183030381529060405292505050613199565b505b8161378584613a11565b604051602001613796929190614d97565b604051602081830303815290604052905092915050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee83146001811461382757604051602481016040526370a0823160e01b815283600482015260206000602483885afa90508061381c5761381c6058740519d95d0818985b185b98d953d98819985a5b195960421b611fd8565b50600051915061382b565b4791505b5092915050565b6000805b8351518110156139df5760008460400151828151811061385857613858614aff565b602002602001015160001b905060008060008061387f89608001516001600160a01b031690565b6001600160a01b0386169450600160ff1b8616935061ffff60a087901c16925090506138ab8288614bf5565b8951519097506138bd90600190614be2565b8603613924576127108711156139245760405162461bcd60e51b815260206004820152602660248201527f746f74616c5765696768742063616e206e6f7420657863656564203130303030604482015265081b1a5b5a5d60d21b6064820152608401610218565b8761397f576000826127101461395057612710613941848d614b2b565b61394b9190614b42565b613952565b8a5b905061397d8e8b60200151898151811061396e5761396e614aff565b60200260200101518484613bf8565b505b50506139c9818860000151868151811061399b5761399b614aff565b60200260200101518b858b6060015189815181106139bb576139bb614aff565b60200260200101518f613c98565b50505080806139d790614de8565b915050613836565b5050505050505050565b606061319982604051602001613a0191815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b90600090613a39906002614b2b565b613a44906002614bf5565b6001600160401b03811115613a5b57613a5b614127565b6040519080825280601f01601f191660200182016040528015613a85576020820181803683370190505b509050600360fc1b81600081518110613aa057613aa0614aff565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613acf57613acf614aff565b60200101906001600160f81b031916908160001a90535060005b8451811015613bf057826004868381518110613b0757613b07614aff565b01602001516001600160f81b031916901c60f81c60108110613b2b57613b2b614aff565b1a60f81b82613b3b836002614b2b565b613b46906002614bf5565b81518110613b5657613b56614aff565b60200101906001600160f81b031916908160001a90535082858281518110613b8057613b80614aff565b60209101015160f81c600f1660108110613b9c57613b9c614aff565b1a60f81b82613bac836002614b2b565b613bb7906003614bf5565b81518110613bc757613bc7614aff565b60200101906001600160f81b031916908160001a90535080613be881614de8565b915050613ae9565b509392505050565b306001600160a01b03851603613c1857613c138284836116e1565b612e9d565b60405163052f523360e11b81526001600160a01b03808416600483015280861660248301528416604482015260648101829052731b5d39419c268b76db06de49e38b010fbfb5e22690630a5ea46690608401600060405180830381600087803b158015613c8457600080fd5b505af11580156139df573d6000803e3d6000fd5b8515613db057600080866001600160a01b0316636f7929f260e01b878787604051602401613cc893929190614e01565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613d166001600160a01b038616650f2882bf0b3360d21b614bf5565b604051602001613d27929190614e36565b60408051601f1981840301815290829052613d4191614c9b565b6000604051808303816000865af19150503d8060008114613d7e576040519150601f19603f3d011682016040523d82523d6000602084013e613d83565b606091505b5091509150818190613da85760405162461bcd60e51b81526004016102189190614ce3565b505050613eba565b600080866001600160a01b03166330e6ae3160e01b878787604051602401613dda93929190614e01565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613e286001600160a01b038616650f2882bf0b3360d21b614bf5565b604051602001613e39929190614e36565b60408051601f1981840301815290829052613e5391614c9b565b6000604051808303816000865af19150503d8060008114613e90576040519150601f19603f3d011682016040523d82523d6000602084013e613e95565b606091505b50915091508181906116d65760405162461bcd60e51b81526004016102189190614ce3565b505050505050565b60008060408385031215613ed557600080fd5b50508035926020909101359150565b6001600160a01b0381168114610edb57600080fd5b8035613f0481613ee4565b919050565b600060a08284031215613f1b57600080fd5b50919050565b60008083601f840112613f3357600080fd5b5081356001600160401b03811115613f4a57600080fd5b6020830191508360208260051b8501011115613f6557600080fd5b9250929050565b60008060008060008060008060006101408a8c031215613f8b57600080fd5b8935985060208a0135613f9d81613ee4565b9750613fac8b60408c01613f09565b965060e08a01356001600160401b0380821115613fc857600080fd5b613fd48d838e01613f21565b90985096506101008c0135915080821115613fee57600080fd5b613ffa8d838e01613f21565b90965094506101208c013591508082111561401457600080fd5b506140218c828d01613f21565b915080935050809150509295985092959850929598565b60008060008060008060a0878903121561405157600080fd5b863595506020870135945060408701359350606087013561407181613ee4565b925060808701356001600160401b0381111561408c57600080fd5b61409889828a01613f21565b979a9699509497509295939492505050565b6000806000806000608086880312156140c257600080fd5b85359450602086013593506040860135925060608601356001600160401b038111156140ed57600080fd5b6140f988828901613f21565b969995985093965092949392505050565b60006020828403121561411c57600080fd5b81356123dd81613ee4565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561415f5761415f614127565b60405290565b60405161014081016001600160401b038111828210171561415f5761415f614127565b604051601f8201601f191681016001600160401b03811182821017156141b0576141b0614127565b604052919050565b600060a082840312156141ca57600080fd5b6141d261413d565b90508135815260208201356141e681613ee4565b8060208301525060408201356040820152606082013560608201526080820135608082015292915050565b60006001600160401b0382111561422a5761422a614127565b5060051b60200190565b600082601f83011261424557600080fd5b8135602061425a61425583614211565b614188565b82815260059290921b8401810191818101908684111561427957600080fd5b8286015b84811015610cee578035835291830191830161427d565b600082601f8301126142a557600080fd5b813560206142b561425583614211565b82815260059290921b840181019181810190868411156142d457600080fd5b8286015b84811015610cee5780356142eb81613ee4565b83529183019183016142d8565b600082601f83011261430957600080fd5b81356001600160401b0381111561432257614322614127565b614335601f8201601f1916602001614188565b81815284602083860101111561434a57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261437857600080fd5b8135602061438861425583614211565b82815260059290921b840181019181810190868411156143a757600080fd5b8286015b84811015610cee5780356001600160401b038111156143ca5760008081fd5b6143d88986838b01016142f8565b8452509183019183016143ab565b60006143f461425584614211565b838152905060208101600584901b830185101561441057600080fd5b825b8460051b8401811015614580576001600160401b03808235111561443557600080fd5b8135850187601f82011261444857600080fd5b6144556142558235614211565b81358082526020808301929160051b8401018a81111561447457600080fd5b602084015b8181101561456957858135111561448f57600080fd5b8035850160a0818e03601f190112156144a757600080fd5b6144af61413d565b87602083013511156144c057600080fd5b6144d28e602080850135850101614294565b815287604083013511156144e557600080fd5b6144f88e60206040850135850101614294565b6020820152876060830135111561450e57600080fd5b6145218e60206060850135850101614234565b6040820152876080830135111561453757600080fd5b61454a8e60206080850135850101614367565b606082015260a091909101356080820152845260209384019301614479565b505085525050602092830192919091019050614412565b50509392505050565b600082601f83011261459a57600080fd5b6123dd838335602085016143e6565b8015158114610edb57600080fd5b8035613f04816145a9565b600082601f8301126145d357600080fd5b813560206145e361425583614211565b82815260059290921b8401810191818101908684111561460257600080fd5b8286015b84811015610cee5780356001600160401b03808211156146265760008081fd5b90880190610140828b03601f19018113156146415760008081fd5b614649614165565b878401358152604061465c818601613ef9565b89830152606061466d818701613ef9565b8284015260809150614680828701613ef9565b818401525060a0808601358284015260c0915081860135818401525060e0808601358284015261010091508186013581840152506101206146c28187016145b7565b838301529285013592848411156146db57600091508182fd5b6146e98e8b868901016142f8565b90830152508652505050918301918301614606565b600080600080600080610140878903121561471857600080fd5b61472288886141b8565b955060a08701356001600160401b038082111561473e57600080fd5b61474a8a838b01614234565b965060c089013591508082111561476057600080fd5b61476c8a838b01614589565b955060e089013591508082111561478257600080fd5b5061478f89828a016145c2565b9350506101008701356147a181613ee4565b91506101208701356147b281613ee4565b809150509295509295509295565b600080604083850312156147d357600080fd5b82356147de81613ee4565b915060208301356147ee816145a9565b809150509250929050565b600080600080600080600080610120898b03121561481657600080fd5b883597506148278a60208b01613f09565b965060c08901356001600160401b038082111561484357600080fd5b61484f8c838d01613f21565b909850965060e08b013591508082111561486857600080fd5b6148748c838d01613f21565b90965094506101008b013591508082111561488e57600080fd5b5061489b8b828c01613f21565b999c989b5096995094979396929594505050565b600080600080600061012086880312156148c857600080fd5b6148d287876141b8565b945060a08601356001600160401b03808211156148ee57600080fd5b6148fa89838a01614234565b955060c088013591508082111561491057600080fd5b61491c89838a01614589565b945060e088013591508082111561493257600080fd5b5061493f888289016145c2565b92505061010086013561495181613ee4565b809150509295509295909350565b60006020828403121561497157600080fd5b5035919050565b60008083601f84011261498a57600080fd5b5081356001600160401b038111156149a157600080fd5b602083019150836020828501011115613f6557600080fd5b60008060008060008060008060c0898b0312156149d557600080fd5b8835975060208901356149e781613ee4565b9650604089013595506060890135945060808901356001600160401b0380821115614a1157600080fd5b614a1d8c838d01613f21565b909650945060a08b0135915080821115614a3657600080fd5b5061489b8b828c01614978565b60008060008060608587031215614a5957600080fd5b843593506020850135925060408501356001600160401b03811115614a7d57600080fd5b614a8987828801614978565b95989497509550505050565b6020808252600e908201526d149bdd5d194e88195e1c1a5c995960921b604082015260600190565b600060a08284031215614acf57600080fd5b6123dd83836141b8565b60006123dd3684846143e6565b600060208284031215614af857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761319957613199614b15565b600082614b5f57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600d908201526c6f6e6c79207072696f7269747960981b604082015260600190565b60008060408385031215614b9e57600080fd5b8251614ba981613ee4565b60208401519092506147ee81613ee4565b6020808252600e908201526d6e6f74206164647265737328302960901b604082015260600190565b8181038181111561319957613199614b15565b8082018082111561319957613199614b15565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160e01b031984168152818360048301376000910160040190815292915050565b60005b83811015614c92578181015183820152602001614c7a565b50506000910152565b60008251614cad818460208701614c77565b9190910192915050565b60008151808452614ccf816020860160208601614c77565b601f01601f19169290920160200192915050565b6020815260006123dd6020830184614cb7565b600060208284031215614d0857600080fd5b81516123dd816145a9565b60008351614d25818460208801614c77565b6508ae4e4dee4560d31b9083019081528351614d48816006840160208801614c77565b602960f81b60069290910191820152600701949350505050565b60008351614d74818460208801614c77565b650a0c2dcd2c6560d31b9083019081528351614d48816006840160208801614c77565b60008351614da9818460208801614c77565b670aadcd6dcdeeedc560c31b9083019081528351614dce816008840160208801614c77565b602960f81b60089290910191820152600901949350505050565b600060018201614dfa57614dfa614b15565b5060010190565b6001600160a01b03848116825283166020820152606060408201819052600090614e2d90830184614cb7565b95945050505050565b60008351614e48818460208801614c77565b919091019182525060200191905056fe1bb43f2da90e35f7b0cf38521ca95a49e68eb42fac49924930a5bd73cdf7576c7724394874fdd8ad13292ec739b441f85c6559f10dc4141b8d4c0fa4cbf55bdba2646970667358221220ff7d13394817a940537d83dd45d10d1be121b1676ff7016bd0da883cb09cd3e464736f6c63430008110033