0 txs
7 calls
constructor
constructor()
functions
allowedToken
viewfunction allowedToken(bytes32) view returns (address)
crossChainManagerAddress
viewfunction crossChainManagerAddress() view returns (address)
depositFeeEnabled
viewfunction depositFeeEnabled() view returns (bool)
depositId
viewfunction depositId() view returns (uint64)
getAllAllowedBroker
viewfunction getAllAllowedBroker() view returns (bytes32[])
getAllAllowedToken
viewfunction getAllAllowedToken() view returns (bytes32[])
getAllowedBroker
viewfunction getAllowedBroker(bytes32 _brokerHash) view returns (bool)
getAllowedToken
viewfunction getAllowedToken(bytes32 _tokenHash) view returns (address)
getAllRebalanceEnableToken
viewfunction getAllRebalanceEnableToken() view returns (bytes32[])
getDepositFee
viewfunction getDepositFee(address receiver, tuple data) view returns (uint256)
getSubmittedSwaps
viewfunction getSubmittedSwaps() view returns (bytes32[])
messageTransmitterContract
viewfunction messageTransmitterContract() view returns (address)
nativeTokenDepositLimit
viewfunction nativeTokenDepositLimit() view returns (uint256)
nativeTokenHash
viewfunction nativeTokenHash() view returns (bytes32)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
protocolVault
viewfunction protocolVault() view returns (address)
swapOperator
viewfunction swapOperator() view returns (address)
swapSigner
viewfunction swapSigner() view returns (address)
tokenAddress2DepositLimit
viewfunction tokenAddress2DepositLimit(address) view returns (uint256)
tokenMessengerContract
viewfunction tokenMessengerContract() view returns (address)
version
purefunction version() pure returns (string)
changeTokenAddressAndAllow
nonpayablefunction changeTokenAddressAndAllow(bytes32 _tokenHash, address _tokenAddress)
delegateSigner
nonpayablefunction delegateSigner(tuple data)
delegateSwap
nonpayablefunction delegateSwap(tuple data)
deposit
payablefunction deposit(tuple data) payable
depositTo
payablefunction depositTo(address receiver, tuple data) payable
emergencyPause
nonpayablefunction emergencyPause()
emergencyUnpause
nonpayablefunction emergencyUnpause()
enableDepositFee
nonpayablefunction enableDepositFee(bool _enabled)
initialize
nonpayablefunction initialize()
rebalanceBurn
nonpayablefunction rebalanceBurn(tuple data)
rebalanceMint
nonpayablefunction rebalanceMint(tuple data)
renounceOwnership
nonpayablefunction renounceOwnership()
setAllowedBroker
nonpayablefunction setAllowedBroker(bytes32 _brokerHash, bool _allowed)
setAllowedToken
nonpayablefunction setAllowedToken(bytes32 _tokenHash, bool _allowed)
setCrossChainManager
nonpayablefunction setCrossChainManager(address _crossChainManagerAddress)
setDepositLimit
nonpayablefunction setDepositLimit(address _tokenAddress, uint256 _limit)
setNativeTokenDepositLimit
nonpayablefunction setNativeTokenDepositLimit(uint256 _nativeTokenDepositLimit)
setNativeTokenHash
nonpayablefunction setNativeTokenHash(bytes32 _nativeTokenHash)
setProtocolVaultAddress
nonpayablefunction setProtocolVaultAddress(address _protocolVaultAddress)
setRebalanceEnableToken
nonpayablefunction setRebalanceEnableToken(bytes32 _tokenHash, bool _allowed)
setRebalanceMessengerContract
nonpayablefunction setRebalanceMessengerContract(address _rebalanceMessengerContract)
setSwapOperator
nonpayablefunction setSwapOperator(address _swapOperator)
setSwapSigner
nonpayablefunction setSwapSigner(address _swapSigner)
setTokenMessengerContract
nonpayablefunction setTokenMessengerContract(address _tokenMessengerContract)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw(tuple data)
withdraw2Contract
nonpayablefunction withdraw2Contract(tuple data)
events
AccountDelegate
event AccountDelegate(address indexed delegateContract, bytes32 indexed brokerHash, address indexed delegateSigner, uint256 chainId, uint256 blockNumber)
AccountDeposit
event AccountDeposit(bytes32 indexed accountId, address indexed userAddress, uint64 indexed depositNonce, bytes32 tokenHash, uint128 tokenAmount)
AccountDepositTo
event AccountDepositTo(bytes32 indexed accountId, address indexed userAddress, uint64 indexed depositNonce, bytes32 tokenHash, uint128 tokenAmount)
AccountWithdraw
event AccountWithdraw(bytes32 indexed accountId, uint64 indexed withdrawNonce, bytes32 brokerHash, address sender, address receiver, bytes32 tokenHash, uint128 tokenAmount, uint128 fee)
ChangeCrossChainManager
event ChangeCrossChainManager(address oldAddress, address newAddress)
ChangeDepositLimit
event ChangeDepositLimit(address indexed _tokenAddress, uint256 _limit)
ChangeTokenAddressAndAllow
event ChangeTokenAddressAndAllow(bytes32 indexed _tokenHash, address _tokenAddress)
DelegateSwapExecuted
event DelegateSwapExecuted(bytes32 indexed tradeId, bytes32 inTokenHash, uint256 inTokenAmount, address to, uint256 value)
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
SetAllowedBroker
event SetAllowedBroker(bytes32 indexed _brokerHash, bool _allowed)
SetAllowedToken
event SetAllowedToken(bytes32 indexed _tokenHash, bool _allowed)
SetCeffuAddress
event SetCeffuAddress(address _oldCeffuAddress, address _newCeffuAddress)
SetProtocolVaultAddress
event SetProtocolVaultAddress(address _oldProtocolVaultAddress, address _newProtocolVaultAddress)
SetRebalanceEnableToken
event SetRebalanceEnableToken(bytes32 indexed _tokenHash, bool _allowed)
Unpaused
event Unpaused(address account)
WithdrawFailed
event WithdrawFailed(address indexed token, address indexed receiver, uint256 amount)
errors
AccountIdInvalid
error AccountIdInvalid()
AddressZero
error AddressZero()
BalanceNotEnough
error BalanceNotEnough(uint256 balance, uint128 amount)
BrokerNotAllowed
error BrokerNotAllowed()
CeffuAddressMismatch
error CeffuAddressMismatch(address want, address got)
DepositExceedLimit
error DepositExceedLimit()
EnumerableSetError
error EnumerableSetError()
InvalidSwapSignature
error InvalidSwapSignature()
InvalidTokenAddress
error InvalidTokenAddress()
NativeTokenDepositAmountMismatch
error NativeTokenDepositAmountMismatch()
NotRebalanceEnableToken
error NotRebalanceEnableToken()
NotZeroCodeLength
error NotZeroCodeLength()
OnlyCrossChainManagerCanCall
error OnlyCrossChainManagerCanCall()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SwapAlreadySubmitted
error SwapAlreadySubmitted()
TokenNotAllowed
error TokenNotAllowed()
ZeroCodeLength
error ZeroCodeLength()
ZeroDeposit
error ZeroDeposit()
ZeroDepositFee
error ZeroDepositFee()
creation bytecode
0x6080604052348015600e575f80fd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6149e8806100e05f395ff3fe60806040526004361061030d575f3560e01c80638bc2714e1161019c578063c7eeb9c2116100e7578063df0f4ae711610092578063f2fde38b1161006d578063f2fde38b146108ad578063f36a53f8146108cc578063f649e01b146108eb578063fea65b491461090a575f80fd5b8063df0f4ae714610856578063e6b40bf214610875578063ec9cd71f1461088e575f80fd5b8063d2c493fd116100c2578063d2c493fd1461080e578063d515bb031461082d578063d6aeb43114610842575f80fd5b8063c7eeb9c2146107b1578063c9fc8797146107d0578063cb76efdf146107ef575f80fd5b80639aff63d111610147578063b182dc6911610122578063b182dc6914610760578063b1f6c8681461077f578063ba46a1771461079e575f80fd5b80639aff63d114610718578063a9809cbc1461072c578063b07cd8bd1461074b575f80fd5b806394936b3d1161017757806394936b3d1461069a5780639852099c146106b957806398c2d086146106f9575f80fd5b80638bc2714e146106455780638da5cb5b146106695780639305a91a14610686575f80fd5b806354fd4d501161025c5780636f2c0e15116102075780638129fc1c116101e25780638129fc1c146105e7578063822a6572146105fb5780638b5ce46d1461061a575f80fd5b80636f2c0e1514610595578063715018a6146105b457806380ca29f4146105c8575f80fd5b80635e1eb4ce116102375780635e1eb4ce146105235780635efc56c714610542578063681d527c14610561575f80fd5b806354fd4d50146104a25780635a9249e6146104ed5780635c975abb1461050c575f80fd5b80632ef7664c116102bc5780634428eaed116102975780634428eaed146104595780634a4e3bd51461047a57806351858e271461048e575f80fd5b80632ef7664c146103f0578063322dda6d1461040f5780633d8afb5314610422575f80fd5b8063258082f5116102ec578063258082f514610383578063272d177d146103b25780632df4869b146103d1575f80fd5b806274f4191461031157806304b90bb71461034357806311e2e8c214610364575b5f80fd5b34801561031c575f80fd5b5061033061032b3660046140d8565b610929565b6040519081526020015b60405180910390f35b34801561034e575f80fd5b5061036261035d36600461410a565b610a56565b005b34801561036f575f80fd5b5061036261037e366004614123565b610a80565b34801561038e575f80fd5b506103a261039d366004614144565b610b26565b604051901515815260200161033a565b3480156103bd575f80fd5b506103626103cc36600461415b565b610b32565b3480156103dc575f80fd5b506103626103eb366004614183565b610b92565b3480156103fb575f80fd5b5061036261040a3660046141a9565b610ca3565b61036261041d3660046141d7565b610d24565b34801561042d575f80fd5b50609e54610441906001600160a01b031681565b6040516001600160a01b03909116815260200161033a565b348015610464575f80fd5b5061046d610d50565b60405161033a91906141f1565b348015610485575f80fd5b50610362610d61565b348015610499575f80fd5b50610362610d7b565b3480156104ad575f80fd5b50604080518082018252600d81527f302e362e312e616c7068612e32000000000000000000000000000000000000006020820152905161033a9190614233565b3480156104f8575f80fd5b5060a054610441906001600160a01b031681565b348015610517575f80fd5b5060335460ff166103a2565b34801561052e575f80fd5b5061036261053d36600461410a565b610d93565b34801561054d575f80fd5b5061036261055c366004614279565b610e2d565b34801561056c575f80fd5b5061044161057b366004614144565b609c6020525f90815260409020546001600160a01b031681565b3480156105a0575f80fd5b5060a754610441906001600160a01b031681565b3480156105bf575f80fd5b506103626110b1565b3480156105d3575f80fd5b506103626105e236600461410a565b6110c2565b3480156105f2575f80fd5b506103626110ec565b348015610606575f80fd5b5060a854610441906001600160a01b031681565b348015610625575f80fd5b5061033061063436600461410a565b609f6020525f908152604090205481565b348015610650575f80fd5b50609d546104419061010090046001600160a01b031681565b348015610674575f80fd5b506065546001600160a01b0316610441565b348015610691575f80fd5b5061046d611215565b3480156106a5575f80fd5b506103626106b436600461410a565b611221565b3480156106c4575f80fd5b506097546106e090600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161033a565b348015610704575f80fd5b506103626107133660046142ab565b611274565b348015610723575f80fd5b5061046d611656565b348015610737575f80fd5b5061036261074636600461410a565b611662565b348015610756575f80fd5b5061033060a45481565b34801561076b575f80fd5b50609754610441906001600160a01b031681565b34801561078a575f80fd5b506103626107993660046142cd565b6116fc565b6103626107ac3660046140d8565b611a54565b3480156107bc575f80fd5b506104416107cb366004614144565b611a7d565b3480156107db575f80fd5b506103626107ea3660046141a9565b611ab5565b3480156107fa575f80fd5b506103626108093660046142e7565b611b7a565b348015610819575f80fd5b50610362610828366004614302565b611b9d565b348015610838575f80fd5b5061033060a35481565b34801561084d575f80fd5b5061046d611ea9565b348015610861575f80fd5b506103626108703660046141a9565b611eb5565b348015610880575f80fd5b50609d546103a29060ff1681565b348015610899575f80fd5b506103626108a8366004614144565b611f36565b3480156108b8575f80fd5b506103626108c736600461410a565b611f43565b3480156108d7575f80fd5b506103626108e6366004614144565b611fd0565b3480156108f6575f80fd5b5061036261090536600461410a565b611fdd565b348015610915575f80fd5b50610362610924366004614334565b61204d565b5f6109326125e4565b61093c8383612637565b5f6040518060c00160405280845f01358152602001856001600160a01b0316815260200184602001358152602001846040013581526020018460600160208101906109879190614365565b6001600160801b031681526097546020909101906109b790600160a01b900467ffffffffffffffff166001614392565b67ffffffffffffffff1690526097546040517f2690952b0000000000000000000000000000000000000000000000000000000081529192506001600160a01b031690632690952b90610a0d9084906004016143b2565b602060405180830381865afa158015610a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4c9190614411565b9150505b92915050565b610a5e612733565b60a780546001600160a01b0319166001600160a01b0392909216919091179055565b610a88612733565b806001600160a01b038116610ab057604051639fabe1c160e01b815260040160405180910390fd5b5f838152609c6020526040902080546001600160a01b0319166001600160a01b038416179055610ae1609a8461278d565b506040516001600160a01b038316815283907fdd5c3f86e468e8e3d0da2fcfd07779497eec7c153f181f4859a704d66e2444f8906020015b60405180910390a2505050565b5f610a5060988361279f565b610b3a612733565b6001600160a01b0382165f818152609f602052604090819020839055517f5e93e2a54705c57ed67fc9650a3b1753179b163ce4881d3964205a708eaef2fc90610b869084815260200190565b60405180910390a25050565b333b5f03610bcc576040517f30773dbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bdc604082016020830161410a565b6001600160a01b03163b15610c1d576040517f623793c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c296098823561279f565b610c46576040516359d9b86360e01b815260040160405180910390fd5b610c56604082016020830161410a565b604080514681524360208201526001600160a01b03929092169183359133917f1e236eed9d7e9ca81e25a438791ca7f69cf43cdcc537a0fd4f74f0697da0460b910160405180910390a450565b610cab612733565b5f8115610cc457610cbd60a18461278d565b9050610cd2565b610ccf60a1846127b6565b90505b80610cf05760405163a65b249b60e01b815260040160405180910390fd5b827f0a189b5878f2d02888fa70a7a78ab12badfddc55f3082c424820d3215a35d05883604051610b19911515815260200190565b610d2c6125e4565b60a354816040013503610d4657610d4333826127c1565b50565b610d433382612a8a565b6060610d5c60a5612d95565b905090565b610d69612da1565b610d71612733565b610d79612df3565b565b610d836125e4565b610d8b612733565b610d79612e45565b610d9b612733565b806001600160a01b038116610dc357604051639fabe1c160e01b815260040160405180910390fd5b609754604080516001600160a01b03928316815291841660208301527f171f28064de7df65eb845ec06e0161ab312efa47a10fee262fab3dac2f33e80a910160405180910390a150609780546001600160a01b0319166001600160a01b0392909216919091179055565b610e356125e4565b60a7546001600160a01b03163314610eba5760405162461bcd60e51b815260206004820152602260248201527f5661756c743a204f6e6c792073776170206f70657261746f722063616e20636160448201527f6c6c00000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610ec2612e82565b610ecb81612ee5565b610ed760a5823561278d565b5060a354816040013514610f2b576040808201355f908152609c60205220546001600160a01b031680610f28610f1360a085016080860161410a565b6001600160a01b038316906060860135612fb7565b50505b5f60a354826040013503610f40575060a08101355b5f80610f5260a085016080860161410a565b6001600160a01b031683610f6960c0870187614428565b604051610f77929190614472565b5f6040518083038185875af1925050503d805f8114610fb1576040519150601f19603f3d011682016040523d82523d5f602084013e610fb6565b606091505b509150915081610fc857805160208201fd5b60a354846040013514611017576040808501355f908152609c60205220546001600160a01b03168061101461100360a088016080890161410a565b6001600160a01b038316905f612fb7565b50505b83357f8547134a897aa2cdae5a6b87fe6e6bdc56bc90996de46cb8ef405a5779fef7366040860135606087013561105460a0890160808a0161410a565b6040805193845260208401929092526001600160a01b03169082015260a0870135606082015260800160405180910390a2505050610d4360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110b9612733565b610d795f61318e565b6110ca612733565b60a880546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff161580801561110a57505f54600160ff909116105b806111235750303b15801561112357505f5460ff166001145b6111955760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610eb1565b5f805460ff1916600117905580156111b6575f805461ff0019166101001790555b6111be6131df565b6111c6613251565b6111ce6132c3565b8015610d43575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6060610d5c609a612d95565b611229612733565b806001600160a01b03811661125157604051639fabe1c160e01b815260040160405180910390fd5b50609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6097546001600160a01b0316331461129f5760405163833d33e760e01b815260040160405180910390fd5b6112a76125e4565b609754604051634c61684360e11b81526001600160a01b03909116906398c2d086906112d79084906004016144a1565b5f604051808303815f87803b1580156112ee575f80fd5b505af1158015611300573d5f803e3d5ffd5b506113159250505060a0820160808301614365565b6001600160801b031661132e6080830160608401614365565b6001600160801b0316116113aa5760405162461bcd60e51b815260206004820152602a60248201527f77697468647261773a206665652069732067726561746572207468616e20746f60448201527f6b656e20616d6f756e74000000000000000000000000000000000000000000006064820152608401610eb1565b5f6113bb60a0830160808401614365565b6113cb6080840160608501614365565b6113d59190614547565b905060a354826040013503611402576113fd6113f760e0840160c0850161410a565b82613335565b611582565b6040828101355f908152609c6020528190205490516370a0823160e01b81523060048201526001600160a01b03909116906001600160801b0383169082906370a0823190602401602060405180830381865afa158015611464573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114889190614411565b10156114d65760405162461bcd60e51b815260206004820152601e60248201527f77697468647261773a20696e73756666696369656e742062616c616e636500006044820152606401610eb1565b6114ef6114e960e0850160c0860161410a565b82613351565b6115535761150360e0840160c0850161410a565b6040516001600160801b03841681526001600160a01b03918216918316907f53d65f1c22313c10a5012cd91dc9444f0f6dd09d7887d1a8894a2f4dbae84e149060200160405180910390a3611580565b61158061156660e0850160c0860161410a565b6001600160a01b038316906001600160801b038516613385565b505b611593610100830160e08401614566565b67ffffffffffffffff1682357f732a6fe7863c74cbd74d2f2b1e3c27304465e354a9d38f03bf10c8436a70aa2760208501356115d560c0870160a0880161410a565b6115e560e0880160c0890161410a565b60408801356115fa60808a0160608b01614365565b61160a60a08b0160808c01614365565b604080519687526001600160a01b039586166020880152949093169385019390935260608401526001600160801b0391821660808401521660a082015260c00160405180910390a35050565b6060610d5c60a1612d95565b61166a612733565b806001600160a01b03811661169257604051639fabe1c160e01b815260040160405180910390fd5b60a054604080516001600160a01b03928316815291841660208301527f4bb8c4ef110887028d1717e548739a084de305c2b08cb6d4d3ed9b659f688aef910160405180910390a15060a080546001600160a01b0319166001600160a01b0392909216919091179055565b6097546001600160a01b031633146117275760405163833d33e760e01b815260040160405180910390fd5b60608101355f908152609c60205260409020546001600160a01b03168061176157604051639fabe1c160e01b815260040160405180910390fd5b61177060a1606084013561279f565b6117a6576040517fad674ae600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b609d546001600160a01b038083169163095ea7b391610100909104166117d26060860160408701614365565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526001600160801b031660248201526044016020604051808303815f875af115801561183b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185f9190614581565b50609d5461010090046001600160a01b0316636fd3504e6118866060850160408601614365565b611893602086018661459c565b6118ab6118a660e0880160c0890161410a565b6133ce565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160801b03909316600484015263ffffffff91909116602483015260448201526001600160a01b03841660648201526084016020604051808303815f875af1925050508015611946575060408051601f3d908101601f19168201909252611943918101906145bf565b60015b611a17576097546040805160c0810182525f81526001600160a01b0390921691633a8c58999160208083019161198191908801908801614566565b67ffffffffffffffff1681526020016119a06060870160408801614365565b6001600160801b0316815260200185606001358152602001856080013581526020018560a001358152506040518263ffffffff1660e01b81526004016119e691906145da565b5f604051808303815f87803b1580156119fd575f80fd5b505af1158015611a0f573d5f803e3d5ffd5b505050505050565b506097546040805160c081018252600181526001600160a01b0390921691633a8c58999160208083019161198191908801908801614566565b5050565b611a5c6125e4565b60a354816040013503611a7357611a5082826127c1565b611a508282612a8a565b5f611a89609a8361279f565b15611aa957505f908152609c60205260409020546001600160a01b031690565b505f919050565b919050565b611abd612733565b5f8115611b1a575f838152609c60205260409020546001600160a01b0316158015611aea575060a3548314155b15611b0857604051639fabe1c160e01b815260040160405180910390fd5b611b13609a8461278d565b9050611b28565b611b25609a846127b6565b90505b80611b465760405163a65b249b60e01b815260040160405180910390fd5b827f75982e4722797db7bbfd209216413b5edd134de5cd687de171dd12deeee642ff83604051610b19911515815260200190565b611b82612733565b611b8a6125e4565b609d805460ff1916911515919091179055565b6097546001600160a01b03163314611bc85760405163833d33e760e01b815260040160405180910390fd5b609e546001600160a01b03166357ecfd28611be660a0840184614428565b611bf360c0860186614428565b6040518563ffffffff1660e01b8152600401611c12949392919061465a565b6020604051808303815f875af1925050508015611c4c575060408051601f3d908101601f19168201909252611c4991810190614581565b60015b611dda57611c58614680565b806308c379a003611dd05750611c6c6146d2565b80611c775750611dd2565b5f6040518060400160405280601281526020017f4e6f6e636520616c72656164792075736564000000000000000000000000000081525090505f81604051602001611cc2919061476d565b6040516020818303038152906040528051906020012083604051602001611ce9919061476d565b60408051601f19818403018152828252805160209182012060975460c085019093529390931480835293506001600160a01b0316916358a12670919081810190611d3590890189614566565b67ffffffffffffffff168152602001876020016020810190611d579190614365565b6001600160801b03168152602001876040013581526020018760600135815260200187608001358152506040518263ffffffff1660e01b8152600401611d9d91906145da565b5f604051808303815f87803b158015611db4575f80fd5b505af1158015611dc6573d5f803e3d5ffd5b5050505050505050565b505b3d5f803e3d5ffd5b506097546040805160c08101909152600181526001600160a01b03909116906358a1267090602080820190611e1190860186614566565b67ffffffffffffffff168152602001846020016020810190611e339190614365565b6001600160801b03168152602001846040013581526020018460600135815260200184608001358152506040518263ffffffff1660e01b8152600401611e7991906145da565b5f604051808303815f87803b158015611e90575f80fd5b505af1158015611ea2573d5f803e3d5ffd5b5050505050565b6060610d5c6098612d95565b611ebd612733565b5f8115611ed657611ecf60988461278d565b9050611ee4565b611ee16098846127b6565b90505b80611f025760405163a65b249b60e01b815260040160405180910390fd5b827fe2004c296ac9fa6b9b57d55d8bbe257982d1111c229081bb672d5ddbec7f260683604051610b19911515815260200190565b611f3e612733565b60a355565b611f4b612733565b6001600160a01b038116611fc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610eb1565b610d438161318e565b611fd8612733565b60a455565b611fe5612733565b806001600160a01b03811661200d57604051639fabe1c160e01b815260040160405180910390fd5b50609d80546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6097546001600160a01b031633146120785760405163833d33e760e01b815260040160405180910390fd5b6120806125e4565b5f6040518061010001604052808360200135815260200183604001358152602001836060013581526020018360800160208101906120be9190614365565b6001600160801b031681526020016120dc60c0850160a08601614365565b6001600160801b031681526020016120fa60e0850160c0860161410a565b6001600160a01b03168152602001612119610100850160e0860161410a565b6001600160a01b0316815260200161213961012085016101008601614566565b67ffffffffffffffff169052609754604051634c61684360e11b81529192506001600160a01b0316906398c2d08690612176908490600401614778565b5f604051808303815f87803b15801561218d575f80fd5b505af115801561219f573d5f803e3d5ffd5b506121b49250505060c0830160a08401614365565b6001600160801b03166121cd60a0840160808501614365565b6001600160801b0316116122495760405162461bcd60e51b815260206004820152603360248201527f776974686472617732436f6e74726163743a206665652069732067726561746560448201527f72207468616e20746f6b656e20616d6f756e74000000000000000000000000006064820152608401610eb1565b5f61225a60c0840160a08501614365565b61226a60a0850160808601614365565b6122749190614547565b905060a35483606001350361229c576122976113f7610100850160e0860161410a565b61250a565b60608301355f908152609c6020526040908190205490516370a0823160e01b81523060048201526001600160a01b03909116906001600160801b0383169082906370a0823190602401602060405180830381865afa158015612300573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123249190614411565b10156123725760405162461bcd60e51b815260206004820152601b60248201527f5661756c743a20696e73756666696369656e742062616c616e636500000000006044820152606401610eb1565b6123866114e9610100860160e0870161410a565b6123eb5761239b610100850160e0860161410a565b6040516001600160801b03841681526001600160a01b03918216918316907f53d65f1c22313c10a5012cd91dc9444f0f6dd09d7887d1a8894a2f4dbae84e149060200160405180910390a3612508565b5f6123f9602086018661481b565b600281111561240a5761240a614807565b036124cf5761243d612423610100860160e0870161410a565b6001600160a01b038316906001600160801b038516612fb7565b60a0546040517fb216de2c00000000000000000000000000000000000000000000000000000000815261012086013560048201526001600160a01b0383811660248301526001600160801b03851660448301529091169063b216de2c906064015f604051808303815f87803b1580156124b4575f80fd5b505af11580156124c6573d5f803e3d5ffd5b50505050612508565b60026124de602086018661481b565b60028111156124ef576124ef614807565b0361250857612508611566610100860160e0870161410a565b505b61251c61012084016101008501614566565b67ffffffffffffffff1660208401357f732a6fe7863c74cbd74d2f2b1e3c27304465e354a9d38f03bf10c8436a70aa27604086013561256160e0880160c0890161410a565b612572610100890160e08a0161410a565b606089013561258760a08b0160808c01614365565b61259760c08c0160a08d01614365565b604080519687526001600160a01b039586166020880152949093169385019390935260608401526001600160801b0391821660808401521660a082015260c00160405180910390a3505050565b60335460ff1615610d795760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610eb1565b612646609a604083013561279f565b6126635760405163514e24c360e11b815260040160405180910390fd5b6126726098602083013561279f565b61268f576040516359d9b86360e01b815260040160405180910390fd5b60a0546126ac906001600160a01b031682356020840135856133fc565b6126e2576040517fc7ee9ce600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126f26080820160608301614365565b6001600160801b03165f03611a50576040517f56316e8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6065546001600160a01b03163314610d795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eb1565b5f6127988383613485565b9392505050565b5f8181526001830160205260408120541515612798565b5f61279883836134d1565b6127cb8282612637565b5f6127d5346135bb565b90506127e76080830160608401614365565b6001600160801b0316816001600160801b03161015612832576040517ffa7c753700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a45415801590612867575060a454476128526080850160608601614365565b6001600160801b03166128659190614839565b115b156128855760405163365a77c960e21b815260040160405180910390fd5b5f6040518060c00160405280845f01358152602001856001600160a01b0316815260200184602001358152602001846040013581526020018460600160208101906128d09190614365565b6001600160801b031681526020016128e661363d565b67ffffffffffffffff16905290505f6129056080850160608601614365565b61290f9084614547565b609d546001600160801b0391909116915060ff16156129af57805f03612948576040516393d3bb4d60e01b815260040160405180910390fd5b609754604051632322e4b160e11b81526001600160a01b0390911690634645c96290839061297c903390879060040161484c565b5f604051808303818588803b158015612993575f80fd5b505af11580156129a5573d5f803e3d5ffd5b5050505050612a0d565b609754604051630a8f0d0760e41b81526001600160a01b039091169063a8f0d070906129df9085906004016143b2565b5f604051808303815f87803b1580156129f6575f80fd5b505af1158015612a08573d5f803e3d5ffd5b505050505b609754600160a01b900467ffffffffffffffff166001600160a01b03861685357f11f843b2ed43e9b4b568b4dff0c777a6c5ca538b4115a6149f28bce4bea901486040880135612a6360808a0160608b01614365565b604080519283526001600160801b0390911660208301520160405180910390a45050505050565b612a926125e4565b612a9c8282612637565b6040808201355f908152609c6020908152828220546001600160a01b0316808352609f9091529190205415801590612b6b57506001600160a01b0381165f818152609f6020526040908190205490516370a0823160e01b81523060048201529091906370a0823190602401602060405180830381865afa158015612b22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b469190614411565b612b566080850160608601614365565b6001600160801b0316612b699190614839565b115b15612b895760405163365a77c960e21b815260040160405180910390fd5b612bb93330612b9e6080860160608701614365565b6001600160a01b0385169291906001600160801b031661368a565b5f6040518060c00160405280845f01358152602001856001600160a01b031681526020018460200135815260200184604001358152602001846060016020810190612c049190614365565b6001600160801b03168152602001612c1a61363d565b67ffffffffffffffff169052609d5490915060ff1615612cbb57345f03612c54576040516393d3bb4d60e01b815260040160405180910390fd5b609754604051632322e4b160e11b81526001600160a01b0390911690634645c962903490612c88903390869060040161484c565b5f604051808303818588803b158015612c9f575f80fd5b505af1158015612cb1573d5f803e3d5ffd5b5050505050612d19565b609754604051630a8f0d0760e41b81526001600160a01b039091169063a8f0d07090612ceb9084906004016143b2565b5f604051808303815f87803b158015612d02575f80fd5b505af1158015612d14573d5f803e3d5ffd5b505050505b609754600160a01b900467ffffffffffffffff166001600160a01b03851684357f11f843b2ed43e9b4b568b4dff0c777a6c5ca538b4115a6149f28bce4bea901486040870135612d6f6080890160608a01614365565b604080519283526001600160801b0390911660208301520160405180910390a450505050565b60605f612798836136e1565b60335460ff16610d795760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610eb1565b612dfb612da1565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b612e4d6125e4565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e283390565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901612edf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b612ef160a5823561279f565b15612f28576040517f0b69314400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040810135612f38609a8261279f565b612f555760405163514e24c360e11b815260040160405180910390fd5b60a3548114612fae575f818152609c60205260409020546001600160a01b031680612fac576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b611a508261373a565b80158061304857506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015613022573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130469190614411565b155b6130ba5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610eb1565b6040516001600160a01b0383166024820152604481018290526131639084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613786565b505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166132495760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610eb1565b610d7961386a565b5f54610100900460ff166132bb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610eb1565b610d796138dd565b5f54610100900460ff1661332d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610eb1565b610d79613953565b611a506001600160a01b0383166001600160801b0383166139bd565b5f6001600160a01b03831661336757505f610a50565b6133718383613ad2565b1561337d57505f610a50565b506001610a50565b6040516001600160a01b0383166024820152604481018290526131639084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016130ff565b604080516001600160a01b03831660208201525f9101604051602081830303815290604052610a50906148ba565b604080516001600160a01b038316602080830191909152818301859052825180830384018152606090920190925280519101205f9084148061347a5750604080516001600160a01b03808816602080840191909152908516828401526060808301879052835180840390910181526080909201909252805191012084145b90505b949350505050565b5f8181526001830160205260408120546134ca57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a50565b505f610a50565b5f81815260018301602052604081205480156135ab575f6134f36001836148dd565b85549091505f90613506906001906148dd565b9050818114613565575f865f018281548110613524576135246148f0565b905f5260205f200154905080875f018481548110613544576135446148f0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061357657613576614904565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a50565b5f915050610a50565b5092915050565b5f6001600160801b038211156136395760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610eb1565b5090565b5f6097601481819054906101000a900467ffffffffffffffff1661366090614918565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055905090565b6040516001600160a01b03808516602483015283166044820152606481018290526136db9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016130ff565b50505050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561372e57602002820191905f5260205f20905b81548152602001906001019080831161371a575b50505050509050919050565b60a854613750906001600160a01b031682613bd2565b610d43576040517f06a0cf4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137da826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ccc9092919063ffffffff16565b80519091501561316357808060200190518101906137f89190614581565b6131635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610eb1565b5f54610100900460ff166138d45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610eb1565b610d793361318e565b5f54610100900460ff166139475760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610eb1565b6033805460ff19169055565b5f54610100900460ff166131685760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610eb1565b80471015613a0d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610eb1565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613a56576040519150601f19603f3d011682016040523d82523d5f602084013e613a5b565b606091505b50509050806131635760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610eb1565b6040516001600160a01b03831660248201525f90819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ffe575a8700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b03861690613b6190859061476d565b5f60405180830381855afa9150503d805f8114613b99576040519150601f19603f3d011682016040523d82523d5f602084013e613b9e565b606091505b50915091508115613bc75780806020019051810190613bbd9190614581565b9350505050610a50565b5f9350505050610a50565b5f8082354660408501356060860135613bf160a088016080890161410a565b60a0880135613c0360c08a018a614428565b604051602001613c1a989796959493929190614944565b60405160208183030381529060405290505f613c8982805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f613cb282613ca261014088016101208901614992565b8760e00135886101000135613cda565b6001600160a01b0390811690871614935050505092915050565b606061347d84845f85613d00565b5f805f613ce987878787613dee565b91509150613cf681613eab565b5095945050505050565b606082471015613d785760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610eb1565b5f80866001600160a01b03168587604051613d93919061476d565b5f6040518083038185875af1925050503d805f8114613dcd576040519150601f19603f3d011682016040523d82523d5f602084013e613dd2565b606091505b5091509150613de38783838761400f565b979650505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613e2357505f90506003613ea2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613e74573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116613e9c575f60019250925050613ea2565b91505f90505b94509492505050565b5f816004811115613ebe57613ebe614807565b03613ec65750565b6001816004811115613eda57613eda614807565b03613f275760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610eb1565b6002816004811115613f3b57613f3b614807565b03613f885760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610eb1565b6003816004811115613f9c57613f9c614807565b03610d435760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610eb1565b6060831561407d5782515f03614076576001600160a01b0385163b6140765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610eb1565b508161347d565b61347d83838151156140925781518083602001fd5b8060405162461bcd60e51b8152600401610eb19190614233565b80356001600160a01b0381168114611ab0575f80fd5b5f608082840312156140d2575f80fd5b50919050565b5f8060a083850312156140e9575f80fd5b6140f2836140ac565b915061410184602085016140c2565b90509250929050565b5f6020828403121561411a575f80fd5b612798826140ac565b5f8060408385031215614134575f80fd5b82359150614101602084016140ac565b5f60208284031215614154575f80fd5b5035919050565b5f806040838503121561416c575f80fd5b614175836140ac565b946020939093013593505050565b5f6040828403128015614194575f80fd5b509092915050565b8015158114610d43575f80fd5b5f80604083850312156141ba575f80fd5b8235915060208301356141cc8161419c565b809150509250929050565b5f608082840312156141e7575f80fd5b61279883836140c2565b602080825282518282018190525f918401906040840190835b8181101561422857835183526020938401939092019160010161420a565b509095945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f61014082840312156140d2575f80fd5b5f60208284031215614289575f80fd5b813567ffffffffffffffff81111561429f575f80fd5b610a4c84828501614268565b5f610100828403128015614194575f80fd5b5f60e082840312156140d2575f80fd5b5f60e082840312156142dd575f80fd5b61279883836142bd565b5f602082840312156142f7575f80fd5b81356127988161419c565b5f60208284031215614312575f80fd5b813567ffffffffffffffff811115614328575f80fd5b610a4c848285016142bd565b5f6101408284031215614345575f80fd5b6127988383614268565b80356001600160801b0381168114611ab0575f80fd5b5f60208284031215614375575f80fd5b6127988261434f565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff8181168382160190811115610a5057610a5061437e565b60c08101610a508284805182526001600160a01b03602082015116602083015260408101516040830152606081015160608301526001600160801b03608082015116608083015267ffffffffffffffff60a08201511660a08301525050565b5f60208284031215614421575f80fd5b5051919050565b5f808335601e1984360301811261443d575f80fd5b83018035915067ffffffffffffffff821115614457575f80fd5b60200191503681900382131561446b575f80fd5b9250929050565b818382375f9101908152919050565b67ffffffffffffffff81168114610d43575f80fd5b8035611ab081614481565b81358152602080830135908201526040808301359082015261010081016001600160801b036144d26060850161434f565b1660608301526001600160801b036144ec6080850161434f565b1660808301526001600160a01b0361450660a085016140ac565b1660a083015261451860c084016140ac565b6001600160a01b031660c083015261453260e08401614496565b67ffffffffffffffff811660e08401526135b4565b6001600160801b038281168282160390811115610a5057610a5061437e565b5f60208284031215614576575f80fd5b813561279881614481565b5f60208284031215614591575f80fd5b81516127988161419c565b5f602082840312156145ac575f80fd5b813563ffffffff81168114612798575f80fd5b5f602082840312156145cf575f80fd5b815161279881614481565b60c08101610a50828480511515825267ffffffffffffffff60208201511660208301526001600160801b036040820151166040830152606081015160608301526080810151608083015260a081015160a08301525050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f61466d604083018688614632565b8281036020840152613de3818587614632565b5f60033d11156146965760045f803e505f5160e01c5b90565b601f8201601f1916810167ffffffffffffffff811182821017156146cb57634e487b7160e01b5f52604160045260245ffd5b6040525050565b5f60443d10156146df5790565b6040513d600319016004823e80513d602482011167ffffffffffffffff8211171561470957505090565b808201805167ffffffffffffffff811115614725575050505090565b3d840160031901828201602001111561473f575050505090565b61474e60208285010185614699565b509392505050565b5f81518060208401855e5f93019283525090919050565b5f6127988284614756565b5f610100820190508251825260208301516020830152604083015160408301526001600160801b0360608401511660608301526001600160801b0360808401511660808301526001600160a01b0360a08401511660a083015260c08301516147eb60c08401826001600160a01b03169052565b5060e08301516135b460e084018267ffffffffffffffff169052565b634e487b7160e01b5f52602160045260245ffd5b5f6020828403121561482b575f80fd5b813560038110612798575f80fd5b80820180821115610a5057610a5061437e565b6001600160a01b038316815260e081016127986020830184805182526001600160a01b03602082015116602083015260408101516040830152606081015160608301526001600160801b03608082015116608083015267ffffffffffffffff60a08201511660a08301525050565b805160208083015191908110156140d2575f1960209190910360031b1b16919050565b81810381811115610a5057610a5061437e565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f67ffffffffffffffff821667ffffffffffffffff810361493b5761493b61437e565b60010192915050565b8881528760208201528660408201528560608201526001600160a01b03851660808201528360a082015260e060c08201525f61498460e083018486614632565b9a9950505050505050505050565b5f602082840312156149a2575f80fd5b813560ff81168114612798575f80fdfea2646970667358221220f30e7dd463a43d627a44c28aadea600d8fa82cdeb7aa7eac5785530a45f8d85564736f6c634300081a0033