0 txs
0 calls
constructor
constructor()
functions
beacon
viewfunction beacon() view returns (address)
ETH
viewfunction ETH() view returns (address)
getBridgeFee
viewfunction getBridgeFee(address token) view returns (address _token, uint256 _amount)
getDeployedAddresses
viewfunction getDeployedAddresses(uint256 start, uint256 n) view returns (address[])
getDeterministicAddress
viewfunction getDeterministicAddress(bytes32 salt) view returns (address)
getRecoveryWallet
viewfunction getRecoveryWallet() view returns (address)
getTokenConfig
viewfunction getTokenConfig(address token) view returns (tuple)
isTokenSupported
viewfunction isTokenSupported(address token) view returns (bool)
isTopUpContract
viewfunction isTopUpContract(address topUpContract) view returns (bool)
MAX_ALLOWED_SLIPPAGE
viewfunction MAX_ALLOWED_SLIPPAGE() view returns (uint96)
numContractsDeployed
viewfunction numContractsDeployed() view returns (uint256)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
roleRegistry
viewfunction roleRegistry() view returns (address)
TOPUP_FACTORY_ADMIN_ROLE
viewfunction TOPUP_FACTORY_ADMIN_ROLE() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
bridge
payablefunction bridge(address token) payable
deployTopUpContract
nonpayablefunction deployTopUpContract(bytes32 salt)
initialize
nonpayablefunction initialize(address _roleRegistry, address _topUpImpl)
pause
nonpayablefunction pause()
processTopUp
nonpayablefunction processTopUp(address[] tokens, uint256 start, uint256 n)
processTopUpFromContracts
nonpayablefunction processTopUpFromContracts(address[] tokens, address[] topUpContracts)
recoverFunds
nonpayablefunction recoverFunds(address token, uint256 amount)
setRecoveryWallet
nonpayablefunction setRecoveryWallet(address _recoveryWallet)
setTokenConfig
nonpayablefunction setTokenConfig(address[] tokens, tuple[] configs)
unpause
nonpayablefunction unpause()
upgradeBeaconImplementation
nonpayablefunction upgradeBeaconImplementation(address _newImpl)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
BeaconImplemenationUpgraded
event BeaconImplemenationUpgraded(address oldImpl, address newImpl)
BeaconProxyDeployed
event BeaconProxyDeployed(bytes32 salt, address indexed deployed)
Bridge
event Bridge(address indexed token, uint256 amount)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
Recovery
event Recovery(address recoveryWallet, address indexed token, uint256 amount)
RecoveryWalletSet
event RecoveryWalletSet(address oldRecoveryWallet, address newRecoveryWallet)
TokenConfigSet
event TokenConfigSet(address[] tokens, (address bridgeAdapter, address recipientOnDestChain, uint96 maxSlippageInBps, bytes additionalData)[] config)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ArrayLengthMismatch
error ArrayLengthMismatch()
DeployedAddressDifferentFromExpected
error DeployedAddressDifferentFromExpected()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
IndexOutOfBounds
error IndexOutOfBounds()
InitializationFailed
error InitializationFailed()
InvalidConfig
error InvalidConfig()
InvalidInitialization
error InvalidInitialization()
InvalidInput
error InvalidInput()
InvalidStartIndex
error InvalidStartIndex()
InvalidTopUpAddress
error InvalidTopUpAddress()
NotInitializing
error NotInitializing()
OnlyAdmin
error OnlyAdmin()
OnlyRoleRegistryOwner
error OnlyRoleRegistryOwner()
OnlyUnsupportedTokens
error OnlyUnsupportedTokens()
RecoveryWalletCannotBeZeroAddress
error RecoveryWalletCannotBeZeroAddress()
RecoveryWalletNotSet
error RecoveryWalletNotSet()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TokenCannotBeZeroAddress
error TokenCannotBeZeroAddress()
TokenConfigNotSet
error TokenConfigNotSet()
Unauthorized
error Unauthorized()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroBalance
error ZeroBalance()
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516138cc6100f95f395f8181611a0401528181611a2d0152611be301526138cc5ff3fe6080604052600436106101b2575f3560e01c8063760d0f9d116100e7578063ad3cb1cc11610087578063c93d2b1d11610062578063c93d2b1d14610551578063cb67e3b114610570578063cd00c5381461059c578063de9d008d146105bb575f5ffd5b8063ad3cb1cc146104c9578063b0b15c1114610506578063b69fd59914610525575f5ffd5b80638456cb59116100c25780638456cb591461044f578063886e89a514610463578063933bcc6a14610477578063a58dcc95146104aa575f5ffd5b8063760d0f9d146103ea5780637b0eb57d146104095780638322fff214610428575f5ffd5b806353ca57da1161015257806359659e901161012d57806359659e90146103235780635c975abb1461033757806360db28731461036657806375151b6314610392575f5ffd5b806353ca57da146102b35780635417b02c146102c65780635860975414610304575f5ffd5b80633f4ba83a1161018d5780633f4ba83a1461024b578063485cc9551461025f5780634f1ef2861461027e57806352d1902d14610291575f5ffd5b806308c73259146101bd57806319b86590146101ee5780631becc4201461020f575f5ffd5b366101b957005b5f5ffd5b3480156101c8575f5ffd5b506101d16105da565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101f9575f5ffd5b5061020d61020836600461261f565b61060e565b005b34801561021a575f5ffd5b507fe4e747da44afe6bc45062fa78d7d038abc167c5a78dee3046108b9cc47b1b102546001600160a01b03166101d1565b348015610256575f5ffd5b5061020d6108d1565b34801561026a575f5ffd5b5061020d61027936600461269d565b610938565b61020d61028c3660046126e8565b610a46565b34801561029c575f5ffd5b506102a5610a65565b6040519081526020016101e5565b61020d6102c13660046127ab565b610a80565b3480156102d1575f5ffd5b506102e56102e03660046127ab565b610c98565b604080516001600160a01b0390931683526020830191909152016101e5565b34801561030f575f5ffd5b5061020d61031e3660046127c6565b610e68565b34801561032e575f5ffd5b506101d1610ff6565b348015610342575f5ffd5b505f5160206138a05f395f51905f525460ff165b60405190151581526020016101e5565b348015610371575f5ffd5b506103856103803660046127f0565b61101e565b6040516101e59190612810565b34801561039d575f5ffd5b506103566103ac3660046127ab565b6001600160a01b039081165f9081527fe4e747da44afe6bc45062fa78d7d038abc167c5a78dee3046108b9cc47b1b101602052604090205416151590565b3480156103f5575f5ffd5b5061020d61040436600461285b565b611119565b348015610414575f5ffd5b5061020d61042336600461261f565b61123a565b348015610433575f5ffd5b506101d173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561045a575f5ffd5b5061020d61132d565b34801561046e575f5ffd5b506102a5611392565b348015610482575f5ffd5b506102a57f868806bbeec73fdba0866324dc3c095ba01da8485613ba59277d58549af3baa481565b3480156104b5575f5ffd5b506101d16104c436600461285b565b6113ae565b3480156104d4575f5ffd5b506104f9604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101e591906128a0565b348015610511575f5ffd5b506103566105203660046127ab565b6113b8565b348015610530575f5ffd5b5061053960c881565b6040516001600160601b0390911681526020016101e5565b34801561055c575f5ffd5b5061020d61056b3660046128b2565b6113d8565b34801561057b575f5ffd5b5061058f61058a3660046127ab565b6114b3565b6040516101e591906128fe565b3480156105a7575f5ffd5b5061020d6105b63660046127ab565b6115ee565b3480156105c6575f5ffd5b5061020d6105d53660046127ab565b61171e565b5f807fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5005b546001600160a01b031692915050565b336106176105da565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610652573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106769190612957565b6001600160a01b03161461069d5760405163ab1899a760e01b815260040160405180910390fd5b5f5160206138605f395f51905f52838281146106cc5760405163512509d360e11b815260040160405180910390fd5b5f5b8181101561088b575f8787838181106106e9576106e9612972565b90506020020160208101906106fe91906127ab565b6001600160a01b03160361072557604051635f5d339960e01b815260040160405180910390fd5b5f85858381811061073857610738612972565b905060200281019061074a9190612986565b6107589060208101906127ab565b6001600160a01b031614806107a957505f85858381811061077b5761077b612972565b905060200281019061078d9190612986565b61079e9060408101906020016127ab565b6001600160a01b0316145b806107f1575060c88585838181106107c3576107c3612972565b90506020028101906107d59190612986565b6107e69060608101906040016129b8565b6001600160601b0316115b1561080f576040516306b7c75960e31b815260040160405180910390fd5b84848281811061082157610821612972565b90506020028101906108339190612986565b836001015f89898581811061084a5761084a612972565b905060200201602081019061085f91906127ab565b6001600160a01b0316815260208101919091526040015f206108818282612b28565b50506001016106ce565b507f7469ae09c3436c0a7289c9e6d339d931cce35bcd22c06246cdc9d32869782852868686866040516108c19493929190612c47565b60405180910390a1505050505050565b6108d96105da565b6040516317bf301f60e21b81523360048201526001600160a01b039190911690635efcc07c906024015f6040518083038186803b158015610918575f5ffd5b505afa15801561092a573d5f5f3e3d5ffd5b505050506109366118ff565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f8115801561097c5750825b90505f826001600160401b031660011480156109975750303b155b9050811580156109a5575080155b156109c35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156109ed57845460ff60401b1916600160401b1785555b6109f7878761195e565b8315610a3d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610a4e6119f9565b610a5782611a9d565b610a618282611b12565b5050565b5f610a6e611bd8565b505f5160206138805f395f51905f5290565b610a88611c21565b5f5160206138605f395f51905f526001600160a01b038216610abd57604051635f5d339960e01b815260040160405180910390fd5b6001600160a01b038281165f90815260018301602052604090205416610af6576040516317b428a360e01b815260040160405180910390fd5b5f6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610b86576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610b5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b819190612d6c565b610b97565b610b97662386f26fc1000047612d97565b9050805f03610bb95760405163334ab3f560e11b815260040160405180910390fd5b6001600160a01b038381165f90815260018481016020526040918290208054918101549251610c4f949283169363b14d361d60e01b93610c18938a93899392831692600160a01b90046001600160601b03169160020190602401612e28565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611c51565b50826001600160a01b03167f22e3f162fca16dc0fcfb65eddf406531a0c555a2c24c58cf5d10fc2d202a882e82604051610c8b91815260200190565b60405180910390a2505050565b5f805f5160206138605f395f51905f526001600160a01b038416610ccf57604051635f5d339960e01b815260040160405180910390fd5b6001600160a01b038481165f90815260018301602052604090205416610d08576040516317b428a360e01b815260040160405180910390fd5b5f6001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610d98576040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610d6f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d939190612d6c565b610d9a565b475b9050805f03610dbc5760405163334ab3f560e11b815260040160405180910390fd5b6001600160a01b038581165f90815260018481016020526040918290208054918101549251630bbfe4bf60e41b81529184169363bbfe4bf093610e1f938b938893831692600160a01b90046001600160601b031691600290910190600401612e28565b6040805180830381865afa158015610e39573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5d9190612e74565b935093505050915091565b33610e716105da565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed09190612957565b6001600160a01b031614610ef75760405163ab1899a760e01b815260040160405180910390fd5b5f5160206138605f395f51905f526001600160a01b038316610f2c57604051635f5d339960e01b815260040160405180910390fd5b6001600160a01b038381165f9081526001830160205260409020541615610f665760405163c6486ddf60e01b815260040160405180910390fd5b60028101546001600160a01b0316610f91576040516315bc61ef60e31b815260040160405180910390fd5b6002810154610fad906001600160a01b03858116911684611cd5565b6002810154604080516001600160a01b03928316815260208101859052918516917fb66c2595c5f377625ce78f02a4e5a1e17bd8e65fb805e6262a773981729899239101610c8b565b5f807f644210a929ca6ee03d33c1a1fe361b36b5a9728941782cd06b1139e4cae582006105fe565b60605f5160206138605f395f51905f525f61103882611d27565b905080851061105a576040516392c4425960e01b815260040160405180910390fd5b806110658587612ea0565b1115611078576110758582612d97565b93505b5f846001600160401b03811115611091576110916126d4565b6040519080825280602002602001820160405280156110ba578160200160208202803683370190505b5090505f5b8581101561110d576110db6110d48289612ea0565b8590611d78565b8282815181106110ed576110ed612972565b6001600160a01b03909216602092830291909101909101526001016110bf565b50925050505b92915050565b611121611c21565b6111296105da565b604051632474521560e21b81527f868806bbeec73fdba0866324dc3c095ba01da8485613ba59277d58549af3baa460048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015611193573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b79190612eb3565b6111d457604051634755657960e01b815260040160405180910390fd5b60408051306024808301919091528251808303909101815260449091019091526020810180516001600160e01b031663189acdbd60e31b1790525f6112198383611dca565b90505f5160206138605f395f51905f526112338183611f5c565b5050505050565b5f5160206138605f395f51905f52815f5b81811015610a3d5761128485858381811061126857611268612972565b905060200201602081019061127d91906127ab565b84906120b8565b6112a157604051631359be9560e11b815260040160405180910390fd5b8484828181106112b3576112b3612972565b90506020020160208101906112c891906127ab565b6001600160a01b031663aaa238be88886040518363ffffffff1660e01b81526004016112f5929190612ed2565b5f604051808303815f87803b15801561130c575f5ffd5b505af115801561131e573d5f5f3e3d5ffd5b5050505080600101905061124b565b6113356105da565b604051632fd0067b60e21b81523360048201526001600160a01b03919091169063bf4019ec906024015f6040518083038186803b158015611374575f5ffd5b505afa158015611386573d5f5f3e3d5ffd5b50505050610936612161565b5f6113a95f5160206138605f395f51905f52611d27565b905090565b5f611113826121a9565b5f5f5160206138605f395f51905f526113d181846120b8565b9392505050565b5f5160206138605f395f51905f525f6113f082611d27565b9050808410611412576040516392c4425960e01b815260040160405180910390fd5b8061141d8486612ea0565b11156114305761142d8482612d97565b92505b5f5b83811015610a3d5761144e6114478287612ea0565b8490611d78565b6001600160a01b031663aaa238be88886040518363ffffffff1660e01b815260040161147b929190612ed2565b5f604051808303815f87803b158015611492575f5ffd5b505af11580156114a4573d5f5f3e3d5ffd5b50505050806001019050611432565b60408051608080820183525f808352602080840182905283850182905260608085018190526001600160a01b0387811684527fe4e747da44afe6bc45062fa78d7d038abc167c5a78dee3046108b9cc47b1b10183529286902086519485018752805484168552600181015493841692850192909252600160a01b9092046001600160601b03169483019490945260028401805493945f5160206138605f395f51905f5294909284019190611566906129f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611592906129f3565b80156115dd5780601f106115b4576101008083540402835291602001916115dd565b820191905f5260205f20905b8154815290600101906020018083116115c057829003601f168201915b505050505081525050915050919050565b336115f76105da565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611632573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116569190612957565b6001600160a01b03161461167d5760405163ab1899a760e01b815260040160405180910390fd5b5f5160206138605f395f51905f526001600160a01b0382166116b2576040516332ff4e5f60e11b815260040160405180910390fd5b6002810154604080516001600160a01b03928316815291841660208301527fadb84db668ad3a3e3aa18a04bfddc5be02e91df5a50b6f582d333ff4aadc6238910160405180910390a160020180546001600160a01b0319166001600160a01b0392909216919091179055565b336117276105da565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611762573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117869190612957565b6001600160a01b0316146117ad5760405163ab1899a760e01b815260040160405180910390fd5b6001600160a01b0381166117d45760405163b4fa3fb360e01b815260040160405180910390fd5b7f644210a929ca6ee03d33c1a1fe361b36b5a9728941782cd06b1139e4cae582005460408051635c60da1b60e01b815290516001600160a01b03909216917fd8518b5f9760cf035849134f93f54b517edb9f10ce176b56bf030f3f9440389a918391635c60da1b916004808201926020929091908290030181865afa15801561185f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118839190612957565b604080516001600160a01b03928316815291851660208301520160405180910390a1604051631b2ce7f360e11b81526001600160a01b038381166004830152821690633659cfe6906024015f604051808303815f87803b1580156118e5575f5ffd5b505af11580156118f7573d5f5f3e3d5ffd5b505050505050565b6119076121b4565b5f5160206138a05f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6119666121e3565b61196f8261222c565b61197761227e565b5f7f644210a929ca6ee03d33c1a1fe361b36b5a9728941782cd06b1139e4cae58200905081306040516119a9906125be565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156119d9573d5f5f3e3d5ffd5b5081546001600160a01b0319166001600160a01b03919091161790555050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a7f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a735f5160206138805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156109365760405163703e46dd60e11b815260040160405180910390fd5b5f7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5008054604051634766d28760e01b81523360048201529192506001600160a01b031690634766d287906024015f6040518083038186803b158015611b00575f5ffd5b505afa1580156118f7573d5f5f3e3d5ffd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b6c575060408051601f3d908101601f19168201909252611b6991810190612d6c565b60015b611b9957604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f5160206138805f395f51905f528114611bc957604051632a87526960e21b815260048101829052602401611b90565b611bd3838361228e565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109365760405163703e46dd60e11b815260040160405180910390fd5b5f5160206138a05f395f51905f525460ff16156109365760405163d93c066560e01b815260040160405180910390fd5b6060306001600160a01b03841603611ca25760405162461bcd60e51b81526020600482015260146024820152733232b632b3b0ba32b1b0b636103a379039b2b63360611b6044820152606401611b90565b5f5f835160208501865af43d6040519250808352805f602085013e820160200160405280611cce573d82fd5b5092915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bd39084906122e3565b63978aab926004525f8181526024812080548060a01b60a01c8060011c9350808260601c1517611d7057600193508383015415611d7057600293508383015415611d7057600393505b505050919050565b63978aab926004525f828152602481208281015460601c915068fbb67fda52d4bfb8bf82141582029150611dab84611d27565b8310611cce57604051634e23d03560e01b815260040160405180910390fd5b5f5f611dd5846113ae565b90505f611e5a60405180602001611deb906125cb565b601f1982820381018352601f90910116604052611e06610ff6565b604080516001600160a01b039092166020830152818101525f606082015260800160408051601f1981840301815290829052611e459291602001612efc565b60405160208183030381529060405286612355565b845190915015611edf575f816001600160a01b031685604051611e7d9190612f10565b5f604051808303815f865af19150503d805f8114611eb6576040519150601f19603f3d011682016040523d82523d5f602084013e611ebb565b606091505b5050905080611edd57604051630337323560e31b815260040160405180910390fd5b505b806001600160a01b0316826001600160a01b031614611f115760405163169c822160e01b815260040160405180910390fd5b806001600160a01b03167f5889f63567a2730b47d0d74082206509fb86668d46a900bd695e655d099d586e86604051611f4c91815260200190565b60405180910390a2949350505050565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be198301611f975763f5a267f15f526004601cfd5b82611fa95768fbb67fda52d4bfb8bf92505b80546001600160601b038116826020528061206b578160601c80611fd7578560601b845560019450506120af565b858103611fe457506120af565b600184015460601c80612005578660601b60018601556001955050506120af565b8681036120135750506120af565b600285015460601c80612035578760601b6002870155600196505050506120af565b878103612044575050506120af565b5f928352604080842060019055918352818320600290558252902060039055506007908117905b845f5260405f2080546120ad57600191821c808301825591945081612099578560601b6003178455506120af565b8560601b82850155826002018455506120af565b505b50505092915050565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be1983016120f35763f5a267f15f526004601cfd5b826121055768fbb67fda52d4bfb8bf92505b80546001600160601b0381166121485760019250838160601c031561215957600182015460601c841461215957600282015460601c8414612159575f9250612159565b81602052835f5260405f2054151592505b505092915050565b612169611c21565b5f5160206138a05f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611940565b5f6111138230612361565b5f5160206138a05f395f51905f525460ff1661093657604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661093657604051631afcd79f60e31b815260040160405180910390fd5b6122346121e3565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f50080546001600160a01b0319166001600160a01b0383161781556122766123b8565b610a616123c0565b6122866121e3565b6109366123c0565b612297826123e0565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156122db57611bd38282612443565b610a616124b5565b5f5f60205f8451602086015f885af180612302576040513d5f823e3d81fd5b50505f513d91508115612319578060011415612326565b6001600160a01b0384163b155b1561234f57604051635274afe760e01b81526001600160a01b0385166004820152602401611b90565b50505050565b5f6113d15f84846124d4565b5f604051825f5260ff600b53836020527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f6040526055600b20601452806040525061d6945f52600160345350506017601e20919050565b6109366121e3565b6123c86121e3565b5f5160206138a05f395f51905f52805460ff19169055565b806001600160a01b03163b5f0361241557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b90565b5f5160206138805f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161245f9190612f10565b5f60405180830381855af49150503d805f8114612497576040519150601f19603f3d011682016040523d82523d5f602084013e61249c565b606091505b50915091506124ac85838361253d565b95945050505050565b34156109365760405163b398979f60e01b815260040160405180910390fd5b5f6f67363d3d37363d34f03d5260086018f35f52816010805ff5806125005763301164255f526004601cfd5b8060145261d6945f5260016034536017601e2091505f5f85516020870188855af1823b026125355763301164255f526004601cfd5b509392505050565b6060826125525761254d82612592565b6113d1565b815115801561256957506001600160a01b0384163b155b15611cce57604051639996b31560e01b81526001600160a01b0385166004820152602401611b90565b8051156125a25780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50565b6103f880612f1c83390190565b61054c8061331483390190565b5f5f83601f8401126125e8575f5ffd5b5081356001600160401b038111156125fe575f5ffd5b6020830191508360208260051b8501011115612618575f5ffd5b9250929050565b5f5f5f5f60408587031215612632575f5ffd5b84356001600160401b03811115612647575f5ffd5b612653878288016125d8565b90955093505060208501356001600160401b03811115612671575f5ffd5b61267d878288016125d8565b95989497509550505050565b6001600160a01b03811681146125bb575f5ffd5b5f5f604083850312156126ae575f5ffd5b82356126b981612689565b915060208301356126c981612689565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156126f9575f5ffd5b823561270481612689565b915060208301356001600160401b0381111561271e575f5ffd5b8301601f8101851361272e575f5ffd5b80356001600160401b03811115612747576127476126d4565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612775576127756126d4565b60405281815282820160200187101561278c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f602082840312156127bb575f5ffd5b81356113d181612689565b5f5f604083850312156127d7575f5ffd5b82356127e281612689565b946020939093013593505050565b5f5f60408385031215612801575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156128505783516001600160a01b0316835260209384019390920191600101612829565b509095945050505050565b5f6020828403121561286b575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6113d16020830184612872565b5f5f5f5f606085870312156128c5575f5ffd5b84356001600160401b038111156128da575f5ffd5b6128e6878288016125d8565b90989097506020870135966040013595509350505050565b6020815260018060a01b03825116602082015260018060a01b0360208301511660408201526001600160601b0360408301511660608201525f606083015160808084015261294f60a0840182612872565b949350505050565b5f60208284031215612967575f5ffd5b81516113d181612689565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e1983360301811261299a575f5ffd5b9190910192915050565b6001600160601b03811681146125bb575f5ffd5b5f602082840312156129c8575f5ffd5b81356113d1816129a4565b80546001600160a01b0319166001600160a01b0392909216919091179055565b600181811c90821680612a0757607f821691505b602082108103612a2557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611bd357805f5260205f20601f840160051c81016020851015612a505750805b601f840160051c820191505b81811015611233575f8155600101612a5c565b6001600160401b03831115612a8657612a866126d4565b612a9a83612a9483546129f3565b83612a2b565b5f601f841160018114612acb575f8515612ab45750838201355b5f19600387901b1c1916600186901b178355611233565b5f83815260208120601f198716915b82811015612afa5786850135825560209485019460019092019101612ada565b5086821015612b16575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135612b3381612689565b612b3d81836129d3565b50600181016020830135612b5081612689565b612b5a81836129d3565b506040830135612b69816129a4565b81546001600160a01b031660a09190911b6001600160a01b031916179055606082013536839003601e19018112612b9e575f5ffd5b820180356001600160401b03811115612bb5575f5ffd5b602082019150803603821315612bc9575f5ffd5b61234f818360028601612a6f565b8183526020830192505f815f5b84811015612c15578135612bf781612689565b6001600160a01b031686526020958601959190910190600101612be4565b5093949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f612c5a604083018688612bd7565b82810360208401528084825260208201905060208560051b830101865f607e19893603015b88821015612d5c57858403601f190185528235818112612c9d575f5ffd5b8a018035612caa81612689565b6001600160a01b031685526020810135612cc381612689565b6001600160a01b031660208601526040810135612cdf816129a4565b6001600160601b03166040860152606081013536829003601e19018112612d04575f5ffd5b016020810190356001600160401b03811115612d1e575f5ffd5b803603821315612d2c575f5ffd5b60806060870152612d41608087018284612c1f565b95505050602083019250602085019450600182019150612c7f565b50919a9950505050505050505050565b5f60208284031215612d7c575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561111357611113612d83565b5f8154612db6816129f3565b808552600182168015612dd05760018114612dec576120af565b60ff1983166020870152602082151560051b87010193506120af565b845f5260205f205f5b83811015612e175781546020828a010152600182019150602081019050612df5565b870160200194505050505092915050565b6001600160a01b03868116825260208201869052841660408201526001600160601b038316606082015260a0608082018190525f90612e6990830184612daa565b979650505050505050565b5f5f60408385031215612e85575f5ffd5b8251612e9081612689565b6020939093015192949293505050565b8082018082111561111357611113612d83565b5f60208284031215612ec3575f5ffd5b815180151581146113d1575f5ffd5b602081525f61294f602083018486612bd7565b5f81518060208401855e5f93019283525090919050565b5f61294f612f0a8386612ee5565b84612ee5565b5f6113d18284612ee556fe608060405234801561000f575f5ffd5b506040516103f83803806103f883398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f5ffd5b919050565b5f5f60408385031215610170575f5ffd5b61017983610144565b915061018760208401610144565b90509250929050565b61025b8061019d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c610067366004610221565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c6100d6565b5f546001600160a01b031661007b565b61006c6100bd366004610221565b6100e9565b6100ca610128565b6100d381610154565b50565b6100de610128565b6100e75f6101d2565b565b6100f1610128565b6001600160a01b03811661011f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100d3816101d2565b5f546001600160a01b031633146100e75760405163118cdaa760e01b8152336004820152602401610116565b806001600160a01b03163b5f036101895760405163211eb15960e21b81526001600160a01b0382166004820152602401610116565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610231575f5ffd5b81356001600160a01b0381168114610247575f5ffd5b939250505056fea164736f6c634300081c000a60a060405260405161054c38038061054c83398101604081905261002291610354565b61002c828261003e565b506001600160a01b0316608052610445565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610416565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610416565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f5f846001600160a01b031684604051610225919061042f565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461033b575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610365575f5ffd5b61036e83610325565b60208401519092506001600160401b03811115610389575f5ffd5b8301601f81018513610399575f5ffd5b80516001600160401b038111156103b2576103b2610340565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103e0576103e0610340565b6040528181528282016020018710156103f7575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f60208284031215610426575f5ffd5b6102f582610325565b5f82518060208501845e5f920191825250919050565b60805160f261045a5f395f601d015260f25ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f5f375f5f365f845af43d5f5f3e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f5ffd5b81516001600160a01b038116811460de575f5ffd5b939250505056fea164736f6c634300081c000ae4e747da44afe6bc45062fa78d7d038abc167c5a78dee3046108b9cc47b1b100360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a164736f6c634300081c000a