0 txs
0 calls
constructor
constructor(address _router, address _dataStore, address _eventEmitter, address _oracle, address _orderHandler, address _orderVault, address _externalHandler)
functions
dataStore
viewfunction dataStore() view returns (address)
DOMAIN_SEPARATOR_NAME_HASH
viewfunction DOMAIN_SEPARATOR_NAME_HASH() view returns (bytes32)
DOMAIN_SEPARATOR_TYPEHASH
viewfunction DOMAIN_SEPARATOR_TYPEHASH() view returns (bytes32)
DOMAIN_SEPARATOR_VERSION_HASH
viewfunction DOMAIN_SEPARATOR_VERSION_HASH() view returns (bytes32)
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)
router
viewfunction router() view returns (address)
subaccountApprovalNonces
viewfunction subaccountApprovalNonces(address) view returns (uint256)
userNonces
viewfunction userNonces(address) view returns (uint256)
batch
nonpayablefunction batch(tuple relayParams, tuple subaccountApproval, address account, address subaccount, tuple params) returns (bytes32[])
cancelOrder
nonpayablefunction cancelOrder(tuple relayParams, tuple subaccountApproval, address account, address subaccount, bytes32 key)
createOrder
nonpayablefunction createOrder(tuple relayParams, tuple subaccountApproval, address account, address subaccount, tuple params) returns (bytes32)
removeSubaccount
nonpayablefunction removeSubaccount(tuple relayParams, address account, address subaccount)
updateOrder
nonpayablefunction updateOrder(tuple relayParams, tuple subaccountApproval, address account, address subaccount, tuple params)
events
No events.
errors
DeadlinePassed
error DeadlinePassed(uint256 currentTimestamp, uint256 deadline)
DisabledFeature
error DisabledFeature(bytes32 key)
EmptyOrder
error EmptyOrder()
EmptyReceiver
error EmptyReceiver()
EmptyRelayFeeAddress
error EmptyRelayFeeAddress()
InsufficientRelayFee
error InsufficientRelayFee(uint256 requiredRelayFee, uint256 availableFeeAmount)
InvalidCancellationReceiverForSubaccountOrder
error InvalidCancellationReceiverForSubaccountOrder(address cancellationReceiver, address expectedCancellationReceiver)
InvalidExternalCalls
error InvalidExternalCalls(uint256 sendTokensLength, uint256 sendAmountsLength)
InvalidPermitSpender
error InvalidPermitSpender(address spender, address expectedSpender)
InvalidReceiver
error InvalidReceiver(address receiver)
InvalidSignature
error InvalidSignature(string signatureType)
InvalidSubaccountApprovalNonce
error InvalidSubaccountApprovalNonce(uint256 storedNonce, uint256 nonce)
InvalidSubaccountApprovalSubaccount
error InvalidSubaccountApprovalSubaccount()
InvalidUserNonce
error InvalidUserNonce(uint256 storedUserNonce, uint256 userNonce)
MaxRelayFeeSwapForSubaccountExceeded
error MaxRelayFeeSwapForSubaccountExceeded(uint256 feeUsd, uint256 maxFeeUsd)
NonEmptyExternalCallsForSubaccountOrder
error NonEmptyExternalCallsForSubaccountOrder()
RelayCalldataTooLong
error RelayCalldataTooLong(uint256 calldataLength)
RelayEmptyBatch
error RelayEmptyBatch()
SubaccountApprovalDeadlinePassed
error SubaccountApprovalDeadlinePassed(uint256 currentTimestamp, uint256 deadline)
Unauthorized
error Unauthorized(address msgSender, string role)
UnexpectedRelayFeeToken
error UnexpectedRelayFeeToken(address feeToken, address expectedFeeToken)
UnsupportedRelayFeeToken
error UnsupportedRelayFeeToken(address feeToken, address expectedFeeToken)
creation bytecode
0x6101c06040523480156200001257600080fd5b50604051620063ef380380620063ef833981016040819052620000359162000447565b86868686868686836200004846620000b6565b15156080526200005846620003ee565b151560a05262000068466200040e565b151560c05260016000556001600160a01b0390811660e0529283166101005290821661012052948116610140529283166101605250811661018052166101a05250620004f295505050505050565b60008160011480620000c8575081600a145b80620000d45750816019145b80620000e0575081601e145b80620000ec5750816038145b80620000f85750816064145b8062000104575081606d145b80620001105750816089145b806200011c57508160b7145b806200012857508160e9145b806200013457508160fa145b806200014157508161013a145b806200014e575081610440145b806200015b57508161044d145b806200016857508161046f145b8062000175575081610504145b8062000182575081610505145b806200018f5750816106c1145b806200019c575081610725145b80620001a9575081610729145b80620001b65750816107f7145b80620001c3575081610ec0145b80620001d057508161106a145b80620001dd5750816118fe145b80620001ea575081612105145b80620001f75750816127d8145b8062000204575081614737145b8062000211575081614739145b806200021e5750816162ef145b806200022b57508161868b145b806200023857508161a1ef145b806200024557508161a455145b806200025257508161a4b1145b806200025f57508161a86a145b806200026c57508161e708145b806200027a57508162013882145b8062000288575081620138d4145b806200029657508162013e31145b80620002a457508162014a34145b80620002b25750816201b254145b80620002c05750816203ade0145b80620002ce57508162066eee145b80620002dc575081620a045c145b80620002ea57508162133e40145b80620002f8575081625c2359145b80620003065750816276adf1145b806200031457508162aa36a7145b806200032257508162aa37dc145b80620003315750816301bf4933145b8062000340575081630426e649145b806200034f5750816305535072145b806200035e57508163059d7131145b806200036d57508163075b3dcf145b806200037c575081630a0c71fd145b806200038b575081630d3b745e145b806200039a575081633b4c8eb9145b80620003a95750816352415249145b80620003b857508163bc1392a6145b80620003c85750816412dbe91402145b80620003d85750816414865d0f05145b15620003e657506001919050565b506000919050565b6000816101441480620003d857508161011803620003e657506001919050565b600081612b741480620003d8575081610ab503620003e657506001919050565b6001600160a01b03811681146200044457600080fd5b50565b600080600080600080600060e0888a0312156200046357600080fd5b875162000470816200042e565b602089015190975062000483816200042e565b604089015190965062000496816200042e565b6060890151909550620004a9816200042e565b6080890151909450620004bc816200042e565b60a0890151909350620004cf816200042e565b60c0890151909250620004e2816200042e565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615de7620006086000396000818161013301528181611b290152611b8e0152600081816102b70152818161068401528181610e1801528181611eeb015261260401526000818161022f0152818161065c015281816108a1015281816108ef01528181610da701528181610df001526125e2015260008181610318015281816118e8015261277501526000818161029001526109320152600081816102de01528181610f53015281816114a201526116b80152600081816102690152818161099001528181610a3301528181611daf0152611f0c015260006127f1015260006127a80152600061283a0152615de76000f3fe608060405234801561001057600080fd5b50600436106100db5760003560e01c80631db61b54146100e0578063273c3072146100fb5780632b1d52821461010e5780632e944bd61461012e5780632f7801f4146101625780634131450814610182578063492b20a7146101b0578063496747d5146101c557806355cacc1b146101e5578063660d0d671461022a5780637b5a987b146102515780637dc0d1d01461026457806393845e461461028b5780639ff78c30146102b2578063b5848305146102d9578063c6a4c20514610300578063f887ea4014610313575b600080fd5b6100e861033a565b6040519081526020015b60405180910390f35b6100e861010936600461360f565b61035d565b61012161011c3660046136c8565b610421565b6040516100f29190613772565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b6040516100f291906137b6565b6100e86101703660046137ca565b60016020526000908152604090205481565b6040805180820190915260018152603160f81b6020909101526100e8600080516020615a1383398151915281565b6101c36101be3660046137e7565b6105fc565b005b6100e86101d33660046137ca565b60026020526000908152604090205481565b60408051808201909152601881527723b6bc2130b9b2a3b2b630ba37a932b630bca937baba32b960411b6020909101526100e8600080516020615bd183398151915281565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b6101c361025f36600461384a565b610728565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b6101c361030e3660046138da565b6107d2565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b604051806080016040528060528152602001615aee605291398051906020012081565b600061036761083e565b8584600160005a905061037861089c565b60006103826108d0565b905061039081868686610966565b60006103a68c8c8c6103a18c613c45565b610aaa565b90506103b38c8a83610c36565b6103bd8a89610ca0565b6103ef8a8a6040516020016103d190613d02565b6040516020818303038152906040528051906020012060018f610da2565b6103fb8a896001610ea6565b96505061040981838661101f565b50505050506104186001600055565b95945050505050565b606061042b61083e565b8584600160005a905061043c61089c565b60006104466108d0565b905061045481868686610966565b604080518082018252600080825260208201529051633da520b560e21b815273196a9e3951469ee2bb0cd4e5a66824fac52fed9c9063f69482d4906104a3908f908f908f908e906004016144ff565b602060405180830381865af41580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e49190614675565b8082526104f4908d908b90610c36565b60005b610501898061468e565b90508110156105515761053f8b6105188b8061468e565b84818110610528576105286146d7565b905060200281019061053a91906146ed565b610ca0565b8061054981614724565b9150506104f7565b5061055f604089018961468e565b905061056e60208a018a61473d565b905061057a8a8061468e565b610585929150614786565b61058f9190614786565b8160200181815250506105cd8a8a6040516020016105ac90613d02565b6040516020818303038152906040528051906020012084602001518f610da2565b6103fb8a6105db8a8061468e565b6105e860208d018d61473d565b6105f560408f018f61468e565b600161112f565b61060461083e565b82826000805a905061061461089c565b600061061e6108d0565b905061062c81868686610966565b600061063889886112a9565b9050610645898983610c36565b6040516331afcdf360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152808a1660448301528816606482015273ea21e33f3e70ab910728003f359893668381e8c79063c6bf37cc9060840160006040518083038186803b1580156106f057600080fd5b505af4158015610704573d6000803e3d6000fd5b505050505061071481838661101f565b50505050506107236001600055565b505050565b61073061083e565b8483600160005a905061074161089c565b600061074b6108d0565b905061075981868686610966565b60006107678b8b8b8a611320565b90506107748b8983610c36565b6107a6898960405160200161078890613d02565b6040516020818303038152906040528051906020012060018e610da2565b6107b08988611354565b506107bc81838661101f565b50505050506107cb6001600055565b5050505050565b6107da61083e565b8483600160005a90506107eb61089c565b60006107f56108d0565b905061080381868686610966565b60006108118b8b8b8a61150d565b905061081e8b8983610c36565b610832898960405160200161078890613d02565b6107b089886001611541565b6002600054036108955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b6108ce7f00000000000000000000000000000000000000000000000000000000000000006108c930611778565b611801565b565b60408051606081018252600080825260208201819052918101919091527f000000000000000000000000000000000000000000000000000000000000000060006109198261182c565b604080516060810182526001600160a01b0394851681527f000000000000000000000000000000000000000000000000000000000000000085166020820152939091169083015250919050565b6109708380614799565b610979906147af565b6040516331e999fd60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c7a667f4906109c590849060040161498d565b600060405180830381600087803b1580156109df57600080fd5b505af11580156109f3573d6000803e3d6000fd5b50610a0e9250610a09915050604086018661473d565b6118d9565b610a2583610a1f6020870187614a2b565b84611a3a565b610a3185858585611c41565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662ccf1556040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a8b57600080fd5b505af1158015610a9f573d6000803e3d6000fd5b505050505050505050565b600080610ab686612046565b9050600085604051602001610acb9190614a41565b6040516020818303038152906040528051906020012090506040518060e0016040528060b38152602001615bf160b3913960405180610100016040528060d68152602001615cdc60d69139604051602001610b27929190614acd565b6040516020818303038152906040528051906020012085610b4b8660000151612099565b610b588760200151612155565b87604001516008811115610b6e57610b6e61422b565b88606001516002811115610b8457610b8461422b565b89608001518a60a001518b60c001518c60e001518b8b604051602001610c139c9b9a999897969594939291909b8c526001600160a01b039a909a1660208c015260408b019890985260608a0196909652608089019490945260a0880192909252151560c0870152151560e086015215156101008501526101208401526101408301526101608201526101800190565b60405160208183030381529060405280519060200120925050505b949350505050565b6000610c41466121f2565b90506000610c4f828461229b565b9050610c8581610c6260c0880188614c41565b876040518060400160405280600481526020016318d85b1b60e21b8152506122ba565b610c93848660800135612378565b6107cb8560a001356123f8565b6001600160a01b038216610cb48280614c87565b610cc29060208101906137ca565b6001600160a01b031614610d0257610cda8180614c87565b610ce89060208101906137ca565b604051639cfea58360e01b815260040161088c91906137b6565b6000610d0e8280614c87565b610d1f9060408101906020016137ca565b6001600160a01b031614158015610d6257506001600160a01b038216610d458280614c87565b610d569060408101906020016137ca565b6001600160a01b031614155b15610d9e57610d718180614c87565b610d829060408101906020016137ca565b8260405163225cd96160e21b815260040161088c929190614c9d565b5050565b610dcf7f00000000000000000000000000000000000000000000000000000000000000006108c930612420565b610dd98582612461565b604051631bbb493d60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301528087166044830152851660648201526084810184905260a4810183905273ea21e33f3e70ab910728003f359893668381e8c79063ddda49e89060c40160006040518083038186803b158015610e9257600080fd5b505af4158015610a9f573d6000803e3d6000fd5b600080610eb16108d0565b60208101516040820151919250610ed6916001600160a01b03169060a0870135612668565b604084013515801590610f1e5750610efe610ef961014086016101208701614cb7565b6126be565b80610f1e5750610f1e610f1961014086016101208701614cb7565b6126f6565b15610f5157610f5185610f318680614c87565b610f429060c081019060a0016137ca565b60208401516040880135612736565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b29e7ea98686868015610fb357506000610f968980614c87565b610fa79060608101906040016137ca565b6001600160a01b031614155b6040518463ffffffff1660e01b8152600401610fd193929190614cd4565b6020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110149190614675565b9150505b9392505050565b600061102a336127a4565b159050600084604001516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161105f91906137b6565b602060405180830381865afa15801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190614675565b9050600082156110c557855160408701516110be91908736866128a4565b90506110fc565b6110cd612bdf565b9050818111156110f4578082604051639cd7629560e01b815260040161088c929190614e6f565b6110fc612bed565b6111068183614e7d565b91508115611127576040860151611127906001600160a01b03168584612668565b505050505050565b606060008361113e878a614786565b6111489190614786565b90508060000361116b576040516312f75a3d60e11b815260040160405180910390fd5b6000886001600160401b0381111561118557611185613975565b6040519080825280602002602001820160405280156111ae578160200160208202803683370190505b50905060005b89811015611219576111ea8c8c8c848181106111d2576111d26146d7565b90506020028101906111e491906146ed565b87610ea6565b8282815181106111fc576111fc6146d7565b60209081029190910101528061121181614724565b9150506111b4565b5060005b8781101561125a576112488c8a8a8481811061123b5761123b6146d7565b9050610100020187611541565b8061125281614724565b91505061121d565b5060005b8581101561129a576112888c88888481811061127c5761127c6146d7565b90506020020135611354565b8061129281614724565b91505061125e565b509a9950505050505050505050565b6000604051806060016040528060388152602001615ca46038913980519060200120826112d585612046565b604051602001611301939291909283526001600160a01b03919091166020830152604082015260600190565b6040516020818303038152906040528051906020012090505b92915050565b600061041885856040516020016113379190614a41565b604051602081830303815290604052805190602001208585612c19565b600061135e6108d0565b805160405163fdfc26f360e01b815291925060009173421e51d2e417a883cf7511ef60109e28b99e75af9163fdfc26f39161139e91908790600401614e90565b600060405180830381865af41580156113bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e39190810190615057565b905060006113f082515190565b6001600160a01b03160361141757604051631630779760e01b815260040160405180910390fd5b836001600160a01b031661142a82515190565b6001600160a01b03161461148c576040805163a35b150b60e01b81526001600160a01b03861660048201526024810191909152601760448201527630b1b1b7bab73a103337b91031b0b731b2b627b93232b960491b606482015260840161088c565b604051637489ec2360e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637489ec23906024015b600060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b5050505050505050565b600061041885856040516020016115249190614a41565b604051602081830303815290604052805190602001208585612c98565b600061154b6108d0565b805160405163fdfc26f360e01b815291925060009173421e51d2e417a883cf7511ef60109e28b99e75af9163fdfc26f39161158c9190883590600401614e90565b600060405180830381865af41580156115a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d19190810190615057565b905060006115de82515190565b6001600160a01b03160361160557604051631630779760e01b815260040160405180910390fd5b846001600160a01b031661161882515190565b6001600160a01b03161461167a576040805163a35b150b60e01b81526001600160a01b03871660048201526024810191909152601760448201527630b1b1b7bab73a103337b9103ab83230ba32a7b93232b960491b606482015260840161088c565b60e0840135156116ae576116ae82602001518560e0013584604001516001600160a01b03166126689092919063ffffffff16565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639077d9e2853560208701356040880135606089013560808a013560a08b013561170860e08d0160c08e0161518d565b898c801561172b5750600061171f8c516060015190565b6001600160a01b031614155b801561173a575060e08e013515155b6040518a63ffffffff1660e01b815260040161175e9998979695949392919061522c565b600060405180830381600087803b158015610a8b57600080fd5b60006040516020016117b69060208082526018908201527711d054d31154d4d7d191505515549157d11254d05093115160421b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038416908201526060015b604051602081830303815290604052805190602001209050919050565b61180b8282612cec565b15610d9e5760405163dd70e0c960e01b81526004810182905260240161088c565b6000816001600160a01b03166321f8a7216040516020016118649060208082526003908201526215d39560ea1b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161189891815260200190565b602060405180830381865afa1580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190615376565b60008190036118e6575050565b7f000000000000000000000000000000000000000000000000000000000000000060005b82811015611a34576000848483818110611926576119266146d7565b9050610100020180360381019061193d9190615393565b9050826001600160a01b031681602001516001600160a01b03161461197d57806020015183604051633c0ac19960e01b815260040161088c929190614c9d565b60e0810151815160208301516040808501516060860151608087015160a088015160c0890151945163d505accf60e01b81526001600160a01b03978816600482015295871660248701526044860193909352606485019190915260ff16608484015260a483015260c482015291169063d505accf9060e401600060405180830381600087803b158015611a0f57600080fd5b505af1925050508015611a20575060015b505080611a2c81614724565b91505061190a565b50505050565b611a47604083018361468e565b9050600003611a5557505050565b8015611a74576040516328f773e960e01b815260040160405180910390fd5b611a7e828061468e565b15905080611aa55750611a94602083018361468e565b9050611aa0838061468e565b905014155b15611ade57611ab4828061468e565b9050611ac3602084018461468e565b60405163ec7fd38560e01b815261088c939250600401614e6f565b60005b611aeb838061468e565b9050811015611b8357611b7184611b02858061468e565b84818110611b1257611b126146d7565b9050602002016020810190611b2791906137ca565b7f0000000000000000000000000000000000000000000000000000000000000000611b55602088018861468e565b86818110611b6557611b656146d7565b90506020020135612736565b80611b7b81614724565b915050611ae1565b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d59922b0611bc0604085018561468e565b611bcd606087018761468e565b611bda608089018961468e565b611be760a08b018b61468e565b6040518963ffffffff1660e01b8152600401611c0a9897969594939291906154af565b600060405180830381600087803b158015611c2457600080fd5b505af1158015611c38573d6000803e3d6000fd5b50505050505050565b611c4a336127a4565b8015611c73575083604001516001600160a01b0316611c67612d58565b6001600160a01b031614155b15611ca057611c80612d58565b8460400151604051630d0fcc0b60e01b815260040161088c929190614c9d565b611cad6060840184614799565b611cbb90604081019061468e565b159050611f8c578015611e9457600084600001516001600160a01b031663bd02d0f5604051602001611d2c9060208082526025908201527f4d41585f52454c41595f4645455f535741505f5553445f464f525f535542414360408201526410d3d5539560da1b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611d6091815260200190565b602060405180830381865afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190614675565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016635dcf7194611de16060880188614799565b611def9060208101906137ca565b6040518263ffffffff1660e01b8152600401611e0b91906137b6565b6040805180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190615500565b60200151611e5c6060870187614799565b60200135611e6a919061554e565b905081811115611e91578082604051631808e37f60e31b815260040161088c929190614e6f565b50505b611ece82611ea56060860186614799565b611eb39060208101906137ca565b6020870151611ec56060880188614799565b60200135612736565b73196a9e3951469ee2bb0cd4e5a66824fac52fed9c63e1d3aac1857f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611f386060890189614799565b6040518563ffffffff1660e01b8152600401611f579493929190615565565b60006040518083038186803b158015611f6f57600080fd5b505af4158015611f83573d6000803e3d6000fd5b50505050611a34565b60408401516001600160a01b0316611fa76060850185614799565b611fb59060208101906137ca565b6001600160a01b03160361200b57611fd06060840184614799565b60200135156120065761200682611fea6060860186614799565b611ff89060208101906137ca565b30611ec56060880188614799565b611a34565b6120186060840184614799565b6120269060208101906137ca565b84604001516040516374a488a760e11b815260040161088c929190614c9d565b60006120528280614799565b61205f6020840184614a2b565b61206c604085018561473d565b6120796060870187614799565b86608001358760a001356040516020016117e4979695949392919061566f565b60006040518060e0016040528060b38152602001615bf160b3913980519060200120826000015183602001518460400151856060015186608001518760a001518860c001516040516020016120ee919061573d565b60408051808303601f190181528282528051602091820120908301999099526001600160a01b03978816908201529486166060860152928516608085015290841660a0840152831660c083015290911660e0820152610100810191909152610120016117e4565b600060405180610100016040528060d68152602001615cdc60d6913980519060200120826000015183602001518460400151856060015186608001518760a001518860c001518960e001516040516020016117e499989796959493929190988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6000604051806080016040528060528152602001615aee605291398051602091820120604080518082018252601881527723b6bc2130b9b2a3b2b630ba37a932b630bca937baba32b960411b908401528051808201825260018152603160f81b90840152805192830191909152600080516020615bd183398151915290820152600080516020615a138339815191526060820152608081018390523060a082015260c0016117e4565b60405161190160f01b8152600281019290925260228201526042902090565b6000806122fd8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d6492505050565b909250905073ed2c07d8f92305fa60df1ada590943fb3aa1305a1932016123255750506107cb565b60008160048111156123395761233961422b565b1415806123585750836001600160a01b0316826001600160a01b031614155b15611c38578260405163151a7bff60e11b815260040161088c919061577c565b6001600160a01b03821660009081526001602052604090205481146123cd576001600160a01b038216600090815260016020526040908190205490516379e8311b60e11b815261088c91908390600401614e6f565b6123d8816001614786565b6001600160a01b0390921660009081526001602052604090209190915550565b8042111561241d57428160405163041f95d160e51b815260040161088c929190614e6f565b50565b60006040516020016117b6906020808252601b908201527a14d5509050d0d3d5539517d191505515549157d11254d050931151602a1b604082015260600190565b61246e60e0820182614c41565b905060000361247b575050565b600061248a60208301836137ca565b6001600160a01b0316036124b15760405163545e8f2b60e01b815260040160405180910390fd5b8060c001354211156124de57428160c001356040516313012da760e11b815260040161088c929190614e6f565b6001600160a01b03821660009081526002602052604090205460a0820135811461252357808260a00135604051633044992f60e01b815260040161088c929190614e6f565b61252e816001614786565b6001600160a01b038416600090815260026020526040812091909155612553466121f2565b9050600061256084612da9565b9050600061256e838361229b565b90506125b38161258160e0880188614c41565b89604051806040016040528060138152602001721cdd589858d8dbdd5b9d08185c1c1c9bdd985b606a1b8152506122ba565b604051630c62de5b60e11b815273ea21e33f3e70ab910728003f359893668381e8c7906318c5bcb690612630907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908b908b9060040161578f565b60006040518083038186803b15801561264857600080fd5b505af415801561265c573d6000803e3d6000fd5b50505050505050505050565b6107238363a9059cbb60e01b8484604051602401612687929190614e90565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612e53565b6000808260088111156126d3576126d361422b565b148061131a575060015b8260088111156126ef576126ef61422b565b1492915050565b6000600282600881111561270c5761270c61422b565b1480612729575060038260088111156127275761272761422b565b145b8061131a575060086126dd565b61273f82612f28565b6040516303704f0f60e31b81526001600160a01b03848116600483015285811660248301528381166044830152606482018390527f00000000000000000000000000000000000000000000000000000000000000001690631b827878906084016114d5565b60007f0000000000000000000000000000000000000000000000000000000000000000156127ef57506001600160a01b031673b16a1dbe755f992636705fdbb3a8678a657eb3ea1490565b7f00000000000000000000000000000000000000000000000000000000000000001561283857506001600160a01b03167342120a1417a091a52a8d4590e28fc6c0f61e56321490565b7f00000000000000000000000000000000000000000000000000000000000000001561288157506001600160a01b031673abcc9b596420a9e9172fd5938620e265a0f9df921490565b506001600160a01b031673cd565435e0d2109fefde337a66491541df0d14201490565b600080866001600160a01b03166321f8a7216040516020016128eb9060208082526011908201527052454c41595f4645455f4144445245535360781b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161291f91815260200190565b602060405180830381865afa15801561293c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129609190615376565b90506001600160a01b03811661298957604051631905d2ef60e21b815260040160405180910390fd5b6000876001600160a01b031663bd02d0f56040516020016129e69060208082526022908201527f47454c41544f5f52454c41595f4645455f4d554c5449504c4945525f4641435460408201526127a960f11b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612a1a91815260200190565b602060405180830381865afa158015612a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5b9190614675565b905080600003612a74575068327cb2734119d3b7a9601e1b5b6000886001600160a01b031663bd02d0f5604051602001612ac5906020808252601c908201527b11d153105513d7d49153105657d1915157d09054d157d05353d5539560221b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612af991815260200190565b602060405180830381865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190614675565b90506000612b46612f4f565b905060003a5a8a612b568b612fc6565b612b609087614786565b612b6a9190614786565b612b749190614e7d565b612b7e919061554e565b90506000612b95612b8f8385614786565b86613053565b905087811115612bbc578088604051639cd7629560e01b815260040161088c929190614e6f565b612bd06001600160a01b038c168783612668565b9b9a5050505050505050505050565b601f1936013590565b905090565b6108ce36604719013560601c612c01612bdf565b612c09612d58565b6001600160a01b0316919061306c565b60006040518060800160405280605781526020016159bc60579139805190602001208383612c4688612046565b6040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810185905260c001604051602081830303815290604052805190602001209050949350505050565b60006040518060e0016040528060bb8152602001615a3360bb9139604051602001612cc391906157c3565b6040516020818303038152906040528051906020012083612ce3846130bb565b612c4688612046565b604051633d70e7e560e11b8152600481018290526000906001600160a01b03841690637ae1cfca90602401602060405180830381865afa158015612d34573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110189190615861565b60331936013560601c90565b6000808251604103612d9a5760208301516040840151606085015160001a612d8e87828585613159565b94509450505050612da2565b506000905060025b9250929050565b60006040518060c0016040528060918152602001615b4060919139805160209182012090612dd9908401846137ca565b612de9604085016020860161518d565b8460400135856060013586608001358760a001358860c001356040516020016117e49897969594939291909788526001600160a01b0396909616602088015293151560408701526060860192909252608085015260a084015260c083015260e08201526101000190565b6000612ea8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166132139092919063ffffffff16565b9050805160001480612ec9575080806020019051810190612ec99190615861565b6107235760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161088c565b6001600160a01b03811661241d5760405163d551823d60e01b815260040160405180910390fd5b6000612f59613222565b612f635750600090565b606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be89190614675565b600061c350821115612fee5760405163584d674d60e11b81526004810183905260240161088c565b6000612ffb83600a61554e565b90506000602061300c85601f614786565b6130169190615894565b9050600061302582600361554e565b61020061303360028561599a565b61303d9190615894565b6130479190614786565b90506104188184614786565b6000611018838368327cb2734119d3b7a9601e1b613239565b8060000361307957505050565b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146130b1576107236001600160a01b0384168383612668565b6107238282613246565b60006040518060e0016040528060bb8152602001615a3360bb913980516020918201209083359084013560408501356060860135608087013560a088013561310960e08a0160c08b0161518d565b6040805160208101999099528801969096526060870194909452608086019290925260a085015260c084015260e083810191909152901515610100830152830135610120820152610140016117e4565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115613186575060009050600361320a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156131da573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166132035760006001925092505061320a565b9150600090505b94509492505050565b6060610c2e848460008561335c565b600061a4b1461480612be85750504662066eee1490565b6000610c2e848484613437565b804710156132965760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161088c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146132e3576040519150601f19603f3d011682016040523d82523d6000602084013e6132e8565b606091505b50509050806107235760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b606482015260840161088c565b6060824710156133bd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161088c565b600080866001600160a01b031685876040516133d991906159a9565b60006040518083038185875af1925050503d8060008114613416576040519150601f19603f3d011682016040523d82523d6000602084013e61341b565b606091505b509150915061342c87838387613521565b979650505050505050565b6000808060001985870985870292508281108382030391505080600003613471578382816134675761346761587e565b0492505050611018565b8084116134b85760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161088c565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60608315613590578251600003613589576001600160a01b0385163b6135895760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161088c565b5081610c2e565b610c2e83838151156135a55781518083602001fd5b8060405162461bcd60e51b815260040161088c919061577c565b600060e082840312156135d157600080fd5b50919050565b600061010082840312156135d157600080fd5b6001600160a01b038116811461241d57600080fd5b803561360a816135ea565b919050565b600080600080600060a0868803121561362757600080fd5b85356001600160401b038082111561363e57600080fd5b61364a89838a016135bf565b9650602088013591508082111561366057600080fd5b61366c89838a016135d7565b95506040880135915061367e826135ea565b909350606087013590613690826135ea565b909250608087013590808211156136a657600080fd5b5086016101e081890312156136ba57600080fd5b809150509295509295909350565b600080600080600060a086880312156136e057600080fd5b85356001600160401b03808211156136f757600080fd5b61370389838a016135bf565b9650602088013591508082111561371957600080fd5b61372589838a016135d7565b955060408801359150613737826135ea565b909350606087013590613749826135ea565b9092506080870135908082111561375f57600080fd5b508601606081890312156136ba57600080fd5b6020808252825182820181905260009190848201906040850190845b818110156137aa5783518352928401929184019160010161378e565b50909695505050505050565b6001600160a01b0391909116815260200190565b6000602082840312156137dc57600080fd5b8135611018816135ea565b6000806000606084860312156137fc57600080fd5b83356001600160401b0381111561381257600080fd5b61381e868287016135bf565b935050602084013561382f816135ea565b9150604084013561383f816135ea565b809150509250925092565b600080600080600060a0868803121561386257600080fd5b85356001600160401b038082111561387957600080fd5b61388589838a016135bf565b9650602088013591508082111561389b57600080fd5b506138a8888289016135d7565b94505060408601356138b9816135ea565b925060608601356138c9816135ea565b949793965091946080013592915050565b600080600080600061018086880312156138f357600080fd5b85356001600160401b038082111561390a57600080fd5b61391689838a016135bf565b9650602088013591508082111561392c57600080fd5b50613939888289016135d7565b945050604086013561394a816135ea565b9250606086013561395a816135ea565b915061396987608088016135d7565b90509295509295909350565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156139ad576139ad613975565b60405290565b60405161010081016001600160401b03811182821017156139ad576139ad613975565b604051606081016001600160401b03811182821017156139ad576139ad613975565b60405161016081016001600160401b03811182821017156139ad576139ad613975565b604051601f8201601f191681016001600160401b0381118282101715613a4357613a43613975565b604052919050565b60006001600160401b03821115613a6457613a64613975565b5060051b60200190565b600082601f830112613a7f57600080fd5b81356020613a94613a8f83613a4b565b613a1b565b82815260059290921b84018101918181019086841115613ab357600080fd5b8286015b84811015613ad7578035613aca816135ea565b8352918301918301613ab7565b509695505050505050565b600060e08284031215613af457600080fd5b613afc61398b565b9050613b07826135ff565b8152613b15602083016135ff565b6020820152613b26604083016135ff565b6040820152613b37606083016135ff565b6060820152613b48608083016135ff565b6080820152613b5960a083016135ff565b60a082015260c08201356001600160401b03811115613b7757600080fd5b613b8384828501613a6e565b60c08301525092915050565b60006101008284031215613ba257600080fd5b613baa6139b3565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e082015292915050565b6009811061241d57600080fd5b803561360a81613bfc565b6003811061241d57600080fd5b803561360a81613c14565b801515811461241d57600080fd5b803561360a81613c2c565b60006101e08236031215613c5857600080fd5b613c606139b3565b82356001600160401b03811115613c7657600080fd5b613c8236828601613ae2565b825250613c923660208501613b8f565b6020820152613ca46101208401613c09565b6040820152613cb66101408401613c21565b6060820152613cc86101608401613c3a565b6080820152613cda6101808401613c3a565b60a0820152613cec6101a08401613c3a565b60c08201526101c0929092013560e08301525090565b60208082526017908201527629aaa120a1a1a7aaa72a2fa7a92222a92fa0a1aa24a7a760491b604082015260600190565b60008235605e19833603018112613d4957600080fd5b90910192915050565b6000808335601e19843603018112613d6957600080fd5b83016020810192503590506001600160401b03811115613d8857600080fd5b8060051b3603821315612da257600080fd5b6001600160a01b03169052565b8183526000602080850194508260005b85811015613de5578135613dca816135ea565b6001600160a01b031687529582019590820190600101613db7565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e19843603018112613e3057600080fd5b83016020810192503590506001600160401b03811115613e4f57600080fd5b803603821315612da257600080fd5b81835260006020808501808196508560051b810191508460005b87811015613eae578284038952613e8f8288613e19565b613e9a868284613df0565b9a87019a9550505090840190600101613e78565b5091979650505050505050565b6000823560be19833603018112613d4957600080fd5b81835260006001600160fb1b03831115613eea57600080fd5b8260051b80836020870137939093016020019392505050565b6000613f0f8283613d52565b60c08552613f2160c086018284613da7565b915050613f316020840184613d52565b8583036020870152613f44838284613ed1565b92505050613f556040840184613d52565b8583036040870152613f68838284613da7565b92505050613f796060840184613d52565b8583036060870152613f8c838284613e5e565b92505050613f9d6080840184613d52565b8583036080870152613fb0838284613da7565b92505050613fc160a0840184613d52565b85830360a0870152613fd4838284613da7565b9695505050505050565b6000808335601e19843603018112613ff557600080fd5b83016020810192503590506001600160401b0381111561401457600080fd5b8060081b3603821315612da257600080fd5b803560ff8116811461360a57600080fd5b8035614042816135ea565b6001600160a01b03908116835260208201359061405e826135ea565b8082166020850152604083013560408501526060830135606085015260ff61408860808501614026565b16608085015260a083013560a085015260c083013560c085015260e083013591506140b2826135ea565b80821660e085015250505050565b81835260208301925060008160005b848110156140f5576140e18683614037565b6101009586019591909101906001016140cf565b5093949350505050565b6000813561410c816135ea565b6001600160a01b031683526020828101359084015261412e6040830183613d52565b60606040860152610418606086018284613da7565b60006101008235614153816135ea565b6001600160a01b03168452602083013561416c81613c2c565b80151560208601525060408301356040850152606083013560608501526080830135608085015260a083013560a085015260c083013560c08501526141b460e0840184613e19565b8260e0870152613fd48387018284613df0565b6000823560de19833603018112613d4957600080fd5b803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a081013560a083015260c081013560c083015260e081013560e08301525050565b634e487b7160e01b600052602160045260246000fd5b600981106142515761425161422b565b9052565b600381106142515761425161422b565b8183526000602080850194508260005b85811015613de55781358752828201358388015260408083013590880152606080830135908801526080808301359088015260a0808301359088015260c0808301356142c081613c2c565b15159088015260e082810135908801526101009687019690910190600101614275565b600060608084016142f48485613d52565b83875291829052608091828701600582901b88018401836000805b858110156144b1578b8403607f190185528235368890036101de19018112614335578283fd5b87016101e061434482806141c7565b8187528035614352816135ea565b6001600160a01b03908116928801929092526020918183013590614375826135ea565b16610200880152614388604082016135ff565b614396610220890182613d9a565b506143a28c82016135ff565b6143b0610240890182613d9a565b506143bc8b82016135ff565b6143ca610260890182613d9a565b506143d760a082016135ff565b6143e5610280890182613d9a565b506143f360c0820182613d52565b915060e06102a089015261440c6102c089018383613da7565b91505061441d8288018385016141dd565b61012061442b818501613c09565b614437828a0182614241565b5050610140614447818501613c21565b614453828a0182614255565b5050610160614463818501613c3a565b151590880152610180614477848201613c3a565b1515908801526101a061448b848201613c3a565b1515908801526101c092830135929096019190915294850194929092019160010161430f565b5050506144c16020890189613fde565b9650945088810360208a01526144d8818787614265565b955050505050506144ec6040840184613d52565b8583036040870152613fd4838284613ed1565b60808152600061450f8687613d33565b60e060808401526145208182613d52565b60606101608601526145376101c086018284613da7565b9150506145476020830183613d52565b61015f198087850301610180880152614561848385613da7565b93506145706040860186613d52565b9550925080878503016101a0880152505061458c828483613e5e565b9250505061459d6020880188613ebb565b607f19808584030160a08601526145b48383613f03565b92506145c360408a018a613fde565b9250818685030160c08701526145da8484836140c0565b9350506145ea60608a018a613d33565b9150808584030160e086015261460083836140ff565b9250608089013561010086015260a089013561012086015261462560c08a018a613e19565b9250818685030161014087015261463d848483613df0565b935050505082810360208401526146548187614143565b90506146636040840186613d9a565b828103606084015261342c81856142e3565b60006020828403121561468757600080fd5b5051919050565b6000808335601e198436030181126146a557600080fd5b8301803591506001600160401b038211156146bf57600080fd5b6020019150600581901b3603821315612da257600080fd5b634e487b7160e01b600052603260045260246000fd5b600082356101de1983360301811261470457600080fd5b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6000600182016147365761473661470e565b5060010190565b6000808335601e1984360301811261475457600080fd5b8301803591506001600160401b0382111561476e57600080fd5b6020019150600881901b3603821315612da257600080fd5b8082018082111561131a5761131a61470e565b60008235605e1983360301811261470457600080fd5b6000606082360312156147c157600080fd5b6147c96139d6565b82356001600160401b03808211156147e057600080fd5b6147ec36838701613a6e565b835260209150818501358181111561480357600080fd5b61480f36828801613a6e565b83850152506040808601358281111561482757600080fd5b8601601f368183011261483957600080fd5b8135614847613a8f82613a4b565b81815260059190911b8301860190868101903683111561486657600080fd5b8785015b838110156148ef578035888111156148825760008081fd5b860136603f8201126148945760008081fd5b89810135898111156148a8576148a8613975565b6148b9818801601f19168c01613a1b565b818152368a8385010111156148ce5760008081fd5b818a84018d83013760009181018c019190915284525091880191880161486a565b50948801949094525094979650505050505050565b600081518084526020808501945080840160005b83811015613de55781516001600160a01b031687529582019590820190600101614918565b60005b83811015614958578181015183820152602001614940565b50506000910152565b6000815180845261497981602086016020860161493d565b601f01601f19169290920160200192915050565b6000602080835283516060828501526149a96080850182614904565b905081850151601f19808684030160408701526149c68383614904565b60408801518782038301606089015280518083529194508501925084840190600581901b8501860160005b82811015614a1d5784878303018452614a0b828751614961565b958801959388019391506001016149f1565b509998505050505050505050565b6000823560be1983360301811261470457600080fd5b6020815260008235614a52816135ea565b6001600160a01b0316602083810191909152614a6f908401613c3a565b8015156040840152506040830135606083015260608301356080830152608083013560a083015260a083013560c083015260c083013560e0830152614ab760e0840184613e19565b6101008481015261041861012085018284613df0565b7f4372656174654f726465722861646472657373206163636f756e742c4372656181527f74654f72646572416464726573736573206164647265737365732c437265617460208201527f654f726465724e756d62657273206e756d626572732c75696e74323536206f7260408201527f646572547970652c75696e74323536206465637265617365506f736974696f6e60608201527f53776170547970652c626f6f6c2069734c6f6e672c626f6f6c2073686f756c6460808201527f556e777261704e6174697665546f6b656e2c626f6f6c206175746f43616e636560a08201527f6c2c6279746573333220726566657272616c436f64652c62797465733332207260c08201527f656c6179506172616d732c62797465733332207375626163636f756e7441707060e082015265726f76616c2960d01b61010082015260006101068451614c21818386016020890161493d565b845190840190614c37818484016020890161493d565b0101949350505050565b6000808335601e19843603018112614c5857600080fd5b8301803591506001600160401b03821115614c7257600080fd5b602001915036819003821315612da257600080fd5b6000823560de1983360301811261470457600080fd5b6001600160a01b0392831681529116602082015260400190565b600060208284031215614cc957600080fd5b813561101881613bfc565b6001600160a01b03848116825260606020830152600090614cf585806141c7565b6101e08060608601528135614d09816135ea565b83166102408601526020820135614d1f816135ea565b8316610260860152614d33604083016135ff565b9250614d43610280860184613d9a565b614d4f606083016135ff565b9250614d5f6102a0860184613d9a565b614d6b608083016135ff565b9250614d7b6102c0860184613d9a565b614d8760a083016135ff565b9250614d976102e0860184613d9a565b614da460c0830183613d52565b9350915060e0610300860152614dbf61032086018484613da7565b9250614dd160808601602089016141dd565b614dde6101208801613c09565b9150610180614def81870184614241565b614dfc6101408901613c21565b92506101a0614e0d81880185614255565b614e1a6101608a01613c3a565b93506101c0614e2c8189018615159052565b614e37838b01613c3a565b801515898601529450614e4b828b01613c3a565b15156102008901528901356102208801525050505083151560408401529050610c2e565b918252602082015260400190565b8181038181111561131a5761131a61470e565b6001600160a01b03929092168252602082015260400190565b805161360a816135ea565b600082601f830112614ec557600080fd5b81516020614ed5613a8f83613a4b565b82815260059290921b84018101918181019086841115614ef457600080fd5b8286015b84811015613ad7578051614f0b816135ea565b8352918301918301614ef8565b805161360a81613bfc565b805161360a81613c14565b60006101608284031215614f4157600080fd5b614f496139f8565b9050614f5482614f18565b8152614f6260208301614f23565b602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e082015261010080830151818301525061012080830151818301525061014080830151818301525092915050565b600060808284031215614fdf57600080fd5b604051608081016001600160401b038111828210171561500157615001613975565b8060405250809150825161501481613c2c565b8152602083015161502481613c2c565b6020820152604083015161503781613c2c565b6040820152606083015161504a81613c2c565b6060919091015292915050565b60006020828403121561506957600080fd5b81516001600160401b038082111561508057600080fd5b90830190610200828603121561509557600080fd5b61509d6139d6565b8251828111156150ac57600080fd5b830161010081880312156150bf57600080fd5b6150c76139b3565b6150d082614ea9565b81526150de60208301614ea9565b60208201526150ef60408301614ea9565b604082015261510060608301614ea9565b606082015261511160808301614ea9565b608082015261512260a08301614ea9565b60a082015261513360c08301614ea9565b60c082015260e08201518481111561514a57600080fd5b61515689828501614eb4565b60e08301525082525061516c8660208501614f2e565b602082015261517f866101808501614fcd565b604082015295945050505050565b60006020828403121561519f57600080fd5b813561101881613c2c565b6151b5828251614241565b60208101516151c76020840182614255565b5060408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152506101408082015181840152505050565b60006101208b83528a60208401528960408401528860608401528760808401528660a084015285151560c08401528060e084015284516102008285015260018060a01b03915081815116610320850152816020820151166103408501526040810151915061529e610360850183613d9a565b606081015191506152b3610380850183613d9a565b608081015191506152c86103a0850183613d9a565b60a081015191506152dd6103c0850183613d9a565b60c081015191506152f26103e0850183613d9a565b60e081015191505061010080610400850152615312610420850183614904565b915060208601516153276101408601826151aa565b50604095860151805115156102a0860152602081015115156102c08601529586015115156102e08501526060909501511515610300840152921515939091019290925298975050505050505050565b60006020828403121561538857600080fd5b8151611018816135ea565b600061010082840312156153a657600080fd5b6153ae6139b3565b82356153b9816135ea565b815260208301356153c9816135ea565b8060208301525060408301356040820152606083013560608201526153f060808401614026565b608082015260a083013560a082015260c083013560c082015261541560e084016135ff565b60e08201529392505050565b8183526000602080850194508260005b85811015613de5578135615444816135ea565b6001600160a01b031687529582019590820190600101615431565b81835260006020808501808196508560051b810191508460005b87811015613eae5782840389526154908288613e19565b61549b868284613df0565b9a87019a9550505090840190600101615479565b6080815260006154c3608083018a8c615421565b82810360208401526154d681898b61545f565b905082810360408401526154eb818789615421565b90508281036060840152612bd0818587615421565b60006040828403121561551257600080fd5b604080519081016001600160401b038111828210171561553457615534613975565b604052825181526020928301519281019290925250919050565b808202811582820484141761131a5761131a61470e565b600060018060a01b03808751168352806020880151166020840152806040880151166040840152808616606084015280851660808401525060c060a0830152613fd460c08301846140ff565b60006155bd8283613d52565b60c085526155cf60c086018284613da7565b9150506155df6020840184613d52565b85830360208701526155f2838284613ed1565b925050506156036040840184613d52565b8583036040870152615616838284613da7565b925050506156276060840184613d52565b8583036060870152613f8c83828461545f565b81835260208301925060008160005b848110156140f55761565b8683614037565b610100958601959190910190600101615649565b60c08152600061567f898a613d52565b606060c085015261569561012085018284613da7565b9150506156a560208b018b613d52565b60bf19808685030160e08701526156bd848385613da7565b93506156cc60408e018e613d52565b935091508086850301610100870152506156e783838361545f565b9250505082810360208401526156fd818a6155b1565b9050828103604084015261571281888a61563a565b9050828103606084015261572681876140ff565b6080840195909552505060a0015295945050505050565b815160009082906020808601845b838110156157705781516001600160a01b03168552938201939082019060010161574b565b50929695505050505050565b6020815260006110186020830184614961565b6001600160a01b038581168252848116602083015283166040820152608060608201819052600090613fd490830184614143565b7f5570646174654f726465722861646472657373206163636f756e742c5570646181527f74654f72646572506172616d7320706172616d732c627974657333322072656c60208201527f6179506172616d732c62797465733332207375626163636f756e74417070726f60408201526376616c2960e01b60608201526000825161585481606485016020870161493d565b9190910160640192915050565b60006020828403121561587357600080fd5b815161101881613c2c565b634e487b7160e01b600052601260045260246000fd5b6000826158b157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156158f15781600019048211156158d7576158d761470e565b808516156158e457918102915b93841c93908002906158bb565b509250929050565b6000826159085750600161131a565b816159155750600061131a565b816001811461592b576002811461593557615951565b600191505061131a565b60ff8411156159465761594661470e565b50506001821b61131a565b5060208310610133831016604e8410600b8410161715615974575081810a61131a565b61597e83836158b6565b80600019048211156159925761599261470e565b029392505050565b600061101860ff8416836158f9565b6000825161470481846020870161493d56fe43616e63656c4f726465722861646472657373206163636f756e742c62797465733332206b65792c627974657333322072656c6179506172616d732c62797465733332207375626163636f756e74417070726f76616c29c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc65570646174654f72646572506172616d732862797465733332206b65792c75696e743235362073697a6544656c74615573642c75696e743235362061636365707461626c6550726963652c75696e74323536207472696767657250726963652c75696e74323536206d696e4f7574707574416d6f756e742c75696e743235362076616c696446726f6d54696d652c626f6f6c206175746f43616e63656c2c75696e7432353620657865637574696f6e466565496e63726561736529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374295375626163636f756e74417070726f76616c2861646472657373207375626163636f756e742c626f6f6c2073686f756c644164642c75696e74323536206578706972657341742c75696e74323536206d6178416c6c6f776564436f756e742c6279746573333220616374696f6e547970652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529a67027a3282d266c20feb683d815c5a6a6bae33f2281ea04d6c98fd80b5d47bf4372656174654f7264657241646472657373657328616464726573732072656365697665722c616464726573732063616e63656c6c6174696f6e52656365697665722c616464726573732063616c6c6261636b436f6e74726163742c6164647265737320756946656552656365697665722c61646472657373206d61726b65742c6164647265737320696e697469616c436f6c6c61746572616c546f6b656e2c616464726573735b5d2073776170506174682952656d6f76655375626163636f756e742861646472657373207375626163636f756e742c627974657333322072656c6179506172616d73294372656174654f726465724e756d626572732875696e743235362073697a6544656c74615573642c75696e7432353620696e697469616c436f6c6c61746572616c44656c7461416d6f756e742c75696e74323536207472696767657250726963652c75696e743235362061636365707461626c6550726963652c75696e7432353620657865637574696f6e4665652c75696e743235362063616c6c6261636b4761734c696d69742c75696e74323536206d696e4f7574707574416d6f756e742c75696e743235362076616c696446726f6d54696d6529a2646970667358221220ad8d4cfdcfa25660006779112f7f65af95132a95a752e3079de3255e6039a11564736f6c634300081200330000000000000000000000007452c558d45f8afc8c83dae62c3f8a5be19c71f6000000000000000000000000fd70de6b91282d8017aa4e741e9ae325cab992d8000000000000000000000000c8ee91a54287db53897056e12d9819156d3822fb000000000000000000000000918b60ba71badfada72ef3a6c6f71d0c41d4785c000000000000000000000000fc9bc118fddb89ff6ff720840446d73478de415300000000000000000000000031ef83a530fde1b38ee9a18093a333d8bbbc40d5000000000000000000000000389cef541397e872dc04421f166b5bc2e0b374a5