0 txs
97 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)
getDepositFee
viewfunction getDepositFee(address receiver, tuple data) view returns (uint256)
messageTransmitterContract
viewfunction messageTransmitterContract() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
protocolVault
viewfunction protocolVault() view returns (address)
tokenAddress2DepositLimit
viewfunction tokenAddress2DepositLimit(address) view returns (uint256)
tokenMessengerContract
viewfunction tokenMessengerContract() view returns (address)
changeTokenAddressAndAllow
nonpayablefunction changeTokenAddressAndAllow(bytes32 _tokenHash, address _tokenAddress)
delegateSigner
nonpayablefunction delegateSigner(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)
setProtocolVaultAddress
nonpayablefunction setProtocolVaultAddress(address _protocolVaultAddress)
setRebalanceMessengerContract
nonpayablefunction setRebalanceMessengerContract(address _rebalanceMessengerContract)
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)
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)
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()
DepositExceedLimit
error DepositExceedLimit()
EnumerableSetError
error EnumerableSetError()
NotImplemented
error NotImplemented()
NotZeroCodeLength
error NotZeroCodeLength()
OnlyCrossChainManagerCanCall
error OnlyCrossChainManagerCanCall()
ProtocolVaultAddressMismatch
error ProtocolVaultAddressMismatch(address want, address got)
TokenNotAllowed
error TokenNotAllowed()
ZeroCodeLength
error ZeroCodeLength()
ZeroDeposit
error ZeroDeposit()
ZeroDepositFee
error ZeroDepositFee()
creation bytecode
0x6080604052348015600e575f80fd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b613759806100e05f395ff3fe608060405260043610610242575f3560e01c80639305a91a11610131578063c9fc8797116100ac578063df0f4ae71161007c578063f2fde38b11610062578063f2fde38b1461066c578063f649e01b1461068b578063fea65b49146106aa575f80fd5b8063df0f4ae714610634578063e6b40bf214610653575f80fd5b8063c9fc8797146105c3578063cb76efdf146105e2578063d2c493fd14610601578063d6aeb43114610620575f80fd5b8063a9809cbc11610101578063b1f6c868116100e7578063b1f6c86814610572578063ba46a17714610591578063c7eeb9c2146105a4575f80fd5b8063a9809cbc14610534578063b182dc6914610553575f80fd5b80639305a91a1461049557806394936b3d146104b65780639852099c146104d557806398c2d08614610515575f80fd5b80635a9249e6116101c1578063715018a6116101915780638b5ce46d116101775780638b5ce46d146104295780638bc2714e146104545780638da5cb5b14610478575f80fd5b8063715018a6146104015780638129fc1c14610415575f80fd5b80635a9249e6146103785780635c975abb146103975780635e1eb4ce146103ae578063681d527c146103cd575f80fd5b80632df4869b116102165780633d8afb53116101fc5780633d8afb53146103195780634a4e3bd51461035057806351858e2714610364575f80fd5b80632df4869b146102e7578063322dda6d14610306575f80fd5b806274f4191461024657806311e2e8c214610278578063258082f514610299578063272d177d146102c8575b5f80fd5b348015610251575f80fd5b50610265610260366004612f12565b6106c9565b6040519081526020015b60405180910390f35b348015610283575f80fd5b50610297610292366004612f44565b6107f6565b005b3480156102a4575f80fd5b506102b86102b3366004612f65565b61089c565b604051901515815260200161026f565b3480156102d3575f80fd5b506102976102e2366004612f7c565b6108a8565b3480156102f2575f80fd5b50610297610301366004612fa4565b610908565b610297610314366004612fbd565b610a19565b348015610324575f80fd5b50609e54610338906001600160a01b031681565b6040516001600160a01b03909116815260200161026f565b34801561035b575f80fd5b50610297610a2e565b34801561036f575f80fd5b50610297610a48565b348015610383575f80fd5b5060a054610338906001600160a01b031681565b3480156103a2575f80fd5b5060335460ff166102b8565b3480156103b9575f80fd5b506102976103c8366004612fd7565b610a60565b3480156103d8575f80fd5b506103386103e7366004612f65565b609c6020525f90815260409020546001600160a01b031681565b34801561040c575f80fd5b50610297610afa565b348015610420575f80fd5b50610297610b0b565b348015610434575f80fd5b50610265610443366004612fd7565b609f6020525f908152604090205481565b34801561045f575f80fd5b50609d546103389061010090046001600160a01b031681565b348015610483575f80fd5b506065546001600160a01b0316610338565b3480156104a0575f80fd5b506104a9610c31565b60405161026f9190612ff0565b3480156104c1575f80fd5b506102976104d0366004612fd7565b610c42565b3480156104e0575f80fd5b506097546104fc90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161026f565b348015610520575f80fd5b5061029761052f366004613032565b610c95565b34801561053f575f80fd5b5061029761054e366004612fd7565b610fad565b34801561055e575f80fd5b50609754610338906001600160a01b031681565b34801561057d575f80fd5b5061029761058c366004613054565b611000565b61029761059f366004612f12565b611313565b3480156105af575f80fd5b506103386105be366004612f65565b611325565b3480156105ce575f80fd5b506102976105dd36600461307b565b61135d565b3480156105ed575f80fd5b506102976105fc3660046130a9565b611412565b34801561060c575f80fd5b5061029761061b3660046130c4565b611435565b34801561062b575f80fd5b506104a9611741565b34801561063f575f80fd5b5061029761064e36600461307b565b61174d565b34801561065e575f80fd5b50609d546102b89060ff1681565b348015610677575f80fd5b50610297610686366004612fd7565b6117ce565b348015610696575f80fd5b506102976106a5366004612fd7565b61185b565b3480156106b5575f80fd5b506102976106c43660046130f6565b6118cb565b5f6106d2611e47565b6106dc8383611e9a565b5f6040518060c00160405280845f01358152602001856001600160a01b031681526020018460200135815260200184604001358152602001846060016020810190610727919061311e565b6001600160801b0316815260975460209091019061075790600160a01b900467ffffffffffffffff16600161314b565b67ffffffffffffffff1690526097546040517f2690952b0000000000000000000000000000000000000000000000000000000081529192506001600160a01b031690632690952b906107ad90849060040161316b565b602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906131ca565b9150505b92915050565b6107fe611fca565b806001600160a01b03811661082657604051639fabe1c160e01b815260040160405180910390fd5b5f838152609c6020526040902080546001600160a01b0319166001600160a01b038416179055610857609a84612024565b506040516001600160a01b038316815283907fdd5c3f86e468e8e3d0da2fcfd07779497eec7c153f181f4859a704d66e2444f8906020015b60405180910390a2505050565b5f6107f0609883612036565b6108b0611fca565b6001600160a01b0382165f818152609f602052604090819020839055517f5e93e2a54705c57ed67fc9650a3b1753179b163ce4881d3964205a708eaef2fc906108fc9084815260200190565b60405180910390a25050565b333b5f03610942576040517f30773dbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109526040820160208301612fd7565b6001600160a01b03163b15610993576040517f623793c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099f60988235612036565b6109bc576040516359d9b86360e01b815260040160405180910390fd5b6109cc6040820160208301612fd7565b604080514681524360208201526001600160a01b03929092169183359133917f1e236eed9d7e9ca81e25a438791ca7f69cf43cdcc537a0fd4f74f0697da0460b910160405180910390a450565b610a21611e47565b610a2b338261204d565b50565b610a366123bc565b610a3e611fca565b610a4661240e565b565b610a50611e47565b610a58611fca565b610a46612460565b610a68611fca565b806001600160a01b038116610a9057604051639fabe1c160e01b815260040160405180910390fd5b609754604080516001600160a01b03928316815291841660208301527f171f28064de7df65eb845ec06e0161ab312efa47a10fee262fab3dac2f33e80a910160405180910390a150609780546001600160a01b0319166001600160a01b0392909216919091179055565b610b02611fca565b610a465f61249d565b5f54610100900460ff1615808015610b2957505f54600160ff909116105b80610b425750303b158015610b4257505f5460ff166001145b610bb95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f805460ff191660011790558015610bda575f805461ff0019166101001790555b610be26124ee565b610bea612560565b8015610a2b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6060610c3d609a6125d2565b905090565b610c4a611fca565b806001600160a01b038116610c7257604051639fabe1c160e01b815260040160405180910390fd5b50609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6097546001600160a01b03163314610cc05760405163833d33e760e01b815260040160405180910390fd5b610cc8611e47565b609754604051634c61684360e11b81526001600160a01b03909116906398c2d08690610cf8908490600401613201565b5f604051808303815f87803b158015610d0f575f80fd5b505af1158015610d21573d5f803e3d5ffd5b505050506040808201355f908152609c602052908120546001600160a01b031690610d5260a084016080850161311e565b610d62608085016060860161311e565b610d6c91906132a7565b6040516370a0823160e01b81523060048201529091506001600160801b038216906001600160a01b038416906370a0823190602401602060405180830381865afa158015610dbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de091906131ca565b1015610e2e5760405162461bcd60e51b815260206004820152601b60248201527f5661756c743a20696e73756666696369656e742062616c616e636500000000006044820152606401610bb0565b610e47610e4160e0850160c08601612fd7565b836125de565b610eab57610e5b60e0840160c08501612fd7565b6040516001600160801b03831681526001600160a01b03918216918416907f53d65f1c22313c10a5012cd91dc9444f0f6dd09d7887d1a8894a2f4dbae84e149060200160405180910390a3610ed8565b610ed8610ebe60e0850160c08601612fd7565b6001600160a01b038416906001600160801b038416612612565b610ee9610100840160e085016132c6565b67ffffffffffffffff1683357f732a6fe7863c74cbd74d2f2b1e3c27304465e354a9d38f03bf10c8436a70aa276020860135610f2b60c0880160a08901612fd7565b610f3b60e0890160c08a01612fd7565b6040890135610f5060808b0160608c0161311e565b610f6060a08c0160808d0161311e565b604080519687526001600160a01b039586166020880152949093169385019390935260608401526001600160801b0391821660808401521660a082015260c00160405180910390a3505050565b610fb5611fca565b806001600160a01b038116610fdd57604051639fabe1c160e01b815260040160405180910390fd5b5060a080546001600160a01b0319166001600160a01b0392909216919091179055565b6097546001600160a01b0316331461102b5760405163833d33e760e01b815260040160405180910390fd5b60608101355f908152609c60205260409020546001600160a01b03168061106557604051639fabe1c160e01b815260040160405180910390fd5b609d546001600160a01b038083169163095ea7b39161010090910416611091606086016040870161311e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526001600160801b031660248201526044016020604051808303815f875af11580156110fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111e91906132e1565b50609d5461010090046001600160a01b0316636fd3504e611145606085016040860161311e565b61115260208601866132fc565b61116a61116560e0880160c08901612fd7565b6126c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160801b03909316600484015263ffffffff91909116602483015260448201526001600160a01b03841660648201526084016020604051808303815f875af1925050508015611205575060408051601f3d908101601f191682019092526112029181019061331f565b60015b6112d6576097546040805160c0810182525f81526001600160a01b0390921691633a8c589991602080830191611240919088019088016132c6565b67ffffffffffffffff16815260200161125f606087016040880161311e565b6001600160801b0316815260200185606001358152602001856080013581526020018560a001358152506040518263ffffffff1660e01b81526004016112a5919061333a565b5f604051808303815f87803b1580156112bc575f80fd5b505af11580156112ce573d5f803e3d5ffd5b505050505050565b506097546040805160c081018252600181526001600160a01b0390921691633a8c589991602080830191611240919088019088016132c6565b5050565b61131b611e47565b61130f828261204d565b5f611331609a83612036565b1561135157505f908152609c60205260409020546001600160a01b031690565b505f919050565b919050565b611365611fca565b5f81156113b2575f838152609c60205260409020546001600160a01b03166113a057604051639fabe1c160e01b815260040160405180910390fd5b6113ab609a84612024565b90506113c0565b6113bd609a846126ee565b90505b806113de5760405163a65b249b60e01b815260040160405180910390fd5b827f75982e4722797db7bbfd209216413b5edd134de5cd687de171dd12deeee642ff8360405161088f911515815260200190565b61141a611fca565b611422611e47565b609d805460ff1916911515919091179055565b6097546001600160a01b031633146114605760405163833d33e760e01b815260040160405180910390fd5b609e546001600160a01b03166357ecfd2861147e60a0840184613392565b61148b60c0860186613392565b6040518563ffffffff1660e01b81526004016114aa9493929190613404565b6020604051808303815f875af19250505080156114e4575060408051601f3d908101601f191682019092526114e1918101906132e1565b60015b611672576114f061342a565b806308c379a003611668575061150461347c565b8061150f575061166a565b5f6040518060400160405280601281526020017f4e6f6e636520616c72656164792075736564000000000000000000000000000081525090505f8160405160200161155a9190613517565b60405160208183030381529060405280519060200120836040516020016115819190613517565b60408051601f19818403018152828252805160209182012060975460c085019093529390931480835293506001600160a01b0316916358a126709190818101906115cd908901896132c6565b67ffffffffffffffff1681526020018760200160208101906115ef919061311e565b6001600160801b03168152602001876040013581526020018760600135815260200187608001358152506040518263ffffffff1660e01b8152600401611635919061333a565b5f604051808303815f87803b15801561164c575f80fd5b505af115801561165e573d5f803e3d5ffd5b5050505050505050565b505b3d5f803e3d5ffd5b506097546040805160c08101909152600181526001600160a01b03909116906358a12670906020808201906116a9908601866132c6565b67ffffffffffffffff1681526020018460200160208101906116cb919061311e565b6001600160801b03168152602001846040013581526020018460600135815260200184608001358152506040518263ffffffff1660e01b8152600401611711919061333a565b5f604051808303815f87803b158015611728575f80fd5b505af115801561173a573d5f803e3d5ffd5b5050505050565b6060610c3d60986125d2565b611755611fca565b5f811561176e57611767609884612024565b905061177c565b6117796098846126ee565b90505b8061179a5760405163a65b249b60e01b815260040160405180910390fd5b827fe2004c296ac9fa6b9b57d55d8bbe257982d1111c229081bb672d5ddbec7f26068360405161088f911515815260200190565b6117d6611fca565b6001600160a01b0381166118525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bb0565b610a2b8161249d565b611863611fca565b806001600160a01b03811661188b57604051639fabe1c160e01b815260040160405180910390fd5b50609d80546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6097546001600160a01b031633146118f65760405163833d33e760e01b815260040160405180910390fd5b6118fe611e47565b5f61190c6020830183613536565b600181111561191d5761191d613522565b036119b45760a0546001600160a01b031661193f610100830160e08401612fd7565b6001600160a01b0316146119af5760a0546001600160a01b031661196a610100830160e08401612fd7565b6040517f721c48f20000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015291166024820152604401610bb0565b611a0b565b60016119c36020830183613536565b60018111156119d4576119d4613522565b036119f25760405163d623472560e01b815260040160405180910390fd5b60405163d623472560e01b815260040160405180910390fd5b5f604051806101000160405280836020013581526020018360400135815260200183606001358152602001836080016020810190611a49919061311e565b6001600160801b03168152602001611a6760c0850160a0860161311e565b6001600160801b03168152602001611a8560e0850160c08601612fd7565b6001600160a01b03168152602001611aa4610100850160e08601612fd7565b6001600160a01b03168152602001611ac4610120850161010086016132c6565b67ffffffffffffffff169052609754604051634c61684360e11b81529192506001600160a01b0316906398c2d08690611b01908490600401613554565b5f604051808303815f87803b158015611b18575f80fd5b505af1158015611b2a573d5f803e3d5ffd5b5050505060608201355f908152609c60205260408120546001600160a01b031690611b5b60c0850160a0860161311e565b611b6b60a086016080870161311e565b611b7591906132a7565b6040516370a0823160e01b81523060048201529091506001600160801b038216906001600160a01b038416906370a0823190602401602060405180830381865afa158015611bc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be991906131ca565b1015611c375760405162461bcd60e51b815260206004820152601b60248201527f5661756c743a20696e73756666696369656e742062616c616e636500000000006044820152606401610bb0565b611c4b610e41610100860160e08701612fd7565b611cb057611c60610100850160e08601612fd7565b6040516001600160801b03831681526001600160a01b03918216918416907f53d65f1c22313c10a5012cd91dc9444f0f6dd09d7887d1a8894a2f4dbae84e149060200160405180910390a3611d6c565b611cde611cc4610100860160e08701612fd7565b6001600160a01b038416906001600160801b0384166126f9565b60a0546040517fb216de2c00000000000000000000000000000000000000000000000000000000815261012086013560048201526001600160a01b0384811660248301526001600160801b03841660448301529091169063b216de2c906064015f604051808303815f87803b158015611d55575f80fd5b505af1158015611d67573d5f803e3d5ffd5b505050505b611d7e610120850161010086016132c6565b67ffffffffffffffff1660208501357f732a6fe7863c74cbd74d2f2b1e3c27304465e354a9d38f03bf10c8436a70aa276040870135611dc360e0890160c08a01612fd7565b611dd46101008a0160e08b01612fd7565b60608a0135611de960a08c0160808d0161311e565b611df960c08d0160a08e0161311e565b604080519687526001600160a01b039586166020880152949093169385019390935260608401526001600160801b0391821660808401521660a082015260c00160405180910390a350505050565b60335460ff1615610a465760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bb0565b611ea9609a6040830135612036565b611edf576040517fa29c498600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eee60986020830135612036565b611f0b576040516359d9b86360e01b815260040160405180910390fd5b604080516001600160a01b038416602082810191909152808401358284015282518083038401815260609092019092528051910120813514611f79576040517fc7ee9ce600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f89608082016060830161311e565b6001600160801b03165f0361130f576040517f56316e8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6065546001600160a01b03163314610a465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bb0565b5f61202f8383612845565b9392505050565b5f818152600183016020526040812054151561202f565b612055611e47565b61205f8282611e9a565b6040808201355f908152609c6020908152828220546001600160a01b0316808352609f909152919020541580159061212e57506001600160a01b0381165f818152609f6020526040908190205490516370a0823160e01b81523060048201529091906370a0823190602401602060405180830381865afa1580156120e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061210991906131ca565b612119608085016060860161311e565b6001600160801b031661212c91906135e3565b115b15612165576040517fd969df2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612195333061217a608086016060870161311e565b6001600160a01b0385169291906001600160801b0316612891565b5f6040518060c00160405280845f01358152602001856001600160a01b0316815260200184602001358152602001846040013581526020018460600160208101906121e0919061311e565b6001600160801b031681526020016121f66128e8565b67ffffffffffffffff169052609d5490915060ff16156122c957345f03612249576040517f93d3bb4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6097546040517f4645c9620000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690634645c96290349061229690339086906004016135f6565b5f604051808303818588803b1580156122ad575f80fd5b505af11580156122bf573d5f803e3d5ffd5b5050505050612340565b6097546040517fa8f0d0700000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a8f0d0709061231290849060040161316b565b5f604051808303815f87803b158015612329575f80fd5b505af115801561233b573d5f803e3d5ffd5b505050505b609754600160a01b900467ffffffffffffffff166001600160a01b03851684357f11f843b2ed43e9b4b568b4dff0c777a6c5ca538b4115a6149f28bce4bea9014860408701356123966080890160608a0161311e565b604080519283526001600160801b0390911660208301520160405180910390a450505050565b60335460ff16610a465760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bb0565b6124166123bc565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b612468611e47565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124433390565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166125585760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb0565b610a46612935565b5f54610100900460ff166125ca5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb0565b610a466129a8565b60605f61202f83612a1e565b5f6001600160a01b0383166125f457505f6107f0565b6125fe8383612a77565b1561260a57505f6107f0565b5060016107f0565b6040516001600160a01b0383166024820152604481018290526126bb9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b77565b505050565b604080516001600160a01b03831660208201525f91016040516020818303038152906040526107f090613664565b5f61202f8383612c5b565b80158061278a57506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612764573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278891906131ca565b155b6127fc5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610bb0565b6040516001600160a01b0383166024820152604481018290526126bb9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612657565b5f81815260018301602052604081205461288a57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556107f0565b505f6107f0565b6040516001600160a01b03808516602483015283166044820152606481018290526128e29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612657565b50505050565b5f6097601481819054906101000a900467ffffffffffffffff1661290b90613687565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055905090565b5f54610100900460ff1661299f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb0565b610a463361249d565b5f54610100900460ff16612a125760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610bb0565b6033805460ff19169055565b6060815f01805480602002602001604051908101604052809291908181526020018280548015612a6b57602002820191905f5260205f20905b815481526020019060010190808311612a57575b50505050509050919050565b6040516001600160a01b03831660248201525f90819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ffe575a8700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b03861690612b06908590613517565b5f60405180830381855afa9150503d805f8114612b3e576040519150601f19603f3d011682016040523d82523d5f602084013e612b43565b606091505b50915091508115612b6c5780806020019051810190612b6291906132e1565b93505050506107f0565b5f93505050506107f0565b5f612bcb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d459092919063ffffffff16565b8051909150156126bb5780806020019051810190612be991906132e1565b6126bb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bb0565b5f8181526001830160205260408120548015612d35575f612c7d6001836136b3565b85549091505f90612c90906001906136b3565b9050818114612cef575f865f018281548110612cae57612cae6136c6565b905f5260205f200154905080875f018481548110612cce57612cce6136c6565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612d0057612d006136da565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506107f0565b5f9150506107f0565b5092915050565b6060612d5384845f85612d5b565b949350505050565b606082471015612dd35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bb0565b5f80866001600160a01b03168587604051612dee9190613517565b5f6040518083038185875af1925050503d805f8114612e28576040519150601f19603f3d011682016040523d82523d5f602084013e612e2d565b606091505b5091509150612e3e87838387612e49565b979650505050505050565b60608315612eb75782515f03612eb0576001600160a01b0385163b612eb05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bb0565b5081612d53565b612d538383815115612ecc5781518083602001fd5b8060405162461bcd60e51b8152600401610bb091906136ee565b80356001600160a01b0381168114611358575f80fd5b5f60808284031215612f0c575f80fd5b50919050565b5f8060a08385031215612f23575f80fd5b612f2c83612ee6565b9150612f3b8460208501612efc565b90509250929050565b5f8060408385031215612f55575f80fd5b82359150612f3b60208401612ee6565b5f60208284031215612f75575f80fd5b5035919050565b5f8060408385031215612f8d575f80fd5b612f9683612ee6565b946020939093013593505050565b5f6040828403128015612fb5575f80fd5b509092915050565b5f60808284031215612fcd575f80fd5b61202f8383612efc565b5f60208284031215612fe7575f80fd5b61202f82612ee6565b602080825282518282018190525f918401906040840190835b81811015613027578351835260209384019390920191600101613009565b509095945050505050565b5f610100828403128015612fb5575f80fd5b5f60e08284031215612f0c575f80fd5b5f60e08284031215613064575f80fd5b61202f8383613044565b8015158114610a2b575f80fd5b5f806040838503121561308c575f80fd5b82359150602083013561309e8161306e565b809150509250929050565b5f602082840312156130b9575f80fd5b813561202f8161306e565b5f602082840312156130d4575f80fd5b813567ffffffffffffffff8111156130ea575f80fd5b6107ec84828501613044565b5f610140828403128015612fb5575f80fd5b80356001600160801b0381168114611358575f80fd5b5f6020828403121561312e575f80fd5b61202f82613108565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff81811683821601908111156107f0576107f0613137565b60c081016107f08284805182526001600160a01b03602082015116602083015260408101516040830152606081015160608301526001600160801b03608082015116608083015267ffffffffffffffff60a08201511660a08301525050565b5f602082840312156131da575f80fd5b5051919050565b67ffffffffffffffff81168114610a2b575f80fd5b8035611358816131e1565b81358152602080830135908201526040808301359082015261010081016001600160801b0361323260608501613108565b1660608301526001600160801b0361324c60808501613108565b1660808301526001600160a01b0361326660a08501612ee6565b1660a083015261327860c08401612ee6565b6001600160a01b031660c083015261329260e084016131f6565b67ffffffffffffffff811660e0840152612d3e565b6001600160801b0382811682821603908111156107f0576107f0613137565b5f602082840312156132d6575f80fd5b813561202f816131e1565b5f602082840312156132f1575f80fd5b815161202f8161306e565b5f6020828403121561330c575f80fd5b813563ffffffff8116811461202f575f80fd5b5f6020828403121561332f575f80fd5b815161202f816131e1565b60c081016107f0828480511515825267ffffffffffffffff60208201511660208301526001600160801b036040820151166040830152606081015160608301526080810151608083015260a081015160a08301525050565b5f808335601e198436030181126133a7575f80fd5b83018035915067ffffffffffffffff8211156133c1575f80fd5b6020019150368190038213156133d5575f80fd5b9250929050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6134176040830186886133dc565b8281036020840152612e3e8185876133dc565b5f60033d11156134405760045f803e505f5160e01c5b90565b601f8201601f1916810167ffffffffffffffff8111828210171561347557634e487b7160e01b5f52604160045260245ffd5b6040525050565b5f60443d10156134895790565b6040513d600319016004823e80513d602482011167ffffffffffffffff821117156134b357505090565b808201805167ffffffffffffffff8111156134cf575050505090565b3d84016003190182820160200111156134e9575050505090565b6134f860208285010185613443565b509392505050565b5f81518060208401855e5f93019283525090919050565b5f61202f8284613500565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613546575f80fd5b81356002811061202f575f80fd5b5f610100820190508251825260208301516020830152604083015160408301526001600160801b0360608401511660608301526001600160801b0360808401511660808301526001600160a01b0360a08401511660a083015260c08301516135c760c08401826001600160a01b03169052565b5060e0830151612d3e60e084018267ffffffffffffffff169052565b808201808211156107f0576107f0613137565b6001600160a01b038316815260e0810161202f6020830184805182526001600160a01b03602082015116602083015260408101516040830152606081015160608301526001600160801b03608082015116608083015267ffffffffffffffff60a08201511660a08301525050565b80516020808301519190811015612f0c575f1960209190910360031b1b16919050565b5f67ffffffffffffffff821667ffffffffffffffff81036136aa576136aa613137565b60010192915050565b818103818111156107f0576107f0613137565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fea26469706673582212205b4c9ef837fc4ccee13e3083fe57d51a2720c613bef28d860ab73f070a3c5dbb64736f6c634300081a0033