0 txs
60 calls
constructor
constructor()
functions
assetAt
viewfunction assetAt(uint256 idx) view returns (tuple a)
assetBridgingCounts
viewfunction assetBridgingCounts(address token) view returns (uint256 bridgingCount)
assetCount
viewfunction assetCount() view returns (uint256)
assets
viewfunction assets() view returns (address[])
balanceOf
viewfunction balanceOf(address token, uint256 idx, address safe) view returns (int256)
balanceOracleAt
viewfunction balanceOracleAt(address token, uint256 idx) view returns (address, uint8)
balanceOracleCountFor
viewfunction balanceOracleCountFor(address token) view returns (uint256)
balanceOracles
viewfunction balanceOracles(address token) view returns (address[])
balanceOracleTotalCount
viewfunction balanceOracleTotalCount() view returns (uint256)
bridgeOperations
viewfunction bridgeOperations(bytes32 id) view returns (bytes32 id, address asset, uint96 blockNumber)
chainlinkUptimeFeed
viewfunction chainlinkUptimeFeed() view returns (address)
checkBalanceOracleSupport
viewfunction checkBalanceOracleSupport(address token, address oracle, uint8 balanceType) view
checkPriceOracleSupport
viewfunction checkPriceOracleSupport(address token, address oracle, uint8 priceType) view
checkUptime
viewfunction checkUptime() view returns (bool stale)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
GRACE_PERIOD_TIME
viewfunction GRACE_PERIOD_TIME() view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAssetBridging
viewfunction isAssetBridging(address asset) view returns (bool)
latestPrice
viewfunction latestPrice(address token) view returns (uint256 price, uint8 decimals, bool stale)
NATIVE_ADDRESS
viewfunction NATIVE_ADDRESS() view returns (address)
priceOracles
viewfunction priceOracles(address asset) view returns (address oracle, uint8 decimals, uint256 chainlinkHeartbeat, uint8 priceType)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
read
viewfunction read(address safe) view returns (tuple nav)
readPosition
viewfunction readPosition(address safe, address assetAddr, uint256 idxBalanceOracle) view returns (tuple p)
readPositionsRange
viewfunction readPositionsRange(address safe, uint256 from, uint256 to) view returns (int256 usd, uint16 issues)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usdDecimals
purefunction usdDecimals() pure returns (uint8)
addBalance
nonpayablefunction addBalance(address asset, address oracle, uint8 balanceType)
addPrice
nonpayablefunction addPrice(address asset, address oracle, uint8 priceType, uint256 chainlinkHeartbeat)
bridgeFinalize
nonpayablefunction bridgeFinalize(bytes32 id)
bridgeStart
nonpayablefunction bridgeStart(address asset) returns (bytes32 id)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin_, address assetRecoverer_, address chainlinkUptimeFeed_)
recoverAssets
nonpayablefunction recoverAssets(address[] assets)
removeBalance
nonpayablefunction removeBalance(address token, address oracle)
removePrice
nonpayablefunction removePrice(address token)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAssetRecoverer
nonpayablefunction setAssetRecoverer(address assetRecoverer_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
BalanceOracleAdd
event BalanceOracleAdd(address indexed token, address indexed oracle, uint8 oracleType)
BalanceOracleRemoved
event BalanceOracleRemoved(address indexed token, address oracle)
BridgeOperationFinalized
event BridgeOperationFinalized(bytes32 id)
BridgeOperationStarted
event BridgeOperationStarted(bytes32 id, address asset)
Initialized
event Initialized(uint64 version)
PriceOracleRemoved
event PriceOracleRemoved(address indexed token)
PriceOracleSet
event PriceOracleSet(address indexed token, address indexed oracle, uint256 chainlinkHeartbeat, uint8 priceType)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AssetNotFound
error AssetNotFound()
BalanceOracleNotSet
error BalanceOracleNotSet()
BridgeOperationNotFound
error BridgeOperationNotFound()
CantFinalizeOnSameBlock
error CantFinalizeOnSameBlock()
DuplicateBalanceOracle
error DuplicateBalanceOracle()
DuplicateBridgeOperation
error DuplicateBridgeOperation()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
InvalidArguments
error InvalidArguments()
InvalidBalanceOracle
error InvalidBalanceOracle()
InvalidInitialization
error InvalidInitialization()
InvalidPriceOracle
error InvalidPriceOracle()
NotAuthorized
error NotAuthorized()
NotInitializing
error NotInitializing()
PriceOracleAlreadySet
error PriceOracleAlreadySet()
PriceOracleNotSet
error PriceOracleNotSet()
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100c257306080525f5160206131f95f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161313290816100c782396080518181816109b70152611bf70152f35b6001600160401b0319166001600160401b039081175f5160206131f95f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630127c698146102b457806301374518146102af57806301ffc9a7146102aa57806306f319fa146102a55780631387380f146102a057806315ff34ba1461029b5780631650d4bf14610296578063208bab4314610291578063248a9ca31461028c5780632f2ff15d1461028757806336568abe14610282578063467f4cb91461027d57806348f8fb35146102785780634f1ef2861461027357806352d1902d1461026e57806353084eff1461026957806356aa9cae146102645780635aa2b3001461025f57806366a4b6c01461025a57806371a9730514610255578063725e300714610250578063821f5e2c1461024b578063842c6b9d146102465780638cf0f4a9146102415780638deefa671461023c57806391d1485414610237578063a087a87e14610232578063a217fddf1461022d578063aa9239f514610228578063ad3cb1cc14610223578063b1c2d7fe1461021e578063c0c53b8b14610219578063cc8e1a4a14610214578063d547741f1461020f578063d572e4451461020a578063d5bcb61014610205578063e0caf62d14610200578063e2832ac4146101fb578063eafe7a74146101f6578063ed2f8603146101f1578063efab40e8146101ec5763f4961fa3146101e7575f80fd5b6118cf565b6117cc565b6117b0565b611793565b611758565b6116fd565b6116cf565b6115b4565b611567565b611550565b6113c8565b611293565b61121a565b6111b1565b611197565b6110be565b611060565b610ede565b610e11565b610d9e565b610d81565b610d46565b610cd2565b610cb7565b610c7d565b610a65565b610a0b565b6109a5565b61092b565b610877565b610840565b6107f8565b6107a4565b610765565b61073e565b6106b9565b610504565b6104be565b610455565b6103e8565b610377565b6102ce565b6001600160a01b038116036102ca57565b5f80fd5b346102ca5760203660031901126102ca576004356102eb816102b9565b335f9081525f51602061307d5f395f51905f52602052604090205460ff16156103305760d180546001600160a01b0319166001600160a01b0392909216919091179055005b63e2517d3f60e01b5f52336004525f60245260445ffd5b634e487b7160e01b5f52602160045260245ffd5b6002111561036557565b610347565b9060028210156103655752565b346102ca5760203660031901126102ca57600435610394816102b9565b60018060a01b03165f526001602052608060405f206103e681549160ff60026001830154920154169060ff6040519460018060a01b038116865260a01c1660208501526040840152606083019061036a565bf35b346102ca5760203660031901126102ca5760043563ffffffff60e01b81168091036102ca57602090637965db0b60e01b811490811561042d575b506040519015158152f35b6301ffc9a760e01b1490505f610422565b6003111561036557565b9060038210156103655752565b346102ca5760403660031901126102ca57610494600435610475816102b9565b6001600160a01b03165f9081526034602052604090206024359061235f565b90600382101561036557604080516001600160a01b039092168252916103e6906020830190610448565b346102ca5760203660031901126102ca576004355f526068602052606060405f206001815491015460405191825260018060a01b038116602083015260a01c6040820152f35b346102ca5760403660031901126102ca57600435610521816102b9565b6024359061052e826102b9565b335f9081525f51602061305d5f395f51905f52602052604090205460ff1615610668576001600160a01b03165f81815260cf6020526040902054909190156106595773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee821480610633575b610624575f8281526034602052604090206105ba906105b6906001600160a01b03841690612e04565b1590565b610615576106107fa76503e54196bc4ca156f2a7e4295faeae83dad92c4928c4b8d0b1fd7a09b212916105f66105f1603554611fa0565b603555565b6040516001600160a01b0390911681529081906020820190565b0390a2005b6308b3cf3960e31b5f5260045ffd5b6317dbc4cb60e21b5f5260045ffd5b506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461058d565b63470cbf4760e01b5f5260045ffd5b63ea8e4eb560e01b5f5260045ffd5b60206040818301928281528451809452019201905f5b81811061069a5750505090565b82516001600160a01b031684526020938401939092019160010161068d565b346102ca5760203660031901126102ca576004356106d6816102b9565b60018060a01b03165f52603460205260405f206040519081602082549182815201915f5260205f20905f5b8181106107285761072485610718818703826108cf565b60405191829182610677565b0390f35b8254845260209093019260019283019201610701565b346102ca575f3660031901126102ca575f546040516001600160a01b039091168152602090f35b346102ca5760203660031901126102ca57602061079c6004355f525f5160206130bd5f395f51905f52602052600160405f20015490565b604051908152f35b346102ca5760403660031901126102ca576107f66024356004356107c7826102b9565b6107f16107ec825f525f5160206130bd5f395f51905f52602052600160405f20015490565b6122d0565b612417565b005b346102ca5760403660031901126102ca57600435602435610818816102b9565b336001600160a01b03821603610831576107f6916124bf565b63334bd91960e11b5f5260045ffd5b346102ca5760603660031901126102ca57602061079c600435610862816102b9565b60243560443591610872836102b9565b61196f565b346102ca575f3660031901126102ca576020610891611b40565b6040519015158152f35b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b038211176108ca57604052565b61089b565b90601f801991011681019081106001600160401b038211176108ca57604052565b604051906108ff6060836108cf565b565b604051906108ff6080836108cf565b6001600160401b0381116108ca57601f01601f191660200190565b60403660031901126102ca57600435610943816102b9565b602435906001600160401b0382116102ca57366023830112156102ca5781600401359061096f82610910565b9161097d60405193846108cf565b80835236602482860101116102ca576020815f9260246107f697018387013784010152611beb565b346102ca575f3660031901126102ca577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036109fc5760206040515f51602061309d5f395f51905f528152f35b63703e46dd60e11b5f5260045ffd5b346102ca5760203660031901126102ca576060610a32600435610a2d816102b9565b6125a9565b90610a3b611b40565b918215610a5c575b5060ff9060405193845216602083015215156040820152f35b915060ff610a43565b346102ca5760203660031901126102ca57600435610a82816102b9565b610a8a61273c565b6001600160601b0343166040516020810190610ae281610ad486868690916020926001600160601b0360a01b9060a01b1682526001600160601b03199060601b16600c8201520190565b03601f1981018352826108cf565b51902090610aee6108f0565b8281526001600160a01b0384166020820190815291610b17906001600160601b03166040830152565b610b31610b2c845f52606860205260405f2090565b611d0b565b80511590811591610c47575b8115610c30575b50610c215761072493610be7610bce7fa5eb2bc0ce6c8ac8a4410b5f80002e5a2e46f94fb054d0b6c7ed400d4f78253694610bc1610c0e95610b8e895f52606860205260405f2090565b81518155602082015160409092015160a01b6001600160a01b0319166001600160a01b0390921691909117600190910155565b516001600160a01b031690565b6001600160a01b03165f90815260696020526040902090565b80546001019055604080518581526001600160a01b03909216602083015290918291820190565b0390a16040519081529081906020820190565b6349b7f6b560e11b5f5260045ffd5b602001516001600160a01b0316151590505f610b44565b90506001600160601b03610c6560408301516001600160601b031690565b16151590610b3d565b6044359060028210156102ca57565b346102ca5760603660031901126102ca576107f6600435610c9d816102b9565b602435610ca9816102b9565b610cb1610c6e565b91611d4a565b346102ca575f3660031901126102ca57602060405160088152f35b346102ca575f3660031901126102ca5760405180602060ce5491828152019060ce5f527fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a905f5b818110610d305761072485610718818703826108cf565b8254845260209093019260019283019201610d19565b346102ca5760203660031901126102ca57600435610d63816102b9565b60018060a01b03165f526034602052602060405f2054604051908152f35b346102ca575f3660031901126102ca576020603554604051908152f35b346102ca5760203660031901126102ca576020610891600435610dc0816102b9565b6001600160a01b03165f90815260696020526040902054151590565b60609060031901126102ca57600435610df4816102b9565b90602435610e01816102b9565b9060443560038110156102ca5790565b346102ca57610e1f36610ddc565b335f9081525f51602061305d5f395f51905f5260205260409020549092919060ff1615610668576001600160a01b0382165f81815260cf602052604090205490929015610659578382610e7192612075565b815f52603460205260405f2060038410156103655781610eb5857f4acc8c77664751f0229cdecd20b537d6a486ccecb3f77d26bdb3ee51a7cf0b459460209461297c565b50610ec1603554611e5d565b603555610ed16040518096610448565b6001600160a01b031693a3005b346102ca5760603660031901126102ca57600435610efb816102b9565b602435906044355f915f938281118015611054575b61062457610f1c611b40565b61104b575b82811115610f3c576040805185815261ffff87166020820152f35b610f4581612316565b506001600160a01b0381165f908152600160205260409020610f7f90610f73905b546001600160a01b031690565b6001600160a01b031690565b1561103c576001600160a01b0381165f90815260696020526040902054611028575b80610fad60ff926125a9565b91931690611018575b6001600160a01b0382165f90815260346020526040902090919054915f935b838510610fef575050505050610fea90611e5d565b610f21565b909192939761100d60019161100785858d898d6127dd565b90611e6b565b980193929190610fd5565b9661102290611e4a565b96610fb6565b9461103460ff91611e4a565b959050610fa1565b633e6d0a1d60e21b5f5260045ffd5b60019450610f21565b5060ce54831015610f10565b346102ca5760403660031901126102ca57602060ff6110b2602435600435611087826102b9565b5f525f5160206130bd5f395f51905f52845260405f209060018060a01b03165f5260205260405f2090565b54166040519015158152f35b346102ca5760203660031901126102ca576004356110db816102b9565b6040516110e7816108af565b604081015f815260608201905f82526001600160401b03431683526001600160401b034216602084015260ce5480611165575b6107248460405191829182919091606061ffff8160808401956001600160401b0381511685526001600160401b03602082015116602086015260408101516040860152015116910152565b5f198101908111611192576111806111899161072496611e86565b61ffff16909352565b525f808061111a565b611b1f565b346102ca575f3660031901126102ca5760206040515f8152f35b346102ca5760203660031901126102ca57600435604051604081018181106001600160401b038211176108ca5760409260ff9184525f8352816111fa60208501925f8452612316565b6001600160a01b0390911694859052168152835192835251166020820152f35b346102ca575f3660031901126102ca57604080519061123981836108cf565b60058252640352e302e360dc1b602083015280518092602082528051908160208401525f5b82811061127c5750505f828201840152601f01601f19168101030190f35b60208282018101518783018701528694500161125e565b346102ca5760203660031901126102ca576004356112af61273c565b6112c4610b2c825f52606860205260405f2090565b805115806113a4575b8061138f575b6113805760408101516001600160601b03166001600160601b0316431461137157602001517f4a6b5dc9057d1036f88e7ce9bbd1471d08f3f9617d47d7891daeacdad81be8e49161136c91611330906001600160a01b0316610bce565b61133a8154611fa0565b905561135c611351825f52606860205260405f2090565b60015f918281550155565b6040519081529081906020820190565b0390a1005b6318f3e12f60e11b5f5260045ffd5b6379eb2a3d60e01b5f5260045ffd5b5060208101516001600160a01b0316156112d3565b506001600160601b036113c160408301516001600160601b031690565b16156112cd565b346102ca5760603660031901126102ca576004356113e5816102b9565b602435906113f2826102b9565b6044356113fe816102b9565b5f5160206130dd5f395f51905f5254926001600160401b0361142f60ff604087901c1615956001600160401b031690565b1680159081611548575b600114908161153e575b159081611535575b506115265761148e928461148560016001600160401b03195f5160206130dd5f395f51905f525416175f5160206130dd5f395f51905f5255565b6114f157611fc9565b61149457005b6114be60ff60401b195f5160206130dd5f395f51905f5254165f5160206130dd5f395f51905f5255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290806020810161136c565b611521600160401b60ff60401b195f5160206130dd5f395f51905f525416175f5160206130dd5f395f51905f5255565b611fc9565b63f92ee8a960e01b5f5260045ffd5b9050155f61144b565b303b159150611443565b859150611439565b346102ca576107f661156136610ddc565b91612075565b346102ca5760403660031901126102ca576107f660243560043561158a826102b9565b6115af6107ec825f525f5160206130bd5f395f51905f52602052600160405f20015490565b6124bf565b346102ca5760603660031901126102ca576004356115d1816102b9565b602435906115de826102b9565b6044356115e9612193565b506001600160a01b0383165f81815260cf602052604090205415610659575f908152600160205260409020546001600160a01b03161561103c576001600160a01b0383165f908152606960205260409020546107249361166b939091151591611651816125a9565b9591929061165d611b40565b6116c6575b60ff1693612811565b6040519182918291909160c08060e083019460018060a01b0381511684526020810151602085015260408101516040850152606081015160608501526080810151608085015260a0810151151560a085015201511515910152565b60019650611662565b346102ca575f3660031901126102ca57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b346102ca5760203660031901126102ca576004356001600160401b0381116102ca57366023820112156102ca5780600401356001600160401b0381116102ca573660248260051b840101116102ca5760246107f69201612202565b346102ca5760203660031901126102ca57600435611775816102b9565b60018060a01b03165f526069602052602060405f2054604051908152f35b346102ca575f3660031901126102ca57602060ce54604051908152f35b346102ca575f3660031901126102ca576020604051610e108152f35b346102ca5760803660031901126102ca576004356117e9816102b9565b6024356117f5816102b9565b6117fd610c6e565b335f9081525f51602061305d5f395f51905f52602052604090205490916064359160ff1615610668576001600160a01b0384169373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8503611866576107f6945061186060ff60125b1682612928565b50612a1b565b60206004956040519687809263313ce56760e01b82525afa80156118ca5760ff611860916107f6975f9161189b575b50611859565b6118bd915060203d6020116118c3575b6118b581836108cf565b8101906122b7565b5f611895565b503d6118ab565b611964565b346102ca5760203660031901126102ca576004356118ec816102b9565b335f9081525f51602061305d5f395f51905f52602052604090205460ff1615610668576001600160a01b0381165f90815260346020526040902054610624576119486105b66119436001600160a01b038416610f73565b612deb565b610659576107f690612ba1565b908160209103126102ca575190565b6040513d5f823e3d90fd5b6001600160a01b0381165f90815260346020526040902090919054811015611ac7576001600160a01b0382165f9081526034602052604090206119b2919061235f565b91906119bd8361043e565b6001600160a01b0316918215611ac7576119d68161043e565b80611a505750506040516370a0823160e01b81526001600160a01b03929092166004830152602090829060249082905afa80156118ca57611a1e915f91611a21575b5061255f565b90565b611a43915060203d602011611a49575b611a3b81836108cf565b810190611955565b5f611a18565b503d611a31565b80611a5c60019261043e565b03611a6d575050611a1e903161255f565b604051633de222bb60e21b81526001600160a01b03918216600482015292166024830152602090829060449082905afa9081156118ca575f91611aae575090565b611a1e915060203d602011611a4957611a3b81836108cf565b6349a023a960e01b5f5260045ffd5b519069ffffffffffffffffffff821682036102ca57565b908160a09103126102ca57611b0181611ad6565b91602082015191604081015191611a1e608060608401519301611ad6565b634e487b7160e01b5f52601160045260245ffd5b9190820391821161119257565b5f8054909190611b58906001600160a01b0316610f73565b6001600160a01b038116611b695750565b60a060049160405192838092633fabe5a360e21b82525afa9081156118ca575f905f92611bb6575b5015611b9e575060019150565b611bab610e109142611b33565b116108ff5760019150565b9050611bda915060a03d60a011611be4575b611bd281836108cf565b810190611aed565b505091505f611b91565b503d611bc8565b90916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611ce9575b506109fc57335f9081525f51602061307d5f395f51905f52602052604090205460ff1615610668576040516352d1902d60e01b8152926020846004816001600160a01b0387165afa5f9481611cc8575b50611c9357634c9c8ce360e01b5f526001600160a01b03831660045260245ffd5b90915f51602061309d5f395f51905f528403611cb4576108ff929350612be9565b632a87526960e21b5f52600484905260245ffd5b611ce291955060203d602011611a4957611a3b81836108cf565b935f611c72565b5f51602061309d5f395f51905f52546001600160a01b0316141590505f611c22565b90604051606081018181106001600160401b038211176108ca5760405260406001829480548452015460018060a01b038116602084015260a01c910152565b916001600160a01b0382169081158015611e39575b611dbd5780611d6f60019261035b565b03611dcc57506105b6611d8191612761565b611dbd576001600160a01b03165f908152600160205260409020611da890610f7390610f66565b611dae57565b634e133d4760e01b5f5260045ffd5b636077d21b60e01b5f5260045ffd5b604051633fabe5a360e21b8152915060a090829060049082905afa80156118ca57611da892610f7392610f6692611e18575b506001600160a01b03165f90815260016020526040902090565b611e309060a03d60a011611be457611bd281836108cf565b50505050611dfe565b506001600160a01b03841615611d5f565b61ffff1661ffff81146111925760010190565b5f1981146111925760010190565b9190915f838201938412911290801582169115161761119257565b90915f925f9260ce5482101561062457611e9e611b40565b611f97575b5f5b82811115611eb257505050565b611ebb81612316565b506001600160a01b0381165f908152600160205260409020611ee090610f7390610f66565b1561103c576001600160a01b0381165f90815260696020526040902054611f83575b80611f0e60ff926125a9565b91931690611f73575b6001600160a01b0382165f90815260346020526040902090919054915f935b838510611f50575050505050611f4b90611e5d565b611ea5565b9091929399611f6860019161100785858f898d6127dd565b9a0193929190611f36565b96611f7d90611e4a565b96611f17565b94611f8f60ff91611e4a565b959050611f02565b60019350611ea3565b8015611192575f190190565b91611fc59183549060031b91821b915f19901b19161790565b9055565b6120579192611fd6612dc0565b611fde612dc0565b611fe6612dc0565b60018060a01b03166001600160601b0360a01b5f5416175f55612007612dc0565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5f52603460205261204c7fca84b137a7cfe118600fd76ed0fbf86ce0e012f0aa832ddea32ddcd1618718d361294d565b50600160355561238e565b5060018060a01b03166001600160601b0360a01b60d154161760d155565b916001600160a01b0382169081158015612182575b610624576120978161043e565b600281036121055750506120ad6105b68261279f565b610615576120ce6120f09260018060a01b03165f52603460205260405f2090565b6001600160a01b039091165f9081526001919091016020526040902054151590565b6120f657565b63bdd791f760e01b5f5260045ffd5b6121118194929461043e565b6120f6576040516370a0823160e01b815230600482015292602090849060249082905afa9081156118ca576120f0936120ce92612163575b506001600160a01b03165f90815260346020526040902090565b61217b9060203d602011611a4957611a3b81836108cf565b505f612149565b506001600160a01b0384161561208a565b6040519060e082018281106001600160401b038211176108ca576040525f60c0838281528260208201528260408201528260608201528260808201528260a08201520152565b634e487b7160e01b5f52603260045260245ffd5b91908110156121fd5760051b0190565b6121d9565b5f5b82811061221057505050565b61221b8184846121ed565b3590612226826102b9565b60d1546024906001600160a01b031660206122428488886121ed565b3561224c816102b9565b6040516370a0823160e01b815230600482015293849182906001600160a01b03165afa9081156118ca57600194612291935f93612297575b50858060a01b031661287c565b01612204565b6122b091935060203d8111611a4957611a3b81836108cf565b915f612284565b908160209103126102ca575160ff811681036102ca5790565b5f8181525f5160206130bd5f395f51905f526020908152604080832033845290915290205460ff16156123005750565b63e2517d3f60e01b5f523360045260245260445ffd5b60ce548110156121fd577fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a01545f81815260d060205260409020546001600160a01b0390911691565b919061236d60029184612e9b565b90549060031b1c92835f520160205260405f20549160018060a01b03169190565b6001600160a01b0381165f9081525f51602061307d5f395f51905f52602052604090205460ff16612412576001600160a01b03165f8181525f51602061307d5f395f51905f5260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b5f8181525f5160206130bd5f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff166124b9575f8181525f5160206130bd5f395f51905f52602090815260408083206001600160a01b03861684529091529020805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b5f8181525f5160206130bd5f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16156124b9575f8181525f5160206130bd5f395f51905f52602090815260408083206001600160a01b03861684529091529020805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b6001600160ff1b0381116125705790565b63123baf0360e11b5f5260045260245ffd5b519081151582036102ca57565b91908260409103126102ca57611a1e602083519301612582565b6001600160a01b038181165f908152600160205260408120805494939192909190851690811561103c57600283015460ff166125e48161035b565b61269b57506004919060a090612602906001600160a01b0316610f73565b604051633fabe5a360e21b815293849182905afa80156118ca575f925f91612673575b505f8313156126595761263a60019142611b33565b91015410612650575b9260a01c60ff1691565b91565b60019150612643565b505050509061266c9060ff9060a01c1690565b5f91600190565b905061268f91925060a03d60a011611be457611bd281836108cf565b5093925050915f612625565b6126e495935060409250906126b8906001600160a01b0316610f73565b82516302c68be360e31b81526001600160a01b0390921660048301529094859190829081906024820190565b03915afa9283156118ca575f905f94612708575b5061264d90939160a01c60ff1690565b61264d945061272f915060403d604011612735575b61272781836108cf565b81019061258f565b936126f8565b503d61271d565b335f9081525f51602061305d5f395f51905f52602052604090205460ff161561066857565b61276a81612c8b565b908161278d575b8161277a575090565b611a1e9150632708ba7f60e01b90612d19565b905061279881612ce8565b1590612771565b6127a881612c8b565b90816127cb575b816127b8575090565b611a1e9150633de222bb60e21b90612d19565b90506127d681612ce8565b15906127af565b9392916127f26001600160a01b038316612e6a565b92901561065957611a1e9560ff926128099261196f565b911690612d4c565b9194969561281d612193565b976001600160a01b03831661283181612e6a565b959015610659576128759860ff9561284a938d5261196f565b9160208a01928352151560c08a01528460608a01528560808a0152151560a089015251911690612d4c565b6040830152565b5f6128d592819260405195602087019263a9059cbb60e01b845260018060a01b031660248801526044870152604486526128b76064876108cf565b60018060a01b031694519082865af16128ce612e1e565b9083612eb0565b80518015159182612905575b50506128ea5750565b635274afe760e01b5f526001600160a01b031660045260245ffd5b6020818101935091810103126102ca576105b661292191612582565b5f806128e1565b6001600160a01b03165f81815260d06020526040902091909155611a1e9060ce612f0e565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611a1e91815f5260028101602052600160405f2055612f0e565b611a1e929160018060a01b031691825f526002820160205260405f2055612f0e565b60028210156103655752565b8151815460208401516001600160a01b039092166001600160a81b03199091161760a09190911b60ff60a01b16178155604082015160018201556060909101516002918201918110156103655760ff80198354169116179055565b9081526040810192916108ff916020019061036a565b92612a27818386611d4a565b612a308161035b565b80612b28578215611dbd5760405163313ce56760e01b8152916020836004816001600160a01b0385165afa9283156118ca577fa49194f841578adf42e4abe85004e75cdf662d7c6f75608ddeb76ad3251d185a93612ae2915f91612b09575b505b612ab3612a9c610901565b6001600160a01b03851681529160ff166020830152565b856040820152612ac6846060830161299e565b6001600160a01b0387165f9081526001602052604090206129aa565b6040516001600160a01b03918216959091169390918291612b04919083612a05565b0390a3565b612b22915060203d6020116118c3576118b581836108cf565b5f612a8f565b60405163313ce56760e01b8152916020836004816001600160a01b0385165afa9283156118ca577fa49194f841578adf42e4abe85004e75cdf662d7c6f75608ddeb76ad3251d185a93612ae2915f91612b82575b50612a91565b612b9b915060203d6020116118c3576118b581836108cf565b5f612b7c565b60018060a01b0316805f5260016020525f60026040822082815582600182015501557f1ab93c820592302b2bef0070dd03654585b6942bfde155498ddd3d69190bf0425f80a2565b90813b15612c6a575f51602061309d5f395f51905f5280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115612c5257612c4f91612e4d565b50565b505034612c5b57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f602091604051838101906301ffc9a760e01b82526301ffc9a760e01b602482015260248152612cbc6044826108cf565b5191617530fa5f513d82612cdc575b5081612cd5575090565b9050151590565b6020111591505f612ccb565b5f602091604051838101906301ffc9a760e01b825263ffffffff60e01b602482015260248152612cbc6044826108cf565b5f90602092604051848101916301ffc9a760e01b835263ffffffff60e01b16602482015260248152612cbc6044826108cf565b82810293925f8212600160ff1b8214166111925781850514901517156111925761ffff1690810180911161119257600719810190811161119257604d811161119257600a0a908115612dac57600160ff1b81145f19831416611192570590565b634e487b7160e01b5f52601260045260245ffd5b60ff5f5160206130dd5f395f51905f525460401c1615612ddc57565b631afcd79f60e31b5f5260045ffd5b611a1e90805f5260d06020525f604081205560ce612fac565b90611a1e91815f52600281016020525f6040812055612fac565b3d15612e48573d90612e2f82610910565b91612e3d60405193846108cf565b82523d5f602084013e565b606090565b5f80611a1e93602081519101845af4612e64612e1e565b91612eb0565b805f5260d060205260405f205480155f14612e9357505f90815260cf6020526040812054151591565b600192909150565b80548210156121fd575f5260205f2001905f90565b90612ed45750805115612ec557805190602001fd5b630a12f52160e11b5f5260045ffd5b81511580612f05575b612ee5575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15612edd565b5f8281526001820160205260409020546124b957805490600160401b8210156108ca5782612f5c612f46846001809601855584612e9b565b819391549060031b91821b915f19901b19161790565b90558054925f520160205260405f2055600190565b80548015612f98575f190190612f878282612e9b565b8154905f199060031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b6001810191805f528260205260405f2054928315155f14613054575f1984018481116111925783545f19810194908511611192575f95858361300797612ffa950361300d575b505050612f71565b905f5260205260405f2090565b55600190565b61303d6130379161302e61302461304b9588612e9b565b90549060031b1c90565b92839187612e9b565b90611fac565b85905f5260205260405f2090565b555f8080612ff2565b505050505f9056fe6c1f9458047d31dfff469f4a6ebc68d6c17114a1bf98e905fb59b15827298d42b7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212205201070533f1602ee80f49bb757886f32a279e167e7c27460bf44cbc86b5dac864736f6c634300081b0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00