0 txs
576 calls
constructor
No constructor.
functions
_allowedToken
viewfunction _allowedToken(address) view returns (bool)
_withdraw
viewfunction _withdraw(bytes32) view returns (address token, address beneficiary, uint256 amount, uint256 block_number, uint8 status)
checkDeposit
viewfunction checkDeposit(address) view returns (bool)
emergencyTimestamp
viewfunction emergencyTimestamp() view returns (uint256)
isMassExit
viewfunction isMassExit() view returns (bool)
massExitBlock
viewfunction massExitBlock() view returns (uint256 height, bytes32 blockRid)
networkId
viewfunction networkId() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
renounceOwnership
viewfunction renounceOwnership() view
tokenMinimumAmount
viewfunction tokenMinimumAmount(address) view returns (uint256)
validator
viewfunction validator() view returns (address)
withdrawFeePercent
viewfunction withdrawFeePercent() view returns (uint256)
withdrawFeeReceiver
viewfunction withdrawFeeReceiver() view returns (address)
withdrawOffset
viewfunction withdrawOffset() view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
allowToken
nonpayablefunction allowToken(address token)
deposit
nonpayablefunction deposit(address token, uint256 amount) returns (bool)
depositToAccountID
nonpayablefunction depositToAccountID(address token, uint256 amount, bytes32 accountID) returns (bool)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, address beneficiary)
fund
nonpayablefunction fund(address token, uint256 amount) returns (bool)
initialize
nonpayablefunction initialize(address _validator, uint256 _withdrawOffset, uint256 _withdrawFeePercent, address _withdrawFeeReceiver)
linkAccountID
nonpayablefunction linkAccountID(bytes32 accountID)
pause
nonpayablefunction pause()
pendingWithdraw
nonpayablefunction pendingWithdraw(bytes32 _hash)
postponeMassExit
nonpayablefunction postponeMassExit()
removeTokenMinimumAmount
nonpayablefunction removeTokenMinimumAmount(address token)
setBlockchainRid
nonpayablefunction setBlockchainRid(bytes32 rid)
setTokenMinimumAmount
nonpayablefunction setTokenMinimumAmount(address token, uint256 amount)
setWithdrawFeePercent
nonpayablefunction setWithdrawFeePercent(uint256 _withdrawFeePercent)
setWithdrawFeeReceiver
nonpayablefunction setWithdrawFeeReceiver(address _withdrawFeeReceiver)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
triggerMassExit
nonpayablefunction triggerMassExit(uint256 height, bytes32 blockRid)
unpause
nonpayablefunction unpause()
unpendingWithdraw
nonpayablefunction unpendingWithdraw(bytes32 _hash)
withdraw
nonpayablefunction withdraw(bytes32 _hash, address beneficiary)
withdrawRequest
nonpayablefunction withdrawRequest(bytes _event, tuple eventProof, bytes blockHeader, bytes[] sigs, address[] signers, tuple extraProof)
withdrawToPostchain
nonpayablefunction withdrawToPostchain(bytes32 _hash)
events
AllowToken
event AllowToken(address indexed token)
DepositedERC20
event DepositedERC20(address indexed sender, address indexed token, uint256 amount, bytes32 accountID)
FundedERC20
event FundedERC20(address indexed sender, address indexed token, uint256 amount)
Initialize
event Initialize(address indexed _validator, uint256 _withdrawOffset, uint256 _withdrawFeePercent, address _withdrawFeeReceiver)
Initialized
event Initialized(uint64 version)
LinkAccountID
event LinkAccountID(address indexed sender, bytes32 accountID, bool isContract)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PendingWithdraw
event PendingWithdraw(bytes32 indexed hash)
PostponeMassExit
event PostponeMassExit()
RemoveTokenMinimumAmount
event RemoveTokenMinimumAmount(address indexed token)
SetBlockchainRid
event SetBlockchainRid(bytes32 rid)
SetTokenMinimumAmount
event SetTokenMinimumAmount(address indexed token, uint256 amount)
SetWithdrawFeePercent
event SetWithdrawFeePercent(uint256 withdrawFeePercent)
SetWithdrawFeeReceiver
event SetWithdrawFeeReceiver(address withdrawFeeReceiver)
TriggerMassExit
event TriggerMassExit(uint256 indexed height, bytes32 indexed blockRid)
Unpaused
event Unpaused(address account)
UnpendingWithdraw
event UnpendingWithdraw(bytes32 indexed hash)
Withdrawal
event Withdrawal(address indexed beneficiary, address indexed token, uint256 value)
WithdrawalHash
event WithdrawalHash(bytes32 indexed hash)
WithdrawalInfo
event WithdrawalInfo(address beneficiary, address token, uint256 value, uint256 fee, bytes32 eventHash)
WithdrawalToPostchain
event WithdrawalToPostchain(bytes32 indexed hash)
WithdrawalToPostchainInfo
event WithdrawalToPostchainInfo(address beneficiary, address token, uint256 value, uint256 fee, bytes32 eventHash)
WithdrawRequest
event WithdrawRequest(address indexed beneficiary, address indexed token, uint256 value, uint256 height, bytes32 blockRid)
WithdrawRequestHash
event WithdrawRequestHash(bytes32 indexed hash)
WithdrawRequestInfo
event WithdrawRequestInfo(address beneficiary, address token, uint256 value, uint256 height, bytes32 blockRid, bytes32 eventHash)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x608060405234801561001057600080fd5b50613eca806100206000396000f3fe608060405234801561001057600080fd5b506004361061023c5760003560e01c8063715018a61161013b578063b4b460d0116100b8578063ce64b5671161007c578063ce64b56714610511578063cfdb8b7314610534578063e30c397814610547578063e7547ae21461054f578063f2fde38b1461056257600080fd5b8063b4b460d0146104af578063b53472ef146104b8578063bd62280f146104cb578063cbda1234146104de578063cd43203a146104f157600080fd5b80638da5cb5b116100ff5780638da5cb5b146104555780639025e64c1461045d5780639e3d87cd14610466578063a2f58f9d14610479578063adf75a691461048c57600080fd5b8063715018a61461040757806379ba50971461040f5780637b1837de146104175780638456cb591461042a578063860020c31461043257600080fd5b8063495ef705116101c957806360bc7e411161018d57806360bc7e41146103bd578063633e0160146103c65780636382d9ad146103d9578063662d3df1146103ec578063709d2d2b146103f457600080fd5b8063495ef7051461030a57806349877e63146103215780635ac451ad146103345780635c975abb1461034757806360657b211461035f57600080fd5b80633399bf43116102105780633399bf431461028f5780633a5381b5146102b15780633f4ba83a146102dc578063447cb896146102e457806347e7ef24146102f757600080fd5b8062be16e4146102415780631b258d50146102565780632e350fa214610269578063316a260e1461027c575b600080fd5b61025461024f36600461320c565b610575565b005b610254610264366004613243565b61064b565b610254610277366004613273565b610857565b61025461028a366004613273565b61094b565b60045461029c9060ff1681565b60405190151581526020015b60405180910390f35b6002546102c4906001600160a01b031681565b6040516001600160a01b0390911681526020016102a8565b61025461098b565b6102546102f2366004613273565b61099d565b61029c61030536600461328c565b6109e1565b610313600b5481565b6040519081526020016102a8565b61025461032f3660046132b8565b610b2c565b61029c6103423660046132d5565b610b82565b600080516020613e558339815191525460ff1661029c565b6103ac61036d366004613273565b6001602081905260009182526040909120805491810154600282015460038301546004909301546001600160a01b039485169490921692909160ff1685565b6040516102a8959493929190613320565b61031360075481565b6102546103d4366004613273565b610c87565b6102546103e7366004613374565b610d20565b610254610ef0565b610254610402366004613273565b610f6c565b61025461111b565b610254611182565b61029c61042536600461328c565b6111c7565b61025461125b565b61029c6104403660046132b8565b60006020819052908152604090205460ff1681565b6102c461132b565b61031360035481565b6102546104743660046133a2565b611360565b61025461048736600461328c565b61156e565b61029c61049a3660046132b8565b600e6020526000908152604090205460ff1681565b61031360085481565b6102546104c63660046132b8565b6115f5565b600c546102c4906001600160a01b031681565b6102546104ec366004613273565b61166f565b6103136104ff3660046132b8565b600d6020526000908152604090205481565b60055460065461051f919082565b604080519283526020830191909152016102a8565b6102546105423660046132b8565b61176d565b6102c4611856565b61025461055d366004613745565b61187f565b6102546105703660046132b8565b6118f4565b61057d611979565b60045460ff16156105e05760405162461bcd60e51b815260206004820152602260248201527f546f6b656e4272696467653a206d617373206578697420616c72656164792073604482015261195d60f21b60648201526084015b60405180910390fd5b6004805460ff1916600117905560408051808201909152828152602001819052600582905560068190556106176276a70042613850565b600855604051819083907fbfd56de04bde31b1e051244afb969cf6ecd804576002437e037d1de8e07ebed290600090a35050565b6106536119ab565b61065b6119dc565b6000828152600160208190526040909120908101546001600160a01b0383811691161461069a5760405162461bcd60e51b81526004016105d790613863565b43816003015411156106be5760405162461bcd60e51b81526004016105d7906138ab565b6001600482015460ff1660038111156106d9576106d961330a565b146106f65760405162461bcd60e51b81526004016105d7906138fe565b60048101805460ff1916600290811790915581018054600091829055600b54909190620f4240906107279084613951565b6107319190613968565b8354909150610753906001600160a01b03168561074e848661398a565b611a14565b8254600c5461076f916001600160a01b03908116911683611a14565b82546040518381526001600160a01b03918216918616907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a360405185907f38f76c86a704f7c0a875692bf96dbea94008143cce9d2cd7e03784351848d69890600090a28254604080516001600160a01b0380881682529092166020830152810183905260608101829052608081018690527fede94f1f99ae4f2c0f8fc28c3f2d07f7511341b8c96a38ac87f502cb0c2a14dd9060a00160405180910390a15050506108536001600080516020613e7583398151915255565b5050565b61085f611979565b8061087c5760405162461bcd60e51b81526004016105d79061399d565b600081815260016020526040812090600482015460ff1660038111156108a4576108a461330a565b1461090d5760405162461bcd60e51b815260206004820152603360248201527f546f6b656e4272696467653a207769746864726177207265717565737420737460448201527261747573206973206e6f742070656e64696e6760681b60648201526084016105d7565b60048101805460ff1916600117905560405182907f6ca1738604f788a8d98ee8e1ff159b3ed09bc6bfd738461a42adc29cba75d0d390600090a25050565b6040805182815233803b15156020830152825190927f106fd3887c16f41690c587ca2a7aada4f2ca4bed527dcff672ac2fe4cccdb225928290030190a250565b610993611979565b61099b611a3c565b565b6109a5611979565b600b8190556040518181527f9576eaf1afec105c9db7b96884f260ca77568691dcccb3a7bcb13a25f738ef1b906020015b60405180910390a150565b6001600160a01b038216600090815260208190526040812054839060ff16610a1b5760405162461bcd60e51b81526004016105d7906139df565b610a236119ab565b336000908152600e602052604090205460ff16610ad1576001600160a01b0384166000908152600d6020526040902054831015610ab65760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e4272696467653a20616d6f756e742062656c6f77206d696e696d7560448201526a1b481d1a1c995cda1bdb1960aa1b60648201526084016105d7565b336000908152600e60205260409020805460ff191660011790555b610adb8484611a96565b60408051848152600060208201526001600160a01b0386169133917fe8a89c6eaacfabbb12d24600aee8b6a71f28a4ccdf9b470f25fe2e6ae40c9e6591015b60405180910390a35060019392505050565b610b34611979565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f476cd4ee7078c0a6d44ced69edea6c93fb1bd59aa9ec27ae6b37439a7cf85046906020016109d6565b6001600160a01b038316600090815260208190526040812054849060ff16610bbc5760405162461bcd60e51b81526004016105d7906139df565b610bc46119ab565b333b610c2c5760405162461bcd60e51b815260206004820152603160248201527f546f6b656e4272696467653a206f6e6c7920636f6e74726163742063616e206360448201527030b636103a3434b990333ab731ba34b7b760791b60648201526084016105d7565b610c368585611a96565b60408051858152602081018590526001600160a01b0387169133917fe8a89c6eaacfabbb12d24600aee8b6a71f28a4ccdf9b470f25fe2e6ae40c9e65910160405180910390a3506001949350505050565b610c8f611979565b80610ceb5760405162461bcd60e51b815260206004820152602660248201527f546f6b656e4272696467653a20626c6f636b636861696e2072696420697320696044820152651b9d985b1a5960d21b60648201526084016105d7565b60098190556040518181527fc4597ce7b4ac4379ee010b7c4818ac208506ea6f6170d4ed5f6421246ca5ff80906020016109d6565b610d28611979565b60045460ff16610d4a5760405162461bcd60e51b81526004016105d790613a16565b6001600160a01b038216610d705760405162461bcd60e51b81526004016105d790613a62565b6001600160a01b038116610dda5760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e4272696467653a2062656e6566696369617279206164647265737360448201526a081a5cc81a5b9d985b1a5960aa1b60648201526084016105d7565b600854421015610e645760405162461bcd60e51b815260206004820152604960248201527f546f6b656e4272696467653a2063616e6e6f7420646f20656d657267656e637960448201527f207769746864726177616c20756e74696c2039302064617973206166746572206064820152681b585cdcc8195e1a5d60ba1b608482015260a4016105d7565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf9190613aa7565b90508015610eeb57610eeb6001600160a01b0384168383611aab565b505050565b610ef8611979565b60045460ff16610f1a5760405162461bcd60e51b81526004016105d790613a16565b6004805460ff19169055604080518082018252600080825260209091018190526005819055600681905590517f6707d3a0638d9952849411d464e7dfd5813e1cfe45e453534a8ac18ae4b239ac9190a1565b610f746119ab565b610f7c6119dc565b6000818152600160208190526040909120908101546001600160a01b03163314610fb85760405162461bcd60e51b81526004016105d790613863565b4381600301541115610fdc5760405162461bcd60e51b81526004016105d7906138ab565b6001600482015460ff166003811115610ff757610ff761330a565b146110145760405162461bcd60e51b81526004016105d7906138fe565b60048101805460ff19166003179055600281018054600091829055825460408051838152602081019490945291926001600160a01b039091169133917fe8a89c6eaacfabbb12d24600aee8b6a71f28a4ccdf9b470f25fe2e6ae40c9e65910160405180910390a360405183907f70f4ca61be1f1dda54071a142b4a25776fbb89dcfd77222b877519ed19912c4390600090a28154604080513381526001600160a01b039092166020830152810182905260006060820152608081018490527f8f000b754e1304426a28d643e0f7d5580ed7f42cb5be1b28f7f0863b134682df9060a00160405180910390a150506111186001600080516020613e7583398151915255565b50565b611123611979565b60405162461bcd60e51b815260206004820152602e60248201527f546f6b656e4272696467653a2072656e6f756e6365206f776e6572736869702060448201526d1a5cc81b9bdd08185b1b1bddd95960921b60648201526084016105d7565b338061118c611856565b6001600160a01b0316146111be5760405163118cdaa760e01b81526001600160a01b03821660048201526024016105d7565b61111881611b0a565b6001600160a01b038216600090815260208190526040812054839060ff166112015760405162461bcd60e51b81526004016105d7906139df565b611209611979565b61121e6001600160a01b038516333086611b42565b6040518381526001600160a01b0385169033907fe06b5ce8ac66d75c92d1fd592fea09f2b48fe3bc831994b5e41601fb11edbfd590602001610b1a565b60025460405163facd743b60e01b81523360048201526001600160a01b039091169063facd743b90602401602060405180830381865afa1580156112a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c79190613ac0565b6113235760405162461bcd60e51b815260206004820152602760248201527f546f6b656e4272696467653a2073656e646572206973206e6f7420612076616c60448201526634b230ba37b91760c91b60648201526084016105d7565b61099b611b81565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156113a65750825b905060008267ffffffffffffffff1660011480156113c35750303b155b9050811580156113d1575080155b156113ef5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561141957845460ff60401b1916600160401b1785555b6001600160a01b0389166114815760405162461bcd60e51b815260206004820152602960248201527f546f6b656e4272696467653a2076616c696461746f72206164647265737320696044820152681cc81a5b9d985b1a5960ba1b60648201526084016105d7565b61148a33611bca565b611492611bdb565b61149a611beb565b466003819055600280546001600160a01b038c81166001600160a01b0319928316811790935560078c9055600b8b9055600c8054918b16919092168117909155604080518c8152602081018c9052908101919091527fc3c5a2656123d24501b47b687c873515b973ed6b86ad0a07bc5543adab5dc2b79060600160405180910390a250831561156357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b611576611979565b6001600160a01b03821661159c5760405162461bcd60e51b81526004016105d790613a62565b6001600160a01b0382166000818152600d602052604090819020839055517f94266abe629f6b764d2bf1121c0938681e80ecc6e213b6e9b15498921c685140906115e99084815260200190565b60405180910390a25050565b6115fd611979565b6001600160a01b0381166116235760405162461bcd60e51b81526004016105d790613a62565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f14009112f2dcb15cad32dab6bf972d6d85286e4ae1178f27323ffe25359459e69190a250565b611677611979565b806116945760405162461bcd60e51b81526004016105d79061399d565b600081815260016020819052604090912090600482015460ff1660038111156116bf576116bf61330a565b146117325760405162461bcd60e51b815260206004820152603860248201527f546f6b656e4272696467653a207769746864726177207265717565737420737460448201527f61747573206973206e6f7420776974686472617761626c65000000000000000060648201526084016105d7565b60048101805460ff1916905560405182907f3b613bb6dd346209a4b09e0aed281283ca3b1072f096f58b22227abad9b2b1cc90600090a25050565b611775611979565b6001600160a01b03811661179b5760405162461bcd60e51b81526004016105d790613a62565b6001600160a01b0381166000908152600d60205260409020546118125760405162461bcd60e51b815260206004820152602960248201527f546f6b656e4272696467653a20746f6b656e206d696e696d756d206e6f7420636044820152681bdb999a59dd5c995960ba1b60648201526084016105d7565b6001600160a01b0381166000818152600d6020526040808220829055517f99159e25bd39e3139aabe769e60ff9a4a22ee2c959cc2c991512b9b3c2aaf1ef9190a250565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611350565b6118876119ab565b61188f6119dc565b60008061189f8787878787611bfb565b915091506118b38760000151898484611f3e565b87516000908152600a60205260409020805460ff1916911515919091179055506118ec90506001600080516020613e7583398151915255565b505050505050565b6118fc611979565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b038316908117825561194061132b565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361198261132b565b6001600160a01b03161461099b5760405163118cdaa760e01b81523360048201526024016105d7565b600080516020613e558339815191525460ff161561099b5760405163d93c066560e01b815260040160405180910390fd5b600080516020613e75833981519152805460011901611a0e57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b610eeb6001600160a01b0384168383611aab565b6001600080516020613e7583398151915255565b611a44612234565b600080516020613e55833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b0390911681526020016109d6565b6108536001600160a01b038316333084611b42565b6040516001600160a01b03838116602483015260448201839052610eeb91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612264565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319168155610853826122c7565b6040516001600160a01b038481166024830152838116604483015260648201839052611b7b9186918216906323b872dd90608401611ad8565b50505050565b611b896119ab565b600080516020613e55833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a7e565b611bd2612338565b61111881612381565b611be3612338565b61099b6123b3565b611bf3612338565b61099b6123d4565b6009546000908190611c5e5760405162461bcd60e51b815260206004820152602660248201527f546f6b656e4272696467653a20626c6f636b636861696e20726964206973206e6044820152651bdd081cd95d60d21b60648201526084016105d7565b86516000908152600a602052604090205460ff1615611cd05760405162461bcd60e51b815260206004820152602860248201527f546f6b656e4272696467653a206576656e7420686173682077617320616c726560448201526718591e481d5cd95960c21b60648201526084016105d7565b60208301518351611ce0906123dc565b14611d375760405162461bcd60e51b815260206004820152602160248201527f506f7374636861696e3a20696e76616c696420454946206578747261206461746044820152606160f81b60648201526084016105d7565b600080611d4760095489876124bb565b915091506000611d5c86600001516000612620565b60045490915060ff1615611df057600554831115611df05760405162461bcd60e51b815260206004820152604560248201527f546f6b656e4272696467653a2063616e6e6f742077697468647261772072657160448201527f7565737420616674657220746865206d617373206578697420626c6f636b2068606482015264195a59da1d60da1b608482015260a4016105d7565b6002546040516311c3b75760e31b81526001600160a01b0390911690638e1dbab890611e249085908c908c90600401613b4a565b602060405180830381865afa158015611e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e659190613ac0565b611ec15760405162461bcd60e51b815260206004820152602760248201527f546f6b656e4272696467653a20626c6f636b207369676e6174757265206973206044820152661a5b9d985b1a5960ca1b60648201526084016105d7565b611ed98a604001518b600001518c6020015184612685565b611f2f5760405162461bcd60e51b815260206004820152602160248201527f546f6b656e4272696467653a20696e76616c6964206d65726b6c652070726f6f6044820152603360f91b60648201526084016105d7565b50909890975095505050505050565b600084815260016020526040812081808080611f5a8a8a612731565b6001600160a01b0384166000908152602081905260409020549397509195509350915060ff16611f9c5760405162461bcd60e51b81526004016105d7906139df565b8060035414611ff75760405162461bcd60e51b815260206004820152602160248201527f546f6b656e4272696467653a20696e636f7272656374206e6574776f726b20696044820152601960fa1b60648201526084016105d7565b600082116120645760405162461bcd60e51b815260206004820152603460248201527f546f6b656e4272696467653a20696e76616c696420616d6f756e7420746f206d604482015273616b65207265717565737420776974686472617760601b60648201526084016105d7565b84546001600160a01b038086166001600160a01b031992831617875560018701805491861691909216179055600285018290556007546120a49043613850565b60038601556004850180546001919060ff19168280021790555060008a8152600160208190526040909120865481546001600160a01b039182166001600160a01b0319918216178355888401548385018054919093169116179055600280880154908201556003808801548183015560048089015490830180548a9560ff90931693919260ff199091169184908111156121405761214061330a565b02179055505060408051848152602081018b90529081018990526001600160a01b0380871692508516907ff0bb02488f15c60e34f91e814fef3fd3f49f7630242b389d2a7192515fa8a8279060600160405180910390a36040518a907feb15650251de7eed15f2d7c599f4ecb1aee977945b7578bfbd817ce7c1c22f2990600090a2604080516001600160a01b03808616825286166020820152908101839052606081018990526080810188905260a081018b90527fec69f72855f506682bc3e5ce4f549078a53accd719d8e5029fec163fafd351dd9060c00160405180910390a15050505060019150505b949350505050565b600080516020613e558339815191525460ff1661099b57604051638dfc202b60e01b815260040160405180910390fd5b60006122796001600160a01b038416836127cc565b9050805160001415801561229e57508080602001905181019061229c9190613ac0565b155b15610eeb57604051635274afe760e01b81526001600160a01b03841660048201526024016105d7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661099b57604051631afcd79f60e31b815260040160405180910390fd5b612389612338565b6001600160a01b0381166111be57604051631e4fbdf760e01b8152600060048201526024016105d7565b6123bb612338565b600080516020613e55833981519152805460ff19169055565b611a28612338565b600081516040146124395760405162461bcd60e51b815260206004820152602160248201527f486173683a2076616c7565206d757374206265203634206279746573206c6f6e6044820152606760f81b60648201526084016105d7565b6002600160a16042600460408760405160200161245b96959493929190613bd5565b60408051601f198184030181529082905261247591613c36565b602060405180830381855afa158015612492573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906124b59190613aa7565b92915050565b60008060006124c9856127e1565b805190915086146125265760405162461bcd60e51b815260206004820152602160248201527f506f7374636861696e3a20696e76616c696420626c6f636b636861696e2072696044820152601960fa1b60648201526084016105d7565b8060e001518460600151146125885760405162461bcd60e51b815260206004820152602260248201527f506f7374636861696e3a20696e76616c6964206578747261206461746120726f6044820152611bdd60f21b60648201526084016105d7565b6125af8460200151856040015186606001518760800151612b9a909392919063ffffffff16565b6126095760405162461bcd60e51b815260206004820152602560248201527f506f7374636861696e3a20696e76616c6964206578747261206d65726b6c6520604482015264383937b7b360d91b60648201526084016105d7565b8060a0015181602001519250925050935093915050565b60008060005b602081101561267d5761263a816008613951565b856126458387613850565b8151811061265557612655613c52565b01602001516001600160f81b031916901c91909117908061267581613c68565b915050612626565b509392505050565b6000831580612699575084516001901b8310155b156126a65750600061222c565b8360005b8651811015612725576001811b851660008190036126ec576126e5838984815181106126d8576126d8613c52565b6020026020010151612e4f565b9250612712565b61270f88838151811061270157612701613c52565b602002602001015184612e4f565b92505b508061271d81613c68565b9150506126aa565b50909114949350505050565b60008060008060008580602001905181019061274d9190613c81565b865160208801209091508781146127a65760405162461bcd60e51b815260206004820152601860248201527f506f7374636861696e3a20696e76616c6964206576656e74000000000000000060448201526064016105d7565b506040810151606082015160808301516020909301519199909850919650945092505050565b60606127da83836000612ed0565b9392505050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091526000828060200190518101906128389190613ce2565b905060006002600061284d8460000151612f6d565b61285a8560400151612f6d565b60405160200161286c93929190613d72565b60408051601f198184030181529082905261288691613c36565b602060405180830381855afa1580156128a3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906128c69190613aa7565b905060006002600084606001516128e08660800151612fb7565b6040516020016128f293929190613d72565b60408051601f198184030181529082905261290c91613c36565b602060405180830381855afa158015612929573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061294c9190613aa7565b90506000600260006129618660a00151612fb7565b8660c0015160405160200161297893929190613d72565b60408051601f198184030181529082905261299291613c36565b602060405180830381855afa1580156129af573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906129d29190613aa7565b905060006002600085856040516020016129ee93929190613d72565b60408051601f1981840301815290829052612a0891613c36565b602060405180830381855afa158015612a25573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612a489190613aa7565b9050600060026000848860e00151604051602001612a6893929190613d72565b60408051601f1981840301815290829052612a8291613c36565b602060405180830381855afa158015612a9f573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612ac29190613aa7565b90506000600260078484604051602001612ade93929190613d72565b60408051601f1981840301815290829052612af891613c36565b602060405180830381855afa158015612b15573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b389190613aa7565b905086602001518114612b8d5760405162461bcd60e51b815260206004820152601f60248201527f506f7374636861696e3a20696e76616c696420626c6f636b206865616465720060448201526064016105d7565b5094979650505050505050565b600084516001901b8310612bb05750600061222c565b84518490600090612bc39060019061398a565b905060005b81811015612d12576001811b86166000819003612c715760026000858b8581518110612bf657612bf6613c52565b6020026020010151604051602001612c1093929190613d72565b60408051601f1981840301815290829052612c2a91613c36565b602060405180830381855afa158015612c47573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612c6a9190613aa7565b9350612cff565b600260008a8481518110612c8757612c87613c52565b602002602001015186604051602001612ca293929190613d72565b60408051601f1981840301815290829052612cbc91613c36565b602060405180830381855afa158015612cd9573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612cfc9190613aa7565b93505b5080612d0a81613c68565b915050612bc8565b506001811b85166000819003612db45760026008848a8581518110612d3957612d39613c52565b6020026020010151604051602001612d5393929190613d72565b60408051601f1981840301815290829052612d6d91613c36565b602060405180830381855afa158015612d8a573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612dad9190613aa7565b9250612e42565b60026008898481518110612dca57612dca613c52565b602002602001015185604051602001612de593929190613d72565b60408051601f1981840301815290829052612dff91613c36565b602060405180830381855afa158015612e1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612e3f9190613aa7565b92505b5050909114949350505050565b600082158015612e5d575081155b15612e6a575060006124b5565b6000839003612e9d576040805160208101849052015b6040516020818303038152906040528051906020012090506124b5565b6000829003612eb757604080516020810185905201612e80565b6040805160208101859052908101839052606001612e80565b606081471015612ef55760405163cd78605960e01b81523060048201526024016105d7565b600080856001600160a01b03168486604051612f119190613c36565b60006040518083038185875af1925050503d8060008114612f4e576040519150601f19603f3d011682016040523d82523d6000602084013e612f53565b606091505b5091509150612f63868383613187565b9695505050505050565b604051600160f81b602082015260a160f81b6021820152601160f91b6022820152600160fa1b6023820152600160fd1b60248201526025810182905260009060029060450161245b565b60006001600883901c5b8015612fdc57612fd2600183613d97565b915060081c612fc1565b60008260ff1667ffffffffffffffff811115612ffa57612ffa6133ec565b6040519080825280601f01601f191660200182016040528015613024576020820181803683370190505b50859250905060015b8360ff168160ff161161309c5760ff83166001600160f81b031960f885901b16836130588488613db0565b60ff168151811061306b5761306b613c52565b60200101906001600160f81b031916908160001a9053505060089290921c918061309481613dc9565b91505061302d565b506000816000815181106130b2576130b2613c52565b60209101015160f81c608016111561315e576002600160a36130d5866003613d97565b60026130e2886001613d97565b6000876040516020016130fb9796959493929190613de8565b60408051601f198184030181529082905261311591613c36565b602060405180830381855afa158015613132573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906131559190613aa7565b95945050505050565b6002600160a361316e8684613d97565b600287866040516020016130fb96959493929190613bd5565b60608261319c57613197826131e3565b6127da565b81511580156131b357506001600160a01b0384163b155b156131dc57604051639996b31560e01b81526001600160a01b03851660048201526024016105d7565b50806127da565b8051156131f35780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000806040838503121561321f57600080fd5b50508035926020909101359150565b6001600160a01b038116811461111857600080fd5b6000806040838503121561325657600080fd5b8235915060208301356132688161322e565b809150509250929050565b60006020828403121561328557600080fd5b5035919050565b6000806040838503121561329f57600080fd5b82356132aa8161322e565b946020939093013593505050565b6000602082840312156132ca57600080fd5b81356127da8161322e565b6000806000606084860312156132ea57600080fd5b83356132f58161322e565b95602085013595506040909401359392505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03868116825285166020820152604081018490526060810183905260a081016004831061336457634e487b7160e01b600052602160045260246000fd5b8260808301529695505050505050565b6000806040838503121561338757600080fd5b82356133928161322e565b915060208301356132688161322e565b600080600080608085870312156133b857600080fd5b84356133c38161322e565b9350602085013592506040850135915060608501356133e18161322e565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613425576134256133ec565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613454576134546133ec565b604052919050565b600082601f83011261346d57600080fd5b813567ffffffffffffffff811115613487576134876133ec565b61349a601f8201601f191660200161342b565b8181528460208386010111156134af57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff8211156134e6576134e66133ec565b5060051b60200190565b600082601f83011261350157600080fd5b81356020613516613511836134cc565b61342b565b82815260059290921b8401810191818101908684111561353557600080fd5b8286015b848110156135505780358352918301918301613539565b509695505050505050565b60006060828403121561356d57600080fd5b6040516060810167ffffffffffffffff8282108183111715613591576135916133ec565b81604052829350843583526020850135602084015260408501359150808211156135ba57600080fd5b506135c7858286016134f0565b6040830152505092915050565b600082601f8301126135e557600080fd5b813560206135f5613511836134cc565b82815260059290921b8401810191818101908684111561361457600080fd5b8286015b8481101561355057803567ffffffffffffffff8111156136385760008081fd5b6136468986838b010161345c565b845250918301918301613618565b600082601f83011261366557600080fd5b81356020613675613511836134cc565b82815260059290921b8401810191818101908684111561369457600080fd5b8286015b848110156135505780356136ab8161322e565b8352918301918301613698565b600060a082840312156136ca57600080fd5b6136d2613402565b9050813567ffffffffffffffff808211156136ec57600080fd5b6136f88583860161345c565b8352602084013560208401526040840135604084015260608401356060840152608084013591508082111561372c57600080fd5b50613739848285016134f0565b60808301525092915050565b60008060008060008060c0878903121561375e57600080fd5b863567ffffffffffffffff8082111561377657600080fd5b6137828a838b0161345c565b9750602089013591508082111561379857600080fd5b6137a48a838b0161355b565b965060408901359150808211156137ba57600080fd5b6137c68a838b0161345c565b955060608901359150808211156137dc57600080fd5b6137e88a838b016135d4565b945060808901359150808211156137fe57600080fd5b61380a8a838b01613654565b935060a089013591508082111561382057600080fd5b5061382d89828a016136b8565b9150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b808201808211156124b5576124b561383a565b60208082526028908201527f546f6b656e4272696467653a206e6f2066756e6420666f72207468652062656e604082015267656669636961727960c01b606082015260800190565b60208082526033908201527f546f6b656e4272696467653a206e6f74206d617475726520656e6f75676820746040820152721bc81dda5d1a191c985dc81d1a1948199d5b99606a1b606082015260800190565b60208082526033908201527f546f6b656e4272696467653a2066756e642069732070656e64696e67206f72206040820152721dd85cc8185b1c9958591e4818db185a5b5959606a1b606082015260800190565b80820281158282048414176124b5576124b561383a565b60008261398557634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156124b5576124b561383a565b60208082526022908201527f546f6b656e4272696467653a206576656e74206861736820697320696e76616c6040820152611a5960f21b606082015260800190565b6020808252601c908201527f546f6b656e4272696467653a206e6f7420616c6c6f7720746f6b656e00000000604082015260600190565b6020808252602c908201527f546f6b656e4272696467653a206d617373206578697420776173206e6f74207460408201526b1c9a59d9d95c9959081e595d60a21b606082015260800190565b60208082526025908201527f546f6b656e4272696467653a20746f6b656e206164647265737320697320696e6040820152641d985b1a5960da1b606082015260800190565b600060208284031215613ab957600080fd5b5051919050565b600060208284031215613ad257600080fd5b815180151581146127da57600080fd5b60005b83811015613afd578181015183820152602001613ae5565b50506000910152565b600081518084526020808501945080840160005b83811015613b3f5781516001600160a01b031687529582019590820190600101613b1a565b509495945050505050565b600060608201858352602060608185015281865180845260808601915060808160051b870101935082880160005b82811015613bbe57878603607f1901845281518051808852613b9f81888a01898501613ae2565b601f01601f191696909601850195509284019290840190600101613b78565b50505050508281036040840152612f638185613b06565b600060ff60f81b808960f81b168352808860f81b166001840152808760f81b166002840152808660f81b166003840152808560f81b166004840152508251613c24816005850160208701613ae2565b91909101600501979650505050505050565b60008251613c48818460208701613ae2565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600060018201613c7a57613c7a61383a565b5060010190565b600060a08284031215613c9357600080fd5b613c9b613402565b82518152602083015160208201526040830151613cb78161322e565b60408201526060830151613cca8161322e565b60608201526080928301519281019290925250919050565b6000610100808385031215613cf657600080fd5b6040519081019067ffffffffffffffff82118183101715613d1957613d196133ec565b81604052835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a084015160a082015260c084015160c082015260e084015160e0820152809250505092915050565b60f89390931b6001600160f81b03191683526001830191909152602182015260410190565b60ff81811683821601908111156124b5576124b561383a565b60ff82811682821603908111156124b5576124b561383a565b600060ff821660ff8103613ddf57613ddf61383a565b60010192915050565b6001600160f81b031960f889811b8216835288811b8216600184015287811b8216600284015286811b8216600384015285811b8216600484015284901b1660058201528151600090613e41816006850160208701613ae2565b919091016006019897505050505050505056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122049723dbba1af365eb975ecad093d4fb7c30c28f43dc180979937e67bf41817af64736f6c63430008140033