0 txs
1.4k calls
constructor
constructor()
functions
calculateShare
viewfunction calculateShare(address, address user) view returns (uint256)
calculateShareFromSurgeEvent
viewfunction calculateShareFromSurgeEvent(address, address user) view returns (uint256)
calculateTotalShare
viewfunction calculateTotalShare(address) view returns (uint256)
calculateTotalShareFromSurgeEvent
viewfunction calculateTotalShareFromSurgeEvent(address) view returns (uint256 totalShare)
compounder
viewfunction compounder() view returns (address)
delegatedOf
viewfunction delegatedOf(address user) view returns (bool isAllowed)
dlpRebaseIndex
viewfunction dlpRebaseIndex() view returns (uint256)
endSurgeEventDepositTimestamp
viewfunction endSurgeEventDepositTimestamp() view returns (uint256)
endSurgeEventLockTimestamp
viewfunction endSurgeEventLockTimestamp() view returns (uint256)
getOriginalAmount
viewfunction getOriginalAmount(uint256 amount) view returns (uint256)
getRebasedUserTokenAmount
viewfunction getRebasedUserTokenAmount(address user) view returns (uint256)
getRewarders
viewfunction getRewarders() view returns (address[])
getTierConfigs
viewfunction getTierConfigs() view returns (tuple[])
isCompounder
viewfunction isCompounder(address compounder) view returns (bool isAllowed)
isMigrated
viewfunction isMigrated() view returns (bool)
isRewarder
viewfunction isRewarder(address) view returns (bool)
isSurgeEventDepositPeriod
viewfunction isSurgeEventDepositPeriod() view returns (bool isActive)
isSurgeEventLockPeriod
viewfunction isSurgeEventLockPeriod() view returns (bool isActive)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
rebaser
viewfunction rebaser() view returns (address)
rewarders
viewfunction rewarders(uint256) view returns (address)
stakingToken
viewfunction stakingToken() view returns (address)
startSurgeEventDepositTimestamp
viewfunction startSurgeEventDepositTimestamp() view returns (uint256)
surgeRewarder
viewfunction surgeRewarder() view returns (address)
tierConfigs
viewfunction tierConfigs(uint256) view returns (uint256 maxCap, uint256 multiplier)
totalAmountByTier
viewfunction totalAmountByTier(uint256) view returns (uint256)
totalQuoataByTier
viewfunction totalQuoataByTier(uint256) view returns (uint256)
userSurgeAmount
viewfunction userSurgeAmount(address) view returns (uint256)
userTokenAmount
viewfunction userTokenAmount(address) view returns (uint256)
userTokenAmountByTier
viewfunction userTokenAmountByTier(address, uint256) view returns (uint256)
addRewarders
nonpayablefunction addRewarders(address[] newRewarders)
delegate
nonpayablefunction delegate(bool allow)
deposit
nonpayablefunction deposit(address to, uint256 amount)
depositSurge
nonpayablefunction depositSurge(address to, uint256 amount)
harvest
nonpayablefunction harvest(address[] _rewarders)
harvestToCompounder
nonpayablefunction harvestToCompounder(address user, address[] _rewarders)
initialize
nonpayablefunction initialize(address _stakingToken, uint256 _startSurgeEventDepositTimestamp, uint256 _endSurgeEventDepositTimestamp, uint256 _endSurgeEventLockTimestamp)
migrateToDLP
nonpayablefunction migrateToDLP(address dlpAddress, uint256 rebaseIndex)
moveStake
nonpayablefunction moveStake(address from, address to)
pause
nonpayablefunction pause()
removeRewarder
nonpayablefunction removeRewarder(uint256 rewarderIndex)
renounceOwnership
nonpayablefunction renounceOwnership()
setCompounder
nonpayablefunction setCompounder(address compounder_)
setIsCompounders
nonpayablefunction setIsCompounders(address[] compounders, bool[] isAllowed)
setRebaser
nonpayablefunction setRebaser(address _rebaser)
setSurgeEventTime
nonpayablefunction setSurgeEventTime(uint256 _startSurgeEventDepositTimestamp, uint256 _endSurgeEventDepositTimestamp, uint256 _endSurgeEventLockTimestamp)
setSurgeRewarder
nonpayablefunction setSurgeRewarder(address _surgeRewarder)
setTierConfigs
nonpayablefunction setTierConfigs(tuple[] configs)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdraw
nonpayablefunction withdraw(uint256 amount)
events
Initialized
event Initialized(uint8 version)
LogAddRewarder
event LogAddRewarder(address newRewarder)
LogDelegate
event LogDelegate(address indexed user, address indexed delegate, bool isAllowed)
LogDeposit
event LogDeposit(address indexed caller, address indexed user, uint256 amount)
LogDepositTier
event LogDepositTier(uint256 indexed tier, address indexed caller, address indexed user, uint256 amount)
LogMigrateToDLP
event LogMigrateToDLP(address dlpAddress, uint256 rebaseIndex)
LogPause
event LogPause(bool paused)
LogRemoveRewarder
event LogRemoveRewarder(uint256 indexed rewarderIndex, address indexed rewarder)
LogSetCompounder
event LogSetCompounder(address oldCompounder, address newCompounder)
LogSetIsCompounder
event LogSetIsCompounder(address indexed compounder, bool isAllowed)
LogSetRebaser
event LogSetRebaser(address oldRebaser, address newRebaser)
LogSetSurgeRewarder
event LogSetSurgeRewarder(address oldRewarder, address newRewarder)
LogSetTierConfig
event LogSetTierConfig(uint256 indexed tier, (uint256 maxCap, uint256 multiplier) configs)
LogWithdraw
event LogWithdraw(address indexed caller, uint256 amount)
LogWithdrawTier
event LogWithdrawTier(uint256 indexed tier, address indexed caller, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
errors
HLPStaking_AlreadyMigrated
error HLPStaking_AlreadyMigrated()
HLPStaking_ContractPaused
error HLPStaking_ContractPaused()
HLPStaking_DuplicateRewarder
error HLPStaking_DuplicateRewarder()
HLPStaking_InconsistentLength
error HLPStaking_InconsistentLength()
HLPStaking_InsufficientTokenAmount
error HLPStaking_InsufficientTokenAmount()
HLPStaking_InvalidRebaser
error HLPStaking_InvalidRebaser()
HLPStaking_NotCompounder
error HLPStaking_NotCompounder()
HLPStaking_NotRebaser
error HLPStaking_NotRebaser()
HLPStaking_NotRewarder
error HLPStaking_NotRewarder()
HLPStaking_SurgeEventAllTiersFilled
error HLPStaking_SurgeEventAllTiersFilled()
HLPStaking_SurgeEventAlreadyStarted
error HLPStaking_SurgeEventAlreadyStarted()
HLPStaking_SurgeEventEndEarlierThanStart
error HLPStaking_SurgeEventEndEarlierThanStart()
HLPStaking_SurgeEventEnded
error HLPStaking_SurgeEventEnded()
HLPStaking_SurgeEventUnlockEarlierThanEnd
error HLPStaking_SurgeEventUnlockEarlierThanEnd()
HLPStaking_SurgeRewarderNotSet
error HLPStaking_SurgeRewarderNotSet()
HLPStaking_WithdrawalNotAllowedDuringSurgeEvent
error HLPStaking_WithdrawalNotAllowedDuringSurgeEvent()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61365d80620000f46000396000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c806308744737146102615780630eeb7b571461028757806311fd8a831461029c578063218c4da8146102bc578063245a066e146102cf5780632e1a7d4d14610302578063309cd0eb146103155780633c07f33e1461031d5780633d191cd71461033d5780633f4ba83a1461035257806344759cb71461035a57806347e7ef241461036d5780634aa2bb34146103805780634ec81af11461039357806350bcec4c146103a6578063520eca4f146103b9578063569f02fd146103c25780635c975abb146103d557806370c1a061146103e2578063715018a6146103f55780637266c0e3146103fd57806372baca161461041057806372f702f3146104195780637fd4e3dd1461042c57806382d9d6bf146104355780638456cb591461044857806385354762146104505780638af8198c146104705780638da5cb5b146104985780638e478cab146104a0578063943bc6ab146104c3578063993746b3146104e6578063b06faf62146104ef578063b36795b014610503578063c89d346014610516578063d61b0eaa14610529578063dc6824511461053c578063e00e07321461054f578063e39067e114610562578063e46adf6214610575578063e473e28314610588578063eaf8f325146105b3578063f1072f4d146105c8578063f2fde38b146105e8578063f3603cca146105fb578063f441bd851461060e578063f6e334e514610621578063f751c70a1461062c578063fa2cc3c01461064c578063fcf8770f1461065f578063fee88cb614610672578063feeaec911461069d575b600080fd5b61027461026f366004612ec8565b6106b0565b6040519081526020015b60405180910390f35b61029a610295366004612ec8565b6106e4565b005b6075546102af906001600160a01b031681565b60405161027e9190612ee1565b61029a6102ca366004612f0a565b610864565b6102f26102dd366004612f36565b60746020526000908152604090205460ff1681565b604051901515815260200161027e565b61029a610310366004612ec8565b610898565b6102f26108eb565b61027461032b366004612ec8565b60686020526000908152604090205481565b610345610906565b60405161027e9190612f53565b61029a610968565b61029a610368366004612f36565b61099f565b61029a61037b366004612f0a565b610a10565b61029a61038e3660046130a5565b610a40565b61029a6103a13660046130d9565b610b57565b61029a6103b4366004613114565b610ce4565b610274606f5481565b6072546102af906001600160a01b031681565b6077546102f29060ff1681565b6102746103f03660046131be565b610d98565b61029a610e15565b61029a61040b366004613205565b610e29565b61027460705481565b606d546102af906001600160a01b031681565b61027460765481565b61029a6104433660046132c8565b610f53565b61029a610feb565b61027461045e366004612ec8565b60696020526000908152604090205481565b61048361047e366004612ec8565b611021565b6040805192835260208301919091520161027e565b6102af61104f565b6102f26104ae366004612f36565b606a6020526000908152604090205460ff1681565b6102f26104d1366004612f36565b60736020526000908152604090205460ff1681565b610274606e5481565b6075546102f290600160a01b900460ff1681565b61029a6105113660046131be565b61105e565b61029a6105243660046130a5565b611668565b610274610537366004612f36565b61169a565b61029a61054a3660046132e5565b611705565b61029a61055d366004612f36565b61175d565b610274610570366004612f36565b6117ce565b61029a610583366004612f36565b61194c565b610274610596366004612f0a565b606660209081526000928352604080842090915290825290205481565b6105bb6119e4565b60405161027e9190613311565b6102746105d6366004612f36565b60676020526000908152604090205481565b61029a6105f6366004612f36565b611a57565b61029a610609366004613368565b611acd565b61027461061c366004612f36565b611b2c565b6070544211156102f2565b61027461063a366004612f36565b60656020526000908152604090205481565b6071546102af906001600160a01b031681565b6102af61066d366004612ec8565b611b8c565b6102746106803660046131be565b6001600160a01b0316600090815260656020526040902054919050565b61029a6106ab366004612f0a565b611bb6565b607554600090600160a01b900460ff16156106e0576106da82670de0b6b3a7640000607654611d7f565b92915050565b5090565b6106ec611e34565b6000606b8281548110610701576107016133b7565b600091825260209091200154606b80546001600160a01b0390921692509061072b906001906133e3565b8154811061073b5761073b6133b7565b600091825260209091200154606b80546001600160a01b039092169184908110610767576107676133b7565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055606b80548291906107a3906001906133e3565b815481106107b3576107b36133b7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606b8054806107f2576107f26133f6565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038316808352606a9091526040808320805460ff1916905551909184917f76f7fcf091f4b98542d165bfd928aa6c0d19821bc68cdc86c0170dc6bbc387319190a35050565b60775460ff161561088857604051630ddde16760e31b815260040160405180910390fd5b61089482826001611e93565b5050565b60775460ff16156108bc57604051630ddde16760e31b815260040160405180910390fd5b6108c581612473565b60405181815233906000805160206136088339815191529060200160405180910390a250565b6000606e5442101580156109015750606f544211155b905090565b6060606b80548060200260200160405190810160405280929190818152602001828054801561095e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610940575b5050505050905090565b610970611e34565b6077805460ff19169055604051600081526000805160206135a8833981519152906020015b60405180910390a1565b6109a7611e34565b6072546040517fbb6a6ca0f55d1804469cac393a23727f929c86fd7160e930a6b355f1bb270f9b916109e6916001600160a01b0390911690849061340c565b60405180910390a1607280546001600160a01b0319166001600160a01b0392909216919091179055565b60775460ff1615610a3457604051630ddde16760e31b815260040160405180910390fd5b61089482826000611e93565b610a48611e34565b60005b8151811015610894576000828281518110610a6857610a686133b7565b6020908102919091018101516001600160a01b0381166000908152606a90925260409091205490915060ff1615610ab257604051631fc9217b60e31b815260040160405180910390fd5b606b805460018082019092557fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b40180546001600160a01b0319166001600160a01b0384169081179091556000908152606a602052604090819020805460ff1916909217909155517fca9879f7c869aaabe52872a2923d87ec6e2c369759989f2b4173e014baaa086790610b46908390612ee1565b60405180910390a150600101610a4b565b600054610100900460ff1615808015610b775750600054600160ff909116105b80610b985750610b8630612994565b158015610b98575060005460ff166001145b610c005760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610c23576000805461ff0019166101001790555b610c2b6129a3565b83831015610c4c5760405163058f934760e11b815260040160405180910390fd5b82821015610c6d576040516310828d5f60e21b815260040160405180910390fd5b606d80546001600160a01b0319166001600160a01b038716179055606e849055606f83905560708290558015610cdd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610cec611e34565b60005b815181101561089457606c828281518110610d0c57610d0c6133b7565b6020908102919091018101518254600181810185556000948552938390208251600290920201908155910151910155815181907f4b48fefcabd0f00ca106f599dbe31ddffc45e843f679e423927549ad811b1eb390849083908110610d7357610d736133b7565b6020026020010151604051610d889190613426565b60405180910390a2600101610cef565b600080805b606c54811015610e0d57606c8181548110610dba57610dba6133b7565b60009182526020808320600160029093020191909101546001600160a01b0387168352606682526040808420858552909252912054610df9919061343d565b610e039083613454565b9150600101610d9d565b509392505050565b610e1d611e34565b610e2760006129d2565b565b610e31611e34565b815181518114610e5457604051635dbbb88b60e11b815260040160405180910390fd5b60005b81811015610f4d57828181518110610e7157610e716133b7565b602002602001015160746000868481518110610e8f57610e8f6133b7565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550838181518110610ee057610ee06133b7565b60200260200101516001600160a01b03167fa0314d38ce270042e817a3ba42d57958f6737517da4a930fa462ab25156445e0848381518110610f2457610f246133b7565b6020026020010151604051610f3d911515815260200190565b60405180910390a2600101610e57565b50505050565b60775460ff1615610f7757604051630ddde16760e31b815260040160405180910390fd5b336000908152607360205260409020805460ff1916821515179055610f9a61104f565b6001600160a01b0316336001600160a01b03167faeb4c97740c376a3bf9e837dc0583c86fd6a3edce7b7c594389415de1b12028883604051610fe0911515815260200190565b60405180910390a350565b610ff3611e34565b6077805460ff191660019081179091556040519081526000805160206135a883398151915290602001610995565b606c818154811061103157600080fd5b60009182526020909120600290910201805460019091015490915082565b6033546001600160a01b031690565b611066611e34565b60775460ff161561108a57604051630ddde16760e31b815260040160405180910390fd5b6001600160a01b03821660009081526073602052604090205460ff1680156110ca57506001600160a01b03811660009081526073602052604090205460ff165b6111035760405162461bcd60e51b815260206004820152600a6024820152690859195b1959d85d195960b21b6044820152606401610bf7565b6001600160a01b038216600090815260656020526040812054905b606b54811015611230576000606b828154811061113d5761113d6133b7565b6000918252602090912001546072546001600160a01b0391821692501681146111c55760405163ccad973d60e01b81526001600160a01b0382169063ccad973d9061118e9088908790600401613467565b600060405180830381600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b50505050611227565b60405163ccad973d60e01b81526001600160a01b0382169063ccad973d906111f4908890600090600401613467565b600060405180830381600087803b15801561120e57600080fd5b505af1158015611222573d6000803e3d6000fd5b505050505b5060010161111e565b6001600160a01b0384166000908152606560205260408120819055606c546001600160401b0381111561126557611265612fa0565b60405190808252806020026020018201604052801561128e578160200160208202803683370190505b506001600160a01b038087166000908152606760205260408120546072549394509290916112bd911688610d98565b6001600160a01b038816600090815260676020526040902054909150156113e157600093505b606c54841015611368576001600160a01b0387166000908152606660209081526040808320878452909152902054801561135c578084868151811061132a5761132a6133b7565b6020908102919091018101919091526001600160a01b0389166000908152606682526040808220888352909252908120555b846001019450506112e3565b6001600160a01b0380881660009081526067602052604080822091909155607254905163ccad973d60e01b815291169063ccad973d906113ae908a908590600401613467565b600060405180830381600087803b1580156113c857600080fd5b505af11580156113dc573d6000803e3d6000fd5b505050505b600093505b606b548410156114fb576000606b8581548110611405576114056133b7565b6000918252602090912001546072546001600160a01b03918216925016811461148d57604051630afe546360e21b81526001600160a01b03821690632bf9518c90611456908a908a90600401613467565b600060405180830381600087803b15801561147057600080fd5b505af1158015611484573d6000803e3d6000fd5b505050506114ef565b604051630afe546360e21b81526001600160a01b03821690632bf9518c906114bc908a90600090600401613467565b600060405180830381600087803b1580156114d657600080fd5b505af11580156114ea573d6000803e3d6000fd5b505050505b846001019450506113e6565b6001600160a01b03861660009081526065602052604081208054879290611523908490613454565b909155505081156115ce57600093505b82518410156115ce576000838581518110611550576115506133b7565b602002602001015111156115c357828481518110611570576115706133b7565b602002602001015160666000886001600160a01b03166001600160a01b03168152602001908152602001600020600086815260200190815260200160002060008282546115bd9190613454565b90915550505b836001019350611533565b6001600160a01b038616600090815260676020526040812080548492906115f6908490613454565b9091555050607254604051630afe546360e21b81526001600160a01b0390911690632bf9518c9061162d9089908590600401613467565b600060405180830381600087803b15801561164757600080fd5b505af115801561165b573d6000803e3d6000fd5b5050505050505050505050565b60775460ff161561168c57604051630ddde16760e31b815260040160405180910390fd5b611697333383612a24565b50565b6000805b606c548110156116ff57606c81815481106116bb576116bb6133b7565b90600052602060002090600202016001015460696000838152602001908152602001600020546116eb919061343d565b6116f59083613454565b915060010161169e565b50919050565b61170d611e34565b8282101561172e5760405163058f934760e11b815260040160405180910390fd5b8181101561174f576040516310828d5f60e21b815260040160405180910390fd5b606e92909255606f55607055565b611765611e34565b6071546040517fe97abd239615891a24b2f6413d269045fc0b00aaeaa38a6113143c8f53bf6f92916117a4916001600160a01b0390911690849061340c565b60405180910390a1607180546001600160a01b0319166001600160a01b0392909216919091179055565b607554600090600160a01b900460ff16156118db57606d54604080516338d52e0f60e01b815290516000926001600160a01b0316916338d52e0f9160048083019260209291908290030181865afa15801561182d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118519190613480565b606d546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611887903090600401612ee1565b602060405180830381865afa1580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c8919061349d565b90506118d3816106b0565b949350505050565b606d546040516370a0823160e01b81526001600160a01b03909116906370a082319061190b903090600401612ee1565b602060405180830381865afa158015611928573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106da919061349d565b611954611e34565b6001600160a01b03811661197b576040516397cbba7360e01b815260040160405180910390fd5b6075546040517fe62ffde85bc7d53785724925a7978f9bdf5d8a6ef2ea015fa4eebe6f449e4dff916119ba916001600160a01b0390911690849061340c565b60405180910390a1607580546001600160a01b0319166001600160a01b0392909216919091179055565b6060606c805480602002602001604051908101604052809291908181526020016000905b82821015611a4e57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611a08565b50505050905090565b611a5f611e34565b6001600160a01b038116611ac45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bf7565b611697816129d2565b60775460ff1615611af157604051630ddde16760e31b815260040160405180910390fd5b3360009081526074602052604090205460ff16611b2157604051636a01edd560e11b815260040160405180910390fd5b610894823383612a24565b607554600090600160a01b900460ff1615611b70576001600160a01b0382166000908152606560205260409020546076546106da9190670de0b6b3a7640000611d7f565b506001600160a01b031660009081526065602052604090205490565b606b8181548110611b9c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6075546001600160a01b03163314611be157604051636b96edc360e11b815260040160405180910390fd5b606d546001600160a01b03808416911603611c0d5760405161d19d60e81b815260040160405180910390fd5b606d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611c3e903090600401612ee1565b602060405180830381865afa158015611c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7f919061349d565b606d54909150611c99906001600160a01b03168483612b0f565b604051636e553f6560e01b8152600481018290523060248201526001600160a01b03841690636e553f65906044016020604051808303816000875af1158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a919061349d565b50606d80546001600160a01b0385166001600160a01b03199091161790556075805460ff60a01b1916600160a01b17905560768290556040517feb86c7a022e315df88f491872f8270f0119ce017ba11fe62bca322cd1c06878090611d729085908590613467565b60405180910390a1505050565b6000808060001985870985870292508281108382030391505080600003611db957838281611daf57611daf6134b6565b0492505050611e2d565b808411611dc557600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b33611e3d61104f565b6001600160a01b031614610e275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bf7565b6072546001600160a01b0316611ebc5760405163621b93b960e01b815260040160405180910390fd5b607554600160a01b900460ff1615611ee55760405161d19d60e81b815260040160405180910390fd5b60005b606b54811015612016576000606b8281548110611f0757611f076133b7565b6000918252602090912001546075546001600160a01b039091169150600160a01b900460ff1661200d576072546001600160a01b03828116911614611fab57604051630afe546360e21b81526001600160a01b03821690632bf9518c90611f749088908890600401613467565b600060405180830381600087803b158015611f8e57600080fd5b505af1158015611fa2573d6000803e3d6000fd5b5050505061200d565b604051630afe546360e21b81526001600160a01b03821690632bf9518c90611fda908890600090600401613467565b600060405180830381600087803b158015611ff457600080fd5b505af1158015612008573d6000803e3d6000fd5b505050505b50600101611ee8565b506001600160a01b0383166000908152606560205260408120805484929061203f908490613454565b90915550508015612416576120526108eb565b61206f576040516316cab56760e11b815260040160405180910390fd5b606c805461207f906001906133e3565b8154811061208f5761208f6133b7565b60009182526020822060029091020154606c5490916068916120b3906001906133e3565b815260200190815260200160002054036120e057604051637cbdd34160e11b815260040160405180910390fd5b6072546000906120f9906001600160a01b031685610d98565b90508260005b606c5481101561238757606c818154811061211c5761211c6133b7565b9060005260206000209060020201600001546068600083815260200190815260200160002054101561237957600081815260686020526040812054606c80548490811061216b5761216b6133b7565b90600052602060002090600202016000015461218791906133e3565b90508281111561228257866001600160a01b0316336001600160a01b0316836000805160206135c8833981519152866040516121c591815260200190565b60405180910390a46001600160a01b038716600090815260666020908152604080832085845290915281208054859290612200908490613454565b90915550506001600160a01b0387166000908152606760205260408120805485929061222d908490613454565b909155505060008281526069602052604081208054859290612250908490613454565b909155505060008281526068602052604081208054859290612273908490613454565b90915550600093506123779050565b866001600160a01b0316336001600160a01b0316836000805160206135c8833981519152846040516122b691815260200190565b60405180910390a46001600160a01b0387166000908152606660209081526040808320858452909152812080548392906122f1908490613454565b90915550506001600160a01b0387166000908152606760205260408120805483929061231e908490613454565b909155505060008281526069602052604081208054839290612341908490613454565b909155505060008281526068602052604081208054839290612364908490613454565b90915550612374905081846133e3565b92505b505b8115612387576001016120ff565b5060725460009083906123a3906001600160a01b031688610d98565b6123ad91906133e3565b607254604051630afe546360e21b81529192506001600160a01b031690632bf9518c906123e09089908590600401613467565b600060405180830381600087803b1580156123fa57600080fd5b505af115801561240e573d6000803e3d6000fd5b505050505050505b606d5461242e906001600160a01b0316333085612c4e565b6040518281526001600160a01b0384169033907f5c8d1f77b6233deba47b516a690497af4c7f1be42a768e331832cb02b3400d6b9060200160405180910390a3505050565b60725481906001600160a01b031661249e5760405163621b93b960e01b815260040160405180910390fd5b607554600160a01b900460ff16156124bc576124b9826106b0565b91505b336000908152606560205260409020548211156124ec5760405163139b8bad60e11b815260040160405180910390fd5b336000908152606760205260409020541580159061252e57503360009081526067602090815260408083205460659092529091205461252b91906133e3565b82115b801561253c57506070544211155b1561255a576040516303a9f19f60e21b815260040160405180910390fd5b60005b606b5481101561266f576000606b828154811061257c5761257c6133b7565b6000918252602090912001546072546001600160a01b0391821692501681146126045760405163ccad973d60e01b81526001600160a01b0382169063ccad973d906125cd9033908890600401613467565b600060405180830381600087803b1580156125e757600080fd5b505af11580156125fb573d6000803e3d6000fd5b50505050612666565b60405163ccad973d60e01b81526001600160a01b0382169063ccad973d90612633903390600090600401613467565b600060405180830381600087803b15801561264d57600080fd5b505af1158015612661573d6000803e3d6000fd5b505050505b5060010161255d565b50336000908152606560205260408120805484929061268f9084906133e3565b9091555050607554600160a01b900460ff161580156126c7575033600090815260676020908152604080832054606590925290912054105b15612956573360009081526065602090815260408083205460679092528220546126f191906133e3565b90506126ff60705442111590565b15801561271a57503360009081526067602052604090205415155b1561295457607254600090612738906001600160a01b031633610d98565b606c5490915060009061274d906001906133e3565b90505b33600090815260666020908152604080832084845290915290205480156128b0578381111561281e57604051848152339083906000805160206135e88339815191529060200160405180910390a3336000908152606660209081526040808320858452909152812080548692906127c89084906133e3565b909155505033600090815260676020526040812080548692906127ec9084906133e3565b90915550506000828152606960205260408120805486929061280f9084906133e3565b90915550600094506128b09050565b604051818152339083906000805160206135e88339815191529060200160405180910390a3336000818152606660209081526040808320868452825280832083905592825260679052908120805483929061287a9084906133e3565b90915550506000828152606960205260408120805483929061289d9084906133e3565b909155506128ad905081856133e3565b93505b836000036128be57506128c8565b5060001901612750565b506072546000906128e2906001600160a01b031633610d98565b6128ec90836133e3565b60725460405163ccad973d60e01b81529192506001600160a01b03169063ccad973d9061291f9033908590600401613467565b600060405180830381600087803b15801561293957600080fd5b505af115801561294d573d6000803e3d6000fd5b5050505050505b505b606d5461296d906001600160a01b03163383612c86565b60405181815233906000805160206136088339815191529060200160405180910390a25050565b6001600160a01b03163b151590565b600054610100900460ff166129ca5760405162461bcd60e51b8152600401610bf7906134cc565b610e27612ca5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b805160005b81811015610cdd57606a6000848381518110612a4757612a476133b7565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16612a8b57604051635ad5c24f60e11b815260040160405180910390fd5b828181518110612a9d57612a9d6133b7565b60200260200101516001600160a01b031663cb75a6c286866040518363ffffffff1660e01b8152600401612ad292919061340c565b600060405180830381600087803b158015612aec57600080fd5b505af1158015612b00573d6000803e3d6000fd5b50505050806001019050612a29565b801580612b885750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612b45903090869060040161340c565b602060405180830381865afa158015612b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b86919061349d565b155b612bf35760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610bf7565b612c498363095ea7b360e01b8484604051602401612c12929190613467565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612cd5565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610f4d9085906323b872dd60e01b90608401612c12565b612c498363a9059cbb60e01b8484604051602401612c12929190613467565b600054610100900460ff16612ccc5760405162461bcd60e51b8152600401610bf7906134cc565b610e27336129d2565b6000612d2a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612da79092919063ffffffff16565b805190915015612c495780806020019051810190612d489190613517565b612c495760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610bf7565b60606118d3848460008585600080866001600160a01b03168587604051612dce9190613558565b60006040518083038185875af1925050503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2187838387612e2c565b979650505050505050565b60608315612e99578251600003612e9257612e4685612994565b612e925760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bf7565b50816118d3565b6118d38383815115612eae5781518083602001fd5b8060405162461bcd60e51b8152600401610bf79190613574565b600060208284031215612eda57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461169757600080fd5b60008060408385031215612f1d57600080fd5b8235612f2881612ef5565b946020939093013593505050565b600060208284031215612f4857600080fd5b8135611e2d81612ef5565b6020808252825182820181905260009190848201906040850190845b81811015612f945783516001600160a01b031683529284019291840191600101612f6f565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612fd857612fd8612fa0565b60405290565b604051601f8201601f191681016001600160401b038111828210171561300657613006612fa0565b604052919050565b60006001600160401b0382111561302757613027612fa0565b5060051b60200190565b600082601f83011261304257600080fd5b813560206130576130528361300e565b612fde565b82815260059290921b8401810191818101908684111561307657600080fd5b8286015b8481101561309a57803561308d81612ef5565b835291830191830161307a565b509695505050505050565b6000602082840312156130b757600080fd5b81356001600160401b038111156130cd57600080fd5b6118d384828501613031565b600080600080608085870312156130ef57600080fd5b84356130fa81612ef5565b966020860135965060408601359560600135945092505050565b6000602080838503121561312757600080fd5b82356001600160401b0381111561313d57600080fd5b8301601f8101851361314e57600080fd5b803561315c6130528261300e565b81815260069190911b8201830190838101908783111561317b57600080fd5b928401925b82841015612e2157604084890312156131995760008081fd5b6131a1612fb6565b843581528585013586820152825260409093019290840190613180565b600080604083850312156131d157600080fd5b82356131dc81612ef5565b915060208301356131ec81612ef5565b809150509250929050565b801515811461169757600080fd5b6000806040838503121561321857600080fd5b82356001600160401b038082111561322f57600080fd5b61323b86838701613031565b935060209150818501358181111561325257600080fd5b85019050601f8101861361326557600080fd5b80356132736130528261300e565b81815260059190911b8201830190838101908883111561329257600080fd5b928401925b828410156132b95783356132aa816131f7565b82529284019290840190613297565b80955050505050509250929050565b6000602082840312156132da57600080fd5b8135611e2d816131f7565b6000806000606084860312156132fa57600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000919060409081850190868401855b8281101561335b5761334b84835180518252602090810151910152565b928401929085019060010161332e565b5091979650505050505050565b6000806040838503121561337b57600080fd5b823561338681612ef5565b915060208301356001600160401b038111156133a157600080fd5b6133ad85828601613031565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156106da576106da6133cd565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b8151815260208083015190820152604081016106da565b80820281158282048414176106da576106da6133cd565b808201808211156106da576106da6133cd565b6001600160a01b03929092168252602082015260400190565b60006020828403121561349257600080fd5b8151611e2d81612ef5565b6000602082840312156134af57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006020828403121561352957600080fd5b8151611e2d816131f7565b60005b8381101561354f578181015183820152602001613537565b50506000910152565b6000825161356a818460208701613534565b9190910192915050565b6020815260008251806020840152613593816040850160208701613534565b601f01601f1916919091016040019291505056fedd7221e8fae38eadd917726db6aa1477e63320aea2609f225f90fe8bb2ff6010fbe3e8d621109f20f6773f9b815e9067c070831886d0dfa9c8dc0c534116ea032eff90bd2ba36425dcc86f297ded1622ebd6d6fc7c593256f1af4d3b718b75304ce7033d118120e254016dccf195288400b28fc8936425acd5f17ce2df3ab708a264697066735822122072c0c93a3d541eb7091504c340b33731dea56ad82ac41535de6ea8bccce7627364736f6c63430008120033