0 txs
1 call
constructor
constructor((address router, address roleStore, address dataStore, address eventEmitter, address oracle, address orderVault, address orderHandler, address swapHandler, address externalHandler, address multichainVault) params)
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)
multichainVault
viewfunction multichainVault() 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)
subaccountApprovalNonces
viewfunction subaccountApprovalNonces(address) view returns (uint256)
swapHandler
viewfunction swapHandler() view returns (address)
batch
nonpayablefunction batch(tuple relayParams, tuple subaccountApproval, address account, uint256 srcChainId, address subaccount, tuple params) returns (bytes32[])
cancelOrder
nonpayablefunction cancelOrder(tuple relayParams, tuple subaccountApproval, address account, uint256 srcChainId, address subaccount, bytes32 key)
createOrder
nonpayablefunction createOrder(tuple relayParams, tuple subaccountApproval, address account, uint256 srcChainId, address subaccount, tuple params) returns (bytes32)
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
removeSubaccount
nonpayablefunction removeSubaccount(tuple relayParams, address account, uint256 srcChainId, address subaccount)
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, tuple subaccountApproval, address account, uint256 srcChainId, address subaccount, 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
0x61022060405234801561001157600080fd5b50604051615fc6380380615fc683398101604081905261003091610627565b8080608001518160c001518260a001518360e001518461010001518660000151876020015188604001518960600151828961006f6100df60201b60201c565b6001600160a01b0390811660c05290811660a052908116608052600160005590811660e052908116610100529384166101209081529184166101405283166101605295821661018052509283166101a0529082166101c05281166101e05292015190911661020052506106f39050565b600080806100ec4661027e565b1561013857507361ace8fba7b80aef8ed67f37cb60be00180872ad9273368165b2afb95fae8cec409efa59d5091f9875a5925073038479687b7bc7943313bffd524a4acc96b3f9be9150565b610141466102a6565b1561018d575073b16a1dbe755f992636705fdbb3a8678a657eb3ea927322dcc39b2ac376862183dd35a1664798dafc7da6925073ba4082f4961c8fb76231995c967cd9aa40f321b59150565b610196466102c4565b156101e257507342120a1417a091a52a8d4590e28fc6c0f61e56329273aced988c5b5fe3f11848c728d9a5f66cf34c9e73925073bbce89acdd86d0130bdc3f1fe37c3aedd79fc1f49150565b6101eb466102e2565b15610237575073abcc9b596420a9e9172fd5938620e265a0f9df929273b539068872230f20456cf38ec52ef2f91af4ae499250738598806401a63ddf52473f1b3c55bc9e33e2d73b9150565b5073cd565435e0d2109fefde337a66491541df0d142092738ace64cea52b409f930f60b516f65197fad4b056925073c7739c195618d314c08e8626c98f8573e4e436349150565b600081610e351480610291575081610e34145b1561029e57506001919050565b506000919050565b60008161014414806102915750816101180361029e57506001919050565b600081612b741480610291575081610ab50361029e57506001919050565b600081600114806102f3575081600a145b806102fe5750816019145b80610309575081601e145b806103145750816038145b8061031f5750816064145b8061032a575081606d145b806103355750816089145b8061034057508160b7145b8061034b57508160e9145b8061035657508160fa145b8061036257508161013a145b8061036e575081610440145b8061037a57508161044d145b8061038657508161046f145b80610392575081610504145b8061039e575081610505145b806103aa5750816106c1145b806103b6575081610725145b806103c2575081610729145b806103ce5750816107f7145b806103da575081610ec0145b806103e657508161106a145b806103f25750816118fe145b806103fe575081612105145b8061040a5750816127d8145b80610416575081614737145b80610422575081614739145b8061042e5750816162ef145b8061043a57508161868b145b8061044657508161a1ef145b8061045257508161a455145b8061045e57508161a4b1145b8061046a57508161a86a145b8061047657508161e708145b8061048357508162013882145b80610490575081620138d4145b8061049d57508162013e31145b806104aa57508162014a34145b806104b75750816201b254145b806104c45750816203ade0145b806104d157508162066eee145b806104de575081620a045c145b806104eb57508162133e40145b806104f8575081625c2359145b806105055750816276adf1145b8061051257508162aa36a7145b8061051f57508162aa37dc145b8061052d5750816301bf4933145b8061053b575081630426e649145b806105495750816305535072145b8061055757508163059d7131145b8061056557508163075b3dcf145b80610573575081630a0c71fd145b80610581575081630d3b745e145b8061058f575081633b4c8eb9145b8061059d5750816352415249145b806105ab57508163bc1392a6145b806105ba5750816412dbe91402145b806102915750816414865d0f050361029e57506001919050565b919050565b60405161014081016001600160401b038111828210171561060a57634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146105d457600080fd5b600061014082840312801561063b57600080fd5b506106446105d9565b61064d83610610565b815261065b60208401610610565b602082015261066c60408401610610565b604082015261067d60608401610610565b606082015261068e60808401610610565b608082015261069f60a08401610610565b60a08201526106b060c08401610610565b60c08201526106c160e08401610610565b60e08201526106d36101008401610610565b6101008201526106e66101208401610610565b6101208201529392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161574161088560003960008181610268015281816127ae015281816129000152818161299801528181612ebd0152612f780152600081816101a601528181612035015261209101526000818161032a0152610b5c01526000818161035e0152610b3401526000818161041301528181610e950152818161139e015261160b0152600081816103bf015281816108dc01528181612411015281816125a901528181612786015281816129760152612f570152600081816102af015281816105e601528181610630015281816108b401528181610a9c01528181610af101528181610fdc015281816125880152818161275e015281816128de0152818161295401528181612d2e0152612f3601526000818161047a015281816109cb0152611e0b015260006102340152600081816102f601528181610bbb01528181610c60015281816122d4015261243201526000505060005050600061285d01526157416000f3fe6080604052600436106100fa5760003560e01c806301ac4293146100ff578063136334d114610144578063189f5a15146101725780632e944bd6146101945780633146d24c146101d5578063496747d5146101f55780634a4a7b0414610222578063528a65f41461025657806353ead2d31461028a578063660d0d671461029d5780637d39aaf1146102d15780637dc0d1d0146102e45780638a53aaac1461031857806393845e461461034c5780639ba91c8f146103805780639ff78c30146103ad578063ac9650d8146103e1578063b584830514610401578063e1bb054214610435578063e6d66ac814610455578063f887ea4014610468575b600080fd5b34801561010b57600080fd5b5061012f61011a36600461363e565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561015057600080fd5b5061016461015f3660046136a8565b61049c565b60405190815260200161013b565b34801561017e57600080fd5b5061019261018d36600461376f565b610514565b005b3480156101a057600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b60405161013b9190613823565b3480156101e157600080fd5b506101926101f0366004613837565b610585565b34801561020157600080fd5b506101646102103660046138d7565b60026020526000908152604090205481565b34801561022e57600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561026257600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b6101926102983660046138f4565b6105d0565b3480156102a957600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b6101926102df3660046138f4565b61061a565b3480156102f057600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561032457600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561035857600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b506103a061039b366004613920565b610656565b60405161013b91906139d8565b3480156103b957600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b6103f46103ef366004613a1b565b6106cc565b60405161013b9190613b3c565b34801561040d57600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561044157600080fd5b50610192610450366004613b4f565b6107e0565b610192610463366004613bba565b610983565b34801561047457600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b60006104a6610a39565b868585600160005a90506104b8610a97565b60006104c2610acb565b90506104d18187878787610b91565b6104df8d8d8d8d8d8d610cd8565b6104ec8b8b8a6001610de7565b96506104fa81838787610f64565b50505050505061050a6001600055565b9695505050505050565b61051c610a39565b858484600160005a905061052e610a97565b6000610538610acb565b90506105478187878787610b91565b6105558c8c8c8c8c8c61118a565b6105618a886001611227565b61056d81838787610f64565b50505050505061057d6001600055565b505050505050565b61058d610a39565b858484600160005a905061059f610a97565b60006105a9610acb565b90506105b88187878787610b91565b6105c68c8c8c8c8c8c61147d565b6105618a886114bd565b6105d8610a39565b6105e182611675565b61060c7f0000000000000000000000000000000000000000000000000000000000000000838361169f565b6106166001600055565b5050565b610622610a39565b61062b82611675565b61060c7f000000000000000000000000000000000000000000000000000000000000000083836117ab565b6060610660610a39565b868585600160005a9050610672610a97565b600061067c610acb565b905061068b8187878787610b91565b6106998d8d8d8d8d8d61182e565b6104ec8b8b6106a88b80613bfb565b6106b560208e018e613c4b565b8e80604001906106c59190613bfb565b60016119c2565b6060816001600160401b038111156106e6576106e6613c94565b60405190808252806020026020018201604052801561071957816020015b60608152602001906001900390816107045790505b50905060005b828110156107d8576000803086868581811061073d5761073d613caa565b905060200281019061074f9190613cc0565b60405161075d929190613d06565b600060405180830381855af49150503d8060008114610798576040519150601f19603f3d011682016040523d82523d6000602084013e61079d565b606091505b5091509150816107b0576107b081611b20565b808484815181106107c3576107c3613caa565b6020908102919091010152505060010161071f565b505b92915050565b6107e8610a39565b8383836000805a90506107f9610a97565b6000610803610acb565b90506108128187878787610b91565b604051630b33370160e11b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b10906316666e029061084e908e908c90600401614238565b602060405180830381865af415801561086b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088f9190614262565b905061089d8b8b838c611b59565b6040516331afcdf360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152808c166044830152891660648201527378e33740994201507334a20d9c05ec437aacbc6a9063c6bf37cc9060840160006040518083038186803b15801561094857600080fd5b505af415801561095c573d6000803e3d6000fd5b505050505061096d81838787610f64565b50505050505061097d6001600055565b50505050565b61098b610a39565b61099482611675565b6040516303704f0f60e31b81526001600160a01b0384811660048301523360248301819052848216604484015260648301849052917f000000000000000000000000000000000000000000000000000000000000000090911690631b82787890608401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b5050505050610a346001600055565b505050565b600260005403610a905760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b610ac97f0000000000000000000000000000000000000000000000000000000000000000610ac430611c9b565b611d24565b565b6040805160808101825260008082526020820181905291810182905260608101919091527f00000000000000000000000000000000000000000000000000000000000000006000610b1b82611d4f565b604080516080810182526001600160a01b0394851681527f0000000000000000000000000000000000000000000000000000000000000000851660208201527f00000000000000000000000000000000000000000000000000000000000000008516918101919091529216606083015250919050565b610b9b848061427b565b610ba49061441b565b6040516331e999fd60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c7a667f490610bf09084906004016145ae565b600060405180830381600087803b158015610c0a57600080fd5b505af1158015610c1e573d6000803e3d6000fd5b50610c399250610c349150506040870187613c4b565b611dfc565b610c518484610c4b6020890189614605565b85611f4d565b610c5e8686868686612166565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662ccf1556040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cb857600080fd5b505af1158015610ccc573d6000803e3d6000fd5b50505050505050505050565b604051636d2a629b60e01b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b1090636d2a629b90610d18908a908a908a908890600401614926565b602060405180830381865af4158015610d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d599190614262565b9050610d6787848387611b59565b604051632dfbe7ff60e21b81527378e33740994201507334a20d9c05ec437aacbc6a9063b7ef9ffc90610da0908890869060040161496e565b60006040518083038186803b158015610db857600080fd5b505af4158015610dcc573d6000803e3d6000fd5b50505050610dde85858560018a61256d565b50505050505050565b600080610df2610acb565b60208101516060820151919250610e17916001600160a01b03169060a0870135612670565b604084013515801590610e5f5750610e3f610e3a61014086016101208701614992565b6126c6565b80610e5f5750610e5f610e5a61014086016101208701614992565b6126fe565b15610e9357610e9386610e7286806149af565b610e839060c081019060a0016138d7565b602084015160408801358961273e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c6561b45878787878015610ef657506000610ed98a806149af565b610eea9060608101906040016138d7565b6001600160a01b031614155b6040518563ffffffff1660e01b8152600401610f1594939291906149c5565b6020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190614262565b9150505b949350505050565b60008085606001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610f979190613823565b602060405180830381865afa158015610fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd89190614262565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ae1cfca6110123361281e565b6040518263ffffffff1660e01b815260040161103091815260200190565b602060405180830381865afa15801561104d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110719190614acf565b61116857600061108033612859565b159050801561112f5786516060880151604051630e22a74960e31b81526001600160a01b0392831660048201529116602482015260448101879052366064820152608481018390527349eaeafa626011ede0b9852e567dfcf8b62aba88906371153a489060a401602060405180830381865af4158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190614262565b9250611166565b6111376128a4565b92508183111561115e578282604051639cd7629560e01b8152600401610a87929190614aec565b6111666128ad565b505b6111728282614b10565b9050801561057d5761057d86606001518583866128d9565b604051632bd88e6960e21b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b109063af6239a4906111ca908a908a908a908890600401614b79565b602060405180830381865af41580156111e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120b9190614262565b905061121987848387611b59565b610dde85858560018a61256d565b6000611231610acb565b805160405163fdfc26f360e01b81529192506000917329b7cf4831288932de48c929cb09649d1c6ca69d9163fdfc26f3916112729190883590600401614bc0565b600060405180830381865af415801561128f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b79190810190614dd0565b905060006112c482515190565b6001600160a01b0316036112eb57604051631630779760e01b815260040160405180910390fd5b846001600160a01b03166112fe82515190565b6001600160a01b031614611360576040805163a35b150b60e01b81526001600160a01b03871660048201526024810191909152601760448201527630b1b1b7bab73a103337b9103ab83230ba32a7b93232b960491b6064820152608401610a87565b60e0840135156113945761139482602001518560e0013584606001516001600160a01b03166126709092919063ffffffff16565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9db59a7853560208701356040880135606089013560808a013560a08b01356113ee60e08d0160c08e01614f3c565b898c8015611411575060006114058c516060015190565b6001600160a01b031614155b8015611420575060e08e013515155b6040518a63ffffffff1660e01b815260040161144499989796959493929190615019565b600060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b505050505050505050565b60405163e55ee37b60e01b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b109063e55ee37b906111ca908a908a908a908890600401615182565b60006114c7610acb565b805160405163fdfc26f360e01b81529192506000917329b7cf4831288932de48c929cb09649d1c6ca69d9163fdfc26f39161150791908790600401614bc0565b600060405180830381865af4158015611524573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261154c9190810190614dd0565b9050600061155982515190565b6001600160a01b03160361158057604051631630779760e01b815260040160405180910390fd5b836001600160a01b031661159382515190565b6001600160a01b0316146115f5576040805163a35b150b60e01b81526001600160a01b03861660048201526024810191909152601760448201527630b1b1b7bab73a103337b91031b0b731b2b627b93232b960491b6064820152608401610a87565b604051637489ec2360e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637489ec2390602401600060405180830381600087803b15801561165757600080fd5b505af115801561166b573d6000803e3d6000fd5b5050505050505050565b6001600160a01b03811661169c5760405163d551823d60e01b815260040160405180910390fd5b50565b806000036116ac57505050565b6116b582611675565b6000836001600160a01b031663bd02d0f5604051602001611707906020808252601f908201527f4e41544956455f544f4b454e5f5452414e534645525f4741535f4c494d495400604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161173b91815260200190565b602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190614262565b90506000806000806000868887f190508015611799575050505050565b6117a48585856117ab565b5050505050565b806000036117b857505050565b6117c182611675565b60006117cc84611d4f565b9050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505050505061097d84828585612a07565b60405163540edf5b60e01b815260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b109063540edf5b9061186e908a908a908a9088906004016151f9565b602060405180830381865af415801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af9190614262565b90506118bd87848387611b59565b60005b6118ca8380613bfb565b9050811015611973577378e33740994201507334a20d9c05ec437aacbc6a63b7ef9ffc876118f88680613bfb565b8581811061190857611908613caa565b905060200281019061191a91906152f8565b6040518363ffffffff1660e01b815260040161193792919061496e565b60006040518083038186803b15801561194f57600080fd5b505af4158015611963573d6000803e3d6000fd5b5050600190920191506118c09050565b5060006119836040840184613bfb565b90506119926020850185613c4b565b905061199e8580613bfb565b6119a992915061530f565b6119b3919061530f565b905061166b868686848b61256d565b60606000836119d1878a61530f565b6119db919061530f565b9050806000036119fe576040516312f75a3d60e11b815260040160405180910390fd5b6000886001600160401b03811115611a1857611a18613c94565b604051908082528060200260200182016040528015611a41578160200160208202803683370190505b50905060005b89811015611aa357611a7e8d8d8d8d85818110611a6657611a66613caa565b9050602002810190611a7891906152f8565b88610de7565b828281518110611a9057611a90613caa565b6020908102919091010152600101611a47565b5060005b87811015611ada57611ad28d8a8a84818110611ac557611ac5613caa565b9050610100020187611227565b600101611aa7565b5060005b85811015611b1057611b088d888884818110611afc57611afc613caa565b905060200201356114bd565b600101611ade565b509b9a5050505050505050505050565b600080611b2c83612c51565b915091508015611b50578160405162461bcd60e51b8152600401610a879190615322565b610a3483612ce1565b611b7b8160e086013560a0870135611b746040890189613c4b565b9050612cea565b604051638a3b3d6f60e01b81526004810182905260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b1090638a3b3d6f90602401602060405180830381865af4158015611bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf29190614262565b90506000611c1a828560405161190160f01b8152600281019290925260228201526042902090565b9050611c2581612dec565b73c72390b4b667a0cb378b2dd85cfbf7bd61593b1063bead67858383611c4e60c08b018b613cc0565b8a6040518663ffffffff1660e01b8152600401611c6f959493929190615335565b60006040518083038186803b158015611c8757600080fd5b505af4158015610ccc573d6000803e3d6000fd5b6000604051602001611cd99060208082526018908201527711d054d31154d4d7d191505515549157d11254d05093115160421b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038416908201526060015b604051602081830303815290604052805190602001209050919050565b611d2e8282612e3d565b156106165760405163dd70e0c960e01b815260048101829052602401610a87565b6000816001600160a01b03166321f8a721604051602001611d879060208082526003908201526215d39560ea1b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611dbb91815260200190565b602060405180830381865afa158015611dd8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107da919061538c565b6000819003611e09575050565b7f000000000000000000000000000000000000000000000000000000000000000060005b8281101561097d576000848483818110611e4957611e49613caa565b90506101000201803603810190611e6091906153a9565b9050826001600160a01b031681602001516001600160a01b031614611ea057806020015183604051633c0ac19960e01b8152600401610a8792919061543c565b60e0810151815160208301516040808501516060860151608087015160a088015160c0890151945163d505accf60e01b81526001600160a01b03978816600482015295871660248701526044860193909352606485019190915260ff16608484015260a483015260c482015291169063d505accf9060e401600060405180830381600087803b158015611f3257600080fd5b505af1925050508015611f43575060015b5050600101611e2d565b611f5a6040830183613bfb565b15905061097d578015611f80576040516328f773e960e01b815260040160405180910390fd5b611f8a8280613bfb565b15905080611fb15750611fa06020830183613bfb565b9050611fac8380613bfb565b905014155b15611fea57611fc08280613bfb565b9050611fcf6020840184613bfb565b60405163ec7fd38560e01b8152610a87939250600401614aec565b60005b611ff78380613bfb565b90508110156120865761207e8561200e8580613bfb565b8481811061201e5761201e613caa565b905060200201602081019061203391906138d7565b7f00000000000000000000000000000000000000000000000000000000000000006120616020880188613bfb565b8681811061207157612071613caa565b905060200201358861273e565b600101611fed565b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d59922b06120c36040850185613bfb565b6120d06060870187613bfb565b6120dd6080890189613bfb565b6120ea60a08b018b613bfb565b6040518963ffffffff1660e01b815260040161210d989796959493929190615456565b600060405180830381600087803b15801561212757600080fd5b505af115801561213b573d6000803e3d6000fd5b5050505061097d84848480608001906121549190613bfb565b61216160a0880188613bfb565b612eb0565b61216f33612859565b8015612198575084606001516001600160a01b031661218c61302c565b6001600160a01b031614155b156121c5576121a561302c565b8560600151604051630d0fcc0b60e01b8152600401610a8792919061543c565b6121d2606085018561427b565b6121e0906040810190613bfb565b1590506124b25780156123b957600085600001516001600160a01b031663bd02d0f56040516020016122519060208082526025908201527f4d41585f52454c41595f4645455f535741505f5553445f464f525f535542414360408201526410d3d5539560da1b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161228591815260200190565b602060405180830381865afa1580156122a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c69190614262565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016635dcf7194612306606089018961427b565b6123149060208101906138d7565b6040518263ffffffff1660e01b81526004016123309190613823565b6040805180830381865afa15801561234c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123709190615502565b60200151612381606088018861427b565b6020013561238f9190615552565b9050818111156123b6578082604051631808e37f60e31b8152600401610a87929190614aec565b50505b6123f4836123ca606087018761427b565b6123d89060208101906138d7565b60208801516123ea606089018961427b565b602001358661273e565b73c72390b4b667a0cb378b2dd85cfbf7bd61593b1063cbb114e7867f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061245e60608a018a61427b565b6040518563ffffffff1660e01b815260040161247d9493929190615569565b60006040518083038186803b15801561249557600080fd5b505af41580156124a9573d6000803e3d6000fd5b505050506117a4565b6060808601516001600160a01b0316906124ce9086018661427b565b6124dc9060208101906138d7565b6001600160a01b031603612532576124f7606085018561427b565b602001351561252d5761252d83612511606087018761427b565b61251f9060208101906138d7565b306123ea606089018961427b565b6117a4565b61253f606085018561427b565b61254d9060208101906138d7565b85606001516040516374a488a760e11b8152600401610a8792919061543c565b73aba795147526a516fba58f6733d84ebc61cef42762295b767f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008888886040516020016126069060208082526017908201527629aaa120a1a1a7aaa72a2fa7a92222a92fa0a1aa24a7a760491b604082015260600190565b60405160208183030381529060405280519060200120898960026040518a63ffffffff1660e01b8152600401612644999897969594939291906155c3565b60006040518083038186803b15801561265c57600080fd5b505af4158015611472573d6000803e3d6000fd5b610a348363a9059cbb60e01b848460405160240161268f929190614bc0565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613038565b6000808260088111156126db576126db6147ff565b14806107da575060015b8260088111156126f7576126f76147ff565b1492915050565b60006002826008811115612714576127146147ff565b14806127315750600382600881111561272f5761272f6147ff565b145b806107da575060086126e5565b61274783611675565b6040516313bc4d6960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015280861660648301528087166084830152841660a482015260c4810183905260e48101829052731158e639da58fd104908343ef3f42a79d54d2918906313bc4d699061010401612644565b6000604051602001611cd9906020808252601590820152741254d7d49153105657d1915157d15610d315511151605a1b604082015260600190565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361289c57506001919050565b506000919050565b601f1936013590565b610ac936604719013560601c6128c16128a4565b6128c961302c565b6001600160a01b0316919061310d565b6129257f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000085612a07565b6040516315ff6d2d60e01b8152731158e639da58fd104908343ef3f42a79d54d2918906315ff6d2d906129c6907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a908a90899060040161562c565b602060405180830381865af41580156129e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a49190614262565b801561097d57612a1682611675565b6000846001600160a01b031663bd02d0f5612a308661315c565b6040518263ffffffff1660e01b8152600401612a4e91815260200190565b602060405180830381865afa158015612a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8f9190614262565b905080600003612ab45783604051634fe14bfd60e11b8152600401610a879190613823565b6000612ac28585858561319a565b5090508015612ad257505061097d565b6000866001600160a01b03166321f8a721604051602001612b16906020808252600f908201526e484f4c44494e475f4144445245535360881b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612b4a91815260200190565b602060405180830381865afa158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b919061538c565b90506001600160a01b038116612bb457604051633a6de2f560e21b815260040160405180910390fd5b600080612bc38884888861319a565b915091508115612bd757505050505061097d565b6000612be282612c51565b5090507fc9f14d9a0a9b46470c7c0b6c508f8283abaab7f795f153953c58cd4250824dae8183604051612c16929190615667565b60405180910390a160405163012f3b8f60e71b81526001600160a01b03808b1660048301528916602482015260448101889052606401610a87565b60606000604483511015612c78575050604080516020810190915260008082529092909150565b6000612c85846020015190565b90506307b9e43360e51b6001600160e01b0319821601612cc45760048401935083806020019051810190612cb9919061568c565b946001945092505050565b600060405180602001604052806000815250909250925050915091565b80518060208301fd5b468314612d0d576040516330ddda8b60e21b815260048101849052602401610a87565b8015612d2c57604051637344d98160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ae1cfca612d6486613309565b6040518263ffffffff1660e01b8152600401612d8291815260200190565b602060405180830381865afa158015612d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc39190614acf565b612de357604051632c9bcbdd60e01b815260048101859052602401610a87565b61097d8261336e565b60008181526001602052604090205460ff1615612e1f57604051630820e04560e11b815260048101829052602401610a87565b6000908152600160208190526040909120805460ff19169091179055565b604051633d70e7e560e11b8152600481018290526000906001600160a01b03841690637ae1cfca90602401602060405180830381865afa158015612e85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea99190614acf565b9392505050565b60005b81811015610dde577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316838383818110612ef757612ef7613caa565b9050602002016020810190612f0c91906138d7565b6001600160a01b03160361302457731158e639da58fd104908343ef3f42a79d54d29186315ff6d2d7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000898987818110612fa957612fa9613caa565b9050602002016020810190612fbe91906138d7565b8c8c6040518763ffffffff1660e01b8152600401612fe19695949392919061562c565b602060405180830381865af4158015612ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130229190614262565b505b600101612eb3565b60331936013560601c90565b600061308d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166133939092919063ffffffff16565b90508051600014806130ae5750808060200190518101906130ae9190614acf565b610a345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a87565b8060000361311a57505050565b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461315257610a346001600160a01b0384168383612670565b610a3482826133a2565b6000604051602001611cd9906020808252601890820152771513d2d15397d514905394d1915497d1d054d7d31253525560421b604082015260600190565b60006060600063a9059cbb60e01b86866040516024016131bb929190614bc0565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600080886001600160a01b0316868460405161320c91906156f9565b60006040518083038160008787f1925050503d806000811461324a576040519150601f19603f3d011682016040523d82523d6000602084013e61324f565b606091505b509150915081156132f75780516000036132b457613275896001600160a01b03166134b8565b6132b45760006040518060400160405280601481526020017310d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b81525094509450505050613300565b600081511180156132d65750808060200190518101906132d49190614acf565b155b156132e957600094509250613300915050565b600194509250613300915050565b60009450925050505b94509492505050565b6000604051602001613346906020808252601790820152761254d7d4d490d7d0d210525397d25117d1539050931151604a1b604082015260600190565b6040516020818303038152906040528051906020012082604051602001611d07929190614aec565b8042111561169c57428160405163041f95d160e51b8152600401610a87929190614aec565b6060610f5c84846000856134c7565b804710156133f25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a87565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461343f576040519150601f19603f3d011682016040523d82523d6000602084013e613444565b606091505b5050905080610a345760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610a87565b6001600160a01b03163b151590565b6060824710156135285760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a87565b600080866001600160a01b0316858760405161354491906156f9565b60006040518083038185875af1925050503d8060008114613581576040519150601f19603f3d011682016040523d82523d6000602084013e613586565b606091505b5091509150613597878383876135a2565b979650505050505050565b6060831561360f578251600003613608576135bc856134b8565b6136085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a87565b5081610f5c565b610f5c83838151156136245781518083602001fd5b8060405162461bcd60e51b8152600401610a879190615322565b60006020828403121561365057600080fd5b5035919050565b6000610100828403121561366a57600080fd5b50919050565b6000610140828403121561366a57600080fd5b6001600160a01b038116811461169c57600080fd5b80356136a381613683565b919050565b60008060008060008060c087890312156136c157600080fd5b86356001600160401b038111156136d757600080fd5b6136e389828a01613657565b96505060208701356001600160401b038111156136ff57600080fd5b61370b89828a01613670565b955050604087013561371c81613683565b935060608701359250608087013561373381613683565b915060a08701356001600160401b0381111561374e57600080fd5b8701610200818a03121561376157600080fd5b809150509295509295509295565b6000806000806000806101a0878903121561378957600080fd5b86356001600160401b0381111561379f57600080fd5b6137ab89828a01613657565b96505060208701356001600160401b038111156137c757600080fd5b6137d389828a01613670565b95505060408701356137e481613683565b93506060870135925060808701356137fb81613683565b915061380a8860a08901613657565b90509295509295509295565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b60008060008060008060c0878903121561385057600080fd5b86356001600160401b0381111561386657600080fd5b61387289828a01613657565b96505060208701356001600160401b0381111561388e57600080fd5b61389a89828a01613670565b95505060408701356138ab81613683565b93506060870135925060808701356138c281613683565b9598949750929591949360a090920135925050565b6000602082840312156138e957600080fd5b8135612ea981613683565b6000806040838503121561390757600080fd5b823561391281613683565b946020939093013593505050565b60008060008060008060c0878903121561393957600080fd5b86356001600160401b0381111561394f57600080fd5b61395b89828a01613657565b96505060208701356001600160401b0381111561397757600080fd5b61398389828a01613670565b955050604087013561399481613683565b93506060870135925060808701356139ab81613683565b915060a08701356001600160401b038111156139c657600080fd5b87016060818a03121561376157600080fd5b602080825282518282018190526000918401906040840190835b81811015613a105783518352602093840193909201916001016139f2565b509095945050505050565b60008060208385031215613a2e57600080fd5b82356001600160401b03811115613a4457600080fd5b8301601f81018513613a5557600080fd5b80356001600160401b03811115613a6b57600080fd5b8560208260051b8401011115613a8057600080fd5b6020919091019590945092505050565b60005b83811015613aab578181015183820152602001613a93565b50506000910152565b60008151808452613acc816020860160208601613a90565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b83811015613b3057601f19858403018852613b1a838351613ab4565b6020988901989093509190910190600101613afe565b50909695505050505050565b602081526000612ea96020830184613ae0565b60008060008060808587031215613b6557600080fd5b84356001600160401b03811115613b7b57600080fd5b613b8787828801613657565b9450506020850135613b9881613683565b9250604085013591506060850135613baf81613683565b939692955090935050565b600080600060608486031215613bcf57600080fd5b8335613bda81613683565b92506020840135613bea81613683565b929592945050506040919091013590565b6000808335601e19843603018112613c1257600080fd5b8301803591506001600160401b03821115613c2c57600080fd5b6020019150600581901b3603821315613c4457600080fd5b9250929050565b6000808335601e19843603018112613c6257600080fd5b8301803591506001600160401b03821115613c7c57600080fd5b6020019150600881901b3603821315613c4457600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112613cd757600080fd5b8301803591506001600160401b03821115613cf157600080fd5b602001915036819003821315613c4457600080fd5b8183823760009101908152919050565b60008235605e19833603018112613d2c57600080fd5b90910192915050565b6000808335601e19843603018112613d4c57600080fd5b83016020810192503590506001600160401b03811115613d6b57600080fd5b8060051b3603821315613c4457600080fd5b81835260208301925060008160005b84811015613dbd578135613d9f81613683565b6001600160a01b031686526020958601959190910190600101613d8c565b5093949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e19843603018112613e0757600080fd5b83016020810192503590506001600160401b03811115613e2657600080fd5b803603821315613c4457600080fd5b60008383855260208501945060208460051b8201018360005b86811015613b3057838303601f19018852613e698287613df0565b613e74858284613dc7565b60209a8b019a90955093909301925050600101613e4e565b6000613e988283613d35565b60608552613eaa606086018284613d7d565b915050613eba6020840184613d35565b8583036020870152613ecd838284613d7d565b92505050613ede6040840184613d35565b858303604087015261050a838284613e35565b6000823560be19833603018112613d2c57600080fd5b81835260006001600160fb1b03831115613f2057600080fd5b8260051b80836020870137939093016020019392505050565b6000613f458283613d35565b60c08552613f5760c086018284613d7d565b915050613f676020840184613d35565b8583036020870152613f7a838284613f07565b92505050613f8b6040840184613d35565b8583036040870152613f9e838284613d7d565b92505050613faf6060840184613d35565b8583036060870152613fc2838284613e35565b92505050613fd36080840184613d35565b8583036080870152613fe6838284613d7d565b92505050613ff760a0840184613d35565b85830360a087015261050a838284613d7d565b6000808335601e1984360301811261402157600080fd5b83016020810192503590506001600160401b0381111561404057600080fd5b8060081b3603821315613c4457600080fd5b803560ff811681146136a357600080fd5b81835260208301925060008160005b84811015613dbd57813561408581613683565b6001600160a01b03168652602082013561409e81613683565b6001600160a01b0316602087015260408281013590870152606080830135908701526140cc60808301614052565b60ff16608087015260a0828101359087015260c080830135908701526140f460e08301613698565b61410160e0880182613816565b50610100958601959190910190600101614072565b6000813561412381613683565b6001600160a01b03168352602082810135908401526141456040830183613d35565b6060604086015261415a606086018284613d7d565b95945050505050565b600061416f8283613d16565b6101008452614182610100850182613e8c565b90506141916020840184613ef1565b84820360208601526141a38282613f39565b9150506141b3604084018461400a565b85830360408701526141c6838284614063565b925050506141d76060840184613d16565b84820360608601526141e98282614116565b6080858101359087015260a08086013590870152915061420e905060c0840184613df0565b85830360c0870152614221838284613dc7565b60e095860135969095019590955250919392505050565b60408152600061424b6040830185614163565b905060018060a01b03831660208301529392505050565b60006020828403121561427457600080fd5b5051919050565b60008235605e1983360301811261429157600080fd5b9190910192915050565b604051606081016001600160401b03811182821017156142bd576142bd613c94565b60405290565b60405161018081016001600160401b03811182821017156142bd576142bd613c94565b604051608081016001600160401b03811182821017156142bd576142bd613c94565b60405161010081016001600160401b03811182821017156142bd576142bd613c94565b604051601f8201601f191681016001600160401b038111828210171561435357614353613c94565b604052919050565b60006001600160401b0382111561437457614374613c94565b5060051b60200190565b600082601f83011261438f57600080fd5b81356143a261439d8261435b565b61432b565b8082825260208201915060208360051b8601019250858311156143c457600080fd5b602085015b838110156143ea5780356143dc81613683565b8352602092830192016143c9565b5095945050505050565b60006001600160401b0382111561440d5761440d613c94565b50601f01601f191660200190565b60006060823603121561442d57600080fd5b61443561429b565b82356001600160401b0381111561444b57600080fd5b6144573682860161437e565b82525060208301356001600160401b0381111561447357600080fd5b61447f3682860161437e565b60208301525060408301356001600160401b0381111561449e57600080fd5b830136601f8201126144af57600080fd5b80356144bd61439d8261435b565b8082825260208201915060208360051b8501019250368311156144df57600080fd5b602084015b838110156145635780356001600160401b0381111561450257600080fd5b850136603f82011261451357600080fd5b602081013561452461439d826143f4565b81815236604084840101111561453957600080fd5b816040840160208301376000602083830101528086525050506020830192506020810190506144e4565b5060408501525091949350505050565b600081518084526020840193506020830160005b82811015613dbd5781516001600160a01b0316865260209586019590910190600101614587565b6020815260008251606060208401526145ca6080840182614573565b90506020840151601f198483030160408501526145e78282614573565b9150506040840151601f1984830301606085015261415a8282613ae0565b6000823560be1983360301811261429157600080fd5b801515811461169c57600080fd5b80356136a38161461b565b6146468261464183613698565b613816565b600061465460208301614629565b1515602084015260408281013590840152606080830135908401526080808301359084015260a0808301359084015260c0808301359084015260e0808301359084015261010080830135908401526146b0610120830183613df0565b61014061012086015261415a61014086018284613dc7565b6000823560de19833603018112613d2c57600080fd5b600081356146eb81613683565b6001600160a01b03168352602082013561470481613683565b6001600160a01b0316602084015261471e60408301613698565b61472b6040850182613816565b5061473860608301613698565b6147456060850182613816565b5061475260808301613698565b61475f6080850182613816565b5061476c60a08301613698565b61477960a0850182613816565b5061478760c0830183613d35565b60e060c086015261415a60e086018284613d7d565b803582526020808201359083015260408082013590830152606080820135908301526080808201359083015260a0808201359083015260c0808201359083015260e090810135910152565b6009811061169c57600080fd5b80356136a3816147e7565b634e487b7160e01b600052602160045260246000fd5b60098110614825576148256147ff565b9052565b6003811061169c57600080fd5b80356136a381614829565b60038110614825576148256147ff565b600061485d82836146c8565b61020084526148706102008501826146de565b9050614882602085016020850161479c565b61488f61012084016147f4565b61489d610120860182614815565b506148ab6101408401614836565b6148b9610140860182614841565b506148c76101608401614629565b15156101608501526148dc6101808401614629565b15156101808501526148f16101a08401614629565b15156101a08501526101c083810135908501526149126101e0840184613d35565b8583036101e087015261050a838284613f07565b6080815260006149396080830187614163565b828103602084015261494b8187614634565b6001600160a01b0386166040850152838103606085015290506135978185614851565b6001600160a01b0383168152604060208201819052600090610f5c90830184614851565b6000602082840312156149a457600080fd5b8135612ea9816147e7565b6000823560de1983360301811261429157600080fd5b6001600160a01b0385168152602081018490526080604082015260006149eb84806146c8565b6102006080840152614a016102808401826146de565b9050614a1360a084016020870161479c565b614a2061012086016147f4565b614a2e6101a0850182614815565b50614a3c6101408601614836565b614a4a6101c0850182614841565b50614a586101608601614629565b15156101e0840152614a6d6101808601614629565b1515610200840152614a826101a08601614629565b15156102208401526101c0850135610240840152614aa46101e0860186613d35565b848303607f1901610260860152614abc838284613f07565b935050505061415a606083018415159052565b600060208284031215614ae157600080fd5b8151612ea98161461b565b918252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b818103818111156107da576107da614afa565b803582526020808201359083015260408082013590830152606080820135908301526080808201359083015260a0808201359083015260c0810135614b678161461b565b151560c083015260e090810135910152565b61016081526000614b8e610160830187614163565b8281036020840152614ba08187614634565b6001600160a01b0386166040850152915061415a90506060830184614b23565b6001600160a01b03929092168252602082015260400190565b80516136a381613683565b600082601f830112614bf557600080fd5b8151614c0361439d8261435b565b8082825260208201915060208360051b860101925085831115614c2557600080fd5b602085015b838110156143ea578051614c3d81613683565b835260209283019201614c2a565b80516136a3816147e7565b80516136a381614829565b60006101808284031215614c7457600080fd5b614c7c6142c3565b9050614c8782614c4b565b8152614c9560208301614c56565b602082015260408281015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e080830151908201526101008083015190820152610120808301519082015261014080830151908201526101609182015191810191909152919050565b600060808284031215614d1c57600080fd5b614d246142e6565b90508151614d318161461b565b81526020820151614d418161461b565b60208201526040820151614d548161461b565b60408201526060820151614d678161461b565b606082015292915050565b600082601f830112614d8357600080fd5b8151614d9161439d8261435b565b8082825260208201915060208360051b860101925085831115614db357600080fd5b602085015b838110156143ea578051835260209283019201614db8565b600060208284031215614de257600080fd5b81516001600160401b03811115614df857600080fd5b82016102408185031215614e0b57600080fd5b614e136142e6565b81516001600160401b03811115614e2957600080fd5b82016101008187031215614e3c57600080fd5b614e44614308565b614e4d82614bd9565b8152614e5b60208301614bd9565b6020820152614e6c60408301614bd9565b6040820152614e7d60608301614bd9565b6060820152614e8e60808301614bd9565b6080820152614e9f60a08301614bd9565b60a0820152614eb060c08301614bd9565b60c082015260e08201516001600160401b03811115614ece57600080fd5b614eda88828501614be4565b60e083015250825250614ef08560208401614c61565b6020820152614f03856101a08401614d0a565b60408201526102208201516001600160401b03811115614f2257600080fd5b614f2e86828501614d72565b606083015250949350505050565b600060208284031215614f4e57600080fd5b8135612ea98161461b565b614f64828251614815565b6020810151614f766020840182614841565b5060408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516101608301525050565b600081518084526020840193506020830160005b82811015613dbd578151865260209586019590910190600101614ffb565b8981528860208201528760408201528660608201528560808201528460a082015283151560c082015261012060e08201526000835161024061012084015260018060a01b0381511661036084015260018060a01b03602082015116610380840152604081015161508d6103a0850182613816565b5060608101516150a16103c0850182613816565b5060808101516150b56103e0850182613816565b5060a08101516150c9610400850182613816565b5060c08101516150dd610420850182613816565b5060e001516101006104408401526150f9610460840182614573565b9050602085015161510e610140850182614f59565b50604085810151805115156102c0860152602081015115156102e0860152908101511515610300850152606090810151151561032085015285015161011f19848303016103408501526151618282614fe7565b9250505061517461010083018415159052565b9a9950505050505050505050565b6080815260006151956080830187614163565b82810360208401526151a78187614634565b6001600160a01b0395909516604084015250506060015292915050565b81835260208301925060008160005b84811015613dbd576151e58683614b23565b6101009586019591909101906001016151d3565b60808152600061520c6080830187614163565b828103602084015261521e8187614634565b905060018060a01b03851660408401528281036060840152606081016152448586613d35565b606084528281845260808501905060808260051b86010193508260006101fe19853603015b848210156152ae57878703607f19018452823581811261528857600080fd5b61529488888301614851565b975050602083019250602084019350600182019150615269565b5050505050506152c1602086018661400a565b83830360208501526152d48382846151c4565b925050506152e56040860186613d35565b8383036040850152615174838284613f07565b600082356101fe1983360301811261429157600080fd5b808201808211156107da576107da614afa565b602081526000612ea96020830184613ab4565b85815284602082015260a06040820152600061535560a083018587613dc7565b6001600160a01b0393909316606083015250808203608090910152600481526318d85b1b60e21b6020820152604001949350505050565b60006020828403121561539e57600080fd5b8151612ea981613683565b60006101008284031280156153bd57600080fd5b5060006153c8614308565b83356153d381613683565b81526153e160208501613698565b6020820152604084810135908201526060808501359082015261540660808501614052565b608082015260a0848101359082015260c080850135908201819052915061542f60e08501613698565b60e0820152949350505050565b6001600160a01b0392831681529116602082015260400190565b60808152600061546a608083018a8c613d7d565b82810360208401528088825260208201905060208960051b8301018a60005b8b8110156154c757848303601f190184526154a4828e613df0565b6154af858284613dc7565b60209687019690955093909301925050600101615489565b505084810360408601526154dc81898b613d7d565b9250505082810360608401526154f3818587613d7d565b9b9a5050505050505050505050565b6000604082840312801561551557600080fd5b50604080519081016001600160401b038111828210171561553857615538613c94565b604052825181526020928301519281019290925250919050565b80820281158282048414176107da576107da614afa565b84516001600160a01b0390811682526020808701518216908301526040808701518216908301526060808701518216908301528481166080830152831660a082015260e060c0820181905260009061050a90830184614116565b6001600160a01b038a8116825289811660208301528881166040830152606082018890528616608082015260a0810185905260c0810184905261012060e0820181905260009061561590830185614634565b9050826101008301529a9950505050505050505050565b6001600160a01b039687168152948616602086015292851660408501529084166060840152909216608082015260a081019190915260c00190565b60408152600061567a6040830185613ab4565b828103602084015261415a8185613ab4565b60006020828403121561569e57600080fd5b81516001600160401b038111156156b457600080fd5b8201601f810184136156c557600080fd5b80516156d361439d826143f4565b8181528560208385010111156156e857600080fd5b61415a826020830160208601613a90565b60008251614291818460208701613a9056fea264697066735822122020f4df3ec1f945951c579e814b0312c6ffc87c9bafbaa663de8420776f9c6ce364736f6c634300081d00330000000000000000000000007452c558d45f8afc8c83dae62c3f8a5be19c71f60000000000000000000000003c3d99fd298f679dbc2cecd132b4ec4d0f5e6e72000000000000000000000000fd70de6b91282d8017aa4e741e9ae325cab992d8000000000000000000000000c8ee91a54287db53897056e12d9819156d3822fb0000000000000000000000006d5f3c723002847b009d07fe8e17d6958f153e4e00000000000000000000000031ef83a530fde1b38ee9a18093a333d8bbbc40d50000000000000000000000006ccd77f770e7213c584ff8bfbf47c7a0bda30665000000000000000000000000db2ab9566732710d02b23325f79a8832118b97c5000000000000000000000000389cef541397e872dc04421f166b5bc2e0b374a5000000000000000000000000ceaadfaf6a8c489b250e407987877c5fdfcdbe6e