0 txs
0 calls
constructor
constructor()
functions
ADMIN_DELEGATE_ROLE
viewfunction ADMIN_DELEGATE_ROLE() view returns (bytes32)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
coolDownPeriodWithdrawRequest
viewfunction coolDownPeriodWithdrawRequest() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getNextWithdrawRequestTime
viewfunction getNextWithdrawRequestTime(address user) view returns (uint256 nextAllowedTimestamp)
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)
isAdmin
viewfunction isAdmin(address _sender) view returns (bool)
isDelegateAdmin
viewfunction isDelegateAdmin(address _sender) view returns (bool)
isOperator
viewfunction isOperator(address _sender) view returns (bool)
isSigner
viewfunction isSigner(address _sender) view returns (bool)
lastRequestTimestamp
viewfunction lastRequestTimestamp(address user) view returns (uint256 timestamp)
moneyFiController
viewfunction moneyFiController() view returns (address)
moneyFiFundVault
viewfunction moneyFiFundVault() view returns (address)
OPERATOR
viewfunction OPERATOR() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
SIGNER
viewfunction SIGNER() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
createWithdrawRequestOnAnotherChain
nonpayablefunction createWithdrawRequestOnAnotherChain(tuple[] _withdrawStrategyMultipleChains)
depositFund
nonpayablefunction depositFund(tuple _depositParam)
depositFundToStrategySameChainFromOperator
nonpayablefunction depositFundToStrategySameChainFromOperator(tuple _depositToStrategy, tuple _swapTokenParam)
emergencyWithdrawFund
nonpayablefunction emergencyWithdrawFund(address strategyAddress)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin_, address moneyFiController_, address moneyFundVault_)
pause
nonpayablefunction pause()
rebalanceFundSameChain
nonpayablefunction rebalanceFundSameChain(tuple _rebalanceParam)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setCoolDownPeriodWithdrawRequest
nonpayablefunction setCoolDownPeriodWithdrawRequest(uint256 _newPeriod)
setEmergencyStop
nonpayablefunction setEmergencyStop(address strategyAddress, bool isEmergencyStop)
unpause
nonpayablefunction unpause()
upgradeControllerAndFundVault
nonpayablefunction upgradeControllerAndFundVault(address moneyFiController_, address moneyFundVault_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawFundSameChain
nonpayablefunction withdrawFundSameChain(tuple[] _withdrawStrategySameChains, tuple[] _unDistributedWithdraw, bool _isReferral, bytes _signature, tuple swapParam)
events
DepositFund
event DepositFund(address indexed receiver, address indexed tokenAddress, uint256 depositAmount, uint256 actualDepositAmount, uint256 depositedAt)
DistributeUserFund
event DistributeUserFund(address indexed strategyAddress, address indexed depositor, address indexed depositedTokenAddress, uint256 amount, address swapContract, address underlyingAsset, uint256 actualAmountOut, uint256 strategyShare, uint256 distributedFee, uint256 distributedAt)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
RebalanceFundSameChain
event RebalanceFundSameChain(address indexed strategyAddress, address indexed userAddress, address indexed underlyingAsset, uint256 receivedAmount, int256 receivedReward, uint256 protocolFee, uint256 referralFee, uint256 rebalanceFee, uint256 rebalancedAt)
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)
SubmitWithdrawFundCrossChain
event SubmitWithdrawFundCrossChain(address indexed sender, address indexed receiver, address indexed tokenAddress)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
WithDrawFundSameChain
event WithDrawFundSameChain(address indexed receiver, address indexed user, address indexed strategyAddress, address tokenAddress, uint256 share, uint256 actualWithdrawAmount, uint256 protocolFee, uint256 referralFee, uint256 withdrawAt)
WithdrawRequest
event WithdrawRequest(address indexed user, uint256 indexed chainId, (address strategyAddress, uint256 share, bytes externalCallData)[] withdrawStrategySameChains, (address tokenAddress, uint256 unDistributedAmount)[] unDistributedWithdraw, address tokenOut, uint256 requestedAt)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
CanNotSwapToUnderLyToken
error CanNotSwapToUnderLyToken()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InvalidAdminRole
error InvalidAdminRole()
InvalidAtLeastOperatorRole
error InvalidAtLeastOperatorRole()
InvalidDelegateRole
error InvalidDelegateRole()
InvalidDexCrossChainExternal
error InvalidDexCrossChainExternal()
InvalidDexCrossChainInternal
error InvalidDexCrossChainInternal()
InvalidDexSwapExternalChain
error InvalidDexSwapExternalChain()
InvalidDexSwapInternalChain
error InvalidDexSwapInternalChain()
InvalidInitialization
error InvalidInitialization()
InvalidRebalanceAmount
error InvalidRebalanceAmount()
InvalidShare
error InvalidShare()
InvalidSignerRole
error InvalidSignerRole()
InvalidStrategy
error InvalidStrategy()
InvalidStrategyExternalChain
error InvalidStrategyExternalChain()
InvalidStrategyInternalChain
error InvalidStrategyInternalChain()
InvalidStrategyToken
error InvalidStrategyToken()
InvalidSupportedTokenExternal
error InvalidSupportedTokenExternal()
InvalidSupportedTokenInternal
error InvalidSupportedTokenInternal()
InvalidSwapParam
error InvalidSwapParam()
InvalidSystemFee
error InvalidSystemFee()
InvalidTypeDexCrossChainSenderReceiver
error InvalidTypeDexCrossChainSenderReceiver()
InvalidUnderlyingStrategyAsset
error InvalidUnderlyingStrategyAsset()
InvalidWithdrawRequestArg
error InvalidWithdrawRequestArg()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RequiredAddressNotNull
error RequiredAddressNotNull()
RequireDexActive
error RequireDexActive()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SwapFailed
error SwapFailed()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
WithdrawRateLimit
error WithdrawRateLimit()
creation bytecode
0x60a060405230608052348015610013575f80fd5b506001600355610021610026565b6100d8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100765760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d55780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516148336100fe5f395f8181611cd301528181611cfc0152611e5e01526148335ff3fe608060405260043610610228575f3560e01c80637df73e2711610129578063a3246ad3116100a8578063ca15c8731161006d578063ca15c87314610690578063d547741f146106af578063dabc93c0146106ce578063e7ab7a1c146106ed578063ee00240f14610702575f80fd5b8063a3246ad3146105ca578063ad3cb1cc146105f6578063c0c53b8b14610633578063c114ce5c14610652578063c7b283f714610671575f80fd5b806390598919116100ee578063905989191461052e57806391d1485414610559578063983d273714610578578063a16a95f314610598578063a217fddf146105b7575f80fd5b80637df73e271461049e5780637f5d2a2a146104bd5780638456cb59146104dc578063879e7d4e146104f05780639010d07c1461050f575f80fd5b80633f4ba83a116101b5578063579893141161017a5780635798931414610409578063582abd12146104285780635c975abb146104485780636d70f7ae1461045f57806375b238fc1461047e575f80fd5b80633f4ba83a1461039057806349251fd5146103a45780634c974c00146103c35780634f1ef286146103e257806352d1902d146103f5575f80fd5b806324d7806c116101fb57806324d7806c146102f3578063285072c6146103125780632f2ff15d1461033357806336568abe1461035257806338a90cf514610371575f80fd5b806301ffc9a71461022c5780630952ff54146102605780631ecccbe31461028e578063248a9ca3146102c5575b5f80fd5b348015610237575f80fd5b5061024b610246366004613a00565b610721565b60405190151581526020015b60405180910390f35b34801561026b575f80fd5b506102805f805160206147a783398151915281565b604051908152602001610257565b348015610299575f80fd5b506005546102ad906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b3480156102d0575f80fd5b506102806102df366004613a27565b5f9081526020819052604090206001015490565b3480156102fe575f80fd5b5061024b61030d366004613a52565b61074b565b34801561031d575f80fd5b5061033161032c366004613a7a565b610763565b005b34801561033e575f80fd5b5061033161034d366004613ab1565b61086e565b34801561035d575f80fd5b5061033161036c366004613ab1565b610898565b34801561037c575f80fd5b5061033161038b366004613a52565b6108d0565b34801561039b575f80fd5b506103316109d2565b3480156103af575f80fd5b506004546102ad906001600160a01b031681565b3480156103ce575f80fd5b506103316103dd366004613c63565b610a02565b6103316103f0366004613d44565b610dfb565b348015610400575f80fd5b50610280610e1a565b348015610414575f80fd5b50610331610423366004613fec565b610e35565b348015610433575f80fd5b506102805f8051602061478783398151915281565b348015610453575f80fd5b5060025460ff1661024b565b34801561046a575f80fd5b5061024b610479366004613a52565b610f1e565b348015610489575f80fd5b506102805f805160206147c783398151915281565b3480156104a9575f80fd5b5061024b6104b8366004613a52565b610f36565b3480156104c8575f80fd5b506103316104d73660046140b3565b610f4e565b3480156104e7575f80fd5b5061033161108c565b3480156104fb575f80fd5b5061033161050a3660046140cd565b6110ba565b34801561051a575f80fd5b506102ad61052936600461412d565b611500565b348015610539575f80fd5b50610280610548366004613a52565b60066020525f908152604090205481565b348015610564575f80fd5b5061024b610573366004613ab1565b61151e565b348015610583575f80fd5b506102805f8051602061480783398151915281565b3480156105a3575f80fd5b5061024b6105b2366004613a52565b611546565b3480156105c2575f80fd5b506102805f81565b3480156105d5575f80fd5b506105e96105e4366004613a27565b61155e565b604051610257919061414d565b348015610601575f80fd5b50610626604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161025791906141c6565b34801561063e575f80fd5b5061033161064d3660046141d8565b611577565b34801561065d575f80fd5b5061033161066c366004613a27565b6116a0565b34801561067c575f80fd5b5061033161068b366004614220565b6116cb565b34801561069b575f80fd5b506102806106aa366004613a27565b61175a565b3480156106ba575f80fd5b506103316106c9366004613ab1565b611770565b3480156106d9575f80fd5b506102806106e8366004613a52565b611794565b3480156106f8575f80fd5b5061028060075481565b34801561070d575f80fd5b5061033161071c36600461424c565b6117ba565b5f6001600160e01b03198216635a05180f60e01b1480610745575061074582611947565b92915050565b5f6107455f805160206147c78339815191528361151e565b61076c33611546565b6107895760405163dade674960e01b815260040160405180910390fd5b6004805460405163adcf5b6960e01b81526001600160a01b038581169382019390935291169063adcf5b6990602401602060405180830381865afa1580156107d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f79190614381565b6108145760405163251ffdf560e11b815260040160405180910390fd5b60405163c73d7c7b60e01b815281151560048201526001600160a01b0383169063c73d7c7b906024015f604051808303815f87803b158015610854575f80fd5b505af1158015610866573d5f803e3d5ffd5b505050505050565b5f828152602081905260409020600101546108888161197b565b6108928383611985565b50505050565b6001600160a01b03811633146108c15760405163334bd91960e11b815260040160405180910390fd5b6108cb82826119b8565b505050565b6108d933611546565b6108f65760405163dade674960e01b815260040160405180910390fd5b6004805460405163adcf5b6960e01b81526001600160a01b038481169382019390935291169063adcf5b6990602401602060405180830381865afa158015610940573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109649190614381565b6109815760405163251ffdf560e11b815260040160405180910390fd5b806001600160a01b031663db2e21bc6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156109b9575f80fd5b505af11580156109cb573d5f803e3d5ffd5b5050505050565b6109db33611546565b6109f85760405163dade674960e01b815260040160405180910390fd5b610a006119e3565b565b610a0b33610f1e565b610a2857604051631784501560e11b815260040160405180910390fd5b610a30611a35565b60048054835160405163adcf5b6960e01b81526001600160a01b0391821693810193909352169063adcf5b6990602401602060405180830381865afa158015610a7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9f9190614381565b610abc5760405163251ffdf560e11b815260040160405180910390fd5b5f825f01516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b20919061439c565b90505f610b31846080015183611a59565b600554604086810151602088015160608901519251632efeb46560e01b81526001600160a01b0392831660048201529082166024820152604481019290925260648201849052929350911690632efeb465906084015f604051808303815f87803b158015610b9d575f80fd5b505af1158015610baf573d5f803e3d5ffd5b505050505f610bcf858585858960600151610bca91906143cb565b611b96565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3a91906143de565b60048054885160208a015160405163a81207e960e01b81526001600160a01b03928316948101949094528116602484015260448301849052929350919091169063a81207e9906064015f604051808303815f87803b158015610c9a575f80fd5b505af1158015610cac573d5f803e3d5ffd5b505050508460200151811015610cd557604051631e9acf1760e31b815260040160405180910390fd5b8551610cec906001600160a01b0386169083611c41565b8551602087015160a088015160405163faa9bce960e01b81525f936001600160a01b03169263faa9bce992610d2792879291906004016143f5565b6020604051808303815f875af1158015610d43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6791906143de565b6040808901516020808b01518b516060808e01518d5187519182526001600160a01b03908116958201959095528c85169681019690965285018990526080850186905260a085018a90524260c086015294955091811693918116929116907f6a651115cc5aa2801b031e6fd7c6e2adb7334e4e2dff54ba36968d9ad9f4b0919060e00160405180910390a450505050505050565b610e03611cc8565b610e0c82611d6c565b610e168282611d92565b5050565b5f610e23611e53565b505f805160206147e783398151915290565b335f90815260066020526040812054600754909190610e54908361441e565b905080421015610e77576040516332ab94fd60e11b815260040160405180910390fd5b610e7f611a35565b6004805460405163f77065d560e01b81526001600160a01b039091169163f77065d591610eb29189918991339101614431565b5f604051808303815f87803b158015610ec9575f80fd5b505af1158015610edb573d5f803e3d5ffd5b505050505f86511115610ef257610ef28684611e9c565b865115610f0457610f048784876121d8565b5050335f9081526006602052604090204290555050505050565b5f6107455f805160206148078339815191528361151e565b5f6107455f805160206147878339815191528361151e565b610f56611a35565b610f5e6129db565b60208101518151610f7e916001600160a01b039091169033903090612a05565b60055460208201518251610fa0926001600160a01b0391821692911690611c41565b6005548151602083015160405163745e87f760e01b81526001600160a01b03928316600482015233602482015260448101919091525f92919091169063745e87f7906064016020604051808303815f875af1158015611001573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102591906143de565b82516020808501516040805191825291810184905242918101919091529192506001600160a01b03169033907fc79467b8234137e0f5558b9b5b234c6a277ddb4d3e05415864e2300bf4b325d39060600160405180910390a3506110896001600355565b50565b61109533611546565b6110b25760405163dade674960e01b815260040160405180910390fd5b610a00612a6c565b6110c333610f1e565b6110e057604051631784501560e11b815260040160405180910390fd5b6110e8611a35565b805160208201516040516370a0823160e01b81526001600160a01b0391821660048201525f918316906370a0823190602401602060405180830381865afa158015611135573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115991906143de565b90505f826001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611198573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bc919061439c565b6004805460405163116f80c560e01b81526001600160a01b0380851693820193909352929350169063116f80c590602401602060405180830381865afa158015611208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122c9190614381565b611249576040516333084a1960e01b815260040160405180910390fd5b5f82116112695760405163040357dd60e21b815260040160405180910390fd5b602084015160405163520ab54d60e01b81526001600160a01b0391821660048201525f9185169063520ab54d90602401602060405180830381865afa1580156112b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d891906143de565b90505f806112ea838860400151612aa9565b602089015160405163087515b960e41b8152600481018990523060248201526001600160a01b039182166044820152608060648201525f608482018190529395509193508816906387515b909060a4016020604051808303815f875af1158015611356573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a91906143de565b90505f6113ea8960600151896001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e5919061439c565b611a59565b90506113f6848261441e565b82101561141657604051630f4b703960e01b815260040160405180910390fd5b6114f56040518061010001604052808a6001600160a01b031681526020018a6001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611470573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611494919061439c565b6001600160a01b031681526020018b602001516001600160a01b031681526020018387866114c291906143cb565b6114cc91906143cb565b81526020016114db8789614463565b815260200186815260200185815260200183815250612bc9565b505050505050505050565b5f8281526001602052604081206115179083612ddf565b9392505050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6107455f805160206147a78339815191528361151e565b5f81815260016020526040902060609061074590612dea565b5f611580612df6565b805490915060ff600160401b82041615906001600160401b03165f811580156115a65750825b90505f826001600160401b031660011480156115c15750303b155b9050811580156115cf575080155b156115ed5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561161757845460ff60401b1916600160401b1785555b61162088612e1e565b600480546001600160a01b03808a166001600160a01b0319928316179092556005805492891692909116919091179055831561169657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6116a933611546565b6116c65760405163dade674960e01b815260040160405180910390fd5b600755565b6116d43361074b565b6116f157604051632d4d7bb360e01b815260040160405180910390fd5b6001600160a01b038216158061170e57506001600160a01b038116155b1561172c5760405163706e379b60e11b815260040160405180910390fd5b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b5f81815260016020526040812061074590612f01565b5f8281526020819052604090206001015461178a8161197b565b61089283836119b8565b6007546001600160a01b0382165f9081526006602052604081205490916107459161441e565b335f908152600660205260408120546007549091906117d9908361441e565b9050804210156117fc576040516332ab94fd60e11b815260040160405180910390fd5b611804611a35565b825180611824576040516305eeffdf60e31b815260040160405180910390fd5b5f5b8161ffff168161ffff16101561192f5761185c858261ffff168151811061184f5761184f614482565b6020026020010151612f0a565b848161ffff168151811061187257611872614482565b602002602001015160400151336001600160a01b03167f2bb282ce5b59140f3e8ad31e83210c95604a6301fd24da724a8e4eb05770aa2c878461ffff16815181106118bf576118bf614482565b60200260200101515f0151888561ffff16815181106118e0576118e0614482565b602002602001015160200151898661ffff168151811061190257611902614482565b6020026020010151606001514260405161191f94939291906144e5565b60405180910390a3600101611826565b5050335f908152600660205260409020429055505050565b5f6001600160e01b03198216637965db0b60e01b148061074557506301ffc9a760e01b6001600160e01b0319831614610745565b61108981336130a8565b5f8061199184846130e1565b90508015611517575f8481526001602052604090206119b09084613170565b509392505050565b5f806119c48484613184565b90508015611517575f8481526001602052604090206119b090846131ed565b6119eb613201565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60025460ff1615610a005760405163d93c066560e01b815260040160405180910390fd5b5f60045f9054906101000a90046001600160a01b03166001600160a01b031663ec39ded16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ace91906143de565b831115611aee576040516317bbcaeb60e31b815260040160405180910390fd5b5f826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4f91906145a3565b60ff16905080601214611b8b575f611b688260126143cb565b9050611b836001611b7a83600a6146a6565b8791905f613224565b925050611b8f565b8391505b5092915050565b5f826001600160a01b031685604001516001600160a01b031614611c3657611c2f604051806101000160405280865f01516001600160a01b0316815260200187604001516001600160a01b03168152602001856001600160a01b03168152602001306001600160a01b0316815260200184815260200186602001518152602001866060015181526020018660400151151581525061326f565b9050611c39565b50805b949350505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015611c8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb291906143de565b90506108928484611cc3858561441e565b6133cc565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d4e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d425f805160206147e7833981519152546001600160a01b031690565b6001600160a01b031614155b15610a005760405163703e46dd60e11b815260040160405180910390fd5b611d7533611546565b6110895760405163dade674960e01b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611dec575060408051601f3d908101601f19168201909252611de9918101906143de565b60015b611e1957604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f805160206147e78339815191528114611e4957604051632a87526960e21b815260048101829052602401611e10565b6108cb838361345b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a005760405163703e46dd60e11b815260040160405180910390fd5b81515f5b818110156108925782516001600160a01b031615801590611ecd575060208301516001600160a01b031615155b156120555760055484516001600160a01b039091169063787e16219033903090889086908110611eff57611eff614482565b60200260200101515f0151888681518110611f1c57611f1c614482565b60209081029190910181015101516040516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015260648101919091526084015f604051808303815f87803b158015611f7f575f80fd5b505af1158015611f91573d5f803e3d5ffd5b5050505061204f60405180610100016040528085602001516001600160a01b03168152602001868481518110611fc957611fc9614482565b60200260200101515f01516001600160a01b03168152602001855f01516001600160a01b03168152602001336001600160a01b0316815260200186848151811061201557612015614482565b60200260200101516020015181526020015f815260200160405180602001604052805f81525081526020018560800151151581525061326f565b50612119565b60055484516001600160a01b039091169063787e1621903390819088908690811061208257612082614482565b60200260200101515f015188868151811061209f5761209f614482565b60209081029190910181015101516040516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015260648101919091526084015f604051808303815f87803b158015612102575f80fd5b505af1158015612114573d5f803e3d5ffd5b505050505b5f6001600160a01b0316336001600160a01b0316336001600160a01b03167f0ef3d126bf20ddcaf11c634d4c7532a352e7b29ecb19853e4ed62f651490185887858151811061216a5761216a614482565b60200260200101515f01515f89878151811061218857612188614482565b602090810291909101810151810151604080516001600160a01b039095168552918401929092528201525f6060820181905260808201524260a082015260c00160405180910390a4600101611ea0565b5f5b8351811015610892575f8482815181106121f6576121f6614482565b6020908102919091010151516040516370a0823160e01b81523360048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612249573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061226d91906143de565b90505f86848151811061228257612282614482565b6020026020010151602001511115806122b757508583815181106122a8576122a8614482565b60200260200101516020015181105b156122d55760405163040357dd60e21b815260040160405180910390fd5b60405163520ab54d60e01b81523360048201525f906001600160a01b0384169063520ab54d90602401602060405180830381865afa158015612319573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061233d91906143de565b90505f8061234b8388612aa9565b60405163087515b960e41b815260048101879052306024820152336044820152608060648201525f608482018190529294509092506001600160a01b038716906387515b909060a4016020604051808303815f875af11580156123b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d491906143de565b90505f858b89815181106123ea576123ea614482565b602002602001015160200151146124345761242f8b898151811061241057612410614482565b602002602001015160200151875f85613224909392919063ffffffff16565b612436565b815b90505f841180156124475750838210155b156125c9576124d560055f9054906101000a90046001600160a01b031685896001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c5919061439c565b6001600160a01b03169190611c41565b60055f9054906101000a90046001600160a01b03166001600160a01b0316637e20cf71886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612558919061439c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101879052604481018690526064015f604051808303815f87803b1580156125a4575f80fd5b505af11580156125b6573d5f803e3d5ffd5b5050505083826125c691906143cb565b91505b8181106125d857505f906125e5565b6125e281836143cb565b91505b81156126a8576126a8604051806101000160405280896001600160a01b03168152602001896001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612645573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612669919061439c565b6001600160a01b031681523360208201526040810185905260600161268e8789614463565b81526020015f81526020015f81526020015f815250612bc9565b60208a01516001600160a01b0316158015906126cd575089516001600160a01b031615155b156127b2576127ac6040518061010001604052808c602001516001600160a01b03168152602001896001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612730573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612754919061439c565b6001600160a01b031681526020018c5f01516001600160a01b03168152602001336001600160a01b031681526020018381526020018c6060015181526020018c6040015181526020018c60800151151581525061326f565b50612827565b6128273382896001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612817919061439c565b6001600160a01b031691906134b0565b8a888151811061283957612839614482565b60200260200101515f01516001600160a01b0316336001600160a01b0316336001600160a01b03167f0ef3d126bf20ddcaf11c634d4c7532a352e7b29ecb19853e4ed62f65149018588a6001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e2919061439c565b8f8d815181106128f4576128f4614482565b6020026020010151602001518661298f61271060045f9054906101000a90046001600160a01b03166001600160a01b03166384ae2bc66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612957573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061297b91906143de565b61298690600161441e565b8c91905f613224565b604080516001600160a01b0390951685526020850193909352918301526060820152608081018890524260a082015260c00160405180910390a4876001019750505050505050506121da565b6002600354036129fe57604051633ee5aeb560e01b815260040160405180910390fd5b6002600355565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506134e1565b612a74611a35565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a183390565b5f805f841315612bc257612b3560045f9054906101000a90046001600160a01b03166001600160a01b031663b0e21e8a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2a91906143de565b85906127105f613224565b91508215612bc257612bbf60045f9054906101000a90046001600160a01b03166001600160a01b03166384ae2bc66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb491906143de565b83906127105f613224565b90505b9250929050565b805f01516001600160a01b031663c0b538f86040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612c04575f80fd5b505af1158015612c16573d5f803e3d5ffd5b505060055460e084015160a08501516060860151612c6795506001600160a01b0390931693509091612c48919061441e565b612c52919061441e565b60208401516001600160a01b03169190611c41565b6005546020820151604080840151606085015160a086015160c087015160e088015194516318139f4760e01b81526001600160a01b039687166004820152938616602485015260448401929092526064830152608482015260a48101919091529116906318139f479060c4015f604051808303815f87803b158015612cea575f80fd5b505af1158015612cfc573d5f803e3d5ffd5b5050505080602001516001600160a01b031681604001516001600160a01b0316825f01516001600160a01b03167e7cb892d68cd3723baea36a5d32331d221b1455154a0741fa57358ae4f8a77f846060015185608001518660c001518760a00151612d6791906143cb565b60c08881015160e08a015160408051968752602087019590955285850193909352606085015260808401919091524260a08401529051918290030190a4805f01516001600160a01b0316631c5561ea6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156109b9575f80fd5b5f611517838361354d565b60605f61151783613573565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610745565b612e355f8051602061480783398151915282611985565b50612e4d5f805160206147c783398151915282611985565b50612e655f805160206147a783398151915282611985565b50612e7d5f8051602061478783398151915282611985565b50612e955f805160206147c7833981519152806135cc565b612eb95f805160206147a78339815191525f805160206147c78339815191526135cc565b612edd5f805160206148078339815191525f805160206147a78339815191526135cc565b6110895f805160206147878339815191525f805160206147a78339815191526135cc565b5f610745825490565b805151158015612f1d5750602081015151155b15612f3b576040516305eeffdf60e31b815260040160405180910390fd5b60608101516001600160a01b0316612f665760405163706e379b60e11b815260040160405180910390fd5b8051516020820151515f5b8261ffff168161ffff161015613006575f845f01518261ffff1681518110612f9b57612f9b614482565b602002602001015160200151111580612fe05750835180515f919061ffff8416908110612fca57612fca614482565b60200260200101515f01516001600160a01b0316145b15612ffe576040516305eeffdf60e31b815260040160405180910390fd5b600101612f71565b505f5b8161ffff168161ffff161015610892575f84602001518261ffff168151811061303457613034614482565b60200260200101516020015111158061308257505f6001600160a01b031684602001518261ffff168151811061306c5761306c614482565b60200260200101515f01516001600160a01b0316145b156130a0576040516305eeffdf60e31b815260040160405180910390fd5b600101613009565b6130b2828261151e565b610e165760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611e10565b5f6130ec838361151e565b613169575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556131213390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610745565b505f610745565b5f611517836001600160a01b038416613616565b5f61318f838361151e565b15613169575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610745565b5f611517836001600160a01b03841661365b565b60025460ff16610a0057604051638dfc202b60e01b815260040160405180910390fd5b5f6132516132318361373e565b801561324c57505f8480613247576132476146b1565b868809115b151590565b61325c86868661376a565b613266919061441e565b95945050505050565b6004805482516040516362141cf560e11b81526001600160a01b03918216938101939093525f9291169063c42839ea90602401602060405180830381865afa1580156132bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132e19190614381565b6132fd57604051628763ed60e31b815260040160405180910390fd5b81516080830151602084015161331e926001600160a01b0390911691611c41565b81516020830151604080850151608086015160a0870151606088015160e089015160c08a01519551637c9eaaa960e11b81526001600160a01b039098169763f93d55529761337597909695949392916004016146c5565b6020604051808303815f875af19250505080156133af575060408051601f3d908101601f191682019092526133ac918101906143de565b60015b6107455760405163081ceff360e41b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261341d848261381a565b610892576040516001600160a01b0384811660248301525f604483015261345191869182169063095ea7b390606401612a3a565b61089284826134e1565b61346482613863565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156134a8576108cb82826138c6565b610e1661392f565b6040516001600160a01b038381166024830152604482018390526108cb91859182169063a9059cbb90606401612a3a565b5f8060205f8451602086015f885af180613500576040513d5f823e3d81fd5b50505f513d91508115613517578060011415613524565b6001600160a01b0384163b155b1561089257604051635274afe760e01b81526001600160a01b0385166004820152602401611e10565b5f825f01828154811061356257613562614482565b905f5260205f200154905092915050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156135c057602002820191905f5260205f20905b8154815260200190600101908083116135ac575b50505050509050919050565b5f82815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f81815260018301602052604081205461316957508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610745565b5f8181526001830160205260408120548015613735575f61367d6001836143cb565b85549091505f90613690906001906143cb565b90508082146136ef575f865f0182815481106136ae576136ae614482565b905f5260205f200154905080875f0184815481106136ce576136ce614482565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806137005761370061471b565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610745565b5f915050610745565b5f60028260038111156137535761375361472f565b61375d9190614743565b60ff166001149050919050565b5f805f613777868661394e565b91509150815f0361379b57838181613791576137916146b1565b0492505050611517565b8184116137b2576137b2600385150260111861396a565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f805f8060205f8651602088015f8a5af192503d91505f5190508280156138595750811561384b5780600114613859565b5f866001600160a01b03163b115b9695505050505050565b806001600160a01b03163b5f0361389857604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611e10565b5f805160206147e783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516138e29190614770565b5f60405180830381855af49150503d805f811461391a576040519150601f19603f3d011682016040523d82523d5f602084013e61391f565b606091505b509150915061326685838361397b565b3415610a005760405163b398979f60e01b815260040160405180910390fd5b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6060826139905761398b826139d7565b611517565b81511580156139a757506001600160a01b0384163b155b156139d057604051639996b31560e01b81526001600160a01b0385166004820152602401611e10565b5080611517565b8051156139e75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613a10575f80fd5b81356001600160e01b031981168114611517575f80fd5b5f60208284031215613a37575f80fd5b5035919050565b6001600160a01b0381168114611089575f80fd5b5f60208284031215613a62575f80fd5b813561151781613a3e565b8015158114611089575f80fd5b5f8060408385031215613a8b575f80fd5b8235613a9681613a3e565b91506020830135613aa681613a6d565b809150509250929050565b5f8060408385031215613ac2575f80fd5b823591506020830135613aa681613a3e565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715613b0a57613b0a613ad4565b60405290565b60405160c081016001600160401b0381118282101715613b0a57613b0a613ad4565b604051606081016001600160401b0381118282101715613b0a57613b0a613ad4565b604051601f8201601f191681016001600160401b0381118282101715613b7c57613b7c613ad4565b604052919050565b5f82601f830112613b93575f80fd5b81356001600160401b03811115613bac57613bac613ad4565b613bbf601f8201601f1916602001613b54565b818152846020838601011115613bd3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60808284031215613bff575f80fd5b613c07613ae8565b90508135613c1481613a3e565b8152602082810135908201526040820135613c2e81613a6d565b604082015260608201356001600160401b03811115613c4b575f80fd5b613c5784828501613b84565b60608301525092915050565b5f8060408385031215613c74575f80fd5b82356001600160401b03811115613c89575f80fd5b830160c08186031215613c9a575f80fd5b613ca2613b10565b8135613cad81613a3e565b81526020820135613cbd81613a3e565b60208201526040820135613cd081613a3e565b6040820152606082810135908201526080808301359082015260a08201356001600160401b03811115613d01575f80fd5b613d0d87828501613b84565b60a08301525092505060208301356001600160401b03811115613d2e575f80fd5b613d3a85828601613bef565b9150509250929050565b5f8060408385031215613d55575f80fd5b8235613d6081613a3e565b915060208301356001600160401b03811115613d7a575f80fd5b613d3a85828601613b84565b5f6001600160401b03821115613d9e57613d9e613ad4565b5060051b60200190565b5f82601f830112613db7575f80fd5b8135613dca613dc582613d86565b613b54565b8082825260208201915060208360051b860101925085831115613deb575f80fd5b602085015b83811015613e805780356001600160401b03811115613e0d575f80fd5b86016060818903601f19011215613e22575f80fd5b613e2a613b32565b6020820135613e3881613a3e565b81526040820135602082015260608201356001600160401b03811115613e5c575f80fd5b613e6b8a602083860101613b84565b60408301525084525060209283019201613df0565b5095945050505050565b5f60408284031215613e9a575f80fd5b604080519081016001600160401b0381118282101715613ebc57613ebc613ad4565b6040529050808235613ecd81613a3e565b8152602092830135920191909152919050565b5f82601f830112613eef575f80fd5b8135613efd613dc582613d86565b8082825260208201915060208360061b860101925085831115613f1e575f80fd5b602085015b83811015613e8057613f358782613e8a565b8352602090920191604001613f23565b5f60a08284031215613f55575f80fd5b60405160a081016001600160401b0381118282101715613f7757613f77613ad4565b6040529050808235613f8881613a3e565b81526020830135613f9881613a3e565b602082015260408301356001600160401b03811115613fb5575f80fd5b613fc185828601613b84565b604083015250606083810135908201526080830135613fdf81613a6d565b6080919091015292915050565b5f805f805f60a08688031215614000575f80fd5b85356001600160401b03811115614015575f80fd5b61402188828901613da8565b95505060208601356001600160401b0381111561403c575f80fd5b61404888828901613ee0565b945050604086013561405981613a6d565b925060608601356001600160401b03811115614073575f80fd5b61407f88828901613b84565b92505060808601356001600160401b0381111561409a575f80fd5b6140a688828901613f45565b9150509295509295909350565b5f604082840312156140c3575f80fd5b6115178383613e8a565b5f60808284031280156140de575f80fd5b506140e7613ae8565b82356140f281613a3e565b8152602083013561410281613a3e565b6020820152604083013561411581613a6d565b60408201526060928301359281019290925250919050565b5f806040838503121561413e575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561418d5783516001600160a01b0316835260209384019390920191600101614166565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6115176020830184614198565b5f805f606084860312156141ea575f80fd5b83356141f581613a3e565b9250602084013561420581613a3e565b9150604084013561421581613a3e565b809150509250925092565b5f8060408385031215614231575f80fd5b823561423c81613a3e565b91506020830135613aa681613a3e565b5f6020828403121561425c575f80fd5b81356001600160401b03811115614271575f80fd5b8201601f81018413614281575f80fd5b803561428f613dc582613d86565b8082825260208201915060208360051b8501019250868311156142b0575f80fd5b602084015b838110156143765780356001600160401b038111156142d2575f80fd5b85016080818a03601f190112156142e7575f80fd5b6142ef613ae8565b60208201356001600160401b03811115614307575f80fd5b6143168b602083860101613da8565b82525060408201356001600160401b03811115614331575f80fd5b6143408b602083860101613ee0565b602083015250606082013560408201526080909101359061436082613a3e565b60608101919091528352602092830192016142b5565b509695505050505050565b5f60208284031215614391575f80fd5b815161151781613a6d565b5f602082840312156143ac575f80fd5b815161151781613a3e565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610745576107456143b7565b5f602082840312156143ee575f80fd5b5051919050565b8381526001600160a01b03831660208201526060604082018190525f9061326690830184614198565b80820180821115610745576107456143b7565b8315158152606060208201525f61444b6060830185614198565b905060018060a01b0383166040830152949350505050565b8181035f831280158383131683831282161715611b8f57611b8f6143b7565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156144db57815180516001600160a01b0316875260209081015181880152604090960195909101906001016144a8565b5093949350505050565b5f608082016080835280875180835260a08501915060a08160051b8601019250602089015f5b8281101561456657868503609f19018452815180516001600160a01b031686526020808201519087015260409081015160609187018290529061455090870182614198565b955050602093840193919091019060010161450b565b50505050828103602084015261457c8187614496565b91505061459460408301856001600160a01b03169052565b82606083015295945050505050565b5f602082840312156145b3575f80fd5b815160ff81168114611517575f80fd5b6001815b60018411156145fe578085048111156145e2576145e26143b7565b60018416156145f057908102905b60019390931c9280026145c7565b935093915050565b5f8261461457506001610745565b8161462057505f610745565b816001811461463657600281146146405761465c565b6001915050610745565b60ff841115614651576146516143b7565b50506001821b610745565b5060208310610133831016604e8410600b841016171561467f575081810a610745565b61468b5f1984846145c3565b805f190482111561469e5761469e6143b7565b029392505050565b5f6115178383614606565b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b038881168252878116602083015260408201879052606082018690528416608082015282151560a082015260e060c082018190525f9061470e90830184614198565b9998505050505050505050565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f60ff83168061476157634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f82518060208501845e5f92019182525091905056fe6c8d7f768a6bb4aafe85e8a2f5a9680355239c7e14646ed62b044e39de154512c171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d7f23ec0bb4210edd5cba85afd05127efcd2fc6a781bfed49188da1081670b22d8360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622a164736f6c634300081a000a