0 txs
2.9k calls
constructor
constructor(address _ibcHandler, address _weth, address _erc20Impl)
functions
authority
viewfunction authority() view returns (address)
channelBalance
viewfunction channelBalance(uint32, uint256, address) view returns (uint256)
ERC20_IMPL
viewfunction ERC20_IMPL() view returns (address)
EXEC_MIN_GAS
viewfunction EXEC_MIN_GAS() view returns (uint256)
getBucket
viewfunction getBucket(address token) view returns (tuple)
gitRev
purefunction gitRev() pure returns (string)
IBC_HANDLER
viewfunction IBC_HANDLER() view returns (address)
ibcAddress
viewfunction ibcAddress() view returns (address)
inFlightPacket
viewfunction inFlightPacket(bytes32) view returns (uint32 sourceChannelId, uint32 destinationChannelId, bytes data, uint64 timeoutHeight, uint64 timeoutTimestamp)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
paused
viewfunction paused() view returns (bool)
predictWrappedToken
viewfunction predictWrappedToken(uint256 path, uint32 channel, bytes token) view returns (address, bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
tokenOrigin
viewfunction tokenOrigin(address) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
WETH
viewfunction WETH() view returns (address)
execute
nonpayablefunction execute(address caller, tuple ibcPacket, address relayer, bytes relayerMsg) returns (bytes)
initialize
nonpayablefunction initialize(address _authority)
onAcknowledgementPacket
nonpayablefunction onAcknowledgementPacket(address caller, tuple ibcPacket, bytes ack, address relayer)
onChanCloseConfirm
nonpayablefunction onChanCloseConfirm(address, uint32, address)
onChanCloseInit
nonpayablefunction onChanCloseInit(address, uint32, address)
onChanOpenAck
nonpayablefunction onChanOpenAck(address, uint32 channelId, uint32, string counterpartyVersion, address)
onChanOpenConfirm
nonpayablefunction onChanOpenConfirm(address, uint32 channelId, address)
onChanOpenInit
nonpayablefunction onChanOpenInit(address, uint32, uint32, string version, address)
onChanOpenTry
nonpayablefunction onChanOpenTry(address, uint32, uint32, uint32, string version, string counterpartyVersion, address)
onRecvIntentPacket
nonpayablefunction onRecvIntentPacket(address, tuple, address, bytes) returns (bytes)
onRecvPacket
nonpayablefunction onRecvPacket(address caller, tuple packet, address relayer, bytes relayerMsg) returns (bytes)
onTimeoutPacket
nonpayablefunction onTimeoutPacket(address caller, tuple ibcPacket, address relayer)
pause
nonpayablefunction pause()
send
nonpayablefunction send(uint32 channelId, uint64 timeoutHeight, uint64 timeoutTimestamp, bytes32 salt, tuple instruction)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
setBucketConfig
nonpayablefunction setBucketConfig(address token, uint256 capacity, uint256 refillRate, bool reset)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AuthorityUpdated
event AuthorityUpdated(address authority)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
TokenBucketUpdate
event TokenBucketUpdate(address indexed token, uint256 capacity, uint256 refillRate)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ErrAsyncMultiplexUnsupported
error ErrAsyncMultiplexUnsupported()
ErrBatchMustBeSync
error ErrBatchMustBeSync()
ErrInfiniteGame
error ErrInfiniteGame()
ErrInvalidAssetDecimals
error ErrInvalidAssetDecimals()
ErrInvalidAssetName
error ErrInvalidAssetName()
ErrInvalidAssetOrigin
error ErrInvalidAssetOrigin()
ErrInvalidAssetSymbol
error ErrInvalidAssetSymbol()
ErrInvalidBatchInstruction
error ErrInvalidBatchInstruction()
ErrInvalidFillType
error ErrInvalidFillType()
ErrInvalidForwardDestinationChannelId
error ErrInvalidForwardDestinationChannelId()
ErrInvalidForwardInstruction
error ErrInvalidForwardInstruction()
ErrInvalidHops
error ErrInvalidHops()
ErrInvalidIBCVersion
error ErrInvalidIBCVersion()
ErrInvalidMultiplexSender
error ErrInvalidMultiplexSender()
ErrMinimumExecutionGasNotRespected
error ErrMinimumExecutionGasNotRespected()
ErrNotIBC
error ErrNotIBC()
ErrNotImplemented
error ErrNotImplemented()
ErrOnlyMaker
error ErrOnlyMaker()
ErrTokenBucketRateLimitExceeded
error ErrTokenBucketRateLimitExceeded()
ErrTokenBucketZeroCapacity
error ErrTokenBucketZeroCapacity()
ErrTokenBucketZeroRefillRate
error ErrTokenBucketZeroRefillRate()
ErrUnauthorized
error ErrUnauthorized()
ErrUnknownOpcode
error ErrUnknownOpcode()
ErrUnsupportedVersion
error ErrUnsupportedVersion()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x6101003461018e57601f61560a38819003918201601f19168301916001600160401b038311848410176101925780849260609460405283398101031261018e578051906001600160a01b038216820361018e576020810151906001600160a01b038216820361018e5760400151916001600160a01b038316830361018e57306080525f5160206155ea5f395f51905f525460ff8160401c1661017f576002600160401b03196001600160401b03821601610129575b5060a05260c05260e05260405161544390816101a78239608051818181610d7e0152610f98015260a0518181816102aa015281816103c101528181611c4701528181611e5d015281816123860152613918015260c0518181816109a20152614cc3015260e051818181610321015261414b0152f35b6001600160401b0319166001600160401b039081175f5160206155ea5f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f6100b4565b63f92ee8a960e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c80630d27062c1461143a57806310cac64814610a29578063168ce11c146113db578063172d9c48146112165780632cd66b6f1461134f5780633f4ba83a1461127257806340380c61146112165780634f1ef28614610f5a5780635101edc414610e6a57806352a06c5814610df657806352d1902d14610d645780635c975abb14610d23578063667b822e14610ce2578063696a9bf4146103a25780636f10483014610c9f57806370e771a714610c835780637a35b79614610c4b5780637a9e5e4b14610b905780638456cb5914610ad95780638fb3603714610a46578063a6071af914610a29578063ad3cb1cc146109c6578063ad5c464814610983578063b46630bc14610926578063b6fa0588146108a6578063b826cab11461078a578063bf7e214f14610745578063c346c2f51461069f578063c4d66de814610419578063ce650d39146103e5578063e079e299146103a2578063ea10e2fd14610345578063f066293c146103025763ff0d7c2f0361000e57346102fe5760a06003193601126102fe576101ad61155b565b6024359067ffffffffffffffff821682036102fe576044359167ffffffffffffffff831683036102fe576084359167ffffffffffffffff83116102fe5760606003198460040194360301126102fe5761029d6102695f9461020c6123d5565b610217818786612dc6565b61025f60405160208101903360601b825260643560348201526034815261023f6054826116c4565b5190209160405192610250846116a8565b8352876020840152369061222d565b6040820152612eea565b60405195869485947fe5cbff7900000000000000000000000000000000000000000000000000000000865260048601612346565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f3576102d857005b610018903d805f833e6102eb81836116c4565b8101906122ac565b6040513d5f823e3d90fd5b5f80fd5b346102fe575f6003193601126102fe5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102fe5760606003193601126102fe5761035e611522565b60443567ffffffffffffffff81116102fe5760409161038461038d92369060040161157f565b91600435612d3f565b6001600160a01b038351921682526020820152f35b346102fe575f6003193601126102fe5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102fe5760606003193601126102fe576103fe6114e0565b50610407611522565b506104106114f6565b5061001861237b565b346102fe5760206003193601126102fe576104326114e0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159167ffffffffffffffff821680159081610697575b600114908161068d575b159081610684575b5061065c57818360017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006104f09516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610607575b506104e3614311565b6104eb614311565b612c06565b6104f8614311565b610500614311565b610508614311565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005561057457005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055836104da565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501584610483565b303b15915061047b565b849150610471565b346102fe5760206003193601126102fe576106b86114e0565b5f60606040516106c781611627565b82815282602082015282604082015201526001600160a01b036106e8612cde565b91165f52602052608060405f2060405161070181611627565b815491828252600181015460208301908152606060036002840154936040860194855201549301928352604051938452516020840152516040830152516060820152f35b346102fe575f6003193601126102fe5760206001600160a01b037ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416604051908152f35b346102fe5760806003193601126102fe576107a36114e0565b6024359060443560643580151581036102fe576107c0363361287b565b831561087e578115610856577f1b1302794bb5570d2f5ac77ad92788d5ee5795731e03203c6b37503ac696057f926040926001600160a01b0392610802612cde565b8484165f5260205286855f20818155836002820155600381019283541590811561084e575b5061083f575b505050835195865260208601521692a2005b6001015542905586868161082d565b90508a610827565b7f7b3231e1000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fca686b24000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe5760206003193601126102fe576004355f52600160205263ffffffff60405f2080549067ffffffffffffffff61091060026108e760018501611835565b93015492604051958581889716875260201c16602086015260a0604086015260a08501906114bb565b91818116606085015260401c1660808301520390f35b346102fe5760606003193601126102fe5761093f61155b565b63ffffffff61094c6114f6565b91165f52600360205260405f206024355f526020526001600160a01b0360405f2091165f52602052602060405f2054604051908152f35b346102fe575f6003193601126102fe5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102fe575f6003193601126102fe57610a256040516109e76040826116c4565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906114bb565b0390f35b346102fe57610018610a3a366115ad565b94939093929192611906565b346102fe575f6003193601126102fe577ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005460a01c60ff1615610ad15760207f8fb36037000000000000000000000000000000000000000000000000000000005b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b60205f610aa7565b346102fe575f6003193601126102fe57610af3363361287b565b610afb6123d5565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346102fe5760206003193601126102fe57610ba96114e0565b6001600160a01b037ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0054163303610c1f57803b15610bea5761001890612c06565b6001600160a01b03907fc2f31e5e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b7f068ca9d8000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346102fe5760206003193601126102fe576001600160a01b03610c6c6114e0565b165f526002602052602060405f2054604051908152f35b346102fe575f6003193601126102fe57602060405161c3508152f35b346102fe57610cad36611768565b5050505050610cba61237b565b7f68b3ecb6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe57610a25610d0f610cf636611768565b93610d0293919361237b565b610d0a6123d5565b611fd9565b6040519182916020835260208301906114bb565b346102fe575f6003193601126102fe57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346102fe575f6003193601126102fe576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610dce5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe57610e0436611768565b93919092303303610e4257610a2594610d0f94610e24604084018461196a565b5093843593610e3c6020870135966040810190611b0e565b96612ae6565b7fcc12cef6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe5760e06003193601126102fe57610e836114e0565b50610e8c611522565b50610e95611535565b50610e9e611548565b5060843567ffffffffffffffff81116102fe57610ebf90369060040161157f565b60a43567ffffffffffffffff81116102fe57610ee2610efd91369060040161157f565b939092610eed61150c565b50610ef661237b565b3691611714565b60208151910120610f0c61192d565b03610f3257610f1c913691611714565b60208151910120610f2b61192d565b03610f3257005b7f3e3aa254000000000000000000000000000000000000000000000000000000005f5260045ffd5b60406003193601126102fe57610f6e6114e0565b60243567ffffffffffffffff81116102fe57610f8e90369060040161174a565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168030149081156111e1575b50610dce57610fd2363361287b565b6001600160a01b038216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f91816111ad575b5061104557837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036111825750813b1561115757807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611126575f8083602061001895519101845af4611120611ee7565b91614ff2565b50503461112f57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116111d9575b816111c9602093836116c4565b810103126102fe57519085611014565b3d91506111bc565b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583610fc3565b346102fe5760606003193601126102fe5761122f6114e0565b50611238611522565b506112416114f6565b5061124a61237b565b7ff1c8ae4a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe575f6003193601126102fe5761128c363361287b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811615611327577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe5760806003193601126102fe576113686114e0565b6024359067ffffffffffffffff82116102fe5760a060031983360301126102fe5760443567ffffffffffffffff81116102fe576113a990369060040161157f565b90606435926001600160a01b03841684036102fe57610018946113ca61237b565b6113d26123d5565b60040190611d3c565b346102fe5760606003193601126102fe576113f46114e0565b60243567ffffffffffffffff81116102fe5760a060031982360301126102fe57610018916114206114f6565b9161142961237b565b6114316123d5565b60040190611b41565b346102fe575f6003193601126102fe57610a2560405161145b6060826116c4565b602881527f373231343961343339633537313437303833333537376266373935646135656460208201527f383163376330356300000000000000000000000000000000000000000000000060408201526040519182916020835260208301905b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b600435906001600160a01b03821682036102fe57565b604435906001600160a01b03821682036102fe57565b60c435906001600160a01b03821682036102fe57565b6024359063ffffffff821682036102fe57565b6044359063ffffffff821682036102fe57565b6064359063ffffffff821682036102fe57565b6004359063ffffffff821682036102fe57565b359063ffffffff821682036102fe57565b9181601f840112156102fe5782359167ffffffffffffffff83116102fe57602083818601950101116102fe57565b9060a06003198301126102fe576004356001600160a01b03811681036102fe579160243563ffffffff811681036102fe579160443563ffffffff811681036102fe57916064359067ffffffffffffffff82116102fe5761160f9160040161157f565b90916084356001600160a01b03811681036102fe5790565b6080810190811067ffffffffffffffff82111761164357604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff82111761164357604052565b6040810190811067ffffffffffffffff82111761164357604052565b6060810190811067ffffffffffffffff82111761164357604052565b90601f601f19910116810190811067ffffffffffffffff82111761164357604052565b604051906116f66020836116c4565b565b67ffffffffffffffff811161164357601f01601f191660200190565b929192611720826116f8565b9161172e60405193846116c4565b8294818452818301116102fe578281602093845f960137010152565b9080601f830112156102fe5781602061176593359101611714565b90565b9060806003198301126102fe576004356001600160a01b03811681036102fe579160243567ffffffffffffffff81116102fe5760a060031982840301126102fe57600401916044356001600160a01b03811681036102fe57916064359067ffffffffffffffff82116102fe576117e09160040161157f565b9091565b90600182811c9216801561182b575b60208310146117fe57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916117f3565b9060405191825f825492611848846117e4565b80845293600181169081156118b1575060011461186d575b506116f6925003836116c4565b90505f9291925260205f20905f915b8183106118955750509060206116f6928201015f611860565b602091935080600191548385890101520191019091849261187c565b602093506116f69592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f611860565b359067ffffffffffffffff821682036102fe57565b505050906119179250610ef661237b565b6020815191012061192661192d565b03610f3257565b600c602060405161193f6040826116c4565b828152017f75637330332d7a6b676d2d30000000000000000000000000000000000000000081522090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fe570180359067ffffffffffffffff82116102fe576020019181360383136102fe57565b91909160a0818403126102fe57604051906119d582611670565b81936119e08261156e565b83526119ee6020830161156e565b602084015260408201359067ffffffffffffffff82116102fe5782611a1c60809492611a389486940161174a565b6040860152611a2d606082016118f1565b6060860152016118f1565b910152565b818110611a48575050565b5f8155600101611a3d565b60025f9182815560018101611a6881546117e4565b9081611a75575b50500155565b81601f869311600114611a8c5750555b5f80611a6f565b81835260208320611aa891601f0160051c810190600101611a3d565b8082528160208120915555611a85565b9063ffffffff825116815263ffffffff6020830151166020820152608067ffffffffffffffff81611af8604086015160a0604087015260a08601906114bb565b9482606082015116606086015201511691015290565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603018212156102fe570190565b919091611b51604084018461196a565b50917fc0de00000000000000000000000000000000000000000000000000000000babe8084351614611b9a575b6116f6936020611b916040860186611b0e565b940135926125c9565b611bac611ba736866119bb565b61248e565b93845f52600160205260405f2094600260405196611bc988611670565b63ffffffff81548181168a5260201c166020890152611bea60018201611835565b6040890152015467ffffffffffffffff808216918260608a015260401c168060808901521590811591611d12575b50611c2557509350611b7e565b93505050505f526001602052611c3d60405f20611a53565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690611c96604051611c796020826116c4565b5f815260405190611c898261168c565b5f82526020820152612592565b823b156102fe57611cf792611ce55f8094604051968795869485937f9f18077b000000000000000000000000000000000000000000000000000000008552604060048601526044850190611ab8565b906003198483030160248501526114bb565b03925af180156102f357611d085750565b5f6116f6916116c4565b905015155f611c18565b601f8260209493601f1993818652868601375f8582860101520116010190565b9392909193611d4e604084018461196a565b50938435927fc0de00000000000000000000000000000000000000000000000000000000babe80851614611db3575b50916116f69593918593611d9660406001980186611b0e565b936020611da58189018961196a565b999098351496013592612746565b611dc0611ba736876119bb565b90815f52600160205260405f2091600260405193611ddd85611670565b63ffffffff8154818116875260201c166020860152611dfe60018201611835565b6040860152015467ffffffffffffffff8082169182606087015260401c168060808601521590811591611edd575b50611e38575050611d7d565b94509450945050505f526001602052611e5360405f20611a53565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102fe57611ecb5f8094611cf7604051978896879586947f9f18077b000000000000000000000000000000000000000000000000000000008652604060048701526044860190611ab8565b91600319858403016024860152611d1c565b905015155f611e2c565b3d15611f11573d90611ef8826116f8565b91611f0660405193846116c4565b82523d5f602084013e565b606090565b929192611f22826116f8565b91611f3060405193846116c4565b8294818452818301116102fe578281602093845f96015e010152565b9080601f830112156102fe57815161176592602001611f16565b906020828203126102fe57815167ffffffffffffffff81116102fe576117659201611f4c565b60405190611f9b6040836116c4565b600482527fdeadc0de000000000000000000000000000000000000000000000000000000006020830152565b611fcf611f8c565b6020815191012090565b919061c3505a106121f757604051916001600160a01b0360208401947f52a06c580000000000000000000000000000000000000000000000000000000086521660248401526080604484015263ffffffff6120338361156e565b1660a484015263ffffffff61204a6020840161156e565b1660c484015260408201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112156102fe578201916020833593019067ffffffffffffffff84116102fe5783360382136102fe575f9788976001600160a01b03879567ffffffffffffffff6120f760806120dc612133996121419c60a060e48e01526101448d0191611d1c565b97836120ea606083016118f1565b166101048c0152016118f1565b166101248801521660648601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc858403016084860152611d1c565b03601f1981018352826116c4565b519082305af161214f611ee7565b90156121e5578060208061216893518301019101611f66565b8051156121d0578051602082012061217e611f8c565b60208151910120146121a8576040516117659161219a8261168c565b600182526020820152612592565b7f3717ba2c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040516121df6020826116c4565b5f815290565b50611765604051611c796020826116c4565b7fdaf0ae29000000000000000000000000000000000000000000000000000000005f5260045ffd5b359060ff821682036102fe57565b91906060838203126102fe5760405190612246826116a8565b81936122518161221f565b835261225f6020820161221f565b602084015260408101359167ffffffffffffffff83116102fe57604092611a38920161174a565b519063ffffffff821682036102fe57565b519067ffffffffffffffff821682036102fe57565b6020818303126102fe5780519067ffffffffffffffff82116102fe570160a0818303126102fe57604051916122e083611670565b6122e982612286565b83526122f760208301612286565b602084015260408201519167ffffffffffffffff83116102fe5761232260809261233e948301611f4c565b604085015261233360608201612297565b606085015201612297565b608082015290565b90611765949367ffffffffffffffff60809463ffffffff829416855216602084015216604082015281606082015201906114bb565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016036123ad57565b7fe54f8f9d000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300541661240057565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff81116116435760051b60200190565b80511561244d5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805182101561244d5760209160051b010190565b60409081519061249e83836116c4565b60018252601f1983015f5b81811061255e5750506124bb82612440565b526124c581612440565b508151908160208101938101916020855280518093526060820192602060608260051b8501019201935f905b8282106125145750505061250e925003601f1981018352826116c4565b51902090565b9193602061254e857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0839460019698030186528851611ab8565b96019201920185939194926124f1565b602090855161256c81611670565b5f81525f838201526060878201525f60608201525f6080820152828287010152016124a9565b6117656020825192015191612133604051938492602084015260408084015260608301906114bb565b3560ff811681036102fe5790565b90929160208501600360ff6125dd836125bb565b160361266157505050600160ff6125f3856125bb565b16036126395761260a8360406116f695019061196a565b5090612616828061196a565b612626604085949394018561196a565b939092606060e0870135960135966131d1565b7fbcdf6cca000000000000000000000000000000000000000000000000000000005f5260045ffd5b600260ff61267283979495976125bb565b16036126a1575060ff612684866125bb565b166126395761269a8560406116f697019061196a565b5093613187565b60ff6126ac826125bb565b166126e357509091506126c76126c1856125bb565b60ff1690565b612639576126dc8460406116f696019061196a565b5092613100565b60ff6126f06001926125bb565b160361271e576127026126c1866125bb565b612639576127178560406116f697019061196a565b5093612fb5565b7f44c1c60d000000000000000000000000000000000000000000000000000000005f5260045ffd5b91979695949793909360208901600360ff612760836125bb565b16036127bd5750505050600160ff612777886125bb565b16036126395761278e8660406116f698019061196a565b509061279a828061196a565b6127aa604085949394018561196a565b939092606060e087013596013596613401565b600260ff6127d0839894959796986125bb565b16036127ff575060ff6127e28a6125bb565b16612639576127f88960406116f69b019061196a565b5094613372565b60ff61280e82959394956125bb565b1661283d5750506128216126c1896125bb565b612639576128368860406116f69a019061196a565b5093613352565b600191945061284d60ff916125bb565b160361271e5761285f6126c1896125bb565b612639576128748860406116f69a019061196a565b50936131e9565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0054916001600160a01b03831692816004116102fe575f5f9060405f8151966001600160a01b0360208901917fb700961300000000000000000000000000000000000000000000000000000000835216978860248201523060448201527fffffffff000000000000000000000000000000000000000000000000000000008335166064820152606481526129306084826116c4565b828052826020525190895afa612ad3575b1561294e575b5050505050565b63ffffffff1615612aa7577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000177ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0055823b156102fe576020925f92836040518096819582947f94c7d7ee000000000000000000000000000000000000000000000000000000008452600484015260406024840152601f19601f6044850192808452808786860137868582860101520116010103925af180156102f357612a97575b507fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0054167ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00555f80808080612947565b5f612aa1916116c4565b5f612a26565b827f068ca9d8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50505f516020518060201c150290612941565b95949392919060208801600360ff612afd836125bb565b1603612b3457509091929350600160ff612b16896125bb565b160361263957612b2d87604061176599019061196a565b5095613e07565b600260ff612b41836125bb565b1603612b70575060ff612b53896125bb565b1661263957612b698860406117659a019061196a565b5096613d03565b60ff612b85829a98979a9996959493996125bb565b16612bc1575050505050612b9b6126c1836125bb565b6126395761176593612bba612baf846125bb565b93604081019061196a565b50936137f8565b6001919395969850612bd860ff91989395986125bb565b160361271e57612bea6126c1886125bb565b61263957612bff87604061176599019061196a565b5095613537565b60206001600160a01b037f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9216807fffffffffffffffffffffffff00000000000000000000000000000000000000007ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416177ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0055604051908152a1565b91908203918211612cb157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060405160208101907e41cb3e7b0b86ce90b22c42dea05cf50e53bc41e9561326e5a8ff0de494deb7825260208152612d386040826116c4565b5190201690565b929061213363ffffffff93612d7193604051958694602086019889521660408501526060808501526080840191611d1c565b51902090604051305f5260ff600b53826020527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f6040526055600b2060145260405261d6945f5260016034536017601e209190565b9060208301600360ff612dd8836125bb565b1603612e0a5750600160ff612dec856125bb565b160361263957612e038360406116f695019061196a565b5091614532565b600260ff612e17836125bb565b1603612e46575060ff612e29846125bb565b1661263957612e3f8360406116f695019061196a565b5091614460565b905060ff612e53826125bb565b16612e815750612e656126c1836125bb565b61263957612e7a8260406116f694019061196a565b50906143d7565b60019150612e9060ff916125bb565b160361271e57612ea26126c1826125bb565b61263957612eb78160406116f693019061196a565b50614368565b90606060406117659360ff815116845260ff602082015116602085015201519181604082015201906114bb565b611765815161213360406020850151940151604051948593602085015260408401526060808401526080830190612ebd565b3580151581036102fe5790565b3563ffffffff811681036102fe5790565b3567ffffffffffffffff811681036102fe5790565b919091357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169260148110612f83575050565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000929350829060140360031b1b161690565b93909192612fc560208301612f1c565b612fd0575050505050565b6130739167ffffffffffffffff61306d9281612feb87612f29565b96613021612ffb60208301612f29565b93613009604088018861196a565b61301960608a949394018a61196a565b93909261494a565b63ffffffff61303e608061303760608601612f3a565b9401612f3a565b94816040519b61304d8d611670565b168b521660208a015260408901521660608701521660808501528061196a565b90612f4f565b60601c803b156102fe576001600160a01b035f6130d195819583604051988997889687957f168ce11c000000000000000000000000000000000000000000000000000000008752166004860152606060248601526064850190611ab8565b9116604483015203925af180156102f3576130f0575b80808080612947565b5f6130fa916116c4565b5f6130e7565b916116f693916131168335936060810190611b0e565b936125c9565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fe570180359067ffffffffffffffff82116102fe57602001918160051b360383136102fe57565b9082101561244d576117659160051b810190611b0e565b929190613194858061311c565b9590505f5b8681106131a95750505050505050565b6131c96131c0826131ba858061311c565b90613170565b8686868a6125c9565b600101613199565b906131e46116f698979695949392612f29565b614986565b969394959290919580613340575b613205575b50505050505050565b6132799467ffffffffffffffff61306d92818561322461329997612f29565b9263ffffffff61325461323960208501612f29565b92613244898061196a565b61301960608c949394018c61196a565b918161326e608061326760608801612f3a565b9601612f3a565b966040519e8f611670565b168d521660208c015260408b01521660608901521660808701528061196a565b60601c91823b156102fe576132fd955f956001600160a01b0361330f819589956040519b8c9a8b998a987f2cd66b6f000000000000000000000000000000000000000000000000000000008a52166004890152608060248901526084880190611ab8565b91600319878403016044880152611d1c565b9116606483015203925af180156102f357613330575b8080808080806131fc565b5f61333a916116c4565b5f613325565b5061334d60208601612f1c565b6131f7565b92916116f6979695949161336c8335936060810190611b0e565b94612746565b93969594929190989798613386848061311c565b9890505f5b8981106133a057505050505050505050509050565b888c896133d3575b6133cb91835f52846020528a8a8a8a8a8a61336c8a6131ba60405f20968061311c565b60010161338b565b50506133df898061311c565b82101561244d576133f96133cb918360051b81019061196a565b9091506133a8565b9599509596979392975f14613523575050813562b0cad08103613429575b5050505050505050565b63d1cec45e036134fb5761344761306d83602061345095019061196a565b60601c95612f4f565b60601c94156134d6575050823b156102fe576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152905f908290604490829084905af180156102f3576134c6575b505b5f8080808080808061341f565b5f6134d0916116c4565b5f6134b7565b82856134f696936134ec6134f194979697612f29565b614a07565b614a44565b6134b9565b7f14134d32000000000000000000000000000000000000000000000000000000005f5260045ffd5b91949092506131e46116f698969794612f29565b92919095949360609561355061306d604083018361196a565b871c9661355f60208301612f1c565b613681575061359461357c60206135758b612f29565b9a01612f29565b91613587818061196a565b929091606081019061196a565b9290938a3b156102fe576040519b8c9a8b9a7f0bf1e375000000000000000000000000000000000000000000000000000000008c526001600160a01b031660048c015260248b015263ffffffff1660448a015263ffffffff16606489015260848801610100905261010488019061360a92611d1c565b908682036003190160a488015261362092611d1c565b916001600160a01b031660c48501528382036003190160e485015261364492611d1c565b03815a5f948591f180156102f357613671575b5060405160016020820152602081526117656040826116c4565b5f61367b916116c4565b5f613657565b90919761368d81612f29565b9661369a60208301612f29565b936136a5818061196a565b9290918581016136b49161196a565b926136c094919261494a565b6136cb828401612f3a565b916080016136d890612f3a565b93604051986136e68a611670565b63ffffffff16895263ffffffff166020890152604088015267ffffffffffffffff169086015267ffffffffffffffff16608085015260405195869485947f667b822e0000000000000000000000000000000000000000000000000000000086526001600160a01b0316600486015260248501608090526084850161376991611ab8565b916001600160a01b0316604485015283820360031901606485015261378d92611d1c565b03815a5f948591f19081156102f3575f916137d6575b508051156137ae5790565b7f78f5010f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6137f291503d805f833e6137ea81836116c4565b810190611f66565b5f6137a3565b93929091928035918260201c63ffffffff8085169460401c91169160208801968563ffffffff6138278a612f29565b1603613c93575f95858561390b9561026995604051613845816116a8565b8b81528b6020820152606060408201525081158b14613bd35750506138e861387d61387660606138ed95018b611b0e565b369061222d565b935b613897604061389060208d01612f3a565b9b01612f3a565b9b8b527f3f21ffffffffffffffffffffffffffffffffffffffffffffffffffffffff454160208c20167fc0de00000000000000000000000000000000000000000000000000000000babe1795614aa3565b614aa3565b604051926138fa846116a8565b835260208301526040820152612eea565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f357613951915f91613bb9575b5061248e565b6040516020810191600483526040820152604081526139716060826116c4565b5190205f52600160205260405f209063ffffffff61398e84612f29565b167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000067ffffffff000000006139c4855494612f29565b60201b16921617178155600181016139df604084018461196a565b9067ffffffffffffffff8211611643576139f983546117e4565b601f8111613b7e575b505f90601f8311600114613af2579282600293613a9b96936080965f92613ae7575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790555b019267ffffffffffffffff613a6d60608301612f3a565b167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000085541617845501612f3a565b7fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b1691161790556040516121df6020826116c4565b013590505f80613a24565b601f19831691845f5260205f20925f5b818110613b66575093613a9b9693608096936001938360029810613b2e575b505050811b019055613a56565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690555f8080613b21565b91936020600181928787013581550195019201613b02565b613ba990845f5260205f20601f850160051c81019160208610613baf575b601f0160051c0190611a3d565b5f613a02565b9091508190613b9c565b613bcd91503d805f833e6102eb81836116c4565b5f61394b565b83613c706138e893612133613bed60206138ed9901612f3a565b9167ffffffffffffffff80613c3d613c15613c0a60408a01612f3a565b986060810190611b0e565b60405194613c2286611627565b8552826020860197168752826040860199168952369061222d565b928360608201525194511695511660405195869460208601526040850152606084015260808084015260a0830190612ebd565b60ff60405192613c7f846116a8565b1682528b602083015260408201529361387f565b7f73c52935000000000000000000000000000000000000000000000000000000005f5260045ffd5b90613cc582612428565b613cd260405191826116c4565b828152601f19613ce28294612428565b01905f5b828110613cf257505050565b806060602080938501015201613ce6565b919493909592613d13888061311c565b969050613d1f87613cbb565b975f5b888110613d47575050505050505050506117659150613d3f6116e7565b908152614bbd565b613d74613d58826131ba8e8061311c565b88613d6a8b855f5260205260405f2090565b888888888d612ae6565b613d7e828c61247a565b52613d89818b61247a565b50613d94818b61247a565b5151613dc2577f197f22eb000000000000000000000000000000000000000000000000000000005f5260045ffd5b613dda613dcf828c61247a565b516020815191012090565b613de2611fc7565b14613def57600101613d22565b98975050505050505050613e03925061247a565b5190565b9394909492919260206060960191613e35613e2184612f29565b613e2e60408b018b61196a565b9184612d3f565b98613e4761306d61010083018361196a565b995f9a8a1c613e5c61306d602085018561196a565b8b1c9a8301359561012084013598898810159b6001600160a01b0387169c8d85148061430a575b1561423957505050509160c091613e9e898098979695614e00565b613ea788612f29565b93613eb5608084018461196a565b93909163ffffffff613ed6613ecd60a085018561196a565b989094016125bb565b913b161561403e575b5050505050505050613ef3613ef993612f29565b50612ca4565b9381613fc9575b505082613f3d575b5050506117659060405190613f1e6020836116c4565b815260405190613f2d8261168c565b62b0cad082526020820152612592565b813b15613fc5576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602481019290925282908290604490829084905af18015613fba57613fa2575b8080613f08565b613fad8280926116c4565b613fb7575f613f9b565b80fd5b6040513d84823e3d90fd5b8380fd5b833b156102fe576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0391909116600482015260248101919091525f8160448183875af180156102f357614029575b80613f00565b6140369194505f906116c4565b5f925f614023565b6141bc93949596979950906141309160ff61411b6102729560405199614067602089018c6116c4565b878b5260208b01976151d189396140eb6001600160a01b037ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416966040519d8e987f8420ce990000000000000000000000000000000000000000000000000000000060208b015260248a01523060448a015260a060648a015260c4890191611d1c565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc878403016084880152611d1c565b911660a483015203601f1981018752866116c4565b60206040519561418b8761417d848201936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016855260408084015260608301906114bb565b03601f1981018952886116c4565b60405196879383850197518091895e840190838201905f8252519283915e01015f815203601f1981018552846116c4565b6f67363d3d37363d34f03d5260086018f35f526010805ff590811561422c57815f9291839260145261d69483526001603453826017601e209551925af1903b021561422c57613ef993614213613ef3928795614aa3565b885f52600260205260405f2055935f8080808080613edf565b63301164255f526004601cfd5b94509491969c9a9b50945060e0919c50969596013515159081614302575b50156142ef57505050908661428b6142858561427f61429b9661427a8387614e00565b612f29565b94612ca4565b97614f56565b6142958886614a96565b92614a07565b806142de575b5050816142cd575b5050506117656040516142bd6020826116c4565b5f815260405190613f2d8261168c565b6142d692614a44565b5f80806142a9565b6142e89185614a44565b5f806142a1565b9250925092955061176596939450614c50565b90505f614257565b5080613e83565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561434057565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b614378610ef66143a8928061196a565b604051903360601b6020830152601482526143946034836116c4565b906020815191012090602081519101201490565b156143af57565b7f55b77827000000000000000000000000000000000000000000000000000000005f5260045ffd5b606082019160ff6143f360206143ed8685611b0e565b016125bb565b1660018114908115614455575b811561444a575b50156144225761441c6116f693823592611b0e565b91612dc6565b7f1dbb3218000000000000000000000000000000000000000000000000000000005f5260045ffd5b60029150145f614407565b600381149150614400565b91909161446d828061311c565b9390505f5b848110614480575050505050565b60ff61449560206143ed846131ba898061311c565b16600181149081156144f0575b50156144c8576144c06144b9826131ba878061311c565b8385612dc6565b600101614472565b7f746a20f8000000000000000000000000000000000000000000000000000000005f5260045ffd5b60039150145f6144a2565b6020818303126102fe5780519067ffffffffffffffff82116102fe57019080601f830112156102fe57815161176592602001611f16565b604083019061454461306d838661196a565b60601c92614558610ef660a087018761196a565b604051907f06fdde030000000000000000000000000000000000000000000000000000000082525f82600481895afa9081156102f3576145ae925f926148fe575b50906020815191012090602081519101201490565b15614922576145c3610ef6608087018761196a565b604051907f95d89b410000000000000000000000000000000000000000000000000000000082525f82600481895afa9081156102f357614618925f926148fe5750906020815191012090602081519101201490565b156148d65761462960c086016125bb565b6040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481895afa9081156102f3575f91614899575b5060ff80911691160361487157610ef691845f5260026020526146b160405f20549461470a886146cd63ffffffff6146c06146b96146a38c614e6d565b98909561010081019061196a565b908a87612d3f565b5093614f56565b881496169788948c61196a565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519260601b166020830152601482526143946034836116c4565b9183614861575b505081614859575b50156147ac57505060e08301350361478457803b156102fe576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526060929092013560248301525f908290604490829084905af180156102f357611d085750565b7f508df138000000000000000000000000000000000000000000000000000000005f5260045ffd5b9291509260e0810135614784576116f693614846936060614854930135915f52600360205260405f20905f5260205260405f206001600160a01b0384165f5260205260405f206147fd828254614a96565b90556040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015260648101919091529283906084820190565b03601f1981018452836116c4565b614f85565b90505f614719565b63ffffffff16149150835f614711565b7fe575497b000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d6020116148ce575b816148b4602093836116c4565b810103126102fe575160ff811681036102fe5760ff614666565b3d91506148a7565b7f072a62fa000000000000000000000000000000000000000000000000000000005f5260045ffd5b61491b9192503d805f833e61491381836116c4565b8101906144fb565b905f614599565b7f4a9fab1d000000000000000000000000000000000000000000000000000000005f5260045ffd5b91939261176593614974612133936040519788966020880152606060408801526080870191611d1c565b91601f19858403016060860152611d1c565b926134479061499a93989692959798612f4f565b60601c94156149f8575050823b156102fe576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152905f90829081838160448101611cf7565b82856116f696936134f1939695965b63ffffffff165f52600360205260405f20905f526020526001600160a01b0360405f2091165f52602052614a4060405f20918254612ca4565b9055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b03909216602483015260448201929092526116f6916148548260648101614846565b91908201809211612cb157565b908115614bb257614b3b827f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b831560081b1783811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a1790565b60051c9060018201809211612cb15760078211614b8a577f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168203612cb15763ffffffff169060051b1b1790565b7f053a4d9c000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff91501690565b516040519081604081019160208083015280518093526060820192602060608260051b8501019201935f905b828210614c0657505050611765925003601f1981018352826116c4565b91936020614c40857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08394600196980301865288516114bb565b9601920192018593919492614be9565b9491949390935f9383614c90575b505050505090614c866117659260405192614c788461168c565b63d1cec45e84523691611714565b6020820152612592565b6001600160a01b031673f0000000000000000000000000000000000000018103614dcc5750614cec836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169230908461504c565b15614dbe57803b156102fe575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528860048401525af180156102f357614da9575b50814710614d79578280926001600160a01b038293165af1614d5a611ee7565b9015614d74575090614c86611765925b91925f8080614c5e565b615199565b60448383477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b614db69193505f906116c4565b5f915f614d3a565b505050505050611765611f8c565b91614de594506001600160a01b0390969596169161504c565b15614df657614c8661176592614d6a565b5050611765611f8c565b8115614e6957614e0f816150ea565b6001600160a01b03614e1f612cde565b91165f52602052600160405f200190815490808210614e4157614a4091612ca4565b7fb539f099000000000000000000000000000000000000000000000000000000005f5260045ffd5b5050565b908115614f4f57614f05827f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b831560081b1783811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a1790565b8060051c92836008039160088311612cb1578260051b928304602014856008141715612cb157601f19169380850460201490151715612cb157818163ffffffff931b901c931c1690565b5f91508190565b5f9160015b15614f7c575b614f75614f6e5f93614e6d565b9094614aa3565b9291614f5b565b81614f61579050565b905f602091828151910182855af1156102f3575f513d614fe957506001600160a01b0381163b155b614fb45750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415614fad565b90614ffd5750615199565b81511580615043575b61500e575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15615006565b92905f916150ab602094612133604051938492888401967f23b872dd000000000000000000000000000000000000000000000000000000008852602485016001600160a01b036040929594938160608401971683521660208201520152565b519082855af1903d5f5190836150c2575b50505090565b919250906150e057506001600160a01b03163b15155b5f80806150bc565b60019150146150d8565b6001600160a01b036150fa612cde565b91165f5260205260405f206001810180548254908181101561518e5760038401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6002615149875442612ca4565b9201548281029281840414901517011780615165575050505050565b81019081105f0317808210156151865750905b554290555f80808080612947565b905090615178565b505050600342910155565b8051156151a857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffdfe60806040526102728038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516057908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00000000000000000000000000ee4ea8d358473f0fcebf0329feed95d56e8c04d7000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000af739f34ddf951cbc24fdbba4f76213688e13627