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)
controller
viewfunction controller() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
distributeFee
viewfunction distributeFee(address token) view returns (uint256 fee)
feeTo
viewfunction feeTo() view returns (address)
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[])
getUserDepositInfor
viewfunction getUserDepositInfor(address _token, address _user) view returns (tuple)
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)
OPERATOR
viewfunction OPERATOR() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rebalanceFee
viewfunction rebalanceFee(address token) view returns (uint256 fee)
referralFee
viewfunction referralFee(address token) view returns (uint256 fee)
SIGNER
viewfunction SIGNER() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
totalProtocolFee
viewfunction totalProtocolFee(address token) view returns (uint256 totalFee)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
userStrategy
viewfunction userStrategy(address user, uint256) view returns (address strategy)
withdrawFee
viewfunction withdrawFee(address token) view returns (uint256 fee)
depositFund
nonpayablefunction depositFund(address _tokenAddress, address _receiver, uint256 _amount) returns (uint256)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
increaseProtocolAndReferralFee
nonpayablefunction increaseProtocolAndReferralFee(address _token, uint256 _protocolFee, uint256 _referralFee)
initialize
nonpayablefunction initialize(address admin_, address controller_, address feeTo_)
pause
nonpayablefunction pause()
rebalanceFundSameChain
nonpayablefunction rebalanceFundSameChain(address _token, address _receiver, uint256 _rebalanceAmount, uint256 _protocolFee, uint256 _referralFee, uint256 _rebalanceFee)
receiveWithdrawFee
nonpayablefunction receiveWithdrawFee(address _tokenAddress, uint256 _amount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setController
nonpayablefunction setController(address _moneyFiController)
setFeeTo
nonpayablefunction setFeeTo(address _feeTo)
transferFundFromRouterToFundVault
nonpayablefunction transferFundFromRouterToFundVault(address _tokenAddress, address _depositor, uint256 _amount)
transferFundToRouter
nonpayablefunction transferFundToRouter(address _tokenAddress, address _userAddress, uint256 _amount, uint256 _distributionFee)
transferFundToRouterCrossChain
nonpayablefunction transferFundToRouterCrossChain(address _tokenAddress, address _userAddress, uint256 _amount, uint256 _distributionFee)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawDistributeFee
nonpayablefunction withdrawDistributeFee(address[] supportedTokens)
withdrawProtocolFee
nonpayablefunction withdrawProtocolFee(address[] supportedTokens)
withdrawRebalanceFee
nonpayablefunction withdrawRebalanceFee(address[] supportedTokens)
withdrawReferralFee
nonpayablefunction withdrawReferralFee(address[] supportedTokens)
withdrawUnDistributedFundToUser
nonpayablefunction withdrawUnDistributedFundToUser(address _userAddress, address _receiver, address _tokenAddress, uint256 _amount)
withdrawWithdrawalFee
nonpayablefunction withdrawWithdrawalFee(address[] supportedTokens)
events
DepositFundVault
event DepositFundVault(address tokenAddress, address receiver, uint256 depositAmount, uint256 actualDepositAmount, uint256 depositedAt)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
RebalanceFundSameChainFundVault
event RebalanceFundSameChainFundVault(address indexed token, address indexed receiver, uint256 rebalanceAmount, uint256 protocolFee, uint256 referralFee, uint256 rebalanceFee, uint256 timestamp)
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)
TransferFundFromRouterToFundVault
event TransferFundFromRouterToFundVault(address indexed tokenAddress, uint256 amount, uint256 timestamp)
TransferFundToRouterFundVault
event TransferFundToRouterFundVault(address tokenAddress, uint256 distributionAmount, uint256 actualDistributionAmount, uint256 transferdAt)
TransferFundToRouterFundVaultCrossChain
event TransferFundToRouterFundVaultCrossChain(address tokenAddress, uint256 distributionAmount, uint256 actualDistributionAmount, uint256 minusOriginAmount, uint256 transferdAt)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
WithDrawDistributeFee
event WithDrawDistributeFee(address token, uint256 amount, uint256 withdrawAt)
WithDrawProtocolFee
event WithDrawProtocolFee(address token, uint256 amount, uint256 withdrawAt)
WithDrawRebalanceFee
event WithDrawRebalanceFee(address token, uint256 amount, uint256 withdrawAt)
WithDrawReferralFee
event WithDrawReferralFee(address token, uint256 amount, uint256 withdrawAt)
WithdrawUnDistributedFundToUserFundVault
event WithdrawUnDistributedFundToUserFundVault(address userAddress, address tokenAddress, uint256 amount, uint256 withdrawAt)
WithDrawWithdrawalFee
event WithDrawWithdrawalFee(address token, uint256 amount, uint256 withdrawAt)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientAmount
error InsufficientAmount()
InvalidAdminRole
error InvalidAdminRole()
InvalidAmount
error InvalidAmount()
InvalidAtLeastOperatorRole
error InvalidAtLeastOperatorRole()
InvalidDelegateRole
error InvalidDelegateRole()
InvalidDistributionFee
error InvalidDistributionFee()
InvalidInitialization
error InvalidInitialization()
InvalidInternalChainToken
error InvalidInternalChainToken()
InvalidLpAmount
error InvalidLpAmount()
InvalidLpToken
error InvalidLpToken()
InvalidParam
error InvalidParam()
InvalidRebalanceFundSameChainAmount
error InvalidRebalanceFundSameChainAmount()
InvalidRouter
error InvalidRouter()
InvalidSignerRole
error InvalidSignerRole()
InvalidSupportedTokenInternal
error InvalidSupportedTokenInternal()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RequiredAddressNotNull
error RequiredAddressNotNull()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f80fd5b506001600355610021610026565b6100d8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100765760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d55780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a036100fe5f395f818161283a0152818161286301526129c50152613a035ff3fe6080604052600436106102a5575f3560e01c80636d70f7ae1161016f57806392eefe9b116100d8578063bd45040911610092578063d547741f1161006d578063d547741f146108c5578063e1f16713146108e4578063f46901ed14610903578063f77c479114610922575f80fd5b8063bd45040914610868578063c0c53b8b14610887578063ca15c873146108a6575f80fd5b806392eefe9b1461078e578063983d2737146107ad578063a16a95f3146107cd578063a217fddf146107ec578063a3246ad3146107ff578063ad3cb1cc1461082b575f80fd5b80637f00e41f116101295780637f00e41f146106ac5780638456cb59146106cb578063850ba8ea146106df57806387cb191c146106fe5780639010d07c1461075057806391d148541461076f575f80fd5b80636d70f7ae146105f1578063745e87f71461061057806375b238fc1461062f578063787e16211461064f5780637df73e271461066e5780637e20cf711461068d575f80fd5b80632f2ff15d11610211578063582abd12116101cb578063582abd12146105335780635a0e9940146105535780635c975abb1461057e5780635d0724f3146105945780636ce1558b146105b35780636d3ac990146105d2575f80fd5b80632f2ff15d1461048f57806336568abe146104ae5780633f4ba83a146104cd5780634e281a7b146104e15780634f1ef2861461050c57806352d1902d1461051f575f80fd5b80631ac3ddeb116102625780631ac3ddeb146103ad5780632174981c146103d8578063248a9ca31461040357806324d7806c146104325780632960c0c4146104515780632efeb46514610470575f80fd5b8063017e7e58146102a957806301ffc9a7146102e55780630952ff54146103145780630a766ab81461034257806316c30d751461036d57806318139f471461038e575b5f80fd5b3480156102b4575f80fd5b506005546102c8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102f0575f80fd5b506103046102ff36600461333b565b610941565b60405190151581526020016102dc565b34801561031f575f80fd5b506103345f8051602061397783398151915281565b6040519081526020016102dc565b34801561034d575f80fd5b5061033461035c366004613376565b60076020525f908152604090205481565b348015610378575f80fd5b5061038c6103873660046133d6565b61096b565b005b348015610399575f80fd5b5061038c6103a836600461348a565b610a58565b3480156103b8575f80fd5b506103346103c7366004613376565b600c6020525f908152604090205481565b3480156103e3575f80fd5b506103346103f2366004613376565b600b6020525f908152604090205481565b34801561040e575f80fd5b5061033461041d3660046134df565b5f908152600160208190526040909120015490565b34801561043d575f80fd5b5061030461044c366004613376565b610d29565b34801561045c575f80fd5b5061038c61046b3660046133d6565b610d41565b34801561047b575f80fd5b5061038c61048a3660046134f6565b610e29565b34801561049a575f80fd5b5061038c6104a9366004613539565b610fbc565b3480156104b9575f80fd5b5061038c6104c8366004613539565b610fe7565b3480156104d8575f80fd5b5061038c61101a565b3480156104ec575f80fd5b506103346104fb366004613376565b60096020525f908152604090205481565b61038c61051a366004613567565b61104a565b34801561052a575f80fd5b50610334611069565b34801561053e575f80fd5b506103345f8051602061395783398151915281565b34801561055e575f80fd5b5061033461056d366004613376565b600a6020525f908152604090205481565b348015610589575f80fd5b505f5460ff16610304565b34801561059f575f80fd5b5061038c6105ae3660046133d6565b611084565b3480156105be575f80fd5b5061038c6105cd3660046134f6565b61116c565b3480156105dd575f80fd5b5061038c6105ec36600461360e565b6112fb565b3480156105fc575f80fd5b5061030461060b366004613376565b611470565b34801561061b575f80fd5b5061033461062a366004613638565b611488565b34801561063a575f80fd5b506103345f8051602061399783398151915281565b34801561065a575f80fd5b5061038c610669366004613676565b6115d2565b348015610679575f80fd5b50610304610688366004613376565b61183b565b348015610698575f80fd5b5061038c6106a73660046136c4565b611853565b3480156106b7575f80fd5b5061038c6106c6366004613638565b611a05565b3480156106d6575f80fd5b5061038c611d28565b3480156106ea575f80fd5b5061038c6106f93660046133d6565b611d56565b348015610709575f80fd5b5061071d6107183660046136f6565b611e3e565b6040516102dc91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561075b575f80fd5b506102c861076a366004613722565b611ebf565b34801561077a575f80fd5b50610304610789366004613539565b611ed6565b348015610799575f80fd5b5061038c6107a8366004613376565b611f00565b3480156107b8575f80fd5b506103345f805160206139d783398151915281565b3480156107d8575f80fd5b506103046107e7366004613376565b611f6f565b3480156107f7575f80fd5b506103345f81565b34801561080a575f80fd5b5061081e6108193660046134df565b611f87565b6040516102dc9190613742565b348015610836575f80fd5b5061085b604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102dc919061378d565b348015610873575f80fd5b506102c861088236600461360e565b611fa0565b348015610892575f80fd5b5061038c6108a13660046137c2565b611fd4565b3480156108b1575f80fd5b506103346108c03660046134df565b6120ff565b3480156108d0575f80fd5b5061038c6108df366004613539565b612115565b3480156108ef575f80fd5b5061038c6108fe3660046133d6565b61213a565b34801561090e575f80fd5b5061038c61091d366004613376565b612222565b34801561092d575f80fd5b506004546102c8906001600160a01b031681565b5f6001600160e01b03198216635a05180f60e01b1480610965575061096582612291565b92915050565b61097433611f6f565b6109915760405163dade674960e01b815260040160405180910390fd5b6109996122c5565b80515f5b81811015610a53575f8382815181106109b8576109b861380a565b6020908102919091018101516001600160a01b0381165f908152600b9092526040909120549091508015610a49576001600160a01b038083165f818152600b6020526040812055600554610a0d9216836122e8565b7f11fcf3e92e7d98739b6c74166ba1cb615c8d0e04a8ebf6c66520b21f9550cb4d828242604051610a409392919061381e565b60405180910390a15b505060010161099d565b505050565b60048054604080516303e21fa960e61b815290516001600160a01b039092169263f887ea409282820192602092908290030181865afa158015610a9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac1919061383f565b6001600160a01b0316336001600160a01b031614158015610b5c575060048054604080516348db350960e01b815290516001600160a01b03909216926348db35099282820192602092908290030181865afa158015610b22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b46919061383f565b6001600160a01b0316336001600160a01b031614155b15610b7a5760405163466d7fef60e01b815260040160405180910390fd5b610b8386612347565b5f81610b8f858761386e565b610b99919061386e565b9050610bb06001600160a01b0388163330846123d9565b6001600160a01b038088165f908152600660209081526040808320938a1683529290529081206001018054879290610be990849061386e565b90915550506001600160a01b038088165f908152600660209081526040808320938a16835292905220426003909101558215610c4c576001600160a01b0387165f908152600b602052604081208054859290610c4690849061386e565b90915550505b6001600160a01b0387165f908152600a602052604081208054849290610c7390849061386e565b909155505082841115610cb757610c8a8385613881565b6001600160a01b0388165f9081526007602052604081208054909190610cb190849061386e565b90915550505b610cc2878787612412565b6040805186815260208101869052908101849052606081018390524260808201526001600160a01b0380881691908916907f299daeb24948430e310f3dfcd7f626ef2e09091dd6961557b8e63cb015cfaebc9060a00160405180910390a350505050505050565b5f6109655f8051602061399783398151915283611ed6565b610d4a33611f6f565b610d675760405163dade674960e01b815260040160405180910390fd5b610d6f6122c5565b80515f5b81811015610a53575f838281518110610d8e57610d8e61380a565b6020908102919091018101516001600160a01b0381165f90815260099092526040909120549091508015610e1f576001600160a01b038083165f81815260096020526040812055600554610de39216836122e8565b7fa847405bc06d6d01d553be51a9ffa520e6c699bb72f95838e27ab25abeb8191a828242604051610e169392919061381e565b60405180910390a15b5050600101610d73565b60048054604080516303e21fa960e61b815290516001600160a01b039092169263f887ea409282820192602092908290030181865afa158015610e6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e92919061383f565b6001600160a01b0316336001600160a01b031614158015610f2d575060048054604080516348db350960e01b815290516001600160a01b03909216926348db35099282820192602092908290030181865afa158015610ef3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f17919061383f565b6001600160a01b0316336001600160a01b031614155b15610f4b5760405163466d7fef60e01b815260040160405180910390fd5b610f536122c5565b5f610f618585855f86612514565b604080516001600160a01b0388168152602081018690529081018290524260608201529091507f25b36cab002fd7e1c1a1391667fe774813e66d6be03c9126e6d940dc4fbb801f906080015b60405180910390a15050505050565b5f8281526001602081905260409091200154610fd781612776565b610fe18383612780565b50505050565b6001600160a01b03811633146110105760405163334bd91960e11b815260040160405180910390fd5b610a5382826127b3565b61102333611f6f565b6110405760405163dade674960e01b815260040160405180910390fd5b6110486127de565b565b61105261282f565b61105b826128d3565b61106582826128f9565b5050565b5f6110726129ba565b505f805160206139b783398151915290565b61108d33611f6f565b6110aa5760405163dade674960e01b815260040160405180910390fd5b6110b26122c5565b80515f5b81811015610a53575f8382815181106110d1576110d161380a565b6020908102919091018101516001600160a01b0381165f908152600a9092526040909120549091508015611162576001600160a01b038083165f818152600a60205260408120556005546111269216836122e8565b7f10eb2094ea20fb9195159ef517870f95d8d4cb518de33ee575d94f1b7e3f675d8282426040516111599392919061381e565b60405180910390a15b50506001016110b6565b60048054604080516303e21fa960e61b815290516001600160a01b039092169263f887ea409282820192602092908290030181865afa1580156111b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d5919061383f565b6001600160a01b0316336001600160a01b031614158015611270575060048054604080516348db350960e01b815290516001600160a01b03909216926348db35099282820192602092908290030181865afa158015611236573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125a919061383f565b6001600160a01b0316336001600160a01b031614155b1561128e5760405163466d7fef60e01b815260040160405180910390fd5b6112966122c5565b5f6112a48585858686612514565b604080516001600160a01b038816815260208101869052908101829052606081018590524260808201529091507fdab8d8127a8b6b8b7861f4f8d6cc11e3f1de9a8c916c415891c4179fe3fc040b9060a001610fad565b60048054604080516303e21fa960e61b815290516001600160a01b039092169263f887ea409282820192602092908290030181865afa158015611340573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611364919061383f565b6001600160a01b0316336001600160a01b0316141580156113ff575060048054604080516348db350960e01b815290516001600160a01b03909216926348db35099282820192602092908290030181865afa1580156113c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e9919061383f565b6001600160a01b0316336001600160a01b031614155b1561141d5760405163466d7fef60e01b815260040160405180910390fd5b6114256122c5565b61142e82612347565b6001600160a01b0382165f908152600c60205260408120805483929061145590849061386e565b9091555061106590506001600160a01b0383163330846123d9565b5f6109655f805160206139d783398151915283611ed6565b5f6114916122c5565b611499612a03565b6114a38285612a2d565b6001600160a01b038085165f908152600660209081526040808320938716835292905290812080548492906114d990849061386e565b90915550506001600160a01b038085165f9081526006602090815260408083209387168352929052908120600101805484929061151790849061386e565b90915550506001600160a01b038085165f90815260066020908152604080832093871683529290522042600390910155611552848484612412565b6115676001600160a01b0385163330856123d9565b604080516001600160a01b03808716825285166020820152908101839052606081018390524260808201527f490c69fa910b4830e34634a0039f574de1662911de63700086cc286ea83ca68a9060a00160405180910390a150806115cb6001600355565b9392505050565b60048054604080516303e21fa960e61b815290516001600160a01b039092169263f887ea409282820192602092908290030181865afa158015611617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163b919061383f565b6001600160a01b0316336001600160a01b0316141580156116d6575060048054604080516348db350960e01b815290516001600160a01b03909216926348db35099282820192602092908290030181865afa15801561169c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c0919061383f565b6001600160a01b0316336001600160a01b031614155b156116f45760405163466d7fef60e01b815260040160405180910390fd5b6116fc6122c5565b5f811161171c5760405163162908e360e11b815260040160405180910390fd5b6001600160a01b038083165f908152600660209081526040808320938816835292905220600101548181101561176557604051632ca2f52b60e11b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083209389168352929052908120600101805484929061179e908490613881565b90915550506001600160a01b038084165f908152600660209081526040808320938916835292905220426003909101556117d9838684612ae7565b6117ed6001600160a01b03841685846122e8565b604080516001600160a01b038088168252851660208201529081018390524260608201527f82b3e8ab6b1751482b438411703f519770d1bb8a45755d848056e1d9323dbd7f90608001610fad565b5f6109655f8051602061395783398151915283611ed6565b60048054604080516303e21fa960e61b815290516001600160a01b039092169263f887ea409282820192602092908290030181865afa158015611898573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118bc919061383f565b6001600160a01b0316336001600160a01b031614158015611957575060048054604080516348db350960e01b815290516001600160a01b03909216926348db35099282820192602092908290030181865afa15801561191d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611941919061383f565b6001600160a01b0316336001600160a01b031614155b156119755760405163466d7fef60e01b815260040160405180910390fd5b61197e83612347565b80156119b1576001600160a01b0383165f908152600b6020526040812080548392906119ab90849061386e565b90915550505b808211156119f0576119c38183613881565b6001600160a01b0384165f90815260076020526040812080549091906119ea90849061386e565b90915550505b610a536001600160a01b0384163330856123d9565b60048054604080516303e21fa960e61b815290516001600160a01b039092169263f887ea409282820192602092908290030181865afa158015611a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a6e919061383f565b6001600160a01b0316336001600160a01b031614158015611b09575060048054604080516348db350960e01b815290516001600160a01b03909216926348db35099282820192602092908290030181865afa158015611acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af3919061383f565b6001600160a01b0316336001600160a01b031614155b15611b275760405163466d7fef60e01b815260040160405180910390fd5b611b2f6122c5565b611b3883612347565b5f8111611b585760405163162908e360e11b815260040160405180910390fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc09190613894565b9050611bd76001600160a01b0385163330856123d9565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015611c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3f9190613894565b905082611c4c8383613881565b14611c6a5760405163162908e360e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832093881683529290529081206001018054859290611ca390849061386e565b90915550506001600160a01b038086165f90815260066020908152604080832093881683529290522042600390910155611cde858585612412565b604080518481524260208201526001600160a01b038716917fff0446d0db6817af7fe360f2bbe34034f64fdb46c3df0d02fe97d7c10d0ebbed910160405180910390a25050505050565b611d3133611f6f565b611d4e5760405163dade674960e01b815260040160405180910390fd5b611048612c43565b611d5f33611f6f565b611d7c5760405163dade674960e01b815260040160405180910390fd5b611d846122c5565b80515f5b81811015610a53575f838281518110611da357611da361380a565b6020908102919091018101516001600160a01b0381165f908152600c9092526040909120549091508015611e34576001600160a01b038083165f818152600c6020526040812055600554611df89216836122e8565b7fc9c9639b55013cade6e83a53a51404fb3719afdb5f8cc2d783064962e0504f5d828242604051611e2b9392919061381e565b60405180910390a15b5050600101611d88565b611e6560405180608001604052805f81526020015f81526020015f81526020015f81525090565b506001600160a01b039182165f908152600660209081526040808320939094168252918252829020825160808101845281548152600182015492810192909252600281015492820192909252600390910154606082015290565b5f8281526002602052604081206115cb9083612c7f565b5f9182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611f0933610d29565b611f2657604051632d4d7bb360e01b815260040160405180910390fd5b6001600160a01b038116611f4d5760405163706e379b60e11b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b5f6109655f8051602061397783398151915283611ed6565b5f81815260026020526040902060609061096590612c8a565b6008602052815f5260405f208181548110611fb9575f80fd5b5f918252602090912001546001600160a01b03169150829050565b5f611fdd612c96565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156120045750825b90505f8267ffffffffffffffff1660011480156120205750303b155b90508115801561202e575080155b1561204c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561207657845460ff60401b1916600160401b1785555b61207f88612cbe565b600480546001600160a01b03808a166001600160a01b031992831617909255600580549289169290911691909117905583156120f557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f81815260026020526040812061096590612da1565b5f828152600160208190526040909120015461213081612776565b610fe183836127b3565b61214333611f6f565b6121605760405163dade674960e01b815260040160405180910390fd5b6121686122c5565b80515f5b81811015610a53575f8382815181106121875761218761380a565b6020908102919091018101516001600160a01b0381165f90815260079092526040909120549091508015612218576001600160a01b038083165f818152600760205260408120556005546121dc9216836122e8565b7f0902e9241db9db18e79db88b0c4de3ad9d8ad0e0c38b4ee4ff61fa7cc73d3bfa82824260405161220f9392919061381e565b60405180910390a15b505060010161216c565b61222b33610d29565b61224857604051632d4d7bb360e01b815260040160405180910390fd5b6001600160a01b03811661226f5760405163706e379b60e11b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160e01b03198216637965db0b60e01b148061096557506301ffc9a760e01b6001600160e01b0319831614610965565b5f5460ff16156110485760405163d93c066560e01b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052610a5391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612daa565b600480546040516313a7f86f60e21b81526001600160a01b0384811693820193909352911690634e9fe1bc9060240160a060405180830381865afa158015612391573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b591906138ab565b608001516123d6576040516333084a1960e01b815260040160405180910390fd5b50565b6040516001600160a01b038481166024830152838116604483015260648201839052610fe19186918216906323b872dd90608401612315565b600480546040516313a7f86f60e21b81526001600160a01b03868116938201939093525f9290911690634e9fe1bc9060240160a060405180830381865afa15801561245f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248391906138ab565b80519091506001600160a01b0381166124af576040516337de6bdf60e01b815260040160405180910390fd5b6040516340c10f1960e01b81526001600160a01b038581166004830152602482018590528216906340c10f19906044015b5f604051808303815f87803b1580156124f7575f80fd5b505af1158015612509573d5f803e3d5ffd5b505050505050505050565b5f61251d6122c5565b5f841161253d5760405163162908e360e11b815260040160405180910390fd5b81841161255d5760405163c3832bbf60e01b815260040160405180910390fd5b6125678285613881565b905061257286612347565b6001600160a01b038087165f90815260066020908152604080832093891683529281529082902082516080810184528154815260018201549281018390526002820154938101939093526003015460608301528791908611156125e857604051632ca2f52b60e11b815260040160405180910390fd5b5f8682602001516125f99190613881565b6040516370a0823160e01b815230600482015290915087906001600160a01b038516906370a0823190602401602060405180830381865afa158015612640573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126649190613894565b101561268357604051632ca2f52b60e11b815260040160405180910390fd5b6001600160a01b03808a165f908152600660209081526040808320938c168352929052205486118015906126b5575060015b156126f6576001600160a01b03808a165f908152600660209081526040808320938c16835292905290812080548892906126f0908490613881565b90915550505b6001600160a01b03808a165f818152600660209081526040808320948d16835293815283822060018101869055426003909101559181526009909152908120805487929061274590849061386e565b909155506127569050898989612ae7565b61276a6001600160a01b03841633866122e8565b50505095945050505050565b6123d68133612e16565b5f8061278c8484612e4f565b905080156115cb575f8481526002602052604090206127ab9084612ec5565b509392505050565b5f806127bf8484612ed9565b905080156115cb575f8481526002602052604090206127ab9084612f44565b6127e6612f58565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806128b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166128a95f805160206139b7833981519152546001600160a01b031690565b6001600160a01b031614155b156110485760405163703e46dd60e11b815260040160405180910390fd5b6128dc33611f6f565b6123d65760405163dade674960e01b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612953575060408051601f3d908101601f1916820190925261295091810190613894565b60015b61298057604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f805160206139b783398151915281146129b057604051632a87526960e21b815260048101829052602401612977565b610a538383612f7a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110485760405163703e46dd60e11b815260040160405180910390fd5b600260035403612a2657604051633ee5aeb560e01b815260040160405180910390fd5b6002600355565b600480546040516313a7f86f60e21b81526001600160a01b03848116938201939093525f9290911690634e9fe1bc9060240160a060405180830381865afa158015612a7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a9e91906138ab565b90508060800151612ac2576040516333084a1960e01b815260040160405180910390fd5b8281602001511115610a535760405163162908e360e11b815260040160405180910390fd5b600480546040516313a7f86f60e21b81526001600160a01b03868116938201939093525f9290911690634e9fe1bc9060240160a060405180830381865afa158015612b34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b5891906138ab565b80519091506001600160a01b038116612b84576040516337de6bdf60e01b815260040160405180910390fd5b6040516370a0823160e01b81526001600160a01b0385811660048301528491908316906370a0823190602401602060405180830381865afa158015612bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bef9190613894565b1015612c0e576040516304d1b6eb60e51b815260040160405180910390fd5b604051632770a7eb60e21b81526001600160a01b03858116600483015260248201859052821690639dc29fac906044016124e0565b612c4b6122c5565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128123390565b5f6115cb8383612fcf565b60605f6115cb83612ff5565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610965565b612cd55f805160206139d783398151915282612780565b50612ced5f8051602061399783398151915282612780565b50612d055f8051602061397783398151915282612780565b50612d1d5f8051602061395783398151915282612780565b50612d355f805160206139978339815191528061304e565b612d595f805160206139778339815191525f8051602061399783398151915261304e565b612d7d5f805160206139d78339815191525f8051602061397783398151915261304e565b6123d65f805160206139578339815191525f8051602061397783398151915261304e565b5f610965825490565b5f8060205f8451602086015f885af180612dc9576040513d5f823e3d81fd5b50505f513d91508115612de0578060011415612ded565b6001600160a01b0384163b155b15610fe157604051635274afe760e01b81526001600160a01b0385166004820152602401612977565b612e208282611ed6565b6110655760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401612977565b5f612e5a8383611ed6565b612ebe575f8381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610965565b505f610965565b5f6115cb836001600160a01b03841661309a565b5f612ee48383611ed6565b15612ebe575f8381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610965565b5f6115cb836001600160a01b0384166130df565b5f5460ff1661104857604051638dfc202b60e01b815260040160405180910390fd5b612f83826131c2565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612fc757610a538282613225565b611065613297565b5f825f018281548110612fe457612fe461380a565b905f5260205f200154905092915050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561304257602002820191905f5260205f20905b81548152602001906001019080831161302e575b50505050509050919050565b5f828152600160208190526040808320909101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f818152600183016020526040812054612ebe57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610965565b5f81815260018301602052604081205480156131b9575f613101600183613881565b85549091505f9061311490600190613881565b9050808214613173575f865f0182815481106131325761313261380a565b905f5260205f200154905080875f0184815481106131525761315261380a565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806131845761318461392c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610965565b5f915050610965565b806001600160a01b03163b5f036131f757604051634c9c8ce360e01b81526001600160a01b0382166004820152602401612977565b5f805160206139b783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516132419190613940565b5f60405180830381855af49150503d805f8114613279576040519150601f19603f3d011682016040523d82523d5f602084013e61327e565b606091505b509150915061328e8583836132b6565b95945050505050565b34156110485760405163b398979f60e01b815260040160405180910390fd5b6060826132cb576132c682613312565b6115cb565b81511580156132e257506001600160a01b0384163b155b1561330b57604051639996b31560e01b81526001600160a01b0385166004820152602401612977565b50806115cb565b8051156133225780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f6020828403121561334b575f80fd5b81356001600160e01b0319811681146115cb575f80fd5b6001600160a01b03811681146123d6575f80fd5b5f60208284031215613386575f80fd5b81356115cb81613362565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156133ce576133ce613391565b604052919050565b5f602082840312156133e6575f80fd5b813567ffffffffffffffff8111156133fc575f80fd5b8201601f8101841361340c575f80fd5b803567ffffffffffffffff81111561342657613426613391565b8060051b613436602082016133a5565b91825260208184018101929081019087841115613451575f80fd5b6020850194505b8385101561347f578435925061346d83613362565b82825260209485019490910190613458565b979650505050505050565b5f805f805f8060c0878903121561349f575f80fd5b86356134aa81613362565b955060208701356134ba81613362565b95989597505050506040840135936060810135936080820135935060a0909101359150565b5f602082840312156134ef575f80fd5b5035919050565b5f805f8060808587031215613509575f80fd5b843561351481613362565b9350602085013561352481613362565b93969395505050506040820135916060013590565b5f806040838503121561354a575f80fd5b82359150602083013561355c81613362565b809150509250929050565b5f8060408385031215613578575f80fd5b823561358381613362565b9150602083013567ffffffffffffffff81111561359e575f80fd5b8301601f810185136135ae575f80fd5b803567ffffffffffffffff8111156135c8576135c8613391565b6135db601f8201601f19166020016133a5565b8181528660208385010111156135ef575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f806040838503121561361f575f80fd5b823561362a81613362565b946020939093013593505050565b5f805f6060848603121561364a575f80fd5b833561365581613362565b9250602084013561366581613362565b929592945050506040919091013590565b5f805f8060808587031215613689575f80fd5b843561369481613362565b935060208501356136a481613362565b925060408501356136b481613362565b9396929550929360600135925050565b5f805f606084860312156136d6575f80fd5b83356136e181613362565b95602085013595506040909401359392505050565b5f8060408385031215613707575f80fd5b823561371281613362565b9150602083013561355c81613362565b5f8060408385031215613733575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156137825783516001600160a01b031683526020938401939092019160010161375b565b509095945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f606084860312156137d4575f80fd5b83356137df81613362565b925060208401356137ef81613362565b915060408401356137ff81613362565b809150509250925092565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b039390931683526020830191909152604082015260600190565b5f6020828403121561384f575f80fd5b81516115cb81613362565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109655761096561385a565b818103818111156109655761096561385a565b5f602082840312156138a4575f80fd5b5051919050565b5f60a08284031280156138bc575f80fd5b5060405160a0810167ffffffffffffffff811182821017156138e0576138e0613391565b60405282516138ee81613362565b815260208381015190820152604080840151908201526060808401519082015260808301518015158114613920575f80fd5b60808201529392505050565b634e487b7160e01b5f52603160045260245ffd5b5f82518060208501845e5f92019182525091905056fe6c8d7f768a6bb4aafe85e8a2f5a9680355239c7e14646ed62b044e39de154512c171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d7f23ec0bb4210edd5cba85afd05127efcd2fc6a781bfed49188da1081670b22d8360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622a164736f6c634300081a000a