0 txs
0 calls
constructor
constructor(address basketTokenImplementation, address eulerRouter_, address strategyRegistry_, address assetRegistry_, address admin, address feeCollector_) payable
functions
assetRegistry
viewfunction assetRegistry() view returns (address)
basketAssets
viewfunction basketAssets(address basket) view returns (address[])
basketBalanceOf
viewfunction basketBalanceOf(address basketToken, address asset) view returns (uint256)
basketIdToAddress
viewfunction basketIdToAddress(bytes32 basketId) view returns (address)
basketTokens
viewfunction basketTokens() view returns (address[])
basketTokenToBaseAssetIndex
viewfunction basketTokenToBaseAssetIndex(address basketToken) view returns (uint256)
basketTokenToIndex
viewfunction basketTokenToIndex(address basketToken) view returns (uint256)
collectedSwapFees
viewfunction collectedSwapFees(address asset) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eulerRouter
viewfunction eulerRouter() view returns (address)
externalTradesHash
viewfunction externalTradesHash() view returns (bytes32)
feeCollector
viewfunction feeCollector() view returns (address)
getAssetIndexInBasket
viewfunction getAssetIndexInBasket(address basketToken, address asset) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
managementFee
viewfunction managementFee(address basket) view returns (uint16)
numOfBasketTokens
viewfunction numOfBasketTokens() view returns (uint256)
paused
viewfunction paused() view returns (bool)
rebalanceStatus
viewfunction rebalanceStatus() view returns (tuple)
retryCount
viewfunction retryCount() view returns (uint8)
retryLimit
viewfunction retryLimit() view returns (uint8)
slippageLimit
viewfunction slippageLimit() view returns (uint256)
stepDelay
viewfunction stepDelay() view returns (uint40)
strategyRegistry
viewfunction strategyRegistry() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapFee
viewfunction swapFee() view returns (uint16)
tokenSwapAdapter
viewfunction tokenSwapAdapter() view returns (address)
weightDeviationLimit
viewfunction weightDeviationLimit() view returns (uint256)
collectSwapFee
nonpayablefunction collectSwapFee(address asset) returns (uint256 collectedFees)
completeRebalance
nonpayablefunction completeRebalance(tuple[] externalTrades, address[] basketsToRebalance, uint64[][] targetWeights, address[][] basketAssets_)
createNewBasket
payablefunction createNewBasket(string basketName, string symbol, address baseAsset, uint256 bitFlag, address strategy) payable returns (address basket)
execute
payablefunction execute(address target, bytes data, uint256 value) payable returns (bytes)
executeTokenSwap
nonpayablefunction executeTokenSwap(tuple[] externalTrades, bytes data)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
proposeRebalance
nonpayablefunction proposeRebalance(address[] basketsToRebalance)
proposeTokenSwap
nonpayablefunction proposeTokenSwap(tuple[] internalTrades, tuple[] externalTrades, address[] basketsToRebalance, uint64[][] targetWeights, address[][] basketAssets_)
proRataRedeem
nonpayablefunction proRataRedeem(uint256 totalSupplyBefore, uint256 burnedShares, address to)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
rescue
nonpayablefunction rescue(address token, address to, uint256 balance)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setManagementFee
nonpayablefunction setManagementFee(address basket, uint16 managementFee_)
setRetryLimit
nonpayablefunction setRetryLimit(uint8 retryLimit_)
setSlippageLimit
nonpayablefunction setSlippageLimit(uint256 slippageLimit_)
setStepDelay
nonpayablefunction setStepDelay(uint40 stepDelay_)
setSwapFee
nonpayablefunction setSwapFee(uint16 swapFee_)
setTokenSwapAdapter
nonpayablefunction setTokenSwapAdapter(address tokenSwapAdapter_)
setWeightDeviation
nonpayablefunction setWeightDeviation(uint256 weightDeviationLimit_)
unpause
nonpayablefunction unpause()
updateBitFlag
nonpayablefunction updateBitFlag(address basket, uint256 bitFlag)
events
BasketBitFlagUpdated
event BasketBitFlagUpdated(address indexed basket, uint256 oldBitFlag, uint256 newBitFlag, bytes32 oldId, bytes32 newId)
BasketCreated
event BasketCreated(address indexed basket, string basketName, string symbol, address baseAsset, uint256 bitFlag, address strategy)
ManagementFeeSet
event ManagementFeeSet(address indexed basket, uint16 oldFee, uint16 newFee)
Paused
event Paused(address account)
RetryLimitSet
event RetryLimitSet(uint8 oldLimit, uint8 newLimit)
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)
SlippageLimitSet
event SlippageLimitSet(uint256 oldSlippage, uint256 newSlippage)
StepDelaySet
event StepDelaySet(uint40 oldDelay, uint40 newDelay)
SwapFeeSet
event SwapFeeSet(uint16 oldFee, uint16 newFee)
TokenSwapAdapterSet
event TokenSwapAdapterSet(address oldAdapter, address newAdapter)
TokenSwapExecuted
event TokenSwapExecuted(uint40 indexed epoch, (address sellToken, address buyToken, uint256 sellAmount, uint256 minAmount, (address basket, uint96 tradeOwnership)[] basketTradeOwnership)[] externalTrades)
TokenSwapProposed
event TokenSwapProposed(uint40 indexed epoch, (address fromBasket, address sellToken, address buyToken, address toBasket, uint256 sellAmount, uint256 minAmount, uint256 maxAmount)[] internalTrades, (address sellToken, address buyToken, uint256 sellAmount, uint256 minAmount, (address basket, uint96 tradeOwnership)[] basketTradeOwnership)[] externalTrades)
Unpaused
event Unpaused(address account)
WeightDeviationLimitSet
event WeightDeviationLimitSet(uint256 oldDeviation, uint256 newDeviation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AssetExistsInUniverse
error AssetExistsInUniverse()
BasketIdAlreadyExists
error BasketIdAlreadyExists()
BasketTokenNotFound
error BasketTokenNotFound()
BitFlagMustBeDifferent
error BitFlagMustBeDifferent()
BitFlagMustIncludeCurrent
error BitFlagMustIncludeCurrent()
BitFlagUnsupportedByStrategy
error BitFlagUnsupportedByStrategy()
EmptyExternalTrades
error EmptyExternalTrades()
EnforcedPause
error EnforcedPause()
EthTransferFailed
error EthTransferFailed()
ExecuteTokenSwapFailed
error ExecuteTokenSwapFailed()
ExecutionFailed
error ExecutionFailed()
ExpectedPause
error ExpectedPause()
ExternalTradesHashMismatch
error ExternalTradesHashMismatch()
InvalidHash
error InvalidHash()
InvalidManagementFee
error InvalidManagementFee()
InvalidRetryCount
error InvalidRetryCount()
InvalidSlippageLimit
error InvalidSlippageLimit()
InvalidStepDelay
error InvalidStepDelay()
InvalidSwapFee
error InvalidSwapFee()
InvalidWeightDeviationLimit
error InvalidWeightDeviationLimit()
MustWaitForRebalanceToComplete
error MustWaitForRebalanceToComplete()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TokenSwapNotProposed
error TokenSwapNotProposed()
Unauthorized
error Unauthorized()
ZeroAddress
error ZeroAddress()
ZeroEthTransfer
error ZeroEthTransfer()
ZeroTokenTransfer
error ZeroTokenTransfer()
creation bytecode
0x6080601f61368438819003918201601f19168301916001600160401b038311848410176101cc5780849260c0946040528339810103126101c857610042816101e0565b9061004f602082016101e0565b9061005c604082016101e0565b610068606083016101e0565b9361008160a061007a608086016101e0565b94016101e0565b6002805460ff191690556001600160a01b039091169384156101b9576001600160a01b03169182156101b9576001600160a01b03169081156101b9576001600160a01b0384169081156101b9576001600160a01b03169586156101b9576001600160a01b03169384156101b9576100f7906101f4565b610180575b50600380546001600160a01b03199081169290921790556004805482169290921790915560058054821692909217909155600b8054821692909217909155600680549091169190911790556019805465ffffffffffff60a01b19166203840360a01b17905566b1a2bc2ec500006009819055600a5560405161337690816102ee8239f35b5f805260016020526101b2907fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4961027d565b505f6100fc565b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101c857565b6001600160a01b0381165f9081525f5160206136645f395f51905f52602052604090205460ff16610278576001600160a01b03165f8181525f5160206136645f395f51905f5260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b6001810190825f528160205260405f2054155f146102e6578054680100000000000000008110156101cc57600181018083558110156102d2578390825f5260205f20015554915f5260205260405f2055600190565b634e487b7160e01b5f52603260045260245ffd5b5050505f9056fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a714612645575080630847fbbd146125085780630aefbc14146122b95780630bdb90911461229b5780630e1071811461221e5780631ab73678146121ab5780631c347e011461208a5780631fe4ba171461200d57806320ff430b14611f54578063248a9ca314611f215780632ccbdc9f14611c165780632d5fc99814611bf85780632f2ff15d14611bba57806336568abe14611b755780633f4ba83a14611b0d5780634356d78314611ad55780634ac0529e14611a1a5780634ce04dc1146119ab578063507a11e91461192d57806353055de2146117b157806354cf2aeb1461178f5780635b07871a146117715780635c975abb1461174e5780638456cb591461167757806386bd41bd1461165057806386d4c6d9146114f25780638d4fb39f146114cb5780639010d07c1461148657806391d148541461143c5780639329c6cd146113ee578063979d7e86146113c757806397c21159146111425780639cd05bfd1461109d578063a04a090814610f3c578063a217fddf14610f20578063a3246ad314610ebc578063ab108fb414610e31578063adb5d42114610d04578063af7f9a2c14610ce6578063afaca1a114610cc2578063b1f89ac314610c0d578063b6c3487314610be9578063b96ca70714610bc1578063c415b95c14610b9a578063c7a8b45714610b03578063ca15c87314610ad9578063cc863b1714610a9d578063d080bf2714610a76578063d3e24b66146109d9578063d547741f14610992578063dce6cd0c1461038a578063f733552d146103575763fe7edecc14610265575f80fd5b34610340576020366003190112610340576001600160a01b03610286612725565b61028e612c10565b16908181526013602052604081205490816102af575b602082604051908152f35b8281526013602052806040812055600460206001600160a01b03600654166040519283809263803db96d60e01b82525afa91821561034b578092610303575b5050816102fd91602094612f71565b5f6102a4565b9091506020823d602011610343575b8161031f602093836127d6565b810103126103405750816020936103386102fd93612838565b9250936102ee565b80fd5b3d9150610312565b604051903d90823e3d90fd5b5034610340576020366003190112610340576001600160a01b0360406020926004358152600e8452205416604051908152f35b5034610340576040366003190112610340576103a4612725565b906001600160a01b03602435926103b9612c7f565b1680825260116020526040822054928315610983576040516316bf59d760e01b815293602085600481865afa9485156108ff57849561094b575b5081851461093c57601654905f198101908111610928576001901b1661091957838181160361090a57604051635463173b60e11b8152602081600481865afa9081156108ff5784916108c1575b50604051632582f04360e11b8152600481018390526020816024816001600160a01b0386165afa9081156108b6578591610877575b5015610868576040805160208101848152606084901b6bffffffffffffffffffffffff1916928201929092526104b881605481015b03601f1981018352826127d6565b51902090818552600e6020526001600160a01b036040862054166108595760405161050a816104aa60208201948a86909160349282526bffffffffffffffffffffffff199060601b1660208201520190565b519020808552600e602052604085206001600160a01b03198154169055818552600e60205260408520846001600160a01b03198254161790556024856001600160a01b036005541660405192838092633648485960e21b82528860048301525afa90811561084e57869161078c575b50848652600f6020526040862085875260146020526040872054905f198201918211610778576001600160a01b03916105b191612bd3565b90549060031b1c1690858752600f602052604087208151906001600160401b0382116107645768010000000000000000821161076457805482825580831061073e575b506020830190895260208920895b8381106107215750505050805191875b8381106106ae57505050506080859685937ff8c41db5ee793d3167be385905806844f9fbc6577953e0d1ff42cbeeb8a905bc9360405192835286602084015260408301526060820152a2813b156106aa5782916024839260405194859384926202afa960e91b845260048401525af1801561069f5761068e5750f35b81610698916127d6565b6103405780f35b6040513d84823e3d90fd5b5050fd5b600181019081811161070d576001600160a01b036106f384928b8d52601060205260408d2083806106df848b612bfc565b5116165f526020528460405f205586612bfc565b5116036106125787895260146020528060408a2055610612565b634e487b7160e01b8a52601160045260248afd5b60019060206001600160a01b038551169401938184015501610602565b818a528260208b2091820191015b81811061075957506105f4565b8a815560010161074c565b634e487b7160e01b89526041600452602489fd5b634e487b7160e01b88526011600452602488fd5b90503d8087833e61079d81836127d6565b810190602081830312610846578051906001600160401b03821161084a57019080601f83011215610846578151916001600160401b038311610832578260051b90604051936107ef60208401866127d6565b845260208085019282010192831161082e57602001905b828210610816575050505f610579565b6020809161082384612838565b815201910190610806565b8880fd5b634e487b7160e01b88526041600452602488fd5b8680fd5b8780fd5b6040513d88823e3d90fd5b63472d86cd60e01b8552600485fd5b63f3f1222d60e01b8452600484fd5b90506020813d6020116108ae575b81610892602093836127d6565b810103126108aa575180151581036108aa575f610475565b8480fd5b3d9150610885565b6040513d87823e3d90fd5b90506020813d6020116108f7575b816108dc602093836127d6565b810103126108f3576108ed90612838565b5f610440565b8380fd5b3d91506108cf565b6040513d86823e3d90fd5b636c12732360e11b8352600483fd5b637e5431eb60e11b8352600483fd5b634e487b7160e01b85526011600452602485fd5b6334e84cd360e11b8452600484fd5b9094506020813d60201161097b575b81610967602093836127d6565b810103126109775751935f6103f3565b5f80fd5b3d915061095a565b6337ff61e760e11b8352600483fd5b5034610340576040366003190112610340576109d56004356109b261273b565b906109d06109cb825f525f602052600160405f20015490565b612d3d565b612f3d565b5080f35b50346103405760203660031901126103405760043560ff8116808203610a7257610a01612c7f565b600a8111610a63577f33cfa37b6e0565031ac71480a609e88cdffdafcd85f4df5262e935dbf9ebfdef91604091610a36612e05565b6019805460ff60a01b19811660a094851b60ff60a01b16179091558351921c60ff1682526020820152a180f35b63338be0d760e11b8352600483fd5b8280fd5b503461034057806003193601126103405760206001600160a01b0360035416604051908152f35b50346103405760203660031901126103405761ffff60406020926001600160a01b03610ac7612725565b16815260078452205416604051908152f35b50346103405760203660031901126103405760406020916004358152600183522054604051908152f35b5034610340576020366003190112610340576001600160a01b03610b25612725565b610b2d612c7f565b168015610b8b5760407f7bb93b961b80681109750875447de052a2294015748962b5de6f83381ccb5c3191610b60612e05565b60195490806001600160a01b03198316176019556001600160a01b038351921682526020820152a180f35b63d92e233d60e01b8252600482fd5b503461034057806003193601126103405760206001600160a01b0360065416604051908152f35b5034610340578060031936011261034057602064ffffffffff60195460a81c16604051908152f35b5034610340578060031936011261034057602060ff60195460a01c16604051908152f35b503461034057604036600319011261034057610c27612725565b906001600160a01b03610c3861273b565b60405163bb9d15a960e01b8152600360048201529382166024850152166044830152602082606481734cb99eb83a0abed477c4a99234bc58e0464aa2805af490811561034b5790610c8f575b602090604051908152f35b506020813d602011610cba575b81610ca9602093836127d6565b810103126109775760209051610c84565b3d9150610c9c565b5034610340578060031936011261034057602060ff60175460781c16604051908152f35b50346103405780600319360112610340576020601854604051908152f35b50346103405780600319360112610340578060c0604051610d24816127a7565b8281528260208201528260408201528260608201528260808201528260a08201520152604051610d53816127a7565b6015548152601654602082019081526017546040830164ffffffffff821681526060840164ffffffffff8360281c168152608085019164ffffffffff8460501c16835260ff60a0870194818160781c16865260801c169460c08701956004811015610e1d579264ffffffffff60ff96959381959382948a526040519a518b525160208b0152511660408901525116606087015251166080850152511660a0830152516004811015610e095760e0925060c0820152f35b634e487b7160e01b83526021600452602483fd5b634e487b7160e01b89526021600452602489fd5b5034610340576020366003190112610340576001600160a01b03610e53612725565b168152600f60205260408120604051918260208354918281520192825260208220915b818110610e9d57610e9985610e8d818703826127d6565b60405191829182612765565b0390f35b82546001600160a01b0316845260209093019260019283019201610e76565b5034610340576020366003190112610340576004358152600160205260408120604051918260208354918281520192825260208220915b818110610f0a57610e9985610e8d818703826127d6565b8254845260209093019260019283019201610ef3565b5034610340578060031936011261034057602090604051908152f35b50606036600319011261034057610f51612725565b906024356001600160401b03811161109957610f719036906004016126e2565b9290610f7b612c7f565b6001600160a01b038216801561108a5760206001600160a01b0360055416916024604051809481936302dcec7760e41b835260048301525afa9081156108ff57849161105b575b5060038110156110475761103857829184839281604051928392833781018481520391604435905af1610ff3612b95565b9015611029576040906020825193849282845280519283918282870152018585015e828201840152601f01601f19168101030190f35b632b3f6d1160e21b8252600482fd5b6366f569eb60e01b8352600483fd5b634e487b7160e01b84526021600452602484fd5b61107d915060203d602011611083575b61107581836127d6565b81019061286c565b5f610fc2565b503d61106b565b63d92e233d60e01b8452600484fd5b5080fd5b50346103405760203660031901126103405760043561ffff811690818103610a72576110c7612c7f565b6101f48211611133577f31183c22f8ee36b905ba371b75b186be2b6ea7ea53e9de0622f308d03d237fc69161112d61ffff92611101612e05565b600854928419841617600855604051938493168390929161ffff60209181604085019616845216910152565b0390a180f35b63da7459b760e01b8352600483fd5b5034610340576040366003190112610340576004356001600160401b038111611099576111739036906004016126b2565b906024356001600160401b0381116108f3576111939036906004016126e2565b7f969b1b8ff684ec72bdc7a8e8f2847c5ff7692f0095efbbc121dd80f126c85abf855284602052604085206001600160a01b0333165f5260205260ff60405f20541615611390576111e2612d7d565b6111ea612db2565b6017549160ff8360801c16600481101561137c5760020361136d576001600160a01b036019541692831561135e57851561134f5760405160208101906020825261123c816104aa604082018b8b612983565b519020601854036113405770ff00ffffffffff0000000000000000000019164260501b6effffffffff000000000000000000001617600360801b17601755604080516397c2115960e01b6020820190815260248201929092528794859490936112c59183916104aa916112b3606485018d8d612983565b8481036023190160448601529161284c565b51915af46112d1612b95565b5015611331577fa02606212a189f9cff9982a701fa7891e8a1bb9d43cb9ec574e3fd0cae5e0e119064ffffffffff601754169261131b604051928392602084526020840191612983565b0390a2805f5160206133215f395f51905f525d80f35b6311d7e1bb60e21b8352600483fd5b631844728d60e31b8752600487fd5b633faebc8360e01b8752600487fd5b63d92e233d60e01b8752600487fd5b63a8beb2f560e01b8652600486fd5b634e487b7160e01b87526021600452602487fd5b63e2517d3f60e01b8552336004527f969b1b8ff684ec72bdc7a8e8f2847c5ff7692f0095efbbc121dd80f126c85abf602452604485fd5b503461034057806003193601126103405760206001600160a01b0360055416604051908152f35b5034610340576040366003190112610340576001600160a01b036040611412612725565b928261141c61273b565b94168152600d6020522091165f52602052602060405f2054604051908152f35b5034610340576040366003190112610340576001600160a01b03604061146061273b565b926004358152806020522091165f52602052602060ff60405f2054166040519015158152f35b5034610340576040366003190112610340576001600160a01b036114bb60209260043581526001845260406024359120612bd3565b90549060031b1c16604051908152f35b503461034057806003193601126103405760206001600160a01b0360045416604051908152f35b50346103405760403660031901126103405761150c612725565b6024359061ffff8216908183036108f357611525612c7f565b610bb88211611641576001600160a01b0316918261159e575b82845260076020818152604080872054868852928252808720805461ffff191695909517909455835161ffff928316815292909116908201527f994de8ef2b9354257754a0ee6502c738037855e999ee57e501ef5c33b631f22f9190a280f35b82845260116020526040842054801561163257601654905f19810190811161161e576001901b1661160f57823b156108f35760405163724f79c760e11b81528490818160048183895af1801561069f576115fa575b505061153e565b81611604916127d6565b6108f357835f6115f3565b637e5431eb60e11b8452600484fd5b634e487b7160e01b86526011600452602486fd5b6337ff61e760e11b8552600485fd5b638e9b51ff60e01b8452600484fd5b503461034057806003193601126103405760206001600160a01b0360195416604051908152f35b50346103405780600319360112610340577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a815280602052604081206001600160a01b0333165f5260205260ff60405f2054168015611726575b15611718576116de612db2565b600160ff1960025416176002557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b6282b42960e81b8152600490fd5b5080805280602052604081206001600160a01b0333165f5260205260ff60405f2054166116d1565b5034610340578060031936011261034057602060ff600254166040519015158152f35b50346103405780600319360112610340576020600954604051908152f35b5034610340578060031936011261034057602061ffff60085416604051908152f35b503461034057608036600319011261034057806004356001600160401b03811161192a576117e39036906004016126b2565b906024356001600160401b038111611927576118039036906004016126b2565b90926044356001600160401b038111611923576118249036906004016126b2565b9390916064356001600160401b03811161084a576118469036906004016126b2565b61184e612d7d565b611856612db2565b734cb99eb83a0abed477c4a99234bc58e0464aa28094853b1561191f578997604051998a9889978897629d6f4360e71b895260048901600390526024890160a0905260a48901906118a692612983565b906003198883030160448901526118bc926127f7565b906003198683030160648701526118d292612a9d565b906003198483030160848501526118e892612b36565b03915af4801561069f5761190a575b505f5160206133215f395f51905f525d80f35b81611914916127d6565b61034057805f6118f7565b8980fd5b8580fd5b50505b50fd5b503461034057806003193601126103405760405180916020600c54928381520191600c82527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915b81811061198c57610e9985610e8d818703826127d6565b82546001600160a01b0316845260209093019260019283019201611975565b5034610340576020366003190112610340576001600160a01b036119cd612725565b16815260146020526040812054908115611a0b575f1982019182116119f757602082604051908152f35b634e487b7160e01b81526011600452602490fd5b6337ff61e760e11b8152600490fd5b50346103405760203660031901126103405760043564ffffffffff8116808203610a7257611a46612c7f565b603c81108015611aca575b611abb577f8924e8e9e32b4fc16f022731a3568f716788ace6a82693f314222db5c8c0975691604091611a82612e05565b6019805464ffffffffff60a81b19811660a894851b64ffffffffff60a81b16179091558351921c64ffffffffff1682526020820152a180f35b630651474560e21b8352600483fd5b50610e108111611a51565b50346103405760203660031901126103405760406020916001600160a01b03611afc612725565b168152601383522054604051908152f35b5034610340578060031936011261034057611b26612cee565b60025460ff811615611b665760ff19166002557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b638dfc202b60e01b8252600482fd5b503461034057604036600319011261034057611b8f61273b565b336001600160a01b03821603611bab576109d590600435612f3d565b63334bd91960e11b8252600482fd5b5034610340576040366003190112610340576109d5600435611bda61273b565b90611bf36109cb825f525f602052600160405f20015490565b612dcd565b50346103405780600319360112610340576020600a54604051908152f35b50346103405760a036600319011261034057600435906001600160401b03821161034057366023830112156103405781600401356001600160401b0381116110995760248301926024369160e08402010111611099576024356001600160401b038111610a7257611c8b9036906004016126b2565b6044929192356001600160401b0381116108aa57611cad9036906004016126b2565b906064356001600160401b03811161084657611ccd9036906004016126b2565b906084356001600160401b03811161082e57611ced9036906004016126b2565b9190927f980714bf5822a05976f1adb62b370795a0daca1ffc49091c0e557819d2a31d628a528960205260408a206001600160a01b0333165f5260205260ff60405f20541615611eea57611d3f612d7d565b611d47612db2565b734cb99eb83a0abed477c4a99234bc58e0464aa28094853b15611ee657918a9593918995938b988e8b6040519b8c9a630fa7166760e21b8c52808c60c0602460c48301926003600482015201525260e48c0193908d905b8110611eae5750508a98959194611df494611dd0611e0699958c9b98611de2958d604460031982860301910152612983565b8a81036003190160648c0152916127f7565b87810360031901608489015291612a9d565b8481036003190160a486015291612b36565b03915af480156108b657908591611e99575b505064ffffffffff60175416926040519280604085016040865252606084019690865b818110611e7b575050509161131b8682937f76fa01c5ffb49e969ba769c0240a80abcf2e951277340265c37804075e1823d8958483036020860152612983565b90919760e08082611e8e6001948d612884565b019901929101611e3b565b81611ea3916127d6565b6108f357835f611e18565b9496989a9c509496989a50505060e08082611ecb60019487612884565b0193019101918b8f9a989694928f908f958e9c9a9896611d9e565b8a80fd5b63e2517d3f60e01b8a52336004527f980714bf5822a05976f1adb62b370795a0daca1ffc49091c0e557819d2a31d6260245260448afd5b5034610340576020366003190112610340576020611f4c6004355f525f602052600160405f20015490565b604051908152f35b5034610340576060366003190112610340576004356001600160a01b038116808203610a7257611f8261273b565b90611f8b612cee565b80611fa3575b5090611fa09160443591612e40565b80f35b60206001600160a01b0360055416916024604051809481936302dcec7760e41b835260048301525afa9081156108ff578491611fee575b50600381101561104757611038575f611f91565b612007915060203d6020116110835761107581836127d6565b5f611fda565b50346103405760203660031901126103405760043561202a612c7f565b6706f05b59d3b20000811161207b5760407f552e4b525e912cae5451420ddc1edc8ece76de3f0df1048a89e534621779689e91612065612e05565b600954908060095582519182526020820152a180f35b6309d5fd4360e31b8252600482fd5b5034610340576060366003190112610340576120a461270f565b6120ac612d7d565b6120b4612db2565b7f6ccb2e51a5d7258b98d884c6681f06b6a7591bacd018a7edd34e81e0518eb0a2825281602052604082206001600160a01b0333165f5260205260ff60405f20541615612174578190734cb99eb83a0abed477c4a99234bc58e0464aa28090813b156106aa576001600160a01b03608484926040519485938492635c9a757360e11b845260036004850152600435602485015260243560448501521660648301525af4801561069f5761190a57505f5160206133215f395f51905f525d80f35b63e2517d3f60e01b8252336004527f6ccb2e51a5d7258b98d884c6681f06b6a7591bacd018a7edd34e81e0518eb0a2602452604482fd5b5034610340576020366003190112610340576121c5612725565b6040516303d826c360e01b8152600360048201526001600160a01b03909116602482015290602082604481734cb99eb83a0abed477c4a99234bc58e0464aa2805af490811561034b5790610c8f57602090604051908152f35b50346103405760203660031901126103405760043561223b612c7f565b6706f05b59d3b20000811161228c5760407fba85b43ed03ea87f0cc8ec728f7e386c7c24b0908a7effd734c74bbe7efbe84d91612276612e05565b600a549080600a5582519182526020820152a180f35b63e58de7d560e01b8252600482fd5b50346103405780600319360112610340576020600c54604051908152f35b5060a0366003190112610340576004356001600160401b038111611099576122e59036906004016126e2565b906024356001600160401b0381116108f3576123059036906004016126e2565b91909261231061270f565b606435608435906001600160a01b03821680920361084a57612330612db2565b612338612c10565b6040516333b02c8760e21b81526003600482015260c06024820152602081806001600160a01b036123848c8c61237260c486018d8f61284c565b8581036003190160448701529161284c565b9716968760648301528560848301528660a48301520381734cb99eb83a0abed477c4a99234bc58e0464aa2805af49081156124fd578991612486575b509061242d6001600160a01b038360209b6123ff7f0a8fe7fca0ed33779b0e05b603e3c26c4e17655c3804f1ac9d7002a16af864949a99989796612ff7565b612448575b501698899861242060405198899860a08a5260a08a019161284c565b918783038d89015261284c565b926040850152606084015260808301520390a2604051908152f35b6040817f6ccb2e51a5d7258b98d884c6681f06b6a7591bacd018a7edd34e81e0518eb0a261247f935260018f5220838316906131d8565b505f612404565b90506020813d6020116124f5575b816124a1602093836127d6565b8101031261082e579061242d6001600160a01b0360209a6124e67f0a8fe7fca0ed33779b0e05b603e3c26c4e17655c3804f1ac9d7002a16af864949998979695612838565b939495969798509a50506123c0565b3d9150612494565b6040513d8b823e3d90fd5b5034610977576020366003190112610977576004356001600160401b038111610977576125399036906004016126b2565b335f9081527ff11fbc3a61446fa9849ac300726a3db914368a74ac4b8a6d38a988e4c800d078602052604090205460ff161561260e57612577612d7d565b61257f612db2565b734cb99eb83a0abed477c4a99234bc58e0464aa28091823b15610977576125cd925f92604051809581948293637bde380d60e11b8452600360048501526040602485015260448401916127f7565b03915af48015612603576125f0575b50805f5160206133215f395f51905f525d80f35b6125fc91505f906127d6565b5f5f6125dc565b6040513d5f823e3d90fd5b63e2517d3f60e01b5f52336004527fc88c2857354a9ce57e0782c601215c493cac9d59d0c317b0cc37eae0b7e545cd60245260445ffd5b34610977576020366003190112610977576004359063ffffffff60e01b821680920361097757602091635a05180f60e01b8114908115612687575b5015158152f35b637965db0b60e01b8114915081156126a1575b5083612680565b6301ffc9a760e01b1490508361269a565b9181601f84011215610977578235916001600160401b038311610977576020808501948460051b01011161097757565b9181601f84011215610977578235916001600160401b038311610977576020838186019501011161097757565b604435906001600160a01b038216820361097757565b600435906001600160a01b038216820361097757565b602435906001600160a01b038216820361097757565b35906001600160a01b038216820361097757565b60206040818301928281528451809452019201905f5b8181106127885750505090565b82516001600160a01b031684526020938401939092019160010161277b565b60e081019081106001600160401b038211176127c257604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b038211176127c257604052565b916020908281520191905f5b8181106128105750505090565b9091926020806001926001600160a01b0361282a88612751565b168152019401929101612803565b51906001600160a01b038216820361097757565b908060209392818452848401375f828201840152601f01601f1916010190565b90816020910312610977575160038110156109775790565b60c080916001600160a01b0361289982612751565b1684526001600160a01b036128b060208301612751565b1660208501526001600160a01b036128ca60408301612751565b1660408501526001600160a01b036128e460608301612751565b1660608501526080810135608085015260a081013560a08501520135910152565b9035601e19823603018112156109775701602081359101916001600160401b038211610977578160061b3603831361097757565b6020906001600160a01b0361294d82612751565b1683520135906bffffffffffffffffffffffff82168092036109775760200152565b9035609e1982360301811215610977570190565b90602083828152019260208260051b82010193835f925b8484106129aa5750505050505090565b909192939495601f198282030184526129c3878461296f565b9060c0612a1a60a08301936001600160a01b036129df82612751565b1684526001600160a01b036129f660208301612751565b16602085015260408101356040850152606081013560608501526080810190612905565b60a06080850152938490529101915f905b808210612a4b57505050602080600192980194019401929493919061299a565b90919260408082612a5e60019488612939565b019401920190612a2b565b9035601e19823603018112156109775701602081359101916001600160401b038211610977578160051b3603831361097757565b9091602081848152019260208160051b83010193835f935b838510612ac55750505050505090565b909192939495601f198282030184526020612ae08885612a69565b80845292909101915f905b808210612b0b575050506020806001929801940195019392949190612ab5565b9091928335906001600160401b03821680920361097757602081600193829352019401920190612aeb565b90602083828152019260208260051b82010193835f925b848410612b5d5750505050505090565b909192939495602080612b85600193601f19868203018852612b7f8b88612a69565b906127f7565b9801940194019294939190612b4d565b3d15612bce573d906001600160401b0382116127c25760405191612bc3601f8201601f1916602001846127d6565b82523d5f602084013e565b606090565b8054821015612be8575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b8051821015612be85760209160051b010190565b335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff1615612c4857565b63e2517d3f60e01b5f52336004527f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0860245260445ffd5b335f9081527f7ac54956a1ef8e3291bb91e2c67ee0022c1dd0c0faf00c013d518201b2b3426c602052604090205460ff1615612cb757565b63e2517d3f60e01b5f52336004527ff66846415d2bf9eabda9e84793ff9c0ea96d87f50fc41e66aa16469c6a442f0560245260445ffd5b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615612d2657565b63e2517d3f60e01b5f52336004525f60245260445ffd5b805f525f60205260405f206001600160a01b0333165f5260205260ff60405f20541615612d675750565b63e2517d3f60e01b5f523360045260245260445ffd5b5f5160206133215f395f51905f525c612da35760015f5160206133215f395f51905f525d565b633ee5aeb560e01b5f5260045ffd5b60ff60025416612dbe57565b63d93c066560e01b5f5260045ffd5b612dd782826130c8565b9182612de257505090565b612e01915f5260016020526001600160a01b0360405f209116906131d8565b5090565b60ff60175460801c166004811015612e2c57612e1d57565b637e5431eb60e11b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b916001600160a01b03831680612ea85750909150478115612ea0578180821091180218905b81612e7957637c3d101560e01b5f5260045ffd5b5f80809381935af1612e89612b95565b5015612e9157565b630db2c7f160e31b5f5260045ffd5b905090612e65565b6020602491604051928380926370a0823160e01b82523060048301525afa908115612603575f91612f0b575b508115612f03578180821091180218905b81612ef857625689bb60e41b5f5260045ffd5b612f0192612f71565b565b905090612ee5565b90506020813d602011612f35575b81612f26602093836127d6565b8101031261097757515f612ed4565b3d9150612f19565b612f478282613155565b9182612f5257505090565b612e01915f5260016020526001600160a01b0360405f20911690613247565b916020915f91604051906001600160a01b038583019363a9059cbb60e01b8552166024830152604482015260448152612fab6064826127d6565b519082855af115612603575f513d612fee57506001600160a01b0381163b155b612fd25750565b6001600160a01b0390635274afe760e01b5f521660045260245ffd5b60011415612fcb565b6001600160a01b0381165f9081527ff78cd5351faa8d06fea3afca704fe2df42c537c945e9544e56aaa583d25d0474602052604090205460ff166130c3576001600160a01b03165f8181527ff78cd5351faa8d06fea3afca704fe2df42c537c945e9544e56aaa583d25d047460205260408120805460ff191660011790553391907f6ccb2e51a5d7258b98d884c6681f06b6a7591bacd018a7edd34e81e0518eb0a2907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b505f90565b805f525f60205260405f206001600160a01b0383165f5260205260ff60405f205416155f1461314f57805f525f60205260405f206001600160a01b0383165f5260205260405f20600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f60205260405f206001600160a01b0383165f5260205260ff60405f2054165f1461314f57805f525f60205260405f206001600160a01b0383165f5260205260405f2060ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b6001810190825f528160205260405f2054155f14613240578054680100000000000000008110156127c25761322d613217826001879401855584612bd3565b819391549060031b91821b915f19901b19161790565b905554915f5260205260405f2055600190565b5050505f90565b906001820191815f528260205260405f20548015155f14613318575f1981018181116133045782545f19810191908211613304578181036132cf575b505050805480156132bb575f19019061329c8282612bd3565b8154905f199060031b1b19169055555f526020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b6132ef6132df6132179386612bd3565b90549060031b1c92839286612bd3565b90555f528360205260405f20555f8080613283565b634e487b7160e01b5f52601160045260245ffd5b505050505f9056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122020d69b4f889901ccd1b5c4dda7519bf49892384f1983ec64f02e3bf0512a13ba64736f6c634300081c0033ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb50000000000000000000000001f8ffa682d43a8c07dbcfeaf9c6a48ae6cdd76b300000000000000000000000036959be8a8eb65d5905d5e413a23e5592681056a000000000000000000000000e25ccc4a97dc5f3aed558df01ba94ad026f8d2690000000000000000000000001d21dcf9787dfe268b76f0336d1bfb9a32d473c90000000000000000000000008842fe65a7db9bb5de6d50e49af19496da09f9b5000000000000000000000000d80980a008bdb334ffdae5d7c1695ae99fd49a35