0 txs
22.6k 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)
getSupportTokens
viewfunction getSupportTokens() view returns (address[] tokens)
getVaultRoute
viewfunction getVaultRoute(address requester) view returns (address)
getVaultRoutes
viewfunction getVaultRoutes() view returns (address[] requesters, address[] vaults)
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, address token, address vault)
MAX_MINT_DELAY
viewfunction MAX_MINT_DELAY() view returns (uint256)
MAX_REDEEM_DELAY
viewfunction MAX_REDEEM_DELAY() view returns (uint256)
mintPendingAmounts
viewfunction mintPendingAmounts(address) view returns (uint256)
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)
redeemPendingAmounts
viewfunction redeemPendingAmounts(address) view returns (uint256)
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)
vault
viewfunction vault() view returns (address)
vaultRoutes
viewfunction vaultRoutes(address) view returns (address)
addSupportAsset
nonpayablefunction addSupportAsset(uint256 assetID)
addSupportToken
nonpayablefunction addSupportToken(address token)
addVaultRoute
nonpayablefunction addVaultRoute(address requester, address vault_)
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)
removeSupportToken
nonpayablefunction removeSupportToken(address token)
removeVaultRoute
nonpayablefunction removeVaultRoute(address requester)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
rescueToken
nonpayablefunction rescueToken(address token)
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_)
updateVault
nonpayablefunction updateVault(address vault_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AddAssetID
event AddAssetID(uint256 assetID)
AddToken
event AddToken(address token)
AddVaultRoute
event AddVaultRoute(address requester, address vault)
ApplyMint
event ApplyMint((string chain, uint8 orderType, uint256 assetID, address redeemToken, uint256 nonce, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester, address receiver, address token, address vault) hedgeOrder)
ApplyRedeem
event ApplyRedeem((string chain, uint8 orderType, uint256 assetID, address redeemToken, uint256 nonce, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester, address receiver, address token, address vault) hedgeOrder)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
CancelMint
event CancelMint(bytes32 orderHash)
CancelRedeem
event CancelRedeem(bytes32 orderHash)
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)
RemoveToken
event RemoveToken(address token)
RemoveVaultRoute
event RemoveVaultRoute(address requester)
RescueToken
event RescueToken(address token, uint256 amount)
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)
UpdateVault
event UpdateVault(address oldVault, address vault)
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
0x60a080604052346100c257306080525f5160206151bd5f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b6040516150f690816100c78239608051818181611ff501526120970152f35b6001600160401b0319166001600160401b039081175f5160206151bd5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146136d45750806305e0a9b5146136b857806306fdde03146135d6578063081a1a50146135b9578063095ea7b31461353a57806310a255ce1461327a57806318160ddd146132515780631c68bf00146131985780631e3a915f1461308b57806323b872dd14612fb3578063248a9ca314612f74578063256ea64514612e895780632af03d7814612db05780632dff692d14612d7a5780632f2ff15d14612d305780632f310bad14612d085780632fb3b3611461259e578063313ce5671461258357806336568abe1461253f57806339cdfb2b1461249e5780633f4ba83a14612420578063437f2e61146123f65780634460d3cf146122695780634e60cd14146122295780634f1ef2861461204957806352d1902d14611fe357806353c34f0214611ec55780635c975abb14611e975780635f8a7abe14611e5d5780636f6f990014611d5357806370a0823114611d0f578063715018a614611ca857806371bbd15014611bd657806377c4accf14611b9e5780637d941f7914611b6e5780637df6d891146116ca5780638456cb59146116575780638da5cb5b1461162257806391d14854146115cc57806393d82de71461151157806395d89b411461142a578063966dae0e14611401578063998fccc5146112035780639c4c82aa146111ca578063a0a0036014611160578063a217fddf14611144578063a9059cbb14611112578063ad3cb1cc146110c9578063b4c081b814610f4a578063b9f0d68e14610f1c578063c06f8e3714610dfa578063c33bb25614610c95578063c5a5666414610c77578063c5e0e0cf14610b5c578063c763e5a114610b19578063d547741f14610ac5578063dd62ed3e14610a7d578063ddd6c72a14610a53578063e2769cfa1461098d578063e477a571146108da578063e7563f3f14610805578063ec2fe14a1461036a578063f299f8b314610341578063f2fde38b146103145763fbfa77cf146102e9575f80fd5b34610311578060031936011261031157600e546040516001600160a01b039091168152602090f35b80fd5b50346103115760203660031901126103115761033e61033161374b565b6103396142c7565b614256565b80f35b50346103115780600319360112610311576008546040516001600160a01b039091168152602090f35b5034610311576103793661397f565b91906103836143fb565b61038b61475b565b6103df6101008301936103b06103a086613cdf565b6001600160a01b031633146140a3565b60405160208101906103d4816103c688856140ef565b03601f19810183528261378b565b519020928385613cf3565b6020820135600481101590816107ec576103f881613975565b60018114918280156107f0575b61040e90613a54565b6107ec5761041b90613975565b1561074757600954604080516373bacc5b60e01b815290840135600482015290602090829060249082906001600160a01b03165afa90811561073c57859161070d575b5060405163959b13d960e01b81526001600160a01b039190911690602081600481855afa9081156106205786916106ee575b506106a957604051631b29fe5760e21b8152602081600481855afa90811561062057869161067a575b501561062b57905b6104cb8382614782565b808552600360205260408520600160ff198254161790558452600460205242604085205560a082013590610556602060018060a01b0383168088526012825260408820610519868254613c16565b905561052487613cdf565b604051636eb1769f60e11b81526001600160a01b03909116600482015230602482015292839190829081906044820190565b03915afa9081156106205786916105c2575b50917f51433b4a579ebe26ed2ca605218d3d56d316d7198fecfe7cf02ece121e58ca5b946105b0926105a0836105bc97961015614213565b6105aa3092613cdf565b906149e6565b604051918291826140ef565b0390a180f35b91939290506020823d602011610618575b816105e06020938361378b565b81010312610614579051919290917f51433b4a579ebe26ed2ca605218d3d56d316d7198fecfe7cf02ece121e58ca5b610568565b5f80fd5b3d91506105d3565b6040513d88823e3d90fd5b60405162461bcd60e51b815260206004820152602160248201527f617373657420746f6b656e2068617320666565206e6f7420636f6c6c656374656044820152601960fa1b6064820152608490fd5b61069c915060203d6020116106a2575b610694818361378b565b810190613b40565b5f6104b9565b503d61068a565b60405162461bcd60e51b815260206004820152601a60248201527f617373657420746f6b656e20697320726562616c616e63696e670000000000006044820152606490fd5b610707915060203d6020116106a257610694818361378b565b5f610490565b61072f915060203d602011610735575b610727818361378b565b810190613c6e565b5f61045e565b503d61071d565b6040513d87823e3d90fd5b6001600160a01b0361075c6101408401613cdf565b1690610160830161077f6001600160a01b0361077783613cdf565b161515613afc565b61079061078b86613cdf565b613c23565b906001600160a01b03906107a390613cdf565b6001600160a01b039092169116146104c15760405162461bcd60e51b815260206004820152600f60248201526e0ecc2ead8e840dcdee840dac2e8c6d608b1b6044820152606490fd5b8580fd5b5050856107fc82613975565b60038214610405565b50346103115760203660031901126103115761081f61374b565b6108276142c7565b600e54906001600160a01b03908116908216610844821515613afc565b8082146108a2576001600160a01b03199092168117600e55604080516001600160a01b0393841681529290911660208301527f4cc233b502e1e28f371b28114d4a8be87a93f330c18e3c339079fc498320fb8d9190819081016105bc565b60405162461bcd60e51b815260206004820152601060248201526f7661756c74206e6f74206368616e676560801b6044820152606490fd5b503461031157806003193601126103115780546108f681613b97565b610903604051918261378b565b81815261090f82613b97565b602082019290601f1901368437835b81811061096957505090604051928392602084019060208552518091526040840192915b818110610950575050500390f35b8251845285945060209384019390920191600101610942565b80610975600192614a9a565b90549060031b1c6109868286613bae565b520161091e565b5034610311576020366003190112610311576109a761374b565b6109af6142c7565b6001600160a01b03166109c3811515613ab8565b6109d8815f52600d60205260405f2054151590565b15610a1557602081610a0a7f4eb129c82dcd3eedb52df2b0e6fb4cfa41ac64ee9d63ff081acbb1877e85d79b93614d81565b50604051908152a180f35b60405162461bcd60e51b81526020600482015260166024820152751d1bdad95b881a5cc81b9bdd081cdd5c1c1bdc9d195960521b6044820152606490fd5b50346103115760203660031901126103115760406020916004358152600483522054604051908152f35b503461031157604036600319011261031157610a9761374b565b610aa8610aa2613761565b91613839565b9060018060a01b03165f52602052602060405f2054604051908152f35b503461031157604036600319011261031157610b15600435610ae5613761565b90610b10610b0b825f525f5160206150615f395f51905f52602052600160405f20015490565b61446a565b614603565b5080f35b5034610311578060031936011261031157610b58604051610b4481610b3d816138d6565b038261378b565b604051918291602083526020830190613727565b0390f35b503461031157602036600319011261031157610b7661374b565b610b7e6142c7565b600854906001600160a01b039081169082168115610c3257808214610bf4576001600160a01b03199092168117600855604080516001600160a01b0393841681529290911660208301527fd0eaca066dcad6475231b378a5902742964eff4c8a1f2d85a094fb173cf3edc29190819081016105bc565b60405162461bcd60e51b81526020600482015260166024820152756f726465725369676e6572206e6f74206368616e676560501b6044820152606490fd5b60405162461bcd60e51b815260206004820152601b60248201527f6f726465725369676e6572206973207a65726f206164647265737300000000006044820152606490fd5b5034610311578060031936011261031157602060405162093a808152f35b503461031157610ca43661397f565b9091610cae6143fb565b610cb661475b565b610cec610100820192610ccb6103a085613cdf565b6040516020810190610ce1816103c687856140ef565b519020948584613cf3565b60208101356004811015610df6577f73ffaa914260351efaba05b8fd31e1f8e94ed128d9fe9b14855e592c1ed34f41936105bc93610d3860026105b094610d3281613975565b14613a54565b610d49610d4482613cdf565b613839565b60018060a01b0330165f5260205260405f205491610d6e60a086013580941015614213565b610d788582614782565b808852600360205260408820600160ff1982541617905587526004602052426040882055308752601360205260408720610db3838254613c16565b90556001600160a01b03610dc960608601613cdf565b168752601360205260408720610de460c08601358254613c16565b9055610df03091613cdf565b306149e6565b8480fd5b503461031157602036600319011261031157610e1461374b565b610e1c6142c7565b600754906001600160a01b039081169082168115610ed757808214610e92576001600160a01b03199092168117600755604080516001600160a01b0393841681529290911660208301527f20796ffdb9bb1dad9a8e0682228d91254a48f4968c6f5f69dc235bc6147637dd9190819081016105bc565b60405162461bcd60e51b815260206004820152601760248201527f72656465656d20746f6b656e206e6f74206368616e67650000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527f72656465656d20746f6b656e206973207a65726f2061646472657373000000006044820152606490fd5b5034610311576020366003190112610311576020610f3b600435614a9a565b90549060031b1c604051908152f35b503461031157602036600319011261031157600435815260026020526040812060405182819390835490610f7d8261389e565b80855291600181169081156110a25750600114611065575b8361018086610fa68387038461378b565b600181015460028201546003830154600484015460058501546006860154600787015460088801546009890154600a8a0154600b909a01546040518c81529c8d9c60ff9b909b169b6001600160a01b039283169b9083169a938316999483169895979594909216929161101c91908e0190613727565b9a61102681613975565b60208d015260408c015260608b015260808a015260a089015260c088015260e08701526101008601526101208501526101408401526101608301520390f35b9150838252602082205b818310611086575050810160200181610fa6610f95565b602091935080600191548385890101520191019091849261106f565b60ff191660208681019190915292151560051b85019092019250839150610fa69050610f95565b503461031157806003193601126103115750610b586040516110ec60408261378b565b60058152640352e302e360dc1b6020820152604051918291602083526020830190613727565b50346103115760403660031901126103115761113961112f61374b565b602435903361433d565b602060405160018152f35b5034610311578060031936011261031157602090604051908152f35b5034610311576060366003190112610311576004356001600160401b0381116111c65761018060031982360301126111c657604435906001600160401b0382116111c2576111b561033e923690600401613871565b9160243590600401613cf3565b8280fd5b5080fd5b5034610311576020366003190112610311576020906040906001600160a01b036111f261374b565b168152601383522054604051908152f35b5034610311576020366003190112610311576004356112206142c7565b61123d611238825f52600160205260405f2054151590565b6139d2565b808252600360205260ff60408320541660058110156113ed5760016112629114613a11565b80825260026020526040822090600160ff8184016112978282541661128681613975565b8481149081156113d9575b50613a54565b8386526003602052604086206002831982541617905554166112b881613975565b0361139e5760018060a01b036009541690602060028401546024604051809581936373bacc5b60e01b835260048301525afa918215611393577f84424a38089bbc6d3e1350ac43d1f6e27aa6a520c269cca98291f20dd0ae41499360209361136c928791611376575b506001600160a01b0316905b6005810190815460018060a01b03841689526012875261135260408a20918254613a97565b9055600801549054916001600160a01b03909116906142fa565b604051908152a180f35b61138d9150853d871161073557610727818361378b565b5f611321565b6040513d86823e3d90fd5b60209061136c7f84424a38089bbc6d3e1350ac43d1f6e27aa6a520c269cca98291f20dd0ae41499360018060a01b03600a820154169061132d565b600391506113e681613975565b145f611291565b634e487b7160e01b83526021600452602483fd5b50346103115780600319360112610311576009546040516001600160a01b039091168152602090f35b503461031157806003193601126103115760405190805f516020614fe15f395f51905f5254906114598261389e565b80855291600181169081156114ea5750600114611481575b610b5884610b448186038261378b565b5f516020614fe15f395f51905f5281527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b8082106114d057509091508101602001610b4482611471565b9192600181602092548385880101520191019092916114b7565b60ff191660208087019190915292151560051b85019092019250610b449150839050611471565b503461031157806003193601126103115760105461152e81613be4565b9061153881613be4565b92805b82811061156c5761155e84610b58876040519384936040855260408501906137fd565b9083820360208501526137fd565b80611578600192614a82565b838060a01b0391549060031b1c166115908287613bae565b5261159a81614a82565b838060a01b0391549060031b1c168352600f602052818060a01b036040842054166115c58288613bae565b520161153b565b50346103115760403660031901126103115760406115e8613761565b9160043581525f5160206150615f395f51905f52602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346103115780600319360112610311575f5160206150015f395f51905f52546040516001600160a01b039091168152602090f35b50346103115780600319360112610311576116706142c7565b61167861475b565b600160ff195f5160206150815f395f51905f525416175f5160206150815f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b5034610614576020366003190112610614576004356116e76142c7565b6116ff611238825f52600160205260405f2054151590565b805f52600360205260ff60405f2054166005811015611b5a5760016117249114613a11565b805f52600260205260405f206001810161175660ff82541661174581613975565b600181149081156113d95750613a54565b600882015460068301546001600160a01b03909116918215611b47576001925f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020856117b460ff975f5160206150215f395f51905f5254613c16565b5f5160206150215f395f51905f52558484525f516020614fc15f395f51905f52825260408420818154019055604051908152a3845f52600360205260405f2060038319825416179055541661180881613975565b03611aca576009546002820180546040516373bacc5b60e01b8152600481018290529093926001600160a01b031690602081602481855afa801561199a576020915f91611aad575b5060405163187b0c3160e21b815260048101969096526001600160a01b03169491829060249082905afa90811561199a575f91611a8e575b50604051636eb1769f60e11b81523060048201526001600160a01b0391909116602482018190529092909190602084604481885afa93841561199a575f94611a59575b506005019283548091106119a5575b50548254823b156106145760445f92836040519586948593635be0a35560e01b8552600485015260248401525af1801561199a5761195d575b50916020917ffe342118b30db7f9445876707e254f48f40847121ad55e6e6011e5634ab048af93549085526012835261195160408620918254613a97565b9055604051908152a180f35b7ffe342118b30db7f9445876707e254f48f40847121ad55e6e6011e5634ab048af939194509161198f5f60209461378b565b5f9491935091611913565b6040513d5f823e3d90fd5b60405163095ea7b360e01b60208083019182526001600160a01b03861660248401526044808401949094529282529091905f906119e360648561378b565b83519082895af15f513d82611a3d575b50506118da57611a3790611a3160405163095ea7b360e01b60208201528560248201525f604482015260448152611a2b60648261378b565b87614a2a565b85614a2a565b5f6118da565b909150611a515750843b15155b5f806119f3565b600114611a4a565b9093506020813d602011611a86575b81611a756020938361378b565b8101031261061457519260056118cb565b3d9150611a68565b611aa7915060203d60201161073557610727818361378b565b5f611888565b611ac49150823d841161073557610727818361378b565b5f611850565b600a81018054600b830154600590930180547ffe342118b30db7f9445876707e254f48f40847121ad55e6e6011e5634ab048af95602095909493611b1b92916001600160a01b0390811691166142fa565b5490546001600160a01b03165f908152601284526040902080549091611b4091613a97565b905561136c565b63ec442f0560e01b5f525f60045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b34610614576020366003190112610614576020611b8c61078b61374b565b6040516001600160a01b039091168152f35b34610614576020366003190112610614576001600160a01b03611bbf61374b565b165f526012602052602060405f2054604051908152f35b3461061457602036600319011261061457611bef61374b565b611bf76142c7565b6001600160a01b039081165f818152600f602052604090205490911615611c6a576020817ff25aefc32b3c9def33df65eb3281ad00c9578c0b47953d8b8732f9a600390015925f52600f825260405f206001600160601b0360a01b8154169055611c6081614cd6565b50604051908152a1005b60405162461bcd60e51b81526020600482015260166024820152757661756c7420726f757465206e6f742065786973747360501b6044820152606490fd5b34610614575f36600319011261061457611cc06142c7565b5f5160206150015f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610614576020366003190112610614576001600160a01b03611d3061374b565b165f525f516020614fc15f395f51905f52602052602060405f2054604051908152f35b3461061457602036600319011261061457600435611d6f6142c7565b600954604051631313084160e11b81526004810183905290602090829060249082906001600160a01b03165afa801561199a57611db3915f91611e3e575b50613b58565b611dc8815f52600660205260405f2054151590565b611df957602081611c607fd40c7dd7ca4862165f47de6beb02e0fdb1d61ff12b99f2aec91b62fe9553f15393614b7b565b60405162461bcd60e51b815260206004820152601860248201527f616c726561647920636f6e7461696e73206173736574494400000000000000006044820152606490fd5b611e57915060203d6020116106a257610694818361378b565b83611dad565b34610614575f3660031901126106145760206040517f938c45fe3baa5cbd047f2473358a27f57db22291e9af95379a15ad016886dfb78152f35b34610614575f36600319011261061457602060ff5f5160206150815f395f51905f5254166040519015158152f35b3461061457602036600319011261061457600435611ee16142c7565b611ef9611238825f52600160205260405f2054151590565b805f52600360205260ff60405f2054166005811015611b5a577f08598c58e7d4625272865a734dffcd03e88a72ac08aa94dea237d1a21c5b221691611f42600160209314613a11565b805f5260028252611fda60405f20611f66600260ff600184015416610d3281613975565b825f526003845260405f20600260ff1982541617905560058101908154305f5260138652611f9960405f20918254613a97565b9055600681015460018060a01b036003830154165f5260138652611fc260405f20918254613a97565b9055600801549054906001600160a01b0316306142fa565b604051908152a1005b34610614575f366003190112610614577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316300361203a5760206040515f5160206150415f395f51905f528152f35b63703e46dd60e11b5f5260045ffd5b60403660031901126106145761205d61374b565b6024356001600160401b03811161061457366023820112156106145761208d9036906024816004013591016137c7565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115612207575b5061203a576120cf6142c7565b6040516352d1902d60e01b81526001600160a01b0383169290602081600481875afa5f91816121d3575b506121115783634c9c8ce360e01b5f5260045260245ffd5b805f5160206150415f395f51905f528592036121c15750813b156121af575f5160206150415f395f51905f5280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115612197575f8083602061219595519101845af461218f614e57565b91614f42565b005b5050346121a057005b63b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b632a87526960e21b5f5260045260245ffd5b9091506020813d6020116121ff575b816121ef6020938361378b565b81010312610614575190856120f9565b3d91506121e2565b5f5160206150415f395f51905f52546001600160a01b031614159050836120c2565b34610614576020366003190112610614576001600160a01b0361224a61374b565b165f52600f602052602060018060a01b0360405f205416604051908152f35b346106145760203660031901126106145761228261374b565b61228a6142c7565b6001600160a01b038116906122a0821515613ab8565b600e546001600160a01b0316906122b8821515613afc565b6040516370a0823160e01b8152306004820152602081602481875afa90811561199a575f916123c4575b50835f52601260205261230660405f2054855f52601360205260405f205490613c16565b81111561238b578361235f612367927fe603e9649c28b74edd6859199c6264fa2d833d570225c1d29095c0b8a0196c77965f52601260205261235960405f2054845f52601360205260405f205490613c16565b90613a97565b9384916142fa565b604080516001600160a01b039092168252602082019290925290819081015b0390a1005b60405162461bcd60e51b81526020600482015260116024820152706e6f7468696e6720746f2072657363756560781b6044820152606490fd5b90506020813d6020116123ee575b816123df6020938361378b565b810103126106145751846122e2565b3d91506123d2565b34610614576020366003190112610614576004355f52600a602052602060405f2054604051908152f35b34610614575f366003190112610614576124386142c7565b5f5160206150815f395f51905f525460ff81161561248f5760ff19165f5160206150815f395f51905f52557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b34610614575f366003190112610614576124b9600c54613be4565b600c545f5b8251811015612529578181101561251557600c5f527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810154600191906001600160a01b031661250e8286613bae565b52016124be565b634e487b7160e01b5f52603260045260245ffd5b60405160208082528190610b58908201866137fd565b3461061457604036600319011261061457612558613761565b336001600160a01b038216036125745761219590600435614603565b63334bd91960e11b5f5260045ffd5b34610614575f36600319011261061457602060405160088152f35b346106145760a0366003190112610614576125b761374b565b6125bf613761565b906044356001600160a01b03811690819003610614576064356001600160a01b0381169190829003610614576084356001600160401b03811161061457366023820112156106145761261b9036906024816004013591016137c7565b915f5160206150a15f395f51905f52549460ff8660401c1615956001600160401b03811680159081612d00575b6001149081612cf6575b159081612ced575b50612cde5767ffffffffffffffff1981166001175f5160206150a15f395f51905f525586612cb2575b5061268c614e2c565b612694614e2c565b61269d85614256565b6126a5614e2c565b6126ad613bc2565b6126b5613bc2565b906126be614e2c565b6126c6614e2c565b8051906001600160401b0382116129ea576126ee5f516020614fa15f395f51905f525461389e565b601f8111612c43575b50602090601f8311600114612bc65761272792915f9183612bbb575b50508160011b915f199060031b1c19161790565b5f516020614fa15f395f51905f52555b8051906001600160401b0382116129ea5761275f5f516020614fe15f395f51905f525461389e565b601f8111612b4c575b50602090601f8311600114612acf5761279792915f9183612ac45750508160011b915f199060031b1c19161790565b5f516020614fe15f395f51905f52555b6127af614e2c565b6127b7614e2c565b6127bf614e2c565b60ff195f5160206150815f395f51905f5254165f5160206150815f395f51905f52558215612a88578115612a43576001600160a01b03169182156129fe576001600160601b0360a01b60095416176009556001600160601b0360a01b60075416176007556001600160601b0360a01b60085416176008558051906001600160401b0382116129ea57612852600b5461389e565b601f8111612987575b50602090601f831160011461290057918061288f9261289795945f926128f55750508160011b915f199060031b1c19161790565b600b556144b0565b5061289e57005b68ff0000000000000000195f5160206150a15f395f51905f5254165f5160206150a15f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680612713565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061296f575091600193918561289797969410612957575b505050811b01600b556144b0565b01515f1960f88460031b161c19169055858080612949565b9293602060018192878601518155019501930161292f565b600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9601f840160051c810191602085106129e0575b601f0160051c01905b8181106129d5575061285b565b5f81556001016129c8565b90915081906129bf565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152601960248201527f7a65726f206f72646572207369676e65722061646472657373000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f7a65726f2072656465656d20746f6b656e2061646472657373000000000000006044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152737a65726f20666163746f7279206164647265737360601b6044820152606490fd5b015190508980612713565b90601f198316915f516020614fe15f395f51905f525f52815f20925f5b818110612b345750908460019594939210612b1c575b505050811b015f516020614fe15f395f51905f52556127a7565b01515f1960f88460031b161c19169055888080612b02565b92936020600181928786015181550195019301612aec565b5f516020614fe15f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510612bb1575b601f0160051c01905b818110612ba65750612768565b5f8155600101612b99565b9091508190612b90565b015190508a80612713565b90601f198316915f516020614fa15f395f51905f525f52815f20925f5b818110612c2b5750908460019594939210612c13575b505050811b015f516020614fa15f395f51905f5255612737565b01515f1960f88460031b161c19169055898080612bf9565b92936020600181928786015181550195019301612be3565b5f516020614fa15f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c81019160208510612ca8575b601f0160051c01905b818110612c9d57506126f7565b5f8155600101612c90565b9091508190612c87565b68ffffffffffffffffff191668010000000000000001175f5160206150a15f395f51905f525586612683565b63f92ee8a960e01b5f5260045ffd5b9050158861265a565b303b159150612652565b889150612648565b34610614575f366003190112610614576007546040516001600160a01b039091168152602090f35b3461061457604036600319011261061457612195600435612d4f613761565b90612d75610b0b825f525f5160206150615f395f51905f52602052600160405f20015490565b61455f565b34610614576020366003190112610614576004355f52600360205260ff60405f2054166040516005821015611b5a576020918152f35b34610614575f36600319011261061457600554612de5612dcf82613b97565b91612ddd604051938461378b565b808352613b97565b6020820190601f19013682376005545f5b8351811015612e4457818110156125155760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081015460019190612e3d8287613bae565b5201612df6565b505090604051918291602083019060208452518091526040830191905f5b818110612e70575050500390f35b8251845285945060209384019390920191600101612e62565b3461061457602036600319011261061457600435612ea56142c7565b600954604051631313084160e11b81526004810183905290602090829060249082906001600160a01b03165afa801561199a57612ee8915f91611e3e5750613b58565b612efd815f52600660205260405f2054151590565b15612f2f57602081611c607fd353b91ef24b87233598a495783dabdd9d6b182c6cd964f6ecab24f70df6ea2b93614c17565b60405162461bcd60e51b815260206004820152601860248201527f61737365744944206973206e6f7420737570706f7274656400000000000000006044820152606490fd5b34610614576020366003190112610614576020612fab6004355f525f5160206150615f395f51905f52602052600160405f20015490565b604051908152f35b3461061457606036600319011261061457612fcc61374b565b612fd4613761565b60443590612fe183613839565b335f9081526020919091526040902054925f198410613005575b611139935061433d565b828410613070576001600160a01b0381161561305d57331561304a576111399361302e82613839565b60018060a01b0333165f526020528360405f2091039055612ffb565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610614576040366003190112610614576130a461374b565b6130ac613761565b6130b46142c7565b6001600160a01b038116916130ca831515613afc565b6001600160a01b038181165f818152600f602052604090205490949116811461315a5783613136917f30d682126baa75723af317029e67cda86b0334871b273c3f0676e0e475cc2971955f52600f60205260405f20906001600160601b0360a01b825416179055614b2b565b50604080516001600160a01b03928316815292909116602083015281908101612386565b60405162461bcd60e51b81526020600482015260166024820152757661756c7420726f757465206e6f74206368616e676560501b6044820152606490fd5b34610614576020366003190112610614576131b161374b565b6131b96142c7565b6001600160a01b03166131cd811515613ab8565b6131e2815f52600d60205260405f2054151590565b61321357602081611c607fe473c74f34be27c1464d6624f14a0d7fd4e301cbfa29c3eba425d378c8a7ebe093614ac5565b60405162461bcd60e51b815260206004820152601660248201527530b63932b0b23c9031b7b73a30b4b739903a37b5b2b760511b6044820152606490fd5b34610614575f3660031901126106145760205f5160206150215f395f51905f5254604051908152f35b34610614576040366003190112610614576004356024356132996142c7565b6132b1611238835f52600160205260405f2054151590565b815f52600360205260ff60405f2054166005811015611b5a5760016132d69114613a11565b815f52600260205260405f20906132f9600260ff600185015416610d3281613975565b825f52600360205260405f20600360ff1982541617905580155f14613528575060038101546040516370a0823160e01b81523060048201526001600160a01b0390911690602081602481855afa90811561199a575f916134f6575b5060068301548091106134b157600883015461337b926001600160a01b03909116906142fa565b60058101908154305f52601360205261339960405f20918254613a97565b9055600681015490600360018060a01b03910154165f5260136020526133c460405f20918254613a97565b90555490301561349e57305f525f516020614fc15f395f51905f5260205260405f205482811061348357905f837f7ad7174076b297a24f706a24c4f35617b4a2ac4b102f85e9f11654b46cd31512946020943084525f516020614fc15f395f51905f528652036040832055805f5160206150215f395f51905f5254035f5160206150215f395f51905f52556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef843092a3604051908152a1005b905063391434e360e21b5f523060045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b60405162461bcd60e51b815260206004820152601760248201527f6e6f7420656e6f7567682072656465656d20746f6b656e0000000000000000006044820152606490fd5b90506020813d602011613520575b816135116020938361378b565b81010312610614575184613354565b3d9150613504565b825f52600a60205260405f205561337b565b346106145760403660031901126106145761355361374b565b60243590331561305d576001600160a01b031690811561304a5761357633613839565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610614575f366003190112610614576020604051620151808152f35b34610614575f366003190112610614576040515f5f516020614fa15f395f51905f52546136028161389e565b8084529060018116908115613694575060011461362a575b610b5883610b448185038261378b565b5f516020614fa15f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b80821061367a57509091508101602001610b4461361a565b919260018160209254838588010152019101909291613662565b60ff191660208086019190915291151560051b84019091019150610b44905061361a565b34610614575f3660031901126106145760205f54604051908152f35b34610614576020366003190112610614576004359063ffffffff60e01b821680920361061457602091637965db0b60e01b8114908115613716575b5015158152f35b6301ffc9a760e01b1490508361370f565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361061457565b602435906001600160a01b038216820361061457565b35906001600160a01b038216820361061457565b90601f801991011681019081106001600160401b038211176129ea57604052565b6001600160401b0381116129ea57601f01601f191660200190565b9291926137d3826137ac565b916137e1604051938461378b565b829481845281830111610614578281602093845f960137010152565b90602080835192838152019201905f5b81811061381a5750505090565b82516001600160a01b031684526020938401939092019160010161380d565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b9181601f84011215610614578235916001600160401b038311610614576020838186019501011161061457565b90600182811c921680156138cc575b60208310146138b857565b634e487b7160e01b5f52602260045260245ffd5b91607f16916138ad565b600b545f92916138e58261389e565b80825291600181169081156139595750600114613900575050565b600b5f9081529293509091907f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db95b83831061393f575060209250010190565b60018160209294939454838587010152019101919061392e565b9050602093945060ff929192191683830152151560051b010190565b60041115611b5a57565b906040600319830112610614576004356001600160401b0381116106145761018081840360031901126106145760040191602435906001600160401b038211610614576139ce91600401613871565b9091565b156139d957565b60405162461bcd60e51b815260206004820152601060248201526f6f72646572206e6f742065786973747360801b6044820152606490fd5b15613a1857565b60405162461bcd60e51b81526020600482015260146024820152736f72646572206973206e6f742070656e64696e6760601b6044820152606490fd5b15613a5b57565b60405162461bcd60e51b81526020600482015260146024820152730dee4c8cae440e8f2e0ca40dcdee840dac2e8c6d60631b6044820152606490fd5b91908203918211613aa457565b634e487b7160e01b5f52601160045260245ffd5b15613abf57565b60405162461bcd60e51b8152602060048201526015602482015274746f6b656e206973207a65726f206164647265737360581b6044820152606490fd5b15613b0357565b60405162461bcd60e51b81526020600482015260156024820152747661756c74206973207a65726f206164647265737360581b6044820152606490fd5b90816020910312610614575180151581036106145790565b15613b5f57565b60405162461bcd60e51b815260206004820152601060248201526f6173736574206e6f742065786973747360801b6044820152606490fd5b6001600160401b0381116129ea5760051b60200190565b80518210156125155760209160051b010190565b60405190613bd160408361378b565b60048252635553534960e01b6020830152565b90613bee82613b97565b613bfb604051918261378b565b8281528092613c0c601f1991613b97565b0190602036910137565b91908201809211613aa457565b6001600160a01b039081165f818152600f602052604090205490911615613c5e575f908152600f60205260409020546001600160a01b031690565b50600e546001600160a01b031690565b9081602091031261061457516001600160a01b03811681036106145790565b903590601e198136030182121561061457018035906001600160401b0382116106145760200191813603831361061457565b908060209392818452848401375f828201840152601f01601f1916010190565b356001600160a01b03811681036106145790565b929192604051602081019060208252613d12816103c6604082016138d6565b519020613d406103c6613d258480613c8d565b92906040519283916020830195602087526040840191613cbf565b5190200361406c576020810135600481101561061457613d5f81613975565b801561403257613d6e81613975565b60018114613fd8575b613d8081613975565b60028114613f12575b600390613d9581613975565b14613e8b575b60e001354211613e5c57613dba815f52600160205260405f2054151590565b613e2057613dd8613dde9360018060a01b03600854169336916137c7565b9161469f565b15613de557565b60405162461bcd60e51b81526020600482015260136024820152721cda59db985d1d5c99481b9bdd081d985b1a59606a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152736f7264657220616c72656164792065786973747360601b6044820152606490fd5b60405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606490fd5b613ed36101408201613eaf6001600160a01b03613ea783613cdf565b161515613ab8565b6001600160a01b0390613ec190613cdf565b165f52600d60205260405f2054151590565b613d9b5760405162461bcd60e51b81526020600482015260136024820152721d1bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606490fd5b6001600160a01b03613f276101208401613cdf565b1615613f93576007546001600160a01b0390811690613f4860608501613cdf565b1614613d895760405162461bcd60e51b815260206004820152601a60248201527f72656465656d20746f6b656e206e6f7420737570706f727465640000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f7265636569766572206973207a65726f206164647265737300000000000000006044820152606490fd5b613ff160408301355f52600660205260405f2054151590565b613d775760405162461bcd60e51b8152602060048201526015602482015274185cdcd95d1251081b9bdd081cdd5c1c1bdc9d1959605a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260126024820152716f726465722074797065206973206e6f6e6560701b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e0c6d0c2d2dc40dcdee840dac2e8c6d608b1b6044820152606490fd5b156140aa57565b60405162461bcd60e51b815260206004820152601b60248201527f6d73672073656e646572206973206e6f742072657175657374657200000000006044820152606490fd5b602081528135601e19833603018112156106145782016020813591016001600160401b038211610614578136038113610614576141399161018060208501526101a0840191613cbf565b916020810135906004821015610614578161415661018093613975565b60408401526040810135606084015260018060a01b0361417860608301613777565b166080840152608081013560a084015260a081013560c084015260c081013560e084015260e081013561010084015260018060a01b036141bb6101008301613777565b1661012084015260018060a01b036141d66101208301613777565b1661014084015260018060a01b036141f16101408301613777565b1661016084015261420c61016060018060a01b039201613777565b1691015290565b1561421a57565b60405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606490fd5b6001600160a01b031680156142b4575f5160206150015f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f5160206150015f395f51905f52546001600160a01b031633036142e757565b63118cdaa760e01b5f523360045260245ffd5b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261433b9161433660648361378b565b614a2a565b565b6001600160a01b031690811561349e576001600160a01b0316918215611b4757815f525f516020614fc15f395f51905f5260205260405f20548181106143e257817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f516020614fc15f395f51905f5284520360405f2055845f525f516020614fc15f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b335f9081527fccf616fcc782ae4975b4090604ebc6d6877b665e3ab61c33e0108a88b1f19746602052604090205460ff161561443357565b63e2517d3f60e01b5f52336004527f938c45fe3baa5cbd047f2473358a27f57db22291e9af95379a15ad016886dfb760245260445ffd5b5f8181525f5160206150615f395f51905f526020908152604080832033845290915290205460ff161561449a5750565b63e2517d3f60e01b5f523360045260245260445ffd5b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1661455a576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b5f8181525f5160206150615f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff166145fd575f8181525f5160206150615f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f8181525f5160206150615f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16156145fd575f8181525f5160206150615f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b9190823b6146da57906146b191614e86565b506146bb81613975565b1591826146c757505090565b6001600160a01b03918216911614919050565b915f926103c661471085946040519283916020830195630b135d3f60e11b87526024840152604060448401526064830190613727565b51915afa61471c614e57565b8161474d575b8161472b575090565b80516020808301935090820191909103126106145751630b135d3f60e11b1490565b905060208151101590614722565b60ff5f5160206150815f395f51905f52541661477357565b63d93c066560e01b5f5260045ffd5b805f52600260205260405f206147988380613c8d565b906001600160401b0382116129ea576147b1835461389e565b601f81116149a1575b505f90601f831160011461493d576147e892915f91836149325750508160011b915f199060031b1c19161790565b81555b602083013560048110156106145761490b61016061492f95600b93600186019061481481613975565b815460ff191660ff9190911617905560408101356002860155600780546003870180546001600160a01b039092166001600160a01b03199092169190911790556080820135600487015560a0820135600587015560c0820135600687015560e0820135908601556148886101008201613cdf565b6008860180546001600160a01b0319166001600160a01b039092169190911790556148b66101208201613cdf565b6009860180546001600160a01b0319166001600160a01b039092169190911790556148e46101408201613cdf565b600a860180546001600160a01b0319166001600160a01b0390921691909117905501613cdf565b910180546001600160a01b0319166001600160a01b03909216919091179055614bcb565b50565b013590505f80612713565b601f19831691845f5260205f20925f5b8181106149895750908460019594939210614970575b505050811b0181556147eb565b01355f19600384901b60f8161c191690555f8080614963565b9193602060018192878701358155019501920161494d565b835f5260205f20601f840160051c810191602085106149dc575b601f0160051c01905b8181106149d157506147ba565b5f81556001016149c4565b90915081906149bb565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815261433b9161433660848361378b565b905f602091828151910182855af11561199a575f513d614a7957506001600160a01b0381163b155b614a595750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415614a52565b6010548110156125155760105f5260205f2001905f90565b5f54811015612515575f805260205f2001905f90565b8054821015612515575f5260205f2001905f90565b805f52600d60205260405f2054155f1461455a57600c54600160401b8110156129ea57614b14614afe826001859401600c55600c614ab0565b819391549060031b91821b915f19901b19161790565b9055600c54905f52600d60205260405f2055600190565b805f52601160205260405f2054155f1461455a57601054600160401b8110156129ea57614b64614afe8260018594016010556010614ab0565b9055601054905f52601160205260405f2055600190565b805f52600660205260405f2054155f1461455a57600554600160401b8110156129ea57614bb4614afe8260018594016005556005614ab0565b9055600554905f52600660205260405f2055600190565b805f52600160205260405f2054155f1461455a575f54600160401b8110156129ea57614c01614afe8260018594015f555f614ab0565b90555f54905f52600160205260405f2055600190565b5f8181526006602052604090205480156145fd575f198101818111613aa4576005545f19810191908211613aa457818103614c9e575b5050506005548015614c8a575f1901614c67816005614ab0565b8154905f199060031b1b191690556005555f5260066020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b614cc0614caf614afe936005614ab0565b90549060031b1c9283926005614ab0565b90555f52600660205260405f20555f8080614c4d565b5f8181526011602052604090205480156145fd575f198101818111613aa4576010545f19810191908211613aa457818103614d49575b5050506010548015614c8a575f1901614d26816010614ab0565b8154905f199060031b1b191690556010555f5260116020525f6040812055600190565b614d6b614d5a614afe936010614ab0565b90549060031b1c9283926010614ab0565b90555f52601160205260405f20555f8080614d0c565b5f818152600d602052604090205480156145fd575f198101818111613aa457600c545f19810191908211613aa457818103614df4575b505050600c548015614c8a575f1901614dd181600c614ab0565b8154905f199060031b1b19169055600c555f52600d6020525f6040812055600190565b614e16614e05614afe93600c614ab0565b90549060031b1c928392600c614ab0565b90555f52600d60205260405f20555f8080614db7565b60ff5f5160206150a15f395f51905f525460401c1615614e4857565b631afcd79f60e31b5f5260045ffd5b3d15614e81573d90614e68826137ac565b91614e76604051938461378b565b82523d5f602084013e565b606090565b8151919060418303614eb657614eaf9250602082015190606060408401519301515f1a90614ec0565b9192909190565b50505f9160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614f37579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561199a575f516001600160a01b03811615614f2d57905f905f90565b505f906001905f90565b5050505f9160039190565b90614f665750805115614f5757805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580614f97575b614f77575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15614f6f56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209899a8da5b0b749f923a81f67c991aa5a13a110221aee65cff471850b120aeb964736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00