0 txs
1 call
constructor
constructor(address _router, address _roleStore, address _dataStore, address _eventEmitter, address _oracle, address _orderHandler, address _orderVault, address _swapHandler, address _externalHandler)
functions
dataStore
viewfunction dataStore() view returns (address)
digests
viewfunction digests(bytes32) view returns (bool)
eventEmitter
viewfunction eventEmitter() view returns (address)
externalHandler
viewfunction externalHandler() view returns (address)
oracle
viewfunction oracle() view returns (address)
orderHandler
viewfunction orderHandler() view returns (address)
orderVault
viewfunction orderVault() view returns (address)
roleStore
viewfunction roleStore() view returns (address)
router
viewfunction router() view returns (address)
swapHandler
viewfunction swapHandler() view returns (address)
batch
nonpayablefunction batch(tuple relayParams, address account, tuple params) returns (bytes32[])
cancelOrder
nonpayablefunction cancelOrder(tuple relayParams, address account, bytes32 key)
createOrder
nonpayablefunction createOrder(tuple relayParams, address account, tuple params) returns (bytes32)
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
sendNativeToken
payablefunction sendNativeToken(address receiver, uint256 amount) payable
sendTokens
payablefunction sendTokens(address token, address receiver, uint256 amount) payable
sendWnt
payablefunction sendWnt(address receiver, uint256 amount) payable
updateOrder
nonpayablefunction updateOrder(tuple relayParams, address account, tuple params)
events
TokenTransferReverted
event TokenTransferReverted(string reason, bytes returndata)
errors
DeadlinePassed
error DeadlinePassed(uint256 currentTimestamp, uint256 deadline)
DisabledFeature
error DisabledFeature(bytes32 key)
EmptyHoldingAddress
error EmptyHoldingAddress()
EmptyOrder
error EmptyOrder()
EmptyReceiver
error EmptyReceiver()
EmptyTokenTranferGasLimit
error EmptyTokenTranferGasLimit(address token)
InsufficientRelayFee
error InsufficientRelayFee(uint256 requiredRelayFee, uint256 availableFeeAmount)
InvalidDestinationChainId
error InvalidDestinationChainId(uint256 desChainId)
InvalidExternalCalls
error InvalidExternalCalls(uint256 sendTokensLength, uint256 sendAmountsLength)
InvalidPermitSpender
error InvalidPermitSpender(address spender, address expectedSpender)
InvalidSrcChainId
error InvalidSrcChainId(uint256 srcChainId)
InvalidUserDigest
error InvalidUserDigest(bytes32 digest)
MaxRelayFeeSwapForSubaccountExceeded
error MaxRelayFeeSwapForSubaccountExceeded(uint256 feeUsd, uint256 maxFeeUsd)
NonEmptyExternalCallsForSubaccountOrder
error NonEmptyExternalCallsForSubaccountOrder()
RelayEmptyBatch
error RelayEmptyBatch()
TokenPermitsNotAllowedForMultichain
error TokenPermitsNotAllowedForMultichain()
TokenTransferError
error TokenTransferError(address token, address receiver, uint256 amount)
Unauthorized
error Unauthorized(address msgSender, string role)
UnexpectedRelayFeeToken
error UnexpectedRelayFeeToken(address feeToken, address expectedFeeToken)
UnsupportedRelayFeeToken
error UnsupportedRelayFeeToken(address feeToken, address expectedFeeToken)
creation bytecode
0x61020060405234801561001157600080fd5b5060405161524e38038061524e833981016040819052610030916105ba565b84848484848d8d8d8d82896100436100ad565b6001600160a01b0390811660c05290811660a052908116608052600160005590811660e05290811661010052938416610120529083166101405282166101605250938416610180529183166101a05282166101c052166101e0525061067e98505050505050505050565b600080806100ba4661024c565b1561010657507361ace8fba7b80aef8ed67f37cb60be00180872ad9273368165b2afb95fae8cec409efa59d5091f9875a5925073038479687b7bc7943313bffd524a4acc96b3f9be9150565b61010f46610274565b1561015b575073b16a1dbe755f992636705fdbb3a8678a657eb3ea927322dcc39b2ac376862183dd35a1664798dafc7da6925073ba4082f4961c8fb76231995c967cd9aa40f321b59150565b61016446610292565b156101b057507342120a1417a091a52a8d4590e28fc6c0f61e56329273aced988c5b5fe3f11848c728d9a5f66cf34c9e73925073bbce89acdd86d0130bdc3f1fe37c3aedd79fc1f49150565b6101b9466102b0565b15610205575073abcc9b596420a9e9172fd5938620e265a0f9df929273b539068872230f20456cf38ec52ef2f91af4ae499250738598806401a63ddf52473f1b3c55bc9e33e2d73b9150565b5073cd565435e0d2109fefde337a66491541df0d142092738ace64cea52b409f930f60b516f65197fad4b056925073c7739c195618d314c08e8626c98f8573e4e436349150565b600081610e35148061025f575081610e34145b1561026c57506001919050565b506000919050565b600081610144148061025f5750816101180361026c57506001919050565b600081612b74148061025f575081610ab50361026c57506001919050565b600081600114806102c1575081600a145b806102cc5750816019145b806102d7575081601e145b806102e25750816038145b806102ed5750816064145b806102f8575081606d145b806103035750816089145b8061030e57508160b7145b8061031957508160e9145b8061032457508160fa145b8061033057508161013a145b8061033c575081610440145b8061034857508161044d145b8061035457508161046f145b80610360575081610504145b8061036c575081610505145b806103785750816106c1145b80610384575081610725145b80610390575081610729145b8061039c5750816107f7145b806103a8575081610ec0145b806103b457508161106a145b806103c05750816118fe145b806103cc575081612105145b806103d85750816127d8145b806103e4575081614737145b806103f0575081614739145b806103fc5750816162ef145b8061040857508161868b145b8061041457508161a1ef145b8061042057508161a455145b8061042c57508161a4b1145b8061043857508161a86a145b8061044457508161e708145b8061045157508162013882145b8061045e575081620138d4145b8061046b57508162013e31145b8061047857508162014a34145b806104855750816201b254145b806104925750816203ade0145b8061049f57508162066eee145b806104ac575081620a045c145b806104b957508162133e40145b806104c6575081625c2359145b806104d35750816276adf1145b806104e057508162aa36a7145b806104ed57508162aa37dc145b806104fb5750816301bf4933145b80610509575081630426e649145b806105175750816305535072145b8061052557508163059d7131145b8061053357508163075b3dcf145b80610541575081630a0c71fd145b8061054f575081630d3b745e145b8061055d575081633b4c8eb9145b8061056b5750816352415249145b8061057957508163bc1392a6145b806105885750816412dbe91402145b8061025f5750816414865d0f050361026c57506001919050565b6001600160a01b03811681146105b757600080fd5b50565b60008060008060008060008060006101208a8c0312156105d957600080fd5b89516105e4816105a2565b60208b01519099506105f5816105a2565b60408b0151909850610606816105a2565b60608b0151909750610617816105a2565b60808b0151909650610628816105a2565b60a08b0151909550610639816105a2565b60c08b015190945061064a816105a2565b60e08b015190935061065b816105a2565b6101008b015190925061066d816105a2565b809150509295985092959850929598565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051614ab96107956000396000818161016201528181611c690152611cc50152600081816102950152610af50152600081816102c90152610acd01526000818161037101528181611329015281816115f8015261185e01526000818161031d015261204601526000818161021a0152818161052a0152818161064201528181610a3501528181610a8a0152610f890152600081816103d80152818161095a01528181611a3701526123fb015260006101a301526000818161026101528181610b5401528181610bf901528181611f0301526120670152600050506000505060006122810152614ab96000f3fe6080604052600436106100d95760003560e01c806301ac4293146100de5780630427ef5f146101235780632e944bd6146101505780634a4a7b041461019157806353ead2d3146101c557806358e35006146101da578063660d0d67146102085780637d39aaf11461023c5780637dc0d1d01461024f5780638a53aaac1461028357806393845e46146102b75780639a896464146102eb5780639ff78c301461030b578063ac9650d81461033f578063b58483051461035f578063c807910714610393578063e6d66ac8146103b3578063f887ea40146103c6575b600080fd5b3480156100ea57600080fd5b5061010e6100f9366004612d37565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561012f57600080fd5b5061014361013e366004612d8e565b6103fa565b60405161011a9190612e0e565b34801561015c57600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b60405161011a9190612e5e565b34801561019d57600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b6101d86101d3366004612e72565b610514565b005b3480156101e657600080fd5b506101fa6101f5366004612e9e565b61055e565b60405190815260200161011a565b34801561021457600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b6101d861024a366004612e72565b61062c565b34801561025b57600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b34801561028f57600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c357600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f757600080fd5b506101d8610306366004612f14565b610668565b34801561031757600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b61035261034d366004612f75565b610754565b60405161011a9190613096565b34801561036b57600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b34801561039f57600080fd5b506101d86103ae3660046130a9565b610868565b6101d86103c1366004613102565b610930565b3480156103d257600080fd5b506101847f000000000000000000000000000000000000000000000000000000000000000081565b60606104046109d2565b838360008060005a9050610416610a30565b6000610420610a64565b905061042f8187878787610b2a565b604051631dbef92b60e31b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b109063edf7c9589061046b908e908d90600401613967565b602060405180830381865af4158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac9190613a50565b90506104ba8b8b8346610c71565b6104ee8a60006104ca8c80613a69565b6104d760208f018f613ab2565b8f80604001906104e79190613a69565b6000610db3565b9750506104fd81838787610f11565b50505050505061050d6001600055565b9392505050565b61051c6109d2565b61052582611145565b6105507f0000000000000000000000000000000000000000000000000000000000000000838361116f565b61055a6001600055565b5050565b60006105686109d2565b838360008060005a905061057a610a30565b6000610584610a64565b90506105938187878787610b2a565b604051634ef092d760e01b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b1090634ef092d7906105cf908e908d90600401613afb565b602060405180830381865af41580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190613a50565b905061061e8b8b8346610c71565b6104ee8a60008b600061127b565b6106346109d2565b61063d82611145565b6105507f000000000000000000000000000000000000000000000000000000000000000083836113f8565b6106706109d2565b828260008060005a9050610682610a30565b600061068c610a64565b905061069b8187878787610b2a565b604051637396d24b60e11b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b109063e72da496906106d7908d908c90600401613b20565b602060405180830381865af41580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190613a50565b90506107268a8a8346610c71565b61073289896000611481565b5061073f81838787610f11565b50505050505061074f6001600055565b505050565b6060816001600160401b0381111561076e5761076e613b44565b6040519080825280602002602001820160405280156107a157816020015b606081526020019060019003908161078c5790505b50905060005b8281101561086057600080308686858181106107c5576107c5613b5a565b90506020028101906107d79190613b70565b6040516107e5929190613bb6565b600060405180830381855af49150503d8060008114610820576040519150601f19603f3d011682016040523d82523d6000602084013e610825565b606091505b50915091508161083857610838816116d7565b8084848151811061084b5761084b613b5a565b602090810291909101015250506001016107a7565b505b92915050565b6108706109d2565b828260008060005a9050610882610a30565b600061088c610a64565b905061089b8187878787610b2a565b6040516302048c7f60e11b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b109063040918fe906108d7908d908c90600401613bc6565b602060405180830381865af41580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109189190613a50565b90506109268a8a8346610c71565b6107328989611710565b6109386109d2565b61094182611145565b6040516303704f0f60e31b815233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631b82787890610995908790859088908890600401613be8565b600060405180830381600087803b1580156109af57600080fd5b505af11580156109c3573d6000803e3d6000fd5b505050505061074f6001600055565b600260005403610a295760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b610a627f0000000000000000000000000000000000000000000000000000000000000000610a5d306118c8565b611950565b565b6040805160808101825260008082526020820181905291810182905260608101919091527f00000000000000000000000000000000000000000000000000000000000000006000610ab48261197b565b604080516080810182526001600160a01b0394851681527f0000000000000000000000000000000000000000000000000000000000000000851660208201527f00000000000000000000000000000000000000000000000000000000000000008516918101919091529216606083015250919050565b610b348480613c12565b610b3d90613db2565b6040516331e999fd60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c7a667f490610b89908490600401613f45565b600060405180830381600087803b158015610ba357600080fd5b505af1158015610bb7573d6000803e3d6000fd5b50610bd29250610bcd9150506040870187613ab2565b611a28565b610bea8484610be46020890189613f9c565b85611b79565b610bf78686868686611d95565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662ccf1556040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c5157600080fd5b505af1158015610c65573d6000803e3d6000fd5b50505050505050505050565b610c938160e086013560a0870135610c8c6040890189613ab2565b90506121a2565b604051638a3b3d6f60e01b81526004810182905260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b1090638a3b3d6f90602401602060405180830381865af4158015610ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0a9190613a50565b90506000610d32828560405161190160f01b8152600281019290925260228201526042902090565b9050610d3d816121f1565b73c72390b4b667a0cb378b2dd85cfbf7bd61593b1063bead67858383610d6660c08b018b613b70565b8a6040518663ffffffff1660e01b8152600401610d87959493929190613fb2565b60006040518083038186803b158015610d9f57600080fd5b505af4158015610c65573d6000803e3d6000fd5b6060600083610dc2878a61401f565b610dcc919061401f565b905080600003610def576040516312f75a3d60e11b815260040160405180910390fd5b6000886001600160401b03811115610e0957610e09613b44565b604051908082528060200260200182016040528015610e32578160200160208202803683370190505b50905060005b89811015610e9457610e6f8d8d8d8d85818110610e5757610e57613b5a565b9050602002810190610e699190614032565b8861127b565b828281518110610e8157610e81613b5a565b6020908102919091010152600101610e38565b5060005b87811015610ecb57610ec38d8a8a84818110610eb657610eb6613b5a565b9050610100020187611481565b600101610e98565b5060005b85811015610f0157610ef98d888884818110610eed57610eed613b5a565b90506020020135611710565b600101610ecf565b509b9a5050505050505050505050565b60008085606001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610f449190612e5e565b602060405180830381865afa158015610f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f859190613a50565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ae1cfca610fbf33612242565b6040518263ffffffff1660e01b8152600401610fdd91815260200190565b602060405180830381865afa158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e9190614049565b61111b57600061102d3361227d565b15905080156110dc5786516060880151604051630e22a74960e31b81526001600160a01b0392831660048201529116602482015260448101879052366064820152608481018390527349eaeafa626011ede0b9852e567dfcf8b62aba88906371153a489060a401602060405180830381865af41580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190613a50565b9250611119565b6110e46122c8565b92508183111561111157604051639cd7629560e01b81526004810184905260248101839052604401610a20565b6111196122d1565b505b6111258282614066565b9050801561113d5761113d86606001518583866122fd565b505050505050565b6001600160a01b03811661116c5760405163d551823d60e01b815260040160405180910390fd5b50565b8060000361117c57505050565b61118582611145565b6000836001600160a01b031663bd02d0f56040516020016111d7906020808252601f908201527f4e41544956455f544f4b454e5f5452414e534645525f4741535f4c494d495400604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161120b91815260200190565b602060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190613a50565b90506000806000806000868887f190508015611269575050505050565b6112748585856113f8565b5050505050565b600080611286610a64565b602081015160608201519192506112ab916001600160a01b03169060a087013561230d565b6040840135158015906112f357506112d36112ce61014086016101208701614079565b612363565b806112f357506112f36112ee61014086016101208701614079565b61239b565b1561132757611327866113068680614096565b6113179060c081019060a0016140ac565b60208401516040880135896123db565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c6561b4587878787801561138a5750600061136d8a80614096565b61137e9060608101906040016140ac565b6001600160a01b031614155b6040518563ffffffff1660e01b81526004016113a994939291906140c9565b6020604051808303816000875af11580156113c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ec9190613a50565b9150505b949350505050565b8060000361140557505050565b61140e82611145565b60006114198461197b565b9050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b505050505061147b84828585612436565b50505050565b600061148b610a64565b805160405163fdfc26f360e01b81529192506000917329b7cf4831288932de48c929cb09649d1c6ca69d9163fdfc26f3916114cc91908835906004016141d3565b600060405180830381865af41580156114e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261151191908101906143e3565b9050600061151e82515190565b6001600160a01b03160361154557604051631630779760e01b815260040160405180910390fd5b846001600160a01b031661155882515190565b6001600160a01b0316146115ba576040805163a35b150b60e01b81526001600160a01b03871660048201526024810191909152601760448201527630b1b1b7bab73a103337b9103ab83230ba32a7b93232b960491b6064820152608401610a20565b60e0840135156115ee576115ee82602001518560e0013584606001516001600160a01b031661230d9092919063ffffffff16565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9db59a7853560208701356040880135606089013560808a013560a08b013561164860e08d0160c08e0161454f565b898c801561166b5750600061165f8c516060015190565b6001600160a01b031614155b801561167a575060e08e013515155b6040518a63ffffffff1660e01b815260040161169e9998979695949392919061462c565b600060405180830381600087803b1580156116b857600080fd5b505af11580156116cc573d6000803e3d6000fd5b505050505050505050565b6000806116e383612680565b915091508015611707578160405162461bcd60e51b8152600401610a209190614795565b61074f83612710565b600061171a610a64565b805160405163fdfc26f360e01b81529192506000917329b7cf4831288932de48c929cb09649d1c6ca69d9163fdfc26f39161175a919087906004016141d3565b600060405180830381865af4158015611777573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179f91908101906143e3565b905060006117ac82515190565b6001600160a01b0316036117d357604051631630779760e01b815260040160405180910390fd5b836001600160a01b03166117e682515190565b6001600160a01b031614611848576040805163a35b150b60e01b81526001600160a01b03861660048201526024810191909152601760448201527630b1b1b7bab73a103337b91031b0b731b2b627b93232b960491b6064820152608401610a20565b604051637489ec2360e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637489ec2390602401600060405180830381600087803b1580156118aa57600080fd5b505af11580156118be573d6000803e3d6000fd5b5050505050505050565b60006040516020016119069060208082526018908201527711d054d31154d4d7d191505515549157d11254d05093115160421b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03841690820152606001604051602081830303815290604052805190602001209050919050565b61195a8282612719565b1561055a5760405163dd70e0c960e01b815260048101829052602401610a20565b6000816001600160a01b03166321f8a7216040516020016119b39060208082526003908201526215d39560ea1b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016119e791815260200190565b602060405180830381865afa158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086291906147a8565b6000819003611a35575050565b7f000000000000000000000000000000000000000000000000000000000000000060005b8281101561147b576000848483818110611a7557611a75613b5a565b90506101000201803603810190611a8c91906147c5565b9050826001600160a01b031681602001516001600160a01b031614611acc57806020015183604051633c0ac19960e01b8152600401610a20929190614858565b60e0810151815160208301516040808501516060860151608087015160a088015160c0890151945163d505accf60e01b81526001600160a01b03978816600482015295871660248701526044860193909352606485019190915260ff16608484015260a483015260c482015291169063d505accf9060e401600060405180830381600087803b158015611b5e57600080fd5b505af1925050508015611b6f575060015b5050600101611a59565b611b866040830183613a69565b15905061147b578015611bac576040516328f773e960e01b815260040160405180910390fd5b611bb68280613a69565b15905080611bdd5750611bcc6020830183613a69565b9050611bd88380613a69565b905014155b15611c1e57611bec8280613a69565b9050611bfb6020840184613a69565b60405163ec7fd38560e01b81526004810193909352602483015250604401610a20565b60005b611c2b8380613a69565b9050811015611cba57611cb285611c428580613a69565b84818110611c5257611c52613b5a565b9050602002016020810190611c6791906140ac565b7f0000000000000000000000000000000000000000000000000000000000000000611c956020880188613a69565b86818110611ca557611ca5613b5a565b90506020020135886123db565b600101611c21565b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d59922b0611cf76040850185613a69565b611d046060870187613a69565b611d116080890189613a69565b611d1e60a08b018b613a69565b6040518963ffffffff1660e01b8152600401611d41989796959493929190614872565b600060405180830381600087803b158015611d5b57600080fd5b505af1158015611d6f573d6000803e3d6000fd5b5050505061147b8484848060800190611d889190613a69565b61113d60a0880188613a69565b611d9e3361227d565b8015611dc7575084606001516001600160a01b0316611dbb612785565b6001600160a01b031614155b15611df457611dd4612785565b8560600151604051630d0fcc0b60e01b8152600401610a20929190614858565b611e016060850185613c12565b611e0f906040810190613a69565b1590506120e7578015611fee57600085600001516001600160a01b031663bd02d0f5604051602001611e809060208082526025908201527f4d41585f52454c41595f4645455f535741505f5553445f464f525f535542414360408201526410d3d5539560da1b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611eb491815260200190565b602060405180830381865afa158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef59190613a50565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016635dcf7194611f356060890189613c12565b611f439060208101906140ac565b6040518263ffffffff1660e01b8152600401611f5f9190612e5e565b6040805180830381865afa158015611f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9f919061491e565b60200151611fb06060880188613c12565b60200135611fbe919061496e565b905081811115611feb57604051631808e37f60e31b81526004810182905260248101839052604401610a20565b50505b61202983611fff6060870187613c12565b61200d9060208101906140ac565b602088015161201f6060890189613c12565b60200135866123db565b73c72390b4b667a0cb378b2dd85cfbf7bd61593b1063cbb114e7867f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061209360608a018a613c12565b6040518563ffffffff1660e01b81526004016120b29493929190614985565b60006040518083038186803b1580156120ca57600080fd5b505af41580156120de573d6000803e3d6000fd5b50505050611274565b6060808601516001600160a01b03169061210390860186613c12565b6121119060208101906140ac565b6001600160a01b0316036121675761212c6060850185613c12565b602001351561216257612162836121466060870187613c12565b6121549060208101906140ac565b3061201f6060890189613c12565b611274565b6121746060850185613c12565b6121829060208101906140ac565b85606001516040516374a488a760e11b8152600401610a20929190614858565b4683146121c5576040516330ddda8b60e21b815260048101849052602401610a20565b4684146121e857604051632c9bcbdd60e01b815260048101859052602401610a20565b61147b82612791565b60008181526001602052604090205460ff161561222457604051630820e04560e11b815260048101829052602401610a20565b6000908152600160208190526040909120805460ff19169091179055565b6000604051602001611906906020808252601590820152741254d7d49153105657d1915157d15610d315511151605a1b604082015260600190565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036122c057506001919050565b506000919050565b601f1936013590565b610a6236604719013560601c6122e56122c8565b6122ed612785565b6001600160a01b031691906127bb565b61147b6001600160a01b03851684845b61074f8363a9059cbb60e01b848460405160240161232c9291906141d3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261280a565b6000808260088111156123785761237861379c565b1480610862575060015b8260088111156123945761239461379c565b1492915050565b600060028260088111156123b1576123b161379c565b14806123ce575060038260088111156123cc576123cc61379c565b145b8061086257506008612382565b6123e483611145565b6040516303704f0f60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631b8278789061169e908790899088908890600401613be8565b801561147b5761244582611145565b6000846001600160a01b031663bd02d0f561245f866128df565b6040518263ffffffff1660e01b815260040161247d91815260200190565b602060405180830381865afa15801561249a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124be9190613a50565b9050806000036124e35783604051634fe14bfd60e11b8152600401610a209190612e5e565b60006124f18585858561291d565b509050801561250157505061147b565b6000866001600160a01b03166321f8a721604051602001612545906020808252600f908201526e484f4c44494e475f4144445245535360881b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161257991815260200190565b602060405180830381865afa158015612596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ba91906147a8565b90506001600160a01b0381166125e357604051633a6de2f560e21b815260040160405180910390fd5b6000806125f28884888861291d565b91509150811561260657505050505061147b565b600061261182612680565b5090507fc9f14d9a0a9b46470c7c0b6c508f8283abaab7f795f153953c58cd4250824dae81836040516126459291906149df565b60405180910390a160405163012f3b8f60e71b81526001600160a01b03808b1660048301528916602482015260448101889052606401610a20565b606060006044835110156126a7575050604080516020810190915260008082529092909150565b60006126b4846020015190565b90506307b9e43360e51b6001600160e01b03198216016126f357600484019350838060200190518101906126e89190614a04565b946001945092505050565b600060405180602001604052806000815250909250925050915091565b80518060208301fd5b604051633d70e7e560e11b8152600481018290526000906001600160a01b03841690637ae1cfca90602401602060405180830381865afa158015612761573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050d9190614049565b60331936013560601c90565b8042111561116c5760405163041f95d160e51b815242600482015260248101829052604401610a20565b806000036127c857505050565b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146128005761074f6001600160a01b038416838361230d565b61074f8282612a8c565b600061285f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612ba29092919063ffffffff16565b90508051600014806128805750808060200190518101906128809190614049565b61074f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a20565b6000604051602001611906906020808252601890820152771513d2d15397d514905394d1915497d1d054d7d31253525560421b604082015260600190565b60006060600063a9059cbb60e01b868660405160240161293e9291906141d3565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600080886001600160a01b0316868460405161298f9190614a71565b60006040518083038160008787f1925050503d80600081146129cd576040519150601f19603f3d011682016040523d82523d6000602084013e6129d2565b606091505b50915091508115612a7a578051600003612a37576129f8896001600160a01b0316612bb1565b612a375760006040518060400160405280601481526020017310d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b81525094509450505050612a83565b60008151118015612a59575080806020019051810190612a579190614049565b155b15612a6c57600094509250612a83915050565b600194509250612a83915050565b60009450925050505b94509492505050565b80471015612adc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a20565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612b29576040519150601f19603f3d011682016040523d82523d6000602084013e612b2e565b606091505b505090508061074f5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610a20565b60606113f08484600085612bc0565b6001600160a01b03163b151590565b606082471015612c215760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a20565b600080866001600160a01b03168587604051612c3d9190614a71565b60006040518083038185875af1925050503d8060008114612c7a576040519150601f19603f3d011682016040523d82523d6000602084013e612c7f565b606091505b5091509150612c9087838387612c9b565b979650505050505050565b60608315612d08578251600003612d0157612cb585612bb1565b612d015760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a20565b50816113f0565b6113f08383815115612d1d5781518083602001fd5b8060405162461bcd60e51b8152600401610a209190614795565b600060208284031215612d4957600080fd5b5035919050565b60006101008284031215612d6357600080fd5b50919050565b6001600160a01b038116811461116c57600080fd5b8035612d8981612d69565b919050565b600080600060608486031215612da357600080fd5b83356001600160401b03811115612db957600080fd5b612dc586828701612d50565b9350506020840135612dd681612d69565b915060408401356001600160401b03811115612df157600080fd5b840160608187031215612e0357600080fd5b809150509250925092565b602080825282518282018190526000918401906040840190835b81811015612e46578351835260209384019390920191600101612e28565b509095945050505050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b60008060408385031215612e8557600080fd5b8235612e9081612d69565b946020939093013593505050565b600080600060608486031215612eb357600080fd5b83356001600160401b03811115612ec957600080fd5b612ed586828701612d50565b9350506020840135612ee681612d69565b915060408401356001600160401b03811115612f0157600080fd5b84016102008187031215612e0357600080fd5b60008060006101408486031215612f2a57600080fd5b83356001600160401b03811115612f4057600080fd5b612f4c86828701612d50565b9350506020840135612f5d81612d69565b9150612f6c8560408601612d50565b90509250925092565b60008060208385031215612f8857600080fd5b82356001600160401b03811115612f9e57600080fd5b8301601f81018513612faf57600080fd5b80356001600160401b03811115612fc557600080fd5b8560208260051b8401011115612fda57600080fd5b6020919091019590945092505050565b60005b83811015613005578181015183820152602001612fed565b50506000910152565b60008151808452613026816020860160208601612fea565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b8381101561308a57601f1985840301885261307483835161300e565b6020988901989093509190910190600101613058565b50909695505050505050565b60208152600061050d602083018461303a565b6000806000606084860312156130be57600080fd5b83356001600160401b038111156130d457600080fd5b6130e086828701612d50565b93505060208401356130f181612d69565b929592945050506040919091013590565b60008060006060848603121561311757600080fd5b833561312281612d69565b925060208401356130f181612d69565b60008235605e1983360301811261314857600080fd5b90910192915050565b6000808335601e1984360301811261316857600080fd5b83016020810192503590506001600160401b0381111561318757600080fd5b8060051b360382131561319957600080fd5b9250929050565b81835260208301925060008160005b848110156131e05781356131c281612d69565b6001600160a01b0316865260209586019591909101906001016131af565b5093949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261322a57600080fd5b83016020810192503590506001600160401b0381111561324957600080fd5b80360382131561319957600080fd5b60008383855260208501945060208460051b8201018360005b8681101561308a57838303601f1901885261328c8287613213565b6132978582846131ea565b60209a8b019a90955093909301925050600101613271565b60006132bb8283613151565b606085526132cd6060860182846131a0565b9150506132dd6020840184613151565b85830360208701526132f08382846131a0565b925050506133016040840184613151565b8583036040870152613314838284613258565b9695505050505050565b6000823560be1983360301811261314857600080fd5b81835260006001600160fb1b0383111561334d57600080fd5b8260051b80836020870137939093016020019392505050565b60006133728283613151565b60c0855261338460c0860182846131a0565b9150506133946020840184613151565b85830360208701526133a7838284613334565b925050506133b86040840184613151565b85830360408701526133cb8382846131a0565b925050506133dc6060840184613151565b85830360608701526133ef838284613258565b925050506134006080840184613151565b85830360808701526134138382846131a0565b9250505061342460a0840184613151565b85830360a08701526133148382846131a0565b6000808335601e1984360301811261344e57600080fd5b83016020810192503590506001600160401b0381111561346d57600080fd5b8060081b360382131561319957600080fd5b803560ff81168114612d8957600080fd5b81835260208301925060008160005b848110156131e05781356134b281612d69565b6001600160a01b0316865260208201356134cb81612d69565b6001600160a01b0316602087015260408281013590870152606080830135908701526134f96080830161347f565b60ff16608087015260a0828101359087015260c0808301359087015261352160e08301612d7e565b61352e60e0880182612e51565b5061010095860195919091019060010161349f565b6000813561355081612d69565b6001600160a01b03168352602082810135908401526135726040830183613151565b606060408601526135876060860182846131a0565b95945050505050565b600061359c8283613132565b61010084526135af6101008501826132af565b90506135be602084018461331e565b84820360208601526135d08282613366565b9150506135e06040840184613437565b85830360408701526135f3838284613490565b925050506136046060840184613132565b84820360608601526136168282613543565b6080858101359087015260a08086013590870152915061363b905060c0840184613213565b85830360c087015261364e8382846131ea565b60e095860135969095019590955250919392505050565b6000823560de1983360301811261314857600080fd5b6000813561368881612d69565b6001600160a01b0316835260208201356136a181612d69565b6001600160a01b031660208401526136bb60408301612d7e565b6136c86040850182612e51565b506136d560608301612d7e565b6136e26060850182612e51565b506136ef60808301612d7e565b6136fc6080850182612e51565b5061370960a08301612d7e565b61371660a0850182612e51565b5061372460c0830183613151565b60e060c086015261358760e0860182846131a0565b803582526020808201359083015260408082013590830152606080820135908301526080808201359083015260a0808201359083015260c0808201359083015260e090810135910152565b6009811061116c57600080fd5b8035612d8981613784565b634e487b7160e01b600052602160045260246000fd5b600981106137c2576137c261379c565b9052565b6003811061116c57600080fd5b8035612d89816137c6565b600381106137c2576137c261379c565b801515811461116c57600080fd5b8035612d89816137ee565b60006138138283613665565b610200845261382661020085018261367b565b90506138386020850160208501613739565b6138456101208401613791565b6138536101208601826137b2565b5061386161014084016137d3565b61386f6101408601826137de565b5061387d61016084016137fc565b151561016085015261389261018084016137fc565b15156101808501526138a76101a084016137fc565b15156101a08501526101c083810135908501526138c86101e0840184613151565b8583036101e0870152613314838284613334565b803582526020808201359083015260408082013590830152606080820135908301526080808201359083015260a0808201359083015260c0810135613920816137ee565b151560c083015260e090810135910152565b81835260208301925060008160005b848110156131e05761395386836138dc565b610100958601959190910190600101613941565b60408152600061397a6040830185613590565b8281036020840152606081016139908586613151565b606084528281845260808501905060808260051b86010193508260006101fe19853603015b848210156139fa57878703607f1901845282358181126139d457600080fd5b6139e088888301613807565b9750506020830192506020840193506001820191506139b5565b505050505050613a0d6020860186613437565b8383036020850152613a20838284613932565b92505050613a316040860186613151565b8383036040850152613a44838284613334565b98975050505050505050565b600060208284031215613a6257600080fd5b5051919050565b6000808335601e19843603018112613a8057600080fd5b8301803591506001600160401b03821115613a9a57600080fd5b6020019150600581901b360382131561319957600080fd5b6000808335601e19843603018112613ac957600080fd5b8301803591506001600160401b03821115613ae357600080fd5b6020019150600881901b360382131561319957600080fd5b604081526000613b0e6040830185613590565b82810360208401526135878185613807565b61012081526000613b35610120830185613590565b905061050d60208301846138dc565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112613b8757600080fd5b8301803591506001600160401b03821115613ba157600080fd5b60200191503681900382131561319957600080fd5b8183823760009101908152919050565b604081526000613bd96040830185613590565b90508260208301529392505050565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60008235605e19833603018112613c2857600080fd5b9190910192915050565b604051606081016001600160401b0381118282101715613c5457613c54613b44565b60405290565b60405161018081016001600160401b0381118282101715613c5457613c54613b44565b604051608081016001600160401b0381118282101715613c5457613c54613b44565b60405161010081016001600160401b0381118282101715613c5457613c54613b44565b604051601f8201601f191681016001600160401b0381118282101715613cea57613cea613b44565b604052919050565b60006001600160401b03821115613d0b57613d0b613b44565b5060051b60200190565b600082601f830112613d2657600080fd5b8135613d39613d3482613cf2565b613cc2565b8082825260208201915060208360051b860101925085831115613d5b57600080fd5b602085015b83811015613d81578035613d7381612d69565b835260209283019201613d60565b5095945050505050565b60006001600160401b03821115613da457613da4613b44565b50601f01601f191660200190565b600060608236031215613dc457600080fd5b613dcc613c32565b82356001600160401b03811115613de257600080fd5b613dee36828601613d15565b82525060208301356001600160401b03811115613e0a57600080fd5b613e1636828601613d15565b60208301525060408301356001600160401b03811115613e3557600080fd5b830136601f820112613e4657600080fd5b8035613e54613d3482613cf2565b8082825260208201915060208360051b850101925036831115613e7657600080fd5b602084015b83811015613efa5780356001600160401b03811115613e9957600080fd5b850136603f820112613eaa57600080fd5b6020810135613ebb613d3482613d8b565b818152366040848401011115613ed057600080fd5b81604084016020830137600060208383010152808652505050602083019250602081019050613e7b565b5060408501525091949350505050565b600081518084526020840193506020830160005b828110156131e05781516001600160a01b0316865260209586019590910190600101613f1e565b602081526000825160606020840152613f616080840182613f0a565b90506020840151601f19848303016040850152613f7e8282613f0a565b9150506040840151601f19848303016060850152613587828261303a565b6000823560be19833603018112613c2857600080fd5b85815284602082015260a060408201526000613fd260a0830185876131ea565b6001600160a01b0393909316606083015250808203608090910152600481526318d85b1b60e21b6020820152604001949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561086257610862614009565b600082356101fe19833603018112613c2857600080fd5b60006020828403121561405b57600080fd5b815161050d816137ee565b8181038181111561086257610862614009565b60006020828403121561408b57600080fd5b813561050d81613784565b6000823560de19833603018112613c2857600080fd5b6000602082840312156140be57600080fd5b813561050d81612d69565b6001600160a01b0385168152602081018490526080604082015260006140ef8480613665565b610200608084015261410561028084018261367b565b905061411760a0840160208701613739565b6141246101208601613791565b6141326101a08501826137b2565b5061414061014086016137d3565b61414e6101c08501826137de565b5061415c61016086016137fc565b15156101e084015261417161018086016137fc565b15156102008401526141866101a086016137fc565b15156102208401526101c08501356102408401526141a86101e0860186613151565b848303607f19016102608601526141c0838284613334565b9350505050613587606083018415159052565b6001600160a01b03929092168252602082015260400190565b8051612d8981612d69565b600082601f83011261420857600080fd5b8151614216613d3482613cf2565b8082825260208201915060208360051b86010192508583111561423857600080fd5b602085015b83811015613d8157805161425081612d69565b83526020928301920161423d565b8051612d8981613784565b8051612d89816137c6565b6000610180828403121561428757600080fd5b61428f613c5a565b905061429a8261425e565b81526142a860208301614269565b602082015260408281015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e080830151908201526101008083015190820152610120808301519082015261014080830151908201526101609182015191810191909152919050565b60006080828403121561432f57600080fd5b614337613c7d565b90508151614344816137ee565b81526020820151614354816137ee565b60208201526040820151614367816137ee565b6040820152606082015161437a816137ee565b606082015292915050565b600082601f83011261439657600080fd5b81516143a4613d3482613cf2565b8082825260208201915060208360051b8601019250858311156143c657600080fd5b602085015b83811015613d815780518352602092830192016143cb565b6000602082840312156143f557600080fd5b81516001600160401b0381111561440b57600080fd5b8201610240818503121561441e57600080fd5b614426613c7d565b81516001600160401b0381111561443c57600080fd5b8201610100818703121561444f57600080fd5b614457613c9f565b614460826141ec565b815261446e602083016141ec565b602082015261447f604083016141ec565b6040820152614490606083016141ec565b60608201526144a1608083016141ec565b60808201526144b260a083016141ec565b60a08201526144c360c083016141ec565b60c082015260e08201516001600160401b038111156144e157600080fd5b6144ed888285016141f7565b60e0830152508252506145038560208401614274565b6020820152614516856101a0840161431d565b60408201526102208201516001600160401b0381111561453557600080fd5b61454186828501614385565b606083015250949350505050565b60006020828403121561456157600080fd5b813561050d816137ee565b6145778282516137b2565b602081015161458960208401826137de565b5060408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516101608301525050565b600081518084526020840193506020830160005b828110156131e057815186526020958601959091019060010161460e565b8981528860208201528760408201528660608201528560808201528460a082015283151560c082015261012060e08201526000835161024061012084015260018060a01b0381511661036084015260018060a01b0360208201511661038084015260408101516146a06103a0850182612e51565b5060608101516146b46103c0850182612e51565b5060808101516146c86103e0850182612e51565b5060a08101516146dc610400850182612e51565b5060c08101516146f0610420850182612e51565b5060e0015161010061044084015261470c610460840182613f0a565b9050602085015161472161014085018261456c565b50604085810151805115156102c0860152602081015115156102e0860152908101511515610300850152606090810151151561032085015285015161011f198483030161034085015261477482826145fa565b9250505061478761010083018415159052565b9a9950505050505050505050565b60208152600061050d602083018461300e565b6000602082840312156147ba57600080fd5b815161050d81612d69565b60006101008284031280156147d957600080fd5b5060006147e4613c9f565b83356147ef81612d69565b81526147fd60208501612d7e565b602082015260408481013590820152606080850135908201526148226080850161347f565b608082015260a0848101359082015260c080850135908201819052915061484b60e08501612d7e565b60e0820152949350505050565b6001600160a01b0392831681529116602082015260400190565b608081526000614886608083018a8c6131a0565b82810360208401528088825260208201905060208960051b8301018a60005b8b8110156148e357848303601f190184526148c0828e613213565b6148cb8582846131ea565b602096870196909550939093019250506001016148a5565b505084810360408601526148f881898b6131a0565b92505050828103606084015261490f8185876131a0565b9b9a5050505050505050505050565b6000604082840312801561493157600080fd5b50604080519081016001600160401b038111828210171561495457614954613b44565b604052825181526020928301519281019290925250919050565b808202811582820484141761086257610862614009565b84516001600160a01b0390811682526020808701518216908301526040808701518216908301526060808701518216908301528481166080830152831660a082015260e060c0820181905260009061331490830184613543565b6040815260006149f2604083018561300e565b8281036020840152613587818561300e565b600060208284031215614a1657600080fd5b81516001600160401b03811115614a2c57600080fd5b8201601f81018413614a3d57600080fd5b8051614a4b613d3482613d8b565b818152856020838501011115614a6057600080fd5b613587826020830160208601612fea565b60008251613c28818460208701612fea56fea26469706673582212204305df71c7ed367ed85cc8b3ef49e8e46f24c0a1999e501905f85b05b5a6387664736f6c634300081d00330000000000000000000000007452c558d45f8afc8c83dae62c3f8a5be19c71f60000000000000000000000003c3d99fd298f679dbc2cecd132b4ec4d0f5e6e72000000000000000000000000fd70de6b91282d8017aa4e741e9ae325cab992d8000000000000000000000000c8ee91a54287db53897056e12d9819156d3822fb0000000000000000000000006d5f3c723002847b009d07fe8e17d6958f153e4e0000000000000000000000006ccd77f770e7213c584ff8bfbf47c7a0bda3066500000000000000000000000031ef83a530fde1b38ee9a18093a333d8bbbc40d5000000000000000000000000db2ab9566732710d02b23325f79a8832118b97c5000000000000000000000000389cef541397e872dc04421f166b5bc2e0b374a5