161 txs
152 calls
constructor
constructor(address _token, address _defaultAdmin, address _rewardAdmin)
functions
canWithdraw
viewfunction canWithdraw(address account) view returns (bool)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
earned
viewfunction earned(address account) view returns (uint256)
getContractStats
viewfunction getContractStats() view returns (uint256 _totalStaked, uint256 _totalRewardPool, uint256 _rewardRate, uint256 _periodFinish, uint256 _currentAPY)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getUserInfo
viewfunction getUserInfo(address account) view returns (uint256 staked, uint256 earned_, uint256 timeUntilUnlock_, bool canWithdraw_, uint256 unstaking, bool inUnstakePeriod)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
lastActionBlock
viewfunction lastActionBlock(address) view returns (uint256)
lastTimeRewardApplicable
viewfunction lastTimeRewardApplicable() view returns (uint256)
lastUpdateTime
viewfunction lastUpdateTime() view returns (uint256)
MIN_STAKE_AMOUNT
viewfunction MIN_STAKE_AMOUNT() view returns (uint256)
MIN_STAKE_TIME
viewfunction MIN_STAKE_TIME() view returns (uint256)
paused
viewfunction paused() view returns (bool)
pendingRewards
viewfunction pendingRewards(address) view returns (uint256)
periodFinish
viewfunction periodFinish() view returns (uint256)
REWARD_DISTRIBUTOR_ROLE
viewfunction REWARD_DISTRIBUTOR_ROLE() view returns (bytes32)
rewardPerToken
viewfunction rewardPerToken() view returns (uint256)
rewardPerTokenStored
viewfunction rewardPerTokenStored() view returns (uint256)
rewardRate
viewfunction rewardRate() view returns (uint256)
rewardsDuration
viewfunction rewardsDuration() view returns (uint256)
stakedBalance
viewfunction stakedBalance(address) view returns (uint256)
stakeTime
viewfunction stakeTime(address) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timeUntilUnlock
viewfunction timeUntilUnlock(address account) view returns (uint256)
token
viewfunction token() view returns (address)
totalRewardPool
viewfunction totalRewardPool() view returns (uint256)
totalStaked
viewfunction totalStaked() view returns (uint256)
UNSTAKE_PERIOD
viewfunction UNSTAKE_PERIOD() view returns (uint256)
unstakeAmount
viewfunction unstakeAmount(address) view returns (uint256)
unstakeTime
viewfunction unstakeTime(address) view returns (uint256)
userRewardPerTokenPaid
viewfunction userRewardPerTokenPaid(address) view returns (uint256)
addRewards
nonpayablefunction addRewards(uint256 amount)
cancelUnstake
nonpayablefunction cancelUnstake()
claimRewards
nonpayablefunction claimRewards()
compound
nonpayablefunction compound()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
recoverERC20
nonpayablefunction recoverERC20(address tokenAddress, uint256 tokenAmount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
requestUnstake
nonpayablefunction requestUnstake(uint256 amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setPaused
nonpayablefunction setPaused(bool _paused)
setRewardsDuration
nonpayablefunction setRewardsDuration(uint256 _rewardsDuration)
stake
nonpayablefunction stake(uint256 amount)
startExit
nonpayablefunction startExit()
withdraw
nonpayablefunction withdraw()
events
PausedChanged
event PausedChanged(bool paused)
RewardAdded
event RewardAdded(uint256 indexed reward)
RewardPaid
event RewardPaid(address indexed user, uint256 indexed reward)
RewardsDurationUpdated
event RewardsDurationUpdated(uint256 newDuration)
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)
Staked
event Staked(address indexed user, uint256 indexed amount)
UnstakeCancelled
event UnstakeCancelled(address indexed user, uint256 indexed amount)
UnstakeRequested
event UnstakeRequested(address indexed user, uint256 indexed amount, uint256 unlockTime)
Withdrawn
event Withdrawn(address indexed user, uint256 indexed amount)
errors
AlreadyUnstaking
error AlreadyUnstaking()
CannotCompoundWhileUnstaking
error CannotCompoundWhileUnstaking()
CannotStakeWhileUnstaking
error CannotStakeWhileUnstaking()
InsufficientBalance
error InsufficientBalance()
InsufficientRewardPool
error InsufficientRewardPool()
NoRewardsAvailable
error NoRewardsAvailable()
NoUnstakeRequest
error NoUnstakeRequest()
SameBlockAction
error SameBlockAction()
StakeAmountTooSmall
error StakeAmountTooSmall()
StakeTooEarly
error StakeTooEarly()
UnstakeStillLocked
error UnstakeStillLocked()
ZeroAmount
error ZeroAmount()
creation bytecode
0x60a060405262278d006008553480156200001857600080fd5b5060405162002c5438038062002c548339810160408190526200003b9162000149565b600160009081556001600160a01b038416608052426005556200005f908362000094565b6200008b7fb814ff4a26ea3ec5cd1fa579daad86324826254265f3acfec78303a19845b4498262000094565b50505062000193565b620000a08282620000a4565b5050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620000a05760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b80516001600160a01b03811681146200014457600080fd5b919050565b6000806000606084860312156200015f57600080fd5b6200016a846200012c565b92506200017a602085016200012c565b91506200018a604085016200012c565b90509250925092565b608051612a3c62000218600039600081816105f301528181610b2b01528181610ba501528181610be401528181610d9301528181611083015281816110d20152818161132c015281816113ae015281816113f8015281816115a0015281816116220152818161166c0152818161193a015281816119b401526119f30152612a3c6000f3fe608060405234801561001057600080fd5b506004361061027e5760003560e01c806379b578621161015c578063c10d42a5116100ce578063df136d6511610087578063df136d6514610584578063dfe6b5d61461058d578063e5d84527146105bd578063ebe2b12b146105dd578063f69e2046146105e6578063fc0c546a146105ee57600080fd5b8063c10d42a514610532578063c8f33c911461053a578063cc1a378f14610543578063cd3daf9d14610556578063d0228e8f1461055e578063d547741f1461057157600080fd5b80638b876347116101205780638b876347146104b157806391d14854146104d1578063a209a86f146104e4578063a217fddf14610504578063a694fc3a1461050c578063beceed391461051f57600080fd5b806379b578621461047a5780637b0a47ee1461048457806380faa57d1461048d578063817b1cd2146104955780638980f11f1461049e57600080fd5b806331d7a262116101f55780633ccfd60b116101b95780633ccfd60b146103ef5780634ab17969146103f75780635c975abb146103ff5780635d2ed5561461040c57806360217267146104165780636386c1c71461043657600080fd5b806331d7a2621461039657806332e4bb0a146103b657806336568abe146103cb578063372500ab146103de578063386a9525146103e657600080fd5b80632170e472116102475780632170e472146102fd578063230957211461031d578063248a9ca31461033057806327ed7188146103545780632ac1aa35146103635780632f2ff15d1461038357600080fd5b80628cc2621461028357806301ffc9a7146102a957806309c85e24146102cc57806316c38b3c146102d557806319262d30146102ea575b600080fd5b61029661029136600461271b565b61062d565b6040519081526020015b60405180910390f35b6102bc6102b7366004612736565b6106aa565b60405190151581526020016102a0565b61029660035481565b6102e86102e336600461276e565b6106df565b005b6102bc6102f836600461271b565b61079c565b61029661030b36600461271b565b600b6020526000908152604090205481565b6102e861032b36600461278b565b6107f3565b61029661033e36600461278b565b6000908152600160208190526040909120015490565b610296670de0b6b3a764000081565b61029661037136600461271b565b600f6020526000908152604090205481565b6102e86103913660046127a4565b6109b1565b6102966103a436600461271b565b600d6020526000908152604090205481565b6102966000805160206129e783398151915281565b6102e86103d93660046127a4565b6109dc565b6102e8610a5a565b61029660085481565b6102e8610cb7565b6102e8610dfa565b6009546102bc9060ff1681565b6102966201518081565b61029661042436600461271b565b600a6020526000908152604090205481565b61044961044436600461271b565b610f9b565b60408051968752602087019590955293850192909252151560608401526080830152151560a082015260c0016102a0565b6102966213c68081565b61029660045481565b61029661105d565b61029660025481565b6102e86104ac3660046127d0565b611076565b6102966104bf36600461271b565b600c6020526000908152604090205481565b6102bc6104df3660046127a4565b6111cb565b6102966104f236600461271b565b600e6020526000908152604090205481565b610296600081565b6102e861051a36600461278b565b6111f6565b6102e861052d36600461278b565b61153c565b6102e8611800565b61029660055481565b6102e861055136600461278b565b611b48565b610296611c97565b61029661056c36600461271b565b611cf9565b6102e861057f3660046127a4565b611d6a565b61029660065481565b610595611d90565b604080519586526020860194909452928401919091526060830152608082015260a0016102a0565b6102966105cb36600461271b565b60106020526000908152604090205481565b61029660075481565b6102e8611e0a565b6106157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a0565b6001600160a01b0381166000908152600d6020908152604080832054600c909252822054670de0b6b3a764000090610663611c97565b61066d9190612810565b6001600160a01b0385166000908152600a60205260409020546106909190612823565b61069a9190612850565b6106a49190612872565b92915050565b60006001600160e01b03198216637965db0b60e01b14806106a457506301ffc9a760e01b6001600160e01b03198316146106a4565b6106ea6000336111cb565b8061070857506107086000805160206129e7833981519152336111cb565b6107545760405162461bcd60e51b8152602060048201526018602482015277496e73756666696369656e74207065726d697373696f6e7360401b60448201526064015b60405180910390fd5b6009805460ff19168215159081179091556040519081527fd83d5281277e107f080e362699d46082adb74e7dc6a9bccbc87d8ae9533add44906020015b60405180910390a150565b6001600160a01b0381166000908152600f602052604081205481036107c357506000919050565b6001600160a01b0382166000908152600f60205260409020546107ea906213c68090612872565b42101592915050565b6107fb611fb4565b3360009081526010602052604090205443900361082b576040516377ac00f960e01b815260040160405180910390fd5b33600090815260106020526040812043905581900361085d57604051631f2a200560e01b815260040160405180910390fd5b336000908152600a602052604090205481111561088d57604051631e9acf1760e31b815260040160405180910390fd5b336000908152600f6020526040902054156108bb57604051630dcf7a9d60e01b815260040160405180910390fd5b336000908152600b60205260409020546108d9906201518090612872565b4210156108f957604051632f7ecdc360e01b815260040160405180910390fd5b6109023361200d565b336000908152600a602052604081208054839290610921908490612810565b92505081905550806002600082825461093a9190612810565b9091555050336000818152600e60209081526040808320859055600f909152902042908190558291907f57e41df54512c76148b5ba9b643d149752b0d35e493b969bd017d0a3fe5228cf90610993906213c68090612872565b60405190815260200160405180910390a36109ae6001600055565b50565b600082815260016020819052604090912001546109cd81612116565b6109d78383612120565b505050565b6001600160a01b0381163314610a4c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161074b565b610a56828261218b565b5050565b610a62611fb4565b33610a6c8161200d565b33600090815260106020526040902054439003610a9c576040516377ac00f960e01b815260040160405180910390fd5b336000908152601060209081526040808320439055600d90915281205490819003610ada5760405163afb0be3360e01b815260040160405180910390fd5b600354811115610afd57604051633270436b60e01b815260040160405180910390fd5b336000908152600d6020526040808220829055516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b969190612885565b9050610bcc6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633846121f2565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c579190612885565b610c619083612810565b90508060036000828254610c759190612810565b9091555050604051819033907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048690600090a350505050610cb56001600055565b565b610cbf611fb4565b33600090815260106020526040902054439003610cef576040516377ac00f960e01b815260040160405180910390fd5b336000908152601060209081526040808320439055600e9091528120549003610d2b576040516316f68e4b60e01b815260040160405180910390fd5b336000908152600f6020526040902054610d49906213c68090612872565b421015610d6957604051637c807c6760e01b815260040160405180910390fd5b336000818152600e60209081526040808320805490849055600f90925282209190915590610dc2907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690836121f2565b604051819033907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d590600090a350610cb56001600055565b610e02611fb4565b60095460ff1615610e4a5760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015260640161074b565b6000610e558161200d565b33600090815260106020526040902054439003610e85576040516377ac00f960e01b815260040160405180910390fd5b336000818152601060205260409020439055610ea08161200d565b336000908152600e60205260408120549003610ecf576040516316f68e4b60e01b815260040160405180910390fd5b336000908152600e60209081526040808320805490849055600f8352818420849055600a9092528220805491928392610f09908490612872565b925050819055508060026000828254610f229190612872565b9091555050336000818152600b6020526040808220429055518392917f02fbe69eb5474cc010b6c0c236dd70755556cee48c19373e79147100e04de70b91a3604051819033907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90600090a3505050610cb56001600055565b6001600160a01b0381166000908152600f60205260408120548190819081908190819015801590611011576001600160a01b0388166000908152600f6020526040812054610fed906213c68090612872565b905080421015611006576110014282612810565b611009565b60005b955042101593505b6001600160a01b0388166000908152600a60205260409020546110338961062d565b6001600160a01b03999099166000908152600e602052604090205490999597509395509293915050565b6000600754421061106f575060075490565b425b905090565b600061108181612116565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036111b7576040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111459190612885565b905060006003546002546111599190612872565b90506111658183612810565b8411156111b45760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207769746864726177206c6f636b656420746f6b656e73000000604482015260640161074b565b50505b6109d76001600160a01b03841633846121f2565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6111fe611fb4565b60095460ff16156112465760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015260640161074b565b60006112518161200d565b33600090815260106020526040902054439003611281576040516377ac00f960e01b815260040160405180910390fd5b33600081815260106020526040902043905561129c8161200d565b826000036112bd57604051631f2a200560e01b815260040160405180910390fd5b670de0b6b3a76400008310156112e657604051637e4d921360e01b815260040160405180910390fd5b336000908152600f602052604090205415611314576040516358e4f33d60e11b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561137b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139f9190612885565b90506113d66001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333087612255565b6040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114639190612885565b61146d9190612810565b90508060000361149057604051631f2a200560e01b815260040160405180910390fd5b670de0b6b3a76400008110156114b957604051637e4d921360e01b815260040160405180910390fd5b80600260008282546114cb9190612872565b9091555050336000908152600a6020526040812080548392906114ef908490612872565b9091555050336000818152600b6020526040808220429055518392917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d91a3505050506109ae6001600055565b611544611fb4565b6000805160206129e783398151915261155c81612116565b60006115678161200d565b8260000361158857604051631f2a200560e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116139190612885565b905061164a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333087612255565b6040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d79190612885565b6116e19190612810565b905080600360008282546116f59190612872565b90915550506007544210611718576008546117109082612850565b60045561175a565b6000426007546117289190612810565b905060006004548261173a9190612823565b60085490915061174a8285612872565b6117549190612850565b60045550505b60035460085460045461176d9190612823565b11156117b25760405162461bcd60e51b81526020600482015260146024820152730a4caeec2e4c840e4c2e8ca40e8dede40d0d2ced60631b604482015260640161074b565b4260058190556008546117c491612872565b60075560405181907fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d90600090a2505050506109ae6001600055565b611808611fb4565b336118128161200d565b33600090815260106020526040902054439003611842576040516377ac00f960e01b815260040160405180910390fd5b336000908152601060209081526040808320439055600d825280832054600a909252822054909181900361188957604051631e9acf1760e31b815260040160405180910390fd5b336000908152600f6020526040902054156118b757604051630dcf7a9d60e01b815260040160405180910390fd5b336000908152600b60205260409020546118d5906201518090612872565b4210156118f557604051632f7ecdc360e01b815260040160405180910390fd5b60008211801561190757506003548211155b15611ab957336000908152600d6020526040808220829055516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190612885565b90506119db6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633856121f2565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a669190612885565b611a709083612810565b90508060036000828254611a849190612810565b9091555050604051819033907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048690600090a350505b336000908152600a60209081526040808320839055600e8252808320849055600f909152812042905560028054839290611af4908490612810565b90915550819050337f57e41df54512c76148b5ba9b643d149752b0d35e493b969bd017d0a3fe5228cf611b2a6213c68042612872565b60405190815260200160405180910390a3505050610cb56001600055565b611b536000336111cb565b80611b715750611b716000805160206129e7833981519152336111cb565b611bb85760405162461bcd60e51b8152602060048201526018602482015277496e73756666696369656e74207065726d697373696f6e7360401b604482015260640161074b565b6007544211611c1a5760405162461bcd60e51b815260206004820152602860248201527f50726576696f7573207265776172647320706572696f64206d75737420626520604482015267636f6d706c65746560c01b606482015260840161074b565b62015180811015611c625760405162461bcd60e51b8152602060048201526012602482015271111d5c985d1a5bdb881d1bdbc81cda1bdc9d60721b604482015260640161074b565b60088190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d390602001610791565b6000600254600003611caa575060065490565b600254670de0b6b3a7640000600454600554611cc461105d565b611cce9190612810565b611cd89190612823565b611ce29190612823565b611cec9190612850565b6006546110719190612872565b6001600160a01b0381166000908152600f60205260408120548103611d2057506000919050565b6001600160a01b0382166000908152600f6020526040812054611d47906213c68090612872565b905080421015611d6057611d5b4282612810565b611d63565b60005b9392505050565b60008281526001602081905260409091200154611d8681612116565b6109d7838361218b565b600080600080600080600090506000600454118015611db157506000600254115b15611ded576004546301e133808082029190820414611dd35760009150611deb565b6002548160640281611de757611de761283a565b0491505b505b600254600354600454600754929991985096509094509092509050565b611e12611fb4565b33611e1c8161200d565b33600090815260106020526040902054439003611e4c576040516377ac00f960e01b815260040160405180910390fd5b336000908152601060209081526040808320439055600f90915290205415611e87576040516322e0340360e11b815260040160405180910390fd5b336000908152600d602052604081205490819003611eb85760405163afb0be3360e01b815260040160405180910390fd5b600354811115611edb57604051633270436b60e01b815260040160405180910390fd5b336000908152600d6020526040812081905560038054839290611eff908490612810565b925050819055508060026000828254611f189190612872565b9091555050336000908152600a602052604081208054839290611f3c908490612872565b9091555050336000818152600b6020526040808220429055518392917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048691a3604051819033907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90600090a35050610cb56001600055565b6002600054036120065760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161074b565b6002600055565b612015611c97565b60065561202061105d565b6005556001600160a01b038116156109ae576001600160a01b0381166000908152600c60205260408120546006549091908210801561207657506001600160a01b0383166000908152600a602052604090205415155b156120c257670de0b6b3a7640000826006546120929190612810565b6001600160a01b0385166000908152600a60205260409020546120b59190612823565b6120bf9190612850565b90505b6001600160a01b0383166000908152600d60205260409020546120e6908290612872565b6001600160a01b0384166000908152600d6020908152604080832093909355600654600c90915291902055505050565b6109ae8133612293565b61212a82826111cb565b610a565760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61219582826111cb565b15610a565760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516001600160a01b0383166024820152604481018290526109d790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526122ec565b6040516001600160a01b038085166024830152831660448201526064810182905261228d9085906323b872dd60e01b9060840161221e565b50505050565b61229d82826111cb565b610a56576122aa816123c1565b6122b58360206123d3565b6040516020016122c69291906128c2565b60408051601f198184030181529082905262461bcd60e51b825261074b91600401612937565b6000612341826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661256f9092919063ffffffff16565b9050805160001480612362575080806020019051810190612362919061296a565b6109d75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161074b565b60606106a46001600160a01b03831660145b606060006123e2836002612823565b6123ed906002612872565b67ffffffffffffffff81111561240557612405612987565b6040519080825280601f01601f19166020018201604052801561242f576020820181803683370190505b509050600360fc1b8160008151811061244a5761244a61299d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124795761247961299d565b60200101906001600160f81b031916908160001a905350600061249d846002612823565b6124a8906001612872565b90505b6001811115612520576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106124dc576124dc61299d565b1a60f81b8282815181106124f2576124f261299d565b60200101906001600160f81b031916908160001a90535060049490941c93612519816129b3565b90506124ab565b508315611d635760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161074b565b606061257e8484600085612586565b949350505050565b6060824710156125e75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161074b565b600080866001600160a01b0316858760405161260391906129ca565b60006040518083038185875af1925050503d8060008114612640576040519150601f19603f3d011682016040523d82523d6000602084013e612645565b606091505b509150915061265687838387612661565b979650505050505050565b606083156126d05782516000036126c9576001600160a01b0385163b6126c95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161074b565b508161257e565b61257e83838151156126e55781518083602001fd5b8060405162461bcd60e51b815260040161074b9190612937565b80356001600160a01b038116811461271657600080fd5b919050565b60006020828403121561272d57600080fd5b611d63826126ff565b60006020828403121561274857600080fd5b81356001600160e01b031981168114611d6357600080fd5b80151581146109ae57600080fd5b60006020828403121561278057600080fd5b8135611d6381612760565b60006020828403121561279d57600080fd5b5035919050565b600080604083850312156127b757600080fd5b823591506127c7602084016126ff565b90509250929050565b600080604083850312156127e357600080fd5b6127ec836126ff565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106a4576106a46127fa565b80820281158282048414176106a4576106a46127fa565b634e487b7160e01b600052601260045260246000fd5b60008261286d57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156106a4576106a46127fa565b60006020828403121561289757600080fd5b5051919050565b60005b838110156128b95781810151838201526020016128a1565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516128fa81601785016020880161289e565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161292b81602884016020880161289e565b01602801949350505050565b602081526000825180602084015261295681604085016020870161289e565b601f01601f19169190910160400192915050565b60006020828403121561297c57600080fd5b8151611d6381612760565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816129c2576129c26127fa565b506000190190565b600082516129dc81846020870161289e565b919091019291505056feb814ff4a26ea3ec5cd1fa579daad86324826254265f3acfec78303a19845b449a264697066735822122088e8fe2a21606658f6fc4a16a2e324aa19ccb4d6d05fcd61e246db5fa26e6eef64736f6c634300081300330000000000000000000000006d5d854063114c18dadc54fe052d75c1c4f34b460000000000000000000000000000007bbd09b1c0eecffce8eecd08db7646b7cb000000000000000000000000fd728ddbd275ed61181f7713d92d8c32c9b63797