0 txs
264.7k calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
chain
viewfunction chain() view returns (string)
checkHedgeOrder
viewfunction checkHedgeOrder(tuple hedgeOrder, bytes32 orderHash, bytes orderSignature) view
decimals
purefunction decimals() pure returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
factoryAddress
viewfunction factoryAddress() view returns (address)
getOrderHash
viewfunction getOrderHash(uint256 nonce) view returns (bytes32)
getOrderHashLength
viewfunction getOrderHashLength() view returns (uint256)
getOrderHashs
viewfunction getOrderHashs() view returns (bytes32[] orderHashs_)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSupportAssetIDs
viewfunction getSupportAssetIDs() view returns (uint256[] assetIDs)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hedgeOrders
viewfunction hedgeOrders(bytes32) view returns (string chain, uint8 orderType, uint256 assetID, address redeemToken, uint256 nonce, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester, address receiver)
name
viewfunction name() view returns (string)
orderSigner
viewfunction orderSigner() view returns (address)
orderStatus
viewfunction orderStatus(bytes32) view returns (uint8)
owner
viewfunction owner() view returns (address)
PARTICIPANT_ROLE
viewfunction PARTICIPANT_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
redeemToken
viewfunction redeemToken() view returns (address)
redeemTxHashs
viewfunction redeemTxHashs(bytes32) view returns (bytes32)
requestTimestamps
viewfunction requestTimestamps(bytes32) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
addSupportAsset
nonpayablefunction addSupportAsset(uint256 assetID)
applyMint
nonpayablefunction applyMint(tuple hedgeOrder, bytes orderSignature)
applyRedeem
nonpayablefunction applyRedeem(tuple hedgeOrder, bytes orderSignature)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
confirmMint
nonpayablefunction confirmMint(bytes32 orderHash)
confirmRedeem
nonpayablefunction confirmRedeem(bytes32 orderHash, bytes32 txHash)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address owner, address orderSigner_, address factoryAddress_, address redeemToken_, string chain_)
pause
nonpayablefunction pause()
rejectMint
nonpayablefunction rejectMint(bytes32 orderHash)
rejectRedeem
nonpayablefunction rejectRedeem(bytes32 orderHash)
removeSupportAsset
nonpayablefunction removeSupportAsset(uint256 assetID)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateOrderSigner
nonpayablefunction updateOrderSigner(address orderSigner_)
updateRedeemToken
nonpayablefunction updateRedeemToken(address redeemToken_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AddAssetID
event AddAssetID(uint256 assetID)
ApplyMint
event ApplyMint((string chain, uint8 orderType, uint256 assetID, address redeemToken, uint256 nonce, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester, address receiver) hedgeOrder)
ApplyRedeem
event ApplyRedeem((string chain, uint8 orderType, uint256 assetID, address redeemToken, uint256 nonce, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester, address receiver) hedgeOrder)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
ConfirmMint
event ConfirmMint(bytes32 orderHash)
ConfirmRedeem
event ConfirmRedeem(bytes32 orderHash)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RejectMint
event RejectMint(bytes32 orderHash)
RejectRedeem
event RejectRedeem(bytes32 orderHash)
RemoveAssetID
event RemoveAssetID(uint256 assetID)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
UpdateOrderSigner
event UpdateOrderSigner(address oldOrderSigner, address orderSigner)
UpdateRedeemToken
event UpdateRedeemToken(address oldRedeemToken, address redeemToken)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100c257306080525f5160206140575f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b604051613f9090816100c782396080518181816117b301526118550152f35b6001600160401b0319166001600160401b039081175f5160206140575f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a714612a745750806305e0a9b514612a5857806306fdde0314612976578063095ea7b3146128f757806310a255ce1461267957806311acbd8e1461261857806318160ddd146125ef57806323b872dd14612517578063248a9ca3146124d8578063256ea645146123ed5780632af03d78146123005780632dff692d146122ca5780632f2ff15d146122805780632f310bad146122585780632fb3b36114611aee578063313ce56714611ad357806336568abe14611a8f5780633f4ba83a14611a11578063437f2e61146119e75780634f1ef2861461180757806352d1902d146117a157806353c34f02146116c25780635c975abb146116945780635f8a7abe1461165a5780636f6f99001461154657806370a0823114611502578063715018a61461149b5780637df6d891146110cc5780638456cb59146110595780638da5cb5b1461102457806391d1485414610fce57806395d89b4114610ee7578063966dae0e14610ebe578063998fccc514610d55578063a217fddf14610d39578063a2a14b2514610c2b578063a9059cbb14610bf9578063ad3cb1cc14610bb0578063b4c081b814610a55578063b9f0d68e14610a27578063c06f8e3714610905578063c5e0e0cf146107ea578063c763e5a1146107a7578063d547741f14610753578063dd62ed3e1461070b578063ddd6c72a146106e1578063e477a5711461062e578063ec944f6f1461029c578063f299f8b3146102735763f2fde38b14610244575f80fd5b346102705760203660031901126102705761026d610260612aeb565b6102686133d9565b613368565b80f35b80fd5b50346102705780600319360112610270576008546040516001600160a01b039091168152602090f35b5034610270576102ab36612bd4565b91906102b56135c4565b6102bd613868565b6103116101008301936102e26102d286612e22565b6001600160a01b031633146131ec565b6040516020810190610306816102f88885613238565b03601f198101835282612b62565b519020928385612e36565b6020820135600381101561062a57600161032b9114612d8d565b600954604080516373bacc5b60e01b815290840135600482015290602090829060249082906001600160a01b03165afa9081156105035785916105fb575b5060405163959b13d960e01b81526001600160a01b03919091169390602081600481885afa90811561058c5786916105dc575b5061059757604051631b29fe5760e21b8152602081600481885afa90811561058c57869161055d575b501561050e57816103d9846104379461388f565b808652600360205260408620600160ff1982541617905585526004602052426040862055602061040882612e22565b604051636eb1769f60e11b81526001600160a01b03909116600482015230602482015292839081906044820190565b0381875afa9182156105035785926104a9575b508291610497917f10b811db1344781c85c6c7b8e902cc312074f1284e2f96f5d4cd57e0ac864bd89561048760a06104a397013580941015613325565b6104913092612e22565b90613a8e565b60405191829182613238565b0390a180f35b909291506020813d6020116104fb575b816104c660209383612b62565b810103126104f7575190917f10b811db1344781c85c6c7b8e902cc312074f1284e2f96f5d4cd57e0ac864bd861044a565b5f80fd5b3d91506104b9565b6040513d87823e3d90fd5b60405162461bcd60e51b815260206004820152602160248201527f617373657420746f6b656e2068617320666565206e6f7420636f6c6c656374656044820152601960fa1b6064820152608490fd5b61057f915060203d602011610585575b6105778183612b62565b8101906130f1565b5f6103c5565b503d61056d565b6040513d88823e3d90fd5b60405162461bcd60e51b815260206004820152601a60248201527f617373657420746f6b656e20697320726562616c616e63696e670000000000006044820152606490fd5b6105f5915060203d602011610585576105778183612b62565b5f61039c565b61061d915060203d602011610623575b6106158183612b62565b8101906131cd565b5f610369565b503d61060b565b8480fd5b5034610270578060031936011261027057805461064a81613148565b6106576040519182612b62565b81815261066382613148565b602082019290601f1901368437835b8181106106bd57505090604051928392602084019060208552518091526040840192915b8181106106a4575050500390f35b8251845285945060209384019390920191600101610696565b806106c9600192613b93565b90549060031b1c6106da828661315f565b5201610672565b50346102705760203660031901126102705760406020916004358152600483522054604051908152f35b503461027057604036600319011261027057610725612aeb565b610736610730612b01565b91613195565b9060018060a01b03165f52602052602060405f2054604051908152f35b5034610270576040366003190112610270576107a3600435610773612b01565b9061079e610799825f525f516020613efb5f395f51905f52602052600160405f20015490565b613633565b6137cc565b5080f35b50346102705780600319360112610270576107e66040516107d2816107cb81612c5f565b0382612b62565b604051918291602083526020830190612ac7565b0390f35b503461027057602036600319011261027057610804612aeb565b61080c6133d9565b600854906001600160a01b0390811690821681156108c057808214610882576001600160a01b03199092168117600855604080516001600160a01b0393841681529290911660208301527fd0eaca066dcad6475231b378a5902742964eff4c8a1f2d85a094fb173cf3edc29190819081016104a3565b60405162461bcd60e51b81526020600482015260166024820152756f726465725369676e6572206e6f74206368616e676560501b6044820152606490fd5b60405162461bcd60e51b815260206004820152601b60248201527f6f726465725369676e6572206973207a65726f206164647265737300000000006044820152606490fd5b50346102705760203660031901126102705761091f612aeb565b6109276133d9565b600754906001600160a01b0390811690821681156109e25780821461099d576001600160a01b03199092168117600755604080516001600160a01b0393841681529290911660208301527f20796ffdb9bb1dad9a8e0682228d91254a48f4968c6f5f69dc235bc6147637dd9190819081016104a3565b60405162461bcd60e51b815260206004820152601760248201527f72656465656d20746f6b656e206e6f74206368616e67650000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527f72656465656d20746f6b656e206973207a65726f2061646472657373000000006044820152606490fd5b5034610270576020366003190112610270576020610a46600435613b93565b90549060031b1c604051908152f35b50346102705760203660031901126102705760043581526002602052604081206040519082815490610a8682612c27565b8085529160018116908115610b885750600114610b4f575b5050610aaf82610b16940383612b62565b60ff6001820154169060028101549060018060a01b036003820154166004820154600583015460068401549160078501549360018060a01b0360088701541695600960018060a01b039101541696610b216040519b8c9b6101408d526101408d0190612ac7565b9960208c0190612cfe565b60408a01526060890152608088015260a087015260c086015260e08501526101008401526101208301520390f35b909350818152602081205b848210610b72575082016020019250610aaf82610a9e565b6001816020925483858801015201910190610b5a565b610b1696508592506020915092610aaf9360ff191682840152151560051b8201019450610a9e565b5034610270578060031936011261027057506107e6604051610bd3604082612b62565b60058152640352e302e360dc1b6020820152604051918291602083526020830190612ac7565b503461027057604036600319011261027057610c20610c16612aeb565b6024359033613506565b602060405160018152f35b503461027057610c3a36612bd4565b9091610c446135c4565b610c4c613868565b610c82610100820192610c616102d285612e22565b6040516020810190610c77816102f88785613238565b519020948584612e36565b6020810135600381101561062a577f79b9481c37cfb4815b51140f742cd134c8bf3f41556b9c04022eb74ed430892b936104a393610cc560026104979414612d8d565b610cd6610cd182612e22565b613195565b60018060a01b0330165f5260205260405f205491610cfb60a086013580941015613325565b610d05858261388f565b808852600360205260408820600160ff1982541617905587526004602052426040882055610d333091612e22565b30613a8e565b5034610270578060031936011261027057602090604051908152f35b503461027057602036600319011261027057600435610d726133d9565b610d8f610d8a825f52600160205260405f2054151590565b612d0b565b8082526003602052610db3600160ff604085205416610dad81612b58565b14612d4a565b80825260026020526040822060ff6001820154166003811015610eaa576001610ddc9114612d8d565b818352600360205260408320600260ff1982541617905560018060a01b036009541691602060028301546024604051809681936373bacc5b60e01b835260048301525afa928315610e9f577f84424a38089bbc6d3e1350ac43d1f6e27aa6a520c269cca98291f20dd0ae414993602093610e76928792610e80575b506008810154600590910154916001600160a01b03918216911661340c565b604051908152a180f35b610e98919250853d8711610623576106158183612b62565b905f610e57565b6040513d86823e3d90fd5b634e487b7160e01b84526021600452602484fd5b50346102705780600319360112610270576009546040516001600160a01b039091168152602090f35b503461027057806003193601126102705760405190805f516020613e7b5f395f51905f525490610f1682612c27565b8085529160018116908115610fa75750600114610f3e575b6107e6846107d281860382612b62565b5f516020613e7b5f395f51905f5281527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610f8d575090915081016020016107d282610f2e565b919260018160209254838588010152019101909291610f74565b60ff191660208087019190915292151560051b850190920192506107d29150839050610f2e565b5034610270576040366003190112610270576040610fea612b01565b9160043581525f516020613efb5f395f51905f52602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346102705780600319360112610270575f516020613e9b5f395f51905f52546040516001600160a01b039091168152602090f35b50346102705780600319360112610270576110726133d9565b61107a613868565b600160ff195f516020613f1b5f395f51905f525416175f516020613f1b5f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b50346104f75760203660031901126104f7576004356110e96133d9565b611101610d8a825f52600160205260405f2054151590565b805f52600360205261111f600160ff60405f205416610dad81612b58565b805f52600260205260405f2060ff60018201541660038110156114875760016111489114612d8d565b60018060a01b0360088201541660068201548115611474575f516020613ebb5f395f51905f5254908082018092116114605760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f935f516020613ebb5f395f51905f52558484525f516020613e5b5f395f51905f52825260408420818154019055604051908152a3815f52600360205260405f20600360ff1982541617905560018060a01b036009541690600281018054926040516373bacc5b60e01b8152846004820152602081602481855afa8015611330576020915f91611443575b5060405163187b0c3160e21b815260048101969096526001600160a01b03169491829060249082905afa908115611330575f91611424575b50604051636eb1769f60e11b81523060048201526001600160a01b039190911660248201819052939092602084604481855afa938415611330575f946113ef575b5060050192835480911061133b575b5050549054823b156104f75760445f92836040519586948593635be0a35560e01b8552600485015260248401525af180156113305761131a575b5060207ffe342118b30db7f9445876707e254f48f40847121ad55e6e6011e5634ab048af91604051908152a180f35b6113279192505f90612b62565b5f9060206112eb565b6040513d5f823e3d90fd5b60405163095ea7b360e01b60208083019182526001600160a01b03881660248401526044808401949094529282529091905f90611379606485612b62565b83519082865af15f513d826113d3575b50506112b1576113cc916113c760405163095ea7b360e01b60208201528760248201525f6044820152604481526113c1606482612b62565b82613ad2565b613ad2565b5f806112b1565b9091506113e75750813b15155b5f80611389565b6001146113e0565b9093506020813d60201161141c575b8161140b60209383612b62565b810103126104f757519260056112a2565b3d91506113fe565b61143d915060203d602011610623576106158183612b62565b5f611261565b61145a9150823d8411610623576106158183612b62565b5f611229565b634e487b7160e01b5f52601160045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b346104f7575f3660031901126104f7576114b36133d9565b5f516020613e9b5f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346104f75760203660031901126104f7576001600160a01b03611523612aeb565b165f525f516020613e5b5f395f51905f52602052602060405f2054604051908152f35b346104f75760203660031901126104f7576004356115626133d9565b600954604051631313084160e11b81526004810183905290602090829060249082906001600160a01b03165afa8015611330576115a6915f9161163b575b50613109565b6115bb815f52600660205260405f2054151590565b6115f6576020816115ec7fd40c7dd7ca4862165f47de6beb02e0fdb1d61ff12b99f2aec91b62fe9553f15393613cbe565b50604051908152a1005b60405162461bcd60e51b815260206004820152601860248201527f616c726561647920636f6e7461696e73206173736574494400000000000000006044820152606490fd5b611654915060203d602011610585576105778183612b62565b836115a0565b346104f7575f3660031901126104f75760206040517f938c45fe3baa5cbd047f2473358a27f57db22291e9af95379a15ad016886dfb78152f35b346104f7575f3660031901126104f757602060ff5f516020613f1b5f395f51905f5254166040519015158152f35b346104f75760203660031901126104f7576004356116de6133d9565b6116f6610d8a825f52600160205260405f2054151590565b805f526003602052611714600160ff60405f205416610dad81612b58565b805f52600260205260405f2060ff6001820154169160038310156114875761179860209261176560027f08598c58e7d4625272865a734dffcd03e88a72ac08aa94dea237d1a21c5b22169614612d8d565b5f8381526003855260409020805460ff19166002179055600881015460059190910154906001600160a01b03163061340c565b604051908152a1005b346104f7575f3660031901126104f7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117f85760206040515f516020613edb5f395f51905f528152f35b63703e46dd60e11b5f5260045ffd5b60403660031901126104f75761181b612aeb565b6024356001600160401b0381116104f757366023820112156104f75761184b903690602481600401359101612b9e565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156119c5575b506117f85761188d6133d9565b6040516352d1902d60e01b81526001600160a01b0383169290602081600481875afa5f9181611991575b506118cf5783634c9c8ce360e01b5f5260045260245ffd5b805f516020613edb5f395f51905f5285920361197f5750813b1561196d575f516020613edb5f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611955575f8083602061195395519101845af461194d613b2a565b91613ddc565b005b50503461195e57005b63b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b632a87526960e21b5f5260045260245ffd5b9091506020813d6020116119bd575b816119ad60209383612b62565b810103126104f7575190856118b7565b3d91506119a0565b5f516020613edb5f395f51905f52546001600160a01b03161415905083611880565b346104f75760203660031901126104f7576004355f52600a602052602060405f2054604051908152f35b346104f7575f3660031901126104f757611a296133d9565b5f516020613f1b5f395f51905f525460ff811615611a805760ff19165f516020613f1b5f395f51905f52557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b346104f75760403660031901126104f757611aa8612b01565b336001600160a01b03821603611ac457611953906004356137cc565b63334bd91960e11b5f5260045ffd5b346104f7575f3660031901126104f757602060405160088152f35b346104f75760a03660031901126104f757611b07612aeb565b611b0f612b01565b906044356001600160a01b038116908190036104f7576064356001600160a01b03811691908290036104f7576084356001600160401b0381116104f757366023820112156104f757611b6b903690602481600401359101612b9e565b915f516020613f3b5f395f51905f52549460ff8660401c1615956001600160401b03811680159081612250575b6001149081612246575b15908161223d575b5061222e5767ffffffffffffffff1981166001175f516020613f3b5f395f51905f525586612202575b50611bdc613c93565b611be4613c93565b611bed85613368565b611bf5613c93565b611bfd613173565b611c05613173565b90611c0e613c93565b611c16613c93565b8051906001600160401b038211611f3a57611c3e5f516020613e3b5f395f51905f5254612c27565b601f8111612193575b50602090601f831160011461211657611c7792915f918361210b575b50508160011b915f199060031b1c19161790565b5f516020613e3b5f395f51905f52555b8051906001600160401b038211611f3a57611caf5f516020613e7b5f395f51905f5254612c27565b601f811161209c575b50602090601f831160011461201f57611ce792915f91836120145750508160011b915f199060031b1c19161790565b5f516020613e7b5f395f51905f52555b611cff613c93565b611d07613c93565b611d0f613c93565b60ff195f516020613f1b5f395f51905f5254165f516020613f1b5f395f51905f52558215611fd8578115611f93576001600160a01b0316918215611f4e576001600160601b0360a01b60095416176009556001600160601b0360a01b60075416176007556001600160601b0360a01b60085416176008558051906001600160401b038211611f3a57611da2600b54612c27565b601f8111611ed7575b50602090601f8311600114611e50579180611ddf92611de795945f92611e455750508160011b915f199060031b1c19161790565b600b55613679565b50611dee57005b68ff0000000000000000195f516020613f3b5f395f51905f5254165f516020613f3b5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680611c63565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b818110611ebf5750916001939185611de797969410611ea7575b505050811b01600b55613679565b01515f1960f88460031b161c19169055858080611e99565b92936020600181928786015181550195019301611e7f565b600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9601f840160051c81019160208510611f30575b601f0160051c01905b818110611f255750611dab565b5f8155600101611f18565b9091508190611f0f565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152601960248201527f7a65726f206f72646572207369676e65722061646472657373000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f7a65726f2072656465656d20746f6b656e2061646472657373000000000000006044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152737a65726f20666163746f7279206164647265737360601b6044820152606490fd5b015190508980611c63565b90601f198316915f516020613e7b5f395f51905f525f52815f20925f5b818110612084575090846001959493921061206c575b505050811b015f516020613e7b5f395f51905f5255611cf7565b01515f1960f88460031b161c19169055888080612052565b9293602060018192878601518155019501930161203c565b5f516020613e7b5f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510612101575b601f0160051c01905b8181106120f65750611cb8565b5f81556001016120e9565b90915081906120e0565b015190508a80611c63565b90601f198316915f516020613e3b5f395f51905f525f52815f20925f5b81811061217b5750908460019594939210612163575b505050811b015f516020613e3b5f395f51905f5255611c87565b01515f1960f88460031b161c19169055898080612149565b92936020600181928786015181550195019301612133565b5f516020613e3b5f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c810191602085106121f8575b601f0160051c01905b8181106121ed5750611c47565b5f81556001016121e0565b90915081906121d7565b68ffffffffffffffffff191668010000000000000001175f516020613f3b5f395f51905f525586611bd3565b63f92ee8a960e01b5f5260045ffd5b90501588611baa565b303b159150611ba2565b889150611b98565b346104f7575f3660031901126104f7576007546040516001600160a01b039091168152602090f35b346104f75760403660031901126104f75761195360043561229f612b01565b906122c5610799825f525f516020613efb5f395f51905f52602052600160405f20015490565b613728565b346104f75760203660031901126104f7576004355f526003602052602060ff60405f205416604051906122fc81612b58565b8152f35b346104f7575f3660031901126104f75760055461233561231f82613148565b9161232d6040519384612b62565b808352613148565b6020820190601f19013682376005545f5b83518110156123a857818110156123945760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db08101546001919061238d828761315f565b5201612346565b634e487b7160e01b5f52603260045260245ffd5b505090604051918291602083019060208452518091526040830191905f5b8181106123d4575050500390f35b82518452859450602093840193909201916001016123c6565b346104f75760203660031901126104f7576004356124096133d9565b600954604051631313084160e11b81526004810183905290602090829060249082906001600160a01b03165afa80156113305761244c915f9161163b5750613109565b612461815f52600660205260405f2054151590565b15612493576020816115ec7fd353b91ef24b87233598a495783dabdd9d6b182c6cd964f6ecab24f70df6ea2b93613bbe565b60405162461bcd60e51b815260206004820152601860248201527f61737365744944206973206e6f7420737570706f7274656400000000000000006044820152606490fd5b346104f75760203660031901126104f757602061250f6004355f525f516020613efb5f395f51905f52602052600160405f20015490565b604051908152f35b346104f75760603660031901126104f757612530612aeb565b612538612b01565b6044359061254583613195565b335f9081526020919091526040902054925f198410612569575b610c209350613506565b8284106125d4576001600160a01b038116156125c15733156125ae57610c209361259282613195565b60018060a01b0333165f526020528360405f209103905561255f565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b346104f7575f3660031901126104f75760205f516020613ebb5f395f51905f5254604051908152f35b346104f75760603660031901126104f7576004356001600160401b0381116104f75761014060031982360301126104f757604435906001600160401b0382116104f75761266c611953923690600401612b2b565b9160243590600401612e36565b346104f75760403660031901126104f7576004356024356126986133d9565b6126b0610d8a835f52600160205260405f2054151590565b815f5260036020526126ce600160ff60405f205416610dad81612b58565b815f52600260205260405f209060ff60018301541660038110156114875760026126f89114612d8d565b825f52600360205260405f20600360ff1982541617905580155f146128e1575060038101546040516370a0823160e01b815230600482015291906001600160a01b0316602083602481845afa928315611330575f936128ad575b50600682015480931061286857600882015460059361277c9290916001600160a01b03169061340c565b015490301561285557305f525f516020613e5b5f395f51905f5260205260405f205482811061283a57905f837f7ad7174076b297a24f706a24c4f35617b4a2ac4b102f85e9f11654b46cd31512946020943084525f516020613e5b5f395f51905f528652036040832055805f516020613ebb5f395f51905f5254035f516020613ebb5f395f51905f52556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef843092a3604051908152a1005b905063391434e360e21b5f523060045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b60405162461bcd60e51b815260206004820152601760248201527f6e6f7420656e6f7567682072656465656d20746f6b656e0000000000000000006044820152606490fd5b9092506020813d6020116128d9575b816128c960209383612b62565b810103126104f757519184612752565b3d91506128bc565b90600591835f52600a60205260405f205561277c565b346104f75760403660031901126104f757612910612aeb565b6024359033156125c1576001600160a01b03169081156125ae5761293333613195565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346104f7575f3660031901126104f7576040515f5f516020613e3b5f395f51905f52546129a281612c27565b8084529060018116908115612a3457506001146129ca575b6107e6836107d281850382612b62565b5f516020613e3b5f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b808210612a1a575090915081016020016107d26129ba565b919260018160209254838588010152019101909291612a02565b60ff191660208086019190915291151560051b840190910191506107d290506129ba565b346104f7575f3660031901126104f75760205f54604051908152f35b346104f75760203660031901126104f7576004359063ffffffff60e01b82168092036104f757602091637965db0b60e01b8114908115612ab6575b5015158152f35b6301ffc9a760e01b14905083612aaf565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036104f757565b602435906001600160a01b03821682036104f757565b35906001600160a01b03821682036104f757565b9181601f840112156104f7578235916001600160401b0383116104f757602083818601950101116104f757565b6004111561148757565b90601f801991011681019081106001600160401b03821117611f3a57604052565b6001600160401b038111611f3a57601f01601f191660200190565b929192612baa82612b83565b91612bb86040519384612b62565b8294818452818301116104f7578281602093845f960137010152565b9060406003198301126104f7576004356001600160401b0381116104f75761014081840360031901126104f75760040191602435906001600160401b0382116104f757612c2391600401612b2b565b9091565b90600182811c92168015612c55575b6020831014612c4157565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612c36565b600b545f9291612c6e82612c27565b8082529160018116908115612ce25750600114612c89575050565b600b5f9081529293509091907f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db95b838310612cc8575060209250010190565b600181602092949394548385870101520191019190612cb7565b9050602093945060ff929192191683830152151560051b010190565b9060038210156114875752565b15612d1257565b60405162461bcd60e51b815260206004820152601060248201526f6f72646572206e6f742065786973747360801b6044820152606490fd5b15612d5157565b60405162461bcd60e51b81526020600482015260146024820152736f72646572206973206e6f742070656e64696e6760601b6044820152606490fd5b15612d9457565b60405162461bcd60e51b81526020600482015260146024820152730dee4c8cae440e8f2e0ca40dcdee840dac2e8c6d60631b6044820152606490fd5b903590601e19813603018212156104f757018035906001600160401b0382116104f7576020019181360383136104f757565b908060209392818452848401375f828201840152601f01601f1916010190565b356001600160a01b03811681036104f75790565b929192604051602081019060208252612e55816102f860408201612c5f565b519020612e836102f8612e688480612dd0565b92906040519283916020830195602087526040840191612e02565b519020036130ba57602081013560038110156104f75760018114613060575b600214612f9a575b60e001354211612f6b57612ec9815f52600160205260405f2054151590565b612f2f57612ee7612eed9360018060a01b0360085416933691612b9e565b9161344a565b15612ef457565b60405162461bcd60e51b81526020600482015260136024820152721cda59db985d1d5c99481b9bdd081d985b1a59606a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152736f7264657220616c72656164792065786973747360601b6044820152606490fd5b60405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606490fd5b6001600160a01b03612faf6101208301612e22565b161561301b576007546001600160a01b0390811690612fd060608401612e22565b1614612eaa5760405162461bcd60e51b815260206004820152601a60248201527f72656465656d20746f6b656e206e6f7420737570706f727465640000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f7265636569766572206973207a65726f206164647265737300000000000000006044820152606490fd5b61307960408301355f52600660205260405f2054151590565b612ea25760405162461bcd60e51b8152602060048201526015602482015274185cdcd95d1251081b9bdd081cdd5c1c1bdc9d1959605a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e0c6d0c2d2dc40dcdee840dac2e8c6d608b1b6044820152606490fd5b908160209103126104f7575180151581036104f75790565b1561311057565b60405162461bcd60e51b815260206004820152601060248201526f6173736574206e6f742065786973747360801b6044820152606490fd5b6001600160401b038111611f3a5760051b60200190565b80518210156123945760209160051b010190565b60405190613182604083612b62565b60048252635553534960e01b6020830152565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b908160209103126104f757516001600160a01b03811681036104f75790565b156131f357565b60405162461bcd60e51b815260206004820152601b60248201527f6d73672073656e646572206973206e6f742072657175657374657200000000006044820152606490fd5b602081528135601e19833603018112156104f75782016020813591016001600160401b0382116104f75781360381136104f757613282916101406020850152610160840191612e02565b9160208101359060038210156104f7576132a3610140926040850190612cfe565b6040810135606084015260018060a01b036132c060608301612b17565b166080840152608081013560a084015260a081013560c084015260c081013560e084015260e081013561010084015260018060a01b036133036101008301612b17565b1661012084015261331e61012060018060a01b039201612b17565b1691015290565b1561332c57565b60405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606490fd5b6001600160a01b031680156133c6575f516020613e9b5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f516020613e9b5f395f51905f52546001600160a01b031633036133f957565b63118cdaa760e01b5f523360045260245ffd5b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152613448916113c7606483612b62565b565b9190823b613485579061345c91613b59565b5061346681612b58565b15918261347257505090565b6001600160a01b03918216911614919050565b915f926102f86134bb85946040519283916020830195630b135d3f60e11b87526024840152604060448401526064830190612ac7565b51915afa6134c7613b2a565b816134f8575b816134d6575090565b80516020808301935090820191909103126104f75751630b135d3f60e11b1490565b9050602081511015906134cd565b6001600160a01b0316908115612855576001600160a01b031691821561147457815f525f516020613e5b5f395f51905f5260205260405f20548181106135ab57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f516020613e5b5f395f51905f5284520360405f2055845f525f516020613e5b5f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b335f9081527fccf616fcc782ae4975b4090604ebc6d6877b665e3ab61c33e0108a88b1f19746602052604090205460ff16156135fc57565b63e2517d3f60e01b5f52336004527f938c45fe3baa5cbd047f2473358a27f57db22291e9af95379a15ad016886dfb760245260445ffd5b5f8181525f516020613efb5f395f51905f526020908152604080832033845290915290205460ff16156136635750565b63e2517d3f60e01b5f523360045260245260445ffd5b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16613723576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b5f8181525f516020613efb5f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff166137c6575f8181525f516020613efb5f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f8181525f516020613efb5f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16156137c6575f8181525f516020613efb5f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60ff5f516020613f1b5f395f51905f52541661388057565b63d93c066560e01b5f5260045ffd5b805f52600260205260405f206138a58380612dd0565b906001600160401b038211611f3a576138be8354612c27565b601f8111613a49575b505f90601f83116001146139e5576138f592915f91836139da5750508160011b915f199060031b1c19161790565b81555b602083013560038110156104f7576139b36101206139d795600993600186019060ff801983541691161790556040810135600286015560018060a01b0360075416600386019060018060a01b03166001600160601b0360a01b8254161790556080810135600486015560a0810135600586015560c0810135600686015560e0810135600786015561398c6101008201612e22565b6008860180546001600160a01b0319166001600160a01b0390921691909117905501612e22565b910180546001600160a01b0319166001600160a01b03909216919091179055613d0e565b50565b013590505f80611c63565b601f19831691845f5260205f20925f5b818110613a315750908460019594939210613a18575b505050811b0181556138f8565b01355f19600384901b60f8161c191690555f8080613a0b565b919360206001819287870135815501950192016139f5565b835f5260205f20601f840160051c81019160208510613a84575b601f0160051c01905b818110613a7957506138c7565b5f8155600101613a6c565b9091508190613a63565b6040516323b872dd60e01b60208201526001600160a01b039283166024820152929091166044830152606480830193909352918152613448916113c7608483612b62565b905f602091828151910182855af115611330575f513d613b2157506001600160a01b0381163b155b613b015750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415613afa565b3d15613b54573d90613b3b82612b83565b91613b496040519384612b62565b82523d5f602084013e565b606090565b8151919060418303613b8957613b829250602082015190606060408401519301515f1a90613d5a565b9192909190565b50505f9160029190565b5f54811015612394575f805260205f2001905f90565b8054821015612394575f5260205f2001905f90565b5f8181526006602052604090205480156137c6575f198101818111611460576005545f1981019190821161146057818103613c45575b5050506005548015613c31575f1901613c0e816005613ba9565b8154905f199060031b1b191690556005555f5260066020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b613c7d613c56613c67936005613ba9565b90549060031b1c9283926005613ba9565b819391549060031b91821b915f19901b19161790565b90555f52600660205260405f20555f8080613bf4565b60ff5f516020613f3b5f395f51905f525460401c1615613caf57565b631afcd79f60e31b5f5260045ffd5b805f52600660205260405f2054155f1461372357600554600160401b811015611f3a57613cf7613c678260018594016005556005613ba9565b9055600554905f52600660205260405f2055600190565b805f52600160205260405f2054155f14613723575f54600160401b811015611f3a57613d44613c678260018594015f555f613ba9565b90555f54905f52600160205260405f2055600190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613dd1579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611330575f516001600160a01b03811615613dc757905f905f90565b505f906001905f90565b5050505f9160039190565b90613e005750805115613df157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580613e31575b613e11575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15613e0956fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220146f8926d8422d2edcd0ec2d50a2f1dab371a1a9ed7929807a4304699a4b8c3764736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00