More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,445 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Un Stake | 12519891 | 1136 days ago | IN | 0 ETH | 0.0023044 | ||||
Flush Pool | 12189120 | 1187 days ago | IN | 0 ETH | 0.00646341 | ||||
Un Stake | 11844783 | 1240 days ago | IN | 0 ETH | 0.0112272 | ||||
Un Stake | 11844778 | 1240 days ago | IN | 0 ETH | 0.00642 | ||||
Un Stake | 11726373 | 1258 days ago | IN | 0 ETH | 0.00415 | ||||
Un Stake | 11726352 | 1258 days ago | IN | 0 ETH | 0.0031 | ||||
Un Stake | 11726314 | 1258 days ago | IN | 0 ETH | 0.00248 | ||||
Un Stake | 11726311 | 1258 days ago | IN | 0 ETH | 0.00155 | ||||
Take Rewards | 11694017 | 1263 days ago | IN | 0 ETH | 0.01087554 | ||||
Un Stake | 11691297 | 1263 days ago | IN | 0 ETH | 0.0122889 | ||||
Flush Pool | 11681950 | 1265 days ago | IN | 0 ETH | 0.01355004 | ||||
Take Rewards | 11680823 | 1265 days ago | IN | 0 ETH | 0.01582682 | ||||
Un Stake | 11680551 | 1265 days ago | IN | 0 ETH | 0.01023655 | ||||
Un Stake | 11677163 | 1265 days ago | IN | 0 ETH | 0.0105864 | ||||
Un Stake | 11673398 | 1266 days ago | IN | 0 ETH | 0.01524506 | ||||
Un Stake | 11670115 | 1267 days ago | IN | 0 ETH | 0.00804162 | ||||
Take Rewards | 11670105 | 1267 days ago | IN | 0 ETH | 0.01416119 | ||||
Take Rewards | 11662263 | 1268 days ago | IN | 0 ETH | 0.00963903 | ||||
Un Stake | 11662259 | 1268 days ago | IN | 0 ETH | 0.01547966 | ||||
Take Rewards | 11656415 | 1269 days ago | IN | 0 ETH | 0.02022316 | ||||
Take Rewards | 11651687 | 1269 days ago | IN | 0 ETH | 0.00913529 | ||||
Un Stake | 11651675 | 1269 days ago | IN | 0 ETH | 0.0127031 | ||||
Take Rewards | 11650900 | 1270 days ago | IN | 0 ETH | 0.00769359 | ||||
Take Rewards | 11650658 | 1270 days ago | IN | 0 ETH | 0.00092852 | ||||
Un Stake | 11650658 | 1270 days ago | IN | 0 ETH | 0.00998688 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DeFiat_Farming_v15
Compiler Version
v0.6.0+commit.26b70077
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-15 */ /* * Copyright (c) 2020 DeFiat.net * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ // File: @openzeppelin/contracts/math/Math.sol // // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath{ /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File: @openzeppelin/contracts/GSN/Context.sol /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/ownership/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } //adding ALLOWED method // File: @openzeppelin/contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * IMPORTANT: It is unsafe to assume that an address for which this * function returns false is an externally-owned account (EOA) and not a * contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } //======== contract DeFiat_Farming_v15 { using SafeMath for uint256; //Structs struct PoolMetrics { address stakedToken; uint256 staked; // sum of tokens staked in the contract uint256 stakingFee; // entry fee uint256 stakingPoints; address rewardToken; uint256 rewards; // current rewards in the pool uint256 startTime; // when the pool opens uint256 closingTime; // when the pool closes. uint256 duration; // duration of the staking uint256 lastEvent; // last time metrics were updated. uint256 ratePerToken; // CALCULATED pool reward Rate per Token (calculated based on total stake and time) } PoolMetrics public poolMetrics; struct UserMetrics { uint256 stake; // native token stake (balanceOf) uint256 stakingPoints; // staking points at lastEvent uint256 poolPoints; // pool point at lastEvent uint256 lastEvent; uint256 rewardAccrued; // accrued rewards over time based on staking points uint256 rewardsPaid; // for information only uint256 lastTxBlock; // latest transaction from the user (antiSpam) } mapping(address => UserMetrics) public userMetrics; //== constructor constructor(address _stakedToken, address _rewardToken, uint256 _feeBase1000, uint256 _durationHours, uint256 _delayStartHours) public { poolOperator = msg.sender; poolMetrics.stakedToken = address(_stakedToken); poolMetrics.rewardToken = address(_rewardToken); poolMetrics.stakingFee = _feeBase1000; //10 = 1% poolMetrics.duration = _durationHours.mul(3600); // poolMetrics.startTime = block.timestamp + _delayStartHours.mul(3600); poolMetrics.closingTime = poolMetrics.startTime + poolMetrics.duration; //corrected following report poolMetrics.stakingPoints = 1; //avoids div by 0 at start FullRewards = true; } //==Events event PoolInitalized(uint256 amountAdded, string _desc); event RewardTaken(address indexed user, uint256 reward, string _desc); event userStaking(address indexed user, uint256 amount, string _desc); event userWithdrawal(address indexed user, uint256 amount, string _desc); modifier poolLive() { require(block.timestamp >= poolMetrics.startTime,"Pool not started Yet"); //good for delayed starts. require(block.timestamp <= poolMetrics.closingTime,"Pool closed"); //good for delayed starts. _; } modifier poolStarted() { require(block.timestamp >= poolMetrics.startTime,"Pool not started Yet"); //good for delayed starts. _; } modifier poolEnded() { require(block.timestamp > poolMetrics.closingTime,"Pool not ended Yet"); //good for delayed starts. _; } modifier antiSpam(uint256 _blocks) { require(block.number > userMetrics[msg.sender].lastTxBlock.add(_blocks), "Wait X BLOCKS between Transactions"); userMetrics[msg.sender].lastTxBlock = block.number; //update _; } //==Basics function currentTime() public view returns (uint256) { return SafeMath.min(block.timestamp, poolMetrics.closingTime); //allows expiration } // SafeMath.min(now, endTime) //==Points locking function viewPoolPoints() public view returns(uint256) { uint256 _previousPoints = poolMetrics.stakingPoints; // previous points shapshot uint256 _previousStake = poolMetrics.staked; // previous stake snapshot uint256 _timeHeld = currentTime().sub( SafeMath.max(poolMetrics.lastEvent, poolMetrics.startTime) ); // time held with _previous Event return _previousPoints.add(_previousStake.mul(_timeHeld)); //generated points since event } function lockPoolPoints() internal returns (uint256) { //ON STAKE/UNSTAKE EVENT poolMetrics.stakingPoints = viewPoolPoints(); poolMetrics.lastEvent = currentTime(); // update lastStakingEvent return poolMetrics.stakingPoints; } function viewPointsOf(address _address) public view returns(uint256) { uint256 _previousPoints = userMetrics[_address].stakingPoints; // snapshot uint256 _previousStake = userMetrics[_address].stake; // stake before event uint256 _timeHeld = currentTime().sub( SafeMath.max(userMetrics[_address].lastEvent, poolMetrics.startTime) ); // time held since lastEvent (take RWD, STK, unSTK) uint256 _result = _previousPoints.add(_previousStake.mul(_timeHeld)); if(_result > poolMetrics.stakingPoints){_result = poolMetrics.stakingPoints;} return _result; } function lockPointsOf(address _address) internal returns (uint256) { userMetrics[_address].poolPoints = viewPoolPoints(); // snapshot of pool points at lockEvent userMetrics[_address].stakingPoints = viewPointsOf(_address); userMetrics[_address].lastEvent = currentTime(); return userMetrics[_address].stakingPoints; } function pointsSnapshot(address _address) public returns (bool) { lockPointsOf(_address);lockPoolPoints(); return true; } //==Rewards function viewTrancheReward(uint256 _period) internal view returns(uint256) { //uint256 _poolRewards = poolMetrics.rewards; //tokens in the pool. Note: This can be setup to a fixed amount (totalRewards) uint256 _poolRewards = totalRewards; if(FullRewards == false){ _poolRewards = SafeMath.min(poolMetrics.staked, _poolRewards);} // baseline is the min( staked, rewards); avoids ultra_farming > staking pool - EXPERIMENTAL uint256 _timeRate = _period.mul(1e18).div(poolMetrics.duration); return _poolRewards.mul(_timeRate).div(1e18); //tranche of rewards on period } function userRateOnPeriod(address _address) public view returns (uint256){ //calculates the delta of pool points and user points since last Event uint256 _deltaUser = viewPointsOf(_address).sub(userMetrics[_address].stakingPoints); // points generated since lastEvent uint256 _deltaPool = viewPoolPoints().sub(userMetrics[_address].poolPoints); // pool points generated since lastEvent uint256 _rate = 0; if(_deltaUser == 0 || _deltaPool == 0 ){_rate = 0;} //rounding else {_rate = _deltaUser.mul(1e18).div(_deltaPool);} return _rate; } function viewAdditionalRewardOf(address _address) public view returns(uint256) { // rewards generated since last Event require(poolMetrics.rewards > 0, "No Rewards in the Pool"); // user weighted average share of Pool since lastEvent uint256 _userRateOnPeriod = userRateOnPeriod(_address); //can drop if pool size increases within period -> slows rewards generation // Pool Yield Rate uint256 _period = currentTime().sub( SafeMath.max(userMetrics[_address].lastEvent, poolMetrics.startTime) ); // time elapsed since last reward or pool started (if never taken rewards) // Calculate reward uint256 _reward = viewTrancheReward(_period).mul(_userRateOnPeriod).div(1e18); //user rate on pool rewards' tranche return _reward; } function lockRewardOf(address _address) public returns(uint256) { uint256 _additional = viewAdditionalRewardOf(_address); //stakeShare(sinceLastEvent) * poolRewards(sinceLastEvent) userMetrics[_address].rewardAccrued = userMetrics[_address].rewardAccrued.add(_additional); //snapshot rewards. pointsSnapshot(_address); //updates lastEvent and points return userMetrics[_address].rewardAccrued; } function takeRewards() public poolStarted antiSpam(1) { //1 blocks between rewards require(poolMetrics.rewards > 0, "No Rewards in the Pool"); uint256 _reward = lockRewardOf(msg.sender); //returns already accrued + additional (also resets time counters) userMetrics[msg.sender].rewardsPaid = _reward; // update user paid rewards userMetrics[msg.sender].rewardAccrued = 0; //flush previously accrued rewards. poolMetrics.rewards = poolMetrics.rewards.sub(_reward); // update pool rewards IERC20(poolMetrics.rewardToken).transfer(msg.sender, _reward); // transfer pointsSnapshot(msg.sender); //updates lastEvent //lockRewardOf(msg.sender); emit RewardTaken(msg.sender, _reward, "Rewards Sent"); } //==staking & unstaking modifier antiWhale(address _address) { require(myStakeShare(_address) < 20000, "User stake% share too high. Leave some for the smaller guys ;-)"); //max 20% _; } // avoids stakes being deposited once a user reached 20%. // Simplistic implementation as if we calculate "futureStake" value very 1st stakers will not be able to deposit. function stake(uint256 _amount) public poolLive antiSpam(1) antiWhale(msg.sender){ require(_amount > 0, "Cannot stake 0"); //initialize userMetrics[msg.sender].rewardAccrued = lockRewardOf(msg.sender); //Locks previous eligible rewards based on lastRewardEvent and lastStakingEvent pointsSnapshot(msg.sender); //receive staked uint256 _balanceNow = IERC20(address(poolMetrics.stakedToken)).balanceOf(address(this)); IERC20(poolMetrics.stakedToken).transferFrom(msg.sender, address(this), _amount); //will require allowance uint256 amount = IERC20(address(poolMetrics.stakedToken)).balanceOf(address(this)).sub(_balanceNow); //actually received //update pool and user based on stake and fee uint256 _fee = amount.mul(poolMetrics.stakingFee).div(1000); amount = amount.sub(_fee); if(poolMetrics.stakedToken == poolMetrics.rewardToken){poolMetrics.rewards = poolMetrics.rewards.add(_fee);} poolMetrics.staked = poolMetrics.staked.add(amount); userMetrics[msg.sender].stake = userMetrics[msg.sender].stake.add(amount); //finalize pointsSnapshot(msg.sender); //updates lastEvent emit userStaking(msg.sender, amount, "Staking... ... "); } function unStake(uint256 _amount) public poolStarted antiSpam(1) { require(_amount > 0, "Cannot withdraw 0"); require(_amount <= userMetrics[msg.sender].stake, "Cannot withdraw more than stake"); //initialize userMetrics[msg.sender].rewardAccrued = lockRewardOf(msg.sender); //snapshot of previous eligible rewards based on lastStakingEvent pointsSnapshot(msg.sender); // update metrics userMetrics[msg.sender].stake = userMetrics[msg.sender].stake.sub(_amount); poolMetrics.staked = poolMetrics.staked.sub(_amount); // transfer _amount. Put at the end of the function to avoid reentrancy. IERC20(poolMetrics.stakedToken).transfer(msg.sender, _amount); //finalize emit userWithdrawal(msg.sender, _amount, "Widhtdrawal"); } function myStake(address _address) public view returns(uint256) { return userMetrics[_address].stake; } function myStakeShare(address _address) public view returns(uint256) { if(poolMetrics.staked == 0){return 0;} else { return (userMetrics[_address].stake).mul(100000).div(poolMetrics.staked);} } //base 100,000 function myPointsShare(address _address) public view returns(uint256) { //weighted average of your stake over time vs the pool return viewPointsOf(_address).mul(100000).div(viewPoolPoints()); } //base 100,000. Drops when taking rewards.=> Refills after (favors strong hands) function myRewards(address _address) public view returns(uint256) { //delayed start obfuscation (avoids disturbances in the force...) if(block.timestamp <= poolMetrics.startTime || poolMetrics.rewards == 0){return 0;} else { return userMetrics[_address].rewardAccrued.add(viewAdditionalRewardOf(_address));} //previousLock + time based extra } //== OPERATOR FUNCTIONS == address public poolOperator; function setPoolOperator(address _address) public onlyPoolOperator { poolOperator = _address; } modifier onlyPoolOperator() { require(msg.sender == poolOperator, "msg.sender is not allowed to operate Pool"); _; } bool public FullRewards; uint256 totalRewards; function setFullRewards(bool _bool) public onlyPoolOperator { FullRewards = _bool; } function loadRewards(uint256 _amount, uint256 _preStake) public onlyPoolOperator { //load tokens in the rewards pool. uint256 _balanceNow = IERC20(address(poolMetrics.rewardToken)).balanceOf(address(this)); IERC20(address(poolMetrics.rewardToken)).transferFrom( msg.sender, address(this), _amount); uint256 amount = IERC20(address(poolMetrics.rewardToken)).balanceOf(address(this)).sub(_balanceNow); //actually received if(poolMetrics.rewards == 0){ // initialization poolMetrics.staked = SafeMath.add(poolMetrics.staked,_preStake);} // creates baseline for pool. Avoids massive movements on rewards poolMetrics.rewards = SafeMath.add(poolMetrics.rewards,amount); totalRewards = totalRewards.add(_amount); } function setFee(uint256 _fee) public onlyPoolOperator { poolMetrics.stakingFee = _fee; } function flushPool(address _recipient, address _ERC20address) external onlyPoolOperator poolEnded { // poolEnded { // poolEnded returns(bool) { uint256 _amount = IERC20(_ERC20address).balanceOf(address(this)); IERC20(_ERC20address).transfer(_recipient, _amount); //use of the _ERC20 traditional transfer //return true; } //get tokens sent by error to contract function killPool() public onlyPoolOperator poolEnded returns(bool) { selfdestruct(msg.sender); } //frees space on the ETH chain }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stakedToken","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_feeBase1000","type":"uint256"},{"internalType":"uint256","name":"_durationHours","type":"uint256"},{"internalType":"uint256","name":"_delayStartHours","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"PoolInitalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"RewardTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"userStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"userWithdrawal","type":"event"},{"inputs":[],"name":"FullRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_ERC20address","type":"address"}],"name":"flushPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"killPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_preStake","type":"uint256"}],"name":"loadRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"lockRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"myPointsShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"myRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"myStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"myStakeShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"pointsSnapshot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolMetrics","outputs":[{"internalType":"address","name":"stakedToken","type":"address"},{"internalType":"uint256","name":"staked","type":"uint256"},{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"stakingPoints","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"closingTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"lastEvent","type":"uint256"},{"internalType":"uint256","name":"ratePerToken","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setFullRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setPoolOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"takeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userMetrics","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"stakingPoints","type":"uint256"},{"internalType":"uint256","name":"poolPoints","type":"uint256"},{"internalType":"uint256","name":"lastEvent","type":"uint256"},{"internalType":"uint256","name":"rewardAccrued","type":"uint256"},{"internalType":"uint256","name":"rewardsPaid","type":"uint256"},{"internalType":"uint256","name":"lastTxBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"userRateOnPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"viewAdditionalRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"viewPointsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewPoolPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620034a9380380620034a9833981810160405260a08110156200003757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846000800160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826000600201819055506200015e610e1083620001d560201b62002d621790919060201c565b60006008018190555062000183610e1082620001d560201b62002d621790919060201c565b42016000600601819055506000600801546000600601540160006007018190555060016000600301819055506001600c60146101000a81548160ff021916908315150217905550505050505062000260565b600080831415620001ea57600090506200025a565b6000828402905082848281620001fc57fe5b041462000255576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620034886021913960400191505060405180910390fd5b809150505b92915050565b61321880620002706000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80637adaa21a116100c3578063beaa369a1161007c578063beaa369a1461061d578063cf604bc914610675578063d18e81b3146106bf578063d745d3cf146106dd578063fcecc4df1461070d578063ff939f96146107c957610158565b80637adaa21a14610499578063918771cd146104a35780639e05da6a146104fb578063a694fc3a14610553578063ad12101d14610581578063bb2c2556146105b957610158565b80635c6187aa116101155780635c6187aa146103835780635d3eea91146103a157806361546cc0146103cf578063682c93c01461042757806369fe0e2d146104495780637a39b8d81461047757610158565b80631f227e481461015d57806320b9588c146101df5780632612798d146102375780632d2d10081461028f57806335ad1e03146102e757806342819fc41461032b575b600080fd5b61019f6004803603602081101561017357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610825565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610221600480360360208110156101f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610867565b6040518082815260200191505060405180910390f35b6102796004803603602081101561024d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108f3565b6040518082815260200191505060405180910390f35b6102d1600480360360208110156102a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a2e565b6040518082815260200191505060405180910390f35b610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610abd565b005b61036d6004803603602081101561034157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ba7565b6040518082815260200191505060405180910390f35b61038b610cc6565b6040518082815260200191505060405180910390f35b6103cd600480360360208110156103b757600080fd5b8101908080359060200190929190505050610d38565b005b610411600480360360208110156103e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061125d565b6040518082815260200191505060405180910390f35b61042f61129d565b604051808215151515815260200191505060405180910390f35b6104756004803603602081101561045f57600080fd5b81019080803590602001909291905050506112b0565b005b61047f611363565b604051808215151515815260200191505060405180910390f35b6104a161149e565b005b6104e5600480360360208110156104b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118c2565b6040518082815260200191505060405180910390f35b61053d6004803603602081101561051157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119c0565b6040518082815260200191505060405180910390f35b61057f6004803603602081101561056957600080fd5b8101908080359060200190929190505050611b08565b005b6105b76004803603604081101561059757600080fd5b81019080803590602001909291908035906020019092919050505061234b565b005b61061b600480360360408110156105cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061273f565b005b61065f6004803603602081101561063357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129e3565b6040518082815260200191505060405180910390f35b61067d612a2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c7612a55565b6040518082815260200191505060405180910390f35b61070b600480360360208110156106f357600080fd5b81019080803515159060200190929190505050612a6b565b005b610715612b2e565b604051808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390f35b61080b600480360360208110156107df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bb6565b604051808215151515815260200191505060405180910390f35b600b6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b6000806006015442111580610880575060008060050154145b1561088e57600090506108ee565b6108eb61089a836108f3565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154612bd490919063ffffffff16565b90505b919050565b6000806000600501541161096f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f205265776172647320696e2074686520506f6f6c0000000000000000000081525060200191505060405180910390fd5b600061097a83610ba7565b905060006109e86109d2600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600060060154612c5c565b6109da612a55565b612c7690919063ffffffff16565b90506000610a21670de0b6b3a7640000610a1385610a0586612cc0565b612d6290919063ffffffff16565b612de890919063ffffffff16565b9050809350505050919050565b6000806000600101541415610a465760009050610ab8565b610ab5600060010154610aa7620186a0600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612d6290919063ffffffff16565b612de890919063ffffffff16565b90505b919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610c07600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610bf9856119c0565b612c7690919063ffffffff16565b90506000610c67600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610c59610cc6565b612c7690919063ffffffff16565b905060008090506000831480610c7d5750600082145b15610c8b5760009050610cbb565b610cb882610caa670de0b6b3a764000086612d6290919063ffffffff16565b612de890919063ffffffff16565b90505b809350505050919050565b60008060006003015490506000806001015490506000610d09610cf3600060090154600060060154612c5c565b610cfb612a55565b612c7690919063ffffffff16565b9050610d30610d218284612d6290919063ffffffff16565b84612bd490919063ffffffff16565b935050505090565b600060060154421015610db3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b6001610e0a81600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154612bd490919063ffffffff16565b4311610e61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131826022913960400191505060405180910390fd5b43600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018190555060008211610f1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154821115610fd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74207769746864726177206d6f7265207468616e207374616b650081525060200191505060405180910390fd5b610fdf336118c2565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061102e33612bb6565b5061108482600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612c7690919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506110e282600060010154612c7690919063ffffffff16565b6000600101819055506000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561119657600080fd5b505af11580156111aa573d6000803e3d6000fd5b505050506040513d60208110156111c057600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff167ff81475acca41b6158ffa94b90c0570165f1052684e7df9ab735e66ca1f57435f8360405180828152602001806020018281038252600b8152602001807f576964687464726177616c0000000000000000000000000000000000000000008152506020019250505060405180910390a25050565b600061129661126a610cc6565b611288620186a061127a866119c0565b612d6290919063ffffffff16565b612de890919063ffffffff16565b9050919050565b600c60149054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b8060006002018190555050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b6000600701544211611485576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f6f6c206e6f7420656e64656420596574000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16ff5b600060060154421015611519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b600161157081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154612bd490919063ffffffff16565b43116115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131826022913960400191505060405180910390fd5b43600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506000806005015411611688576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f205265776172647320696e2074686520506f6f6c0000000000000000000081525060200191505060405180910390fd5b6000611693336118c2565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061173c81600060050154612c7690919063ffffffff16565b600060050181905550600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b505050506040513d602081101561181b57600080fd5b81019080805190602001909291905050505061183633612bb6565b503373ffffffffffffffffffffffffffffffffffffffff167f2fc029baad553950fe705b54adac427ede59ec14428d842ec4f83ee1a090e8fb8260405180828152602001806020018281038252600c8152602001807f526577617264732053656e7400000000000000000000000000000000000000008152506020019250505060405180910390a25050565b6000806118ce836108f3565b905061192581600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154612bd490919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061197483612bb6565b50600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154915050919050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000611abb611aa5600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600060060154612c5c565b611aad612a55565b612c7690919063ffffffff16565b90506000611ae4611ad58385612d6290919063ffffffff16565b85612bd490919063ffffffff16565b9050600060030154811115611afc5760006003015490505b80945050505050919050565b600060060154421015611b83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b600060070154421115611bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f506f6f6c20636c6f73656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001611c5581600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154612bd490919063ffffffff16565b4311611cac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131826022913960400191505060405180910390fd5b43600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018190555033614e20611d0082610a2e565b10611d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806131a4603f913960400191505060405180910390fd5b60008311611dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b611dd5336118c2565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550611e2433612bb6565b5060008060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d6020811015611ef257600080fd5b810190808051906020019092919050505090506000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611fe457600080fd5b505af1158015611ff8573d6000803e3d6000fd5b505050506040513d602081101561200e57600080fd5b8101908080519060200190929190505050506000612110826000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156120c757600080fd5b505afa1580156120db573d6000803e3d6000fd5b505050506040513d60208110156120f157600080fd5b8101908080519060200190929190505050612c7690919063ffffffff16565b905060006121406103e861213260006002015485612d6290919063ffffffff16565b612de890919063ffffffff16565b90506121558183612c7690919063ffffffff16565b9150600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121f6576121ec81600060050154612bd490919063ffffffff16565b6000600501819055505b61220e82600060010154612bd490919063ffffffff16565b60006001018190555061226c82600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612bd490919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506122bb33612bb6565b503373ffffffffffffffffffffffffffffffffffffffff167f167ca5543be7bdd4d64d74a1255ec46c74aa0b2ad274a73b1a5c910f8d65d26f8360405180828152602001806020018281038252600f8152602001807f5374616b696e672e2e2e202e2e2e2000000000000000000000000000000000008152506020019250505060405180910390a2505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b60008060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561249457600080fd5b505afa1580156124a8573d6000803e3d6000fd5b505050506040513d60208110156124be57600080fd5b81019080805190602001909291905050509050600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156125b157600080fd5b505af11580156125c5573d6000803e3d6000fd5b505050506040513d60208110156125db57600080fd5b81019080805190602001909291905050505060006126de82600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561269557600080fd5b505afa1580156126a9573d6000803e3d6000fd5b505050506040513d60208110156126bf57600080fd5b8101908080519060200190929190505050612c7690919063ffffffff16565b9050600080600501541415612706576126fc60006001015484612bd4565b6000600101819055505b61271560006005015482612bd4565b60006005018190555061273384600d54612bd490919063ffffffff16565b600d8190555050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b600060070154421161285f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f6f6c206e6f7420656e64656420596574000000000000000000000000000081525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128de57600080fd5b505afa1580156128f2573d6000803e3d6000fd5b505050506040513d602081101561290857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129a257600080fd5b505af11580156129b6573d6000803e3d6000fd5b505050506040513d60208110156129cc57600080fd5b810190808051906020019092919050505050505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612a6642600060070154612e32565b905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b80600c60146101000a81548160ff02191690831515021790555050565b60008060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600501549080600601549080600701549080600801549080600901549080600a015490508b565b6000612bc182612e4b565b50612bca612f82565b5060019050919050565b600080828401905083811015612c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600081831015612c6c5781612c6e565b825b905092915050565b6000612cb883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fb1565b905092915050565b600080600d54905060001515600c60149054906101000a900460ff1615151415612cf657612cf360006001015482612e32565b90505b6000612d2a600060080154612d1c670de0b6b3a764000087612d6290919063ffffffff16565b612de890919063ffffffff16565b9050612d59670de0b6b3a7640000612d4b8385612d6290919063ffffffff16565b612de890919063ffffffff16565b92505050919050565b600080831415612d755760009050612de2565b6000828402905082848281612d8657fe5b0414612ddd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131616021913960400191505060405180910390fd5b809150505b92915050565b6000612e2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613071565b905092915050565b6000818310612e415781612e43565b825b905092915050565b6000612e55610cc6565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550612ea4826119c0565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550612ef2612a55565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6000612f8c610cc6565b600060030181905550612f9d612a55565b600060090181905550600060030154905090565b600083831115829061305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613023578082015181840152602081019050613008565b50505050905090810190601f1680156130505780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808311829061311d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130e25780820151818401526020810190506130c7565b50505050905090810190601f16801561310f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161312957fe5b04905080915050939250505056fe6d73672e73656e646572206973206e6f7420616c6c6f77656420746f206f70657261746520506f6f6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7757616974205820424c4f434b53206265747765656e205472616e73616374696f6e7355736572207374616b652520736861726520746f6f20686967682e204c6561766520736f6d6520666f722074686520736d616c6c65722067757973203b2d29a264697066735822122054e10d7ee9a5290993687d13cd1c792a41536866343c7a048650a141d01ce83864736f6c63430006000033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000b6ee603933e024d8d53dde3faa0bf98fe2a3d6f1000000000000000000000000b6ee603933e024d8d53dde3faa0bf98fe2a3d6f1000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80637adaa21a116100c3578063beaa369a1161007c578063beaa369a1461061d578063cf604bc914610675578063d18e81b3146106bf578063d745d3cf146106dd578063fcecc4df1461070d578063ff939f96146107c957610158565b80637adaa21a14610499578063918771cd146104a35780639e05da6a146104fb578063a694fc3a14610553578063ad12101d14610581578063bb2c2556146105b957610158565b80635c6187aa116101155780635c6187aa146103835780635d3eea91146103a157806361546cc0146103cf578063682c93c01461042757806369fe0e2d146104495780637a39b8d81461047757610158565b80631f227e481461015d57806320b9588c146101df5780632612798d146102375780632d2d10081461028f57806335ad1e03146102e757806342819fc41461032b575b600080fd5b61019f6004803603602081101561017357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610825565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610221600480360360208110156101f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610867565b6040518082815260200191505060405180910390f35b6102796004803603602081101561024d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108f3565b6040518082815260200191505060405180910390f35b6102d1600480360360208110156102a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a2e565b6040518082815260200191505060405180910390f35b610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610abd565b005b61036d6004803603602081101561034157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ba7565b6040518082815260200191505060405180910390f35b61038b610cc6565b6040518082815260200191505060405180910390f35b6103cd600480360360208110156103b757600080fd5b8101908080359060200190929190505050610d38565b005b610411600480360360208110156103e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061125d565b6040518082815260200191505060405180910390f35b61042f61129d565b604051808215151515815260200191505060405180910390f35b6104756004803603602081101561045f57600080fd5b81019080803590602001909291905050506112b0565b005b61047f611363565b604051808215151515815260200191505060405180910390f35b6104a161149e565b005b6104e5600480360360208110156104b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118c2565b6040518082815260200191505060405180910390f35b61053d6004803603602081101561051157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119c0565b6040518082815260200191505060405180910390f35b61057f6004803603602081101561056957600080fd5b8101908080359060200190929190505050611b08565b005b6105b76004803603604081101561059757600080fd5b81019080803590602001909291908035906020019092919050505061234b565b005b61061b600480360360408110156105cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061273f565b005b61065f6004803603602081101561063357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129e3565b6040518082815260200191505060405180910390f35b61067d612a2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c7612a55565b6040518082815260200191505060405180910390f35b61070b600480360360208110156106f357600080fd5b81019080803515159060200190929190505050612a6b565b005b610715612b2e565b604051808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a81526020018981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390f35b61080b600480360360208110156107df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bb6565b604051808215151515815260200191505060405180910390f35b600b6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b6000806006015442111580610880575060008060050154145b1561088e57600090506108ee565b6108eb61089a836108f3565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154612bd490919063ffffffff16565b90505b919050565b6000806000600501541161096f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f205265776172647320696e2074686520506f6f6c0000000000000000000081525060200191505060405180910390fd5b600061097a83610ba7565b905060006109e86109d2600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600060060154612c5c565b6109da612a55565b612c7690919063ffffffff16565b90506000610a21670de0b6b3a7640000610a1385610a0586612cc0565b612d6290919063ffffffff16565b612de890919063ffffffff16565b9050809350505050919050565b6000806000600101541415610a465760009050610ab8565b610ab5600060010154610aa7620186a0600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612d6290919063ffffffff16565b612de890919063ffffffff16565b90505b919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610c07600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610bf9856119c0565b612c7690919063ffffffff16565b90506000610c67600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610c59610cc6565b612c7690919063ffffffff16565b905060008090506000831480610c7d5750600082145b15610c8b5760009050610cbb565b610cb882610caa670de0b6b3a764000086612d6290919063ffffffff16565b612de890919063ffffffff16565b90505b809350505050919050565b60008060006003015490506000806001015490506000610d09610cf3600060090154600060060154612c5c565b610cfb612a55565b612c7690919063ffffffff16565b9050610d30610d218284612d6290919063ffffffff16565b84612bd490919063ffffffff16565b935050505090565b600060060154421015610db3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b6001610e0a81600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154612bd490919063ffffffff16565b4311610e61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131826022913960400191505060405180910390fd5b43600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018190555060008211610f1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154821115610fd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74207769746864726177206d6f7265207468616e207374616b650081525060200191505060405180910390fd5b610fdf336118c2565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061102e33612bb6565b5061108482600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612c7690919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506110e282600060010154612c7690919063ffffffff16565b6000600101819055506000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561119657600080fd5b505af11580156111aa573d6000803e3d6000fd5b505050506040513d60208110156111c057600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff167ff81475acca41b6158ffa94b90c0570165f1052684e7df9ab735e66ca1f57435f8360405180828152602001806020018281038252600b8152602001807f576964687464726177616c0000000000000000000000000000000000000000008152506020019250505060405180910390a25050565b600061129661126a610cc6565b611288620186a061127a866119c0565b612d6290919063ffffffff16565b612de890919063ffffffff16565b9050919050565b600c60149054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b8060006002018190555050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b6000600701544211611485576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f6f6c206e6f7420656e64656420596574000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16ff5b600060060154421015611519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b600161157081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154612bd490919063ffffffff16565b43116115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131826022913960400191505060405180910390fd5b43600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506000806005015411611688576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f205265776172647320696e2074686520506f6f6c0000000000000000000081525060200191505060405180910390fd5b6000611693336118c2565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061173c81600060050154612c7690919063ffffffff16565b600060050181905550600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b505050506040513d602081101561181b57600080fd5b81019080805190602001909291905050505061183633612bb6565b503373ffffffffffffffffffffffffffffffffffffffff167f2fc029baad553950fe705b54adac427ede59ec14428d842ec4f83ee1a090e8fb8260405180828152602001806020018281038252600c8152602001807f526577617264732053656e7400000000000000000000000000000000000000008152506020019250505060405180910390a25050565b6000806118ce836108f3565b905061192581600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154612bd490919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061197483612bb6565b50600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154915050919050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000611abb611aa5600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600060060154612c5c565b611aad612a55565b612c7690919063ffffffff16565b90506000611ae4611ad58385612d6290919063ffffffff16565b85612bd490919063ffffffff16565b9050600060030154811115611afc5760006003015490505b80945050505050919050565b600060060154421015611b83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b600060070154421115611bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f506f6f6c20636c6f73656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001611c5581600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154612bd490919063ffffffff16565b4311611cac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131826022913960400191505060405180910390fd5b43600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018190555033614e20611d0082610a2e565b10611d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806131a4603f913960400191505060405180910390fd5b60008311611dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b611dd5336118c2565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550611e2433612bb6565b5060008060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d6020811015611ef257600080fd5b810190808051906020019092919050505090506000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611fe457600080fd5b505af1158015611ff8573d6000803e3d6000fd5b505050506040513d602081101561200e57600080fd5b8101908080519060200190929190505050506000612110826000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156120c757600080fd5b505afa1580156120db573d6000803e3d6000fd5b505050506040513d60208110156120f157600080fd5b8101908080519060200190929190505050612c7690919063ffffffff16565b905060006121406103e861213260006002015485612d6290919063ffffffff16565b612de890919063ffffffff16565b90506121558183612c7690919063ffffffff16565b9150600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121f6576121ec81600060050154612bd490919063ffffffff16565b6000600501819055505b61220e82600060010154612bd490919063ffffffff16565b60006001018190555061226c82600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612bd490919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506122bb33612bb6565b503373ffffffffffffffffffffffffffffffffffffffff167f167ca5543be7bdd4d64d74a1255ec46c74aa0b2ad274a73b1a5c910f8d65d26f8360405180828152602001806020018281038252600f8152602001807f5374616b696e672e2e2e202e2e2e2000000000000000000000000000000000008152506020019250505060405180910390a2505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b60008060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561249457600080fd5b505afa1580156124a8573d6000803e3d6000fd5b505050506040513d60208110156124be57600080fd5b81019080805190602001909291905050509050600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156125b157600080fd5b505af11580156125c5573d6000803e3d6000fd5b505050506040513d60208110156125db57600080fd5b81019080805190602001909291905050505060006126de82600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561269557600080fd5b505afa1580156126a9573d6000803e3d6000fd5b505050506040513d60208110156126bf57600080fd5b8101908080519060200190929190505050612c7690919063ffffffff16565b9050600080600501541415612706576126fc60006001015484612bd4565b6000600101819055505b61271560006005015482612bd4565b60006005018190555061273384600d54612bd490919063ffffffff16565b600d8190555050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b600060070154421161285f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f6f6c206e6f7420656e64656420596574000000000000000000000000000081525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128de57600080fd5b505afa1580156128f2573d6000803e3d6000fd5b505050506040513d602081101561290857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129a257600080fd5b505af11580156129b6573d6000803e3d6000fd5b505050506040513d60208110156129cc57600080fd5b810190808051906020019092919050505050505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612a6642600060070154612e32565b905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131386029913960400191505060405180910390fd5b80600c60146101000a81548160ff02191690831515021790555050565b60008060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600501549080600601549080600701549080600801549080600901549080600a015490508b565b6000612bc182612e4b565b50612bca612f82565b5060019050919050565b600080828401905083811015612c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600081831015612c6c5781612c6e565b825b905092915050565b6000612cb883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fb1565b905092915050565b600080600d54905060001515600c60149054906101000a900460ff1615151415612cf657612cf360006001015482612e32565b90505b6000612d2a600060080154612d1c670de0b6b3a764000087612d6290919063ffffffff16565b612de890919063ffffffff16565b9050612d59670de0b6b3a7640000612d4b8385612d6290919063ffffffff16565b612de890919063ffffffff16565b92505050919050565b600080831415612d755760009050612de2565b6000828402905082848281612d8657fe5b0414612ddd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131616021913960400191505060405180910390fd5b809150505b92915050565b6000612e2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613071565b905092915050565b6000818310612e415781612e43565b825b905092915050565b6000612e55610cc6565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550612ea4826119c0565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550612ef2612a55565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6000612f8c610cc6565b600060030181905550612f9d612a55565b600060090181905550600060030154905090565b600083831115829061305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613023578082015181840152602081019050613008565b50505050905090810190601f1680156130505780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808311829061311d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130e25780820151818401526020810190506130c7565b50505050905090810190601f16801561310f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161312957fe5b04905080915050939250505056fe6d73672e73656e646572206973206e6f7420616c6c6f77656420746f206f70657261746520506f6f6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7757616974205820424c4f434b53206265747765656e205472616e73616374696f6e7355736572207374616b652520736861726520746f6f20686967682e204c6561766520736f6d6520666f722074686520736d616c6c65722067757973203b2d29a264697066735822122054e10d7ee9a5290993687d13cd1c792a41536866343c7a048650a141d01ce83864736f6c63430006000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b6ee603933e024d8d53dde3faa0bf98fe2a3d6f1000000000000000000000000b6ee603933e024d8d53dde3faa0bf98fe2a3d6f1000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _stakedToken (address): 0xB6eE603933E024d8d53dDE3faa0bf98fE2a3d6f1
Arg [1] : _rewardToken (address): 0xB6eE603933E024d8d53dDE3faa0bf98fE2a3d6f1
Arg [2] : _feeBase1000 (uint256): 10
Arg [3] : _durationHours (uint256): 2500
Arg [4] : _delayStartHours (uint256): 0
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000b6ee603933e024d8d53dde3faa0bf98fe2a3d6f1
Arg [1] : 000000000000000000000000b6ee603933e024d8d53dde3faa0bf98fe2a3d6f1
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [3] : 00000000000000000000000000000000000000000000000000000000000009c4
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
14997:15043:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14997:15043:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16329:50;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16329:50:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27618:375;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27618:375:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22082:896;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22082:896:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27077:225;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27077:225:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28071:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28071:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;21447:623;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21447:623:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18474:669;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26093:853;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26093:853:0;;;;;;;;;;;;;;;;;:::i;:::-;;27323:208;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27323:208:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28337:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29358:102;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29358:102:0;;;;;;;;;;;;;;;;;:::i;:::-;;29885:119;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23450:877;;;:::i;:::-;;22990:446;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22990:446:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19439:789;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19439:789:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24746:1334;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24746:1334:0;;;;;;;;;;;;;;;;;:::i;:::-;;28504:844;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28504:844:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29472:368;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29472:368:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26954:117;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26954:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28031:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18255:153;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28400:98;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28400:98:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;15783:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20620:144;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20620:144:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16329:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27618:375::-;27675:7;27792:11;:21;;;27773:15;:40;;:68;;;;27840:1;27817:11;:19;;;:24;27773:68;27770:182;;;27850:1;27843:8;;;;27770:182;27877:73;27917:32;27940:8;27917:22;:32::i;:::-;27877:11;:21;27889:8;27877:21;;;;;;;;;;;;;;;:35;;;:39;;:73;;;;:::i;:::-;27870:80;;27618:375;;;;:::o;22082:896::-;22152:7;22240:1;22218:11;:19;;;:23;22210:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22357:25;22385:26;22402:8;22385:16;:26::i;:::-;22357:54;;22537:15;22555:149;22603:68;22616:11;:21;22628:8;22616:21;;;;;;;;;;;;;;;:31;;;22649:11;:21;;;22603:12;:68::i;:::-;22555:13;:11;:13::i;:::-;:17;;:149;;;;:::i;:::-;22537:167;;22828:15;22846:59;22900:4;22846:49;22877:17;22846:26;22864:7;22846:17;:26::i;:::-;:30;;:49;;;;:::i;:::-;:53;;:59;;;;:::i;:::-;22828:77;;22963:7;22956:14;;;;;22082:896;;;:::o;27077:225::-;27137:7;27182:1;27160:11;:18;;;:23;27157:138;;;27192:1;27185:8;;;;27157:138;27228:65;27274:11;:18;;;27228:41;27262:6;27229:11;:21;27241:8;27229:21;;;;;;;;;;;;;;;:27;;;27228:33;;:41;;;;:::i;:::-;:45;;:65;;;;:::i;:::-;27221:72;;27077:225;;;;:::o;28071:109::-;28247:12;;;;;;;;;;;28233:26;;:10;:26;;;28225:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28164:8:::1;28149:12;;:23;;;;;;;;;;;;;;;;;;28071:109:::0;:::o;21447:623::-;21512:7;21611:18;21632:63;21659:11;:21;21671:8;21659:21;;;;;;;;;;;;;;;:35;;;21632:22;21645:8;21632:12;:22::i;:::-;:26;;:63;;;;:::i;:::-;21611:84;;21742:18;21763:54;21784:11;:21;21796:8;21784:21;;;;;;;;;;;;;;;:32;;;21763:16;:14;:16::i;:::-;:20;;:54;;;;:::i;:::-;21742:75;;21878:13;21894:1;21878:17;;21923:1;21909:10;:15;:34;;;;21942:1;21928:10;:15;21909:34;21906:124;;;21954:1;21946:9;;21906:124;;;21992:36;22017:10;21992:20;22007:4;21992:10;:14;;:20;;;;:::i;:::-;:24;;:36;;;;:::i;:::-;21984:44;;21906:124;22047:5;22040:12;;;;;21447:623;;;:::o;18474:669::-;18520:7;18544:23;18570:11;:25;;;18544:51;;18642:22;18667:11;:18;;;18642:43;;18753:17;18773:154;18817:58;18830:11;:21;;;18853:11;:21;;;18817:12;:58::i;:::-;18773:13;:11;:13::i;:::-;:17;;:154;;;;:::i;:::-;18753:174;;19051:50;19071:29;19090:9;19071:14;:18;;:29;;;;:::i;:::-;19051:15;:19;;:50;;;;:::i;:::-;19043:58;;;;;18474:669;:::o;26093:853::-;17729:11;:21;;;17710:15;:40;;17702:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26155:1:::1;18052:48;18092:7;18052:11;:23;18064:10;18052:23;;;;;;;;;;;;;;;:35;;;:39;;:48;;;;:::i;:::-;18037:12;:63;18029:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18188:12;18150:11;:23;18162:10;18150:23;;;;;;;;;;;;;;;:35;;:50;;;;26188:1:::2;26178:7;:11;26170:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;26241:11;:23;26253:10;26241:23;;;;;;;;;;;;;;;:29;;;26230:7;:40;;26222:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;26381:24;26394:10;26381:12;:24::i;:::-;26341:11;:23;26353:10;26341:23;;;;;;;;;;;;;;;:37;;:64;;;;26483:26;26498:10;26483:14;:26::i;:::-;;26581:42;26615:7;26581:11;:23;26593:10;26581:23;;;;;;;;;;;;;;;:29;;;:33;;:42;;;;:::i;:::-;26549:11;:23;26561:10;26549:23;;;;;;;;;;;;;;;:29;;:74;;;;26655:31;26678:7;26655:11;:18;;;:22;;:31;;;;:::i;:::-;26634:11;:18;;:52;;;;26788:11;:23:::0;::::2;;;;;;;;;;;26781:40;;;26822:10;26834:7;26781:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::2;5:2;26781:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;26781:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;26781:61:0;;;;;;;;;;;;;;;;;26903:10;26888:50;;;26915:7;26888:50;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;17812:1:::1;26093:853:::0;:::o;27323:208::-;27384:7;27467:56;27506:16;:14;:16::i;:::-;27467:34;27494:6;27467:22;27480:8;27467:12;:22::i;:::-;:26;;:34;;;;:::i;:::-;:38;;:56;;;;:::i;:::-;27460:63;;27323:208;;;:::o;28337:23::-;;;;;;;;;;;;;:::o;29358:102::-;28247:12;;;;;;;;;;;28233:26;;:10;:26;;;28225:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29448:4:::1;29423:11;:22;;:29;;;;29358:102:::0;:::o;29885:119::-;29947:4;28247:12;;;;;;;;;;;28233:26;;:10;:26;;;28225:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17885:11:::1;:23;;;17867:15;:41;17859:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29981:10:::2;29968:24;;;23450:877:::0;17729:11;:21;;;17710:15;:40;;17702:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23501:1:::1;18052:48;18092:7;18052:11;:23;18064:10;18052:23;;;;;;;;;;;;;;;:35;;;:39;;:48;;;;:::i;:::-;18037:12;:63;18029:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18188:12;18150:11;:23;18162:10;18150:23;;;;;;;;;;;;;;;:35;;:50;;;;23572:1:::2;23550:11:::0;:19:::2;;;:23;23542:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;23621:15;23639:24;23652:10;23639:12;:24::i;:::-;23621:42;;23781:7;23743:11;:23;23755:10;23743:23;;;;;;;;;;;;;;;:35;;:45;;;;23879:1;23839:11;:23;23851:10;23839:23;;;;;;;;;;;;;;;:37;;:41;;;;23959:32;23983:7;23959:11;:19;;;:23;;:32;;;;:::i;:::-;23937:11;:19;;:54;;;;24056:11;:23;;;;;;;;;;;;24049:40;;;24090:10;24102:7;24049:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::2;5:2;24049:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;24049:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;24049:61:0;;;;;;;;;;;;;;;;;24148:26;24163:10;24148:14;:26::i;:::-;;24273:10;24261:48;;;24285:7;24261:48;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;18220:1;17812::::1;23450:877::o:0;22990:446::-;23045:7;23065:19;23087:32;23110:8;23087:22;:32::i;:::-;23065:54;;23227:52;23267:11;23227;:21;23239:8;23227:21;;;;;;;;;;;;;;;:35;;;:39;;:52;;;;:::i;:::-;23189:11;:21;23201:8;23189:21;;;;;;;;;;;;;;;:35;;:90;;;;23320:24;23335:8;23320:14;:24::i;:::-;;23393:11;:21;23405:8;23393:21;;;;;;;;;;;;;;;:35;;;23386:42;;;22990:446;;;:::o;19439:789::-;19499:7;19523:23;19549:11;:21;19561:8;19549:21;;;;;;;;;;;;;;;:35;;;19523:61;;19614:22;19639:11;:21;19651:8;19639:21;;;;;;;;;;;;;;;:27;;;19614:52;;19725:17;19745:164;19789:68;19802:11;:21;19814:8;19802:21;;;;;;;;;;;;;;;:31;;;19835:11;:21;;;19789:12;:68::i;:::-;19745:13;:11;:13::i;:::-;:17;;:164;;;;:::i;:::-;19725:184;;20015:15;20033:50;20053:29;20072:9;20053:14;:18;;:29;;;;:::i;:::-;20033:15;:19;;:50;;;;:::i;:::-;20015:68;;20128:11;:25;;;20118:7;:35;20115:77;;;20165:11;:25;;;20155:35;;20115:77;20213:7;20206:14;;;;;;19439:789;;;:::o;24746:1334::-;17467:11;:21;;;17448:15;:40;;17440:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17577:11;:23;;;17558:15;:42;;17550:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24803:1:::1;18052:48;18092:7;18052:11;:23;18064:10;18052:23;;;;;;;;;;;;;;;:35;;;:39;;:48;;;;:::i;:::-;18037:12;:63;18029:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18188:12;18150:11;:23;18162:10;18150:23;;;;;;;;;;;;;;;:35;;:50;;;;24816:10:::2;24447:5;24422:22;24435:8;24422:12;:22::i;:::-;:30;24414:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24856:1:::3;24846:7;:11;24838:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;24959:24;24972:10;24959:12;:24::i;:::-;24919:11;:23;24931:10;24919:23;;;;;;;;;;;;;;;:37;;:64;;;;25074:26;25089:10;25074:14;:26::i;:::-;;25139:19;25176:11:::0;:23:::3;;;;;;;;;;;;25161:50;;;25220:4;25161:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::3;5:2;25161:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;25161:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::3;2:2;25161:65:0;;;;;;;;;;;;;;;;25139:87;;25244:11;:23:::0;::::3;;;;;;;;;;;25237:44;;;25282:10;25302:4;25309:7;25237:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::3;5:2;25237:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;25237:80:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::3;2:2;25237:80:0;;;;;;;;;;;;;;;;;25353:14;25370:82;25440:11;25385;:23:::0;::::3;;;;;;;;;;;25370:50;;;25429:4;25370:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::3;5:2;25370:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;25370:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::3;2:2;25370:65:0;;;;;;;;;;;;;;;;:69;;:82;;;;:::i;:::-;25353:99;;25548:12;25563:44;25602:4;25563:34;25574:11;:22;;;25563:6;:10;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;25548:59;;25627:16;25638:4;25627:6;:10;;:16;;;;:::i;:::-;25618:25;;25694:11;:23;;;;;;;;;;;;25667:50;;:11;:23:::0;::::3;;;;;;;;;;;:50;;;25664:108;;;25741:29;25765:4;25741:11;:19;;;:23;;:29;;;;:::i;:::-;25719:11;:19;;:51;;;;25664:108;25803:30;25826:6;25803:11;:18;;;:22;;:30;;;;:::i;:::-;25782:11;:18;;:51;;;;25876:41;25910:6;25876:11;:23;25888:10;25876:23;;;;;;;;;;;;;;;:29;;;:33;;:41;;;;:::i;:::-;25844:11;:23;25856:10;25844:23;;;;;;;;;;;;;;;:29;;:73;;;;25950:26;25965:10;25950:14;:26::i;:::-;;26024:10;26012:50;;;26036:6;26012:50;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;24541:1;;;18220::::2;17653::::1;24746:1334:::0;:::o;28504:844::-;28247:12;;;;;;;;;;;28233:26;;:10;:26;;;28225:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28641:19:::1;28678:11:::0;:23:::1;;;;;;;;;;;;28663:50;;;28722:4;28663:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;28663:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28663:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;28663:65:0;;;;;;;;;;;;;;;;28641:87;;28754:11;:23;;;;;;;;;;;;28739:53;;;28794:10;28815:4;28823:7;28739:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;28739:92:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28739:92:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;28739:92:0;;;;;;;;;;;;;;;;;28842:14;28859:82;28929:11;28874;:23;;;;;;;;;;;;28859:50;;;28918:4;28859:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;28859:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28859:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;28859:65:0;;;;;;;;;;;;;;;;:69;;:82;;;;:::i;:::-;28842:99;;29010:1;28987:11:::0;:19:::1;;;:24;28984:156;;;29096:42;29109:11;:18;;;29128:9;29096:12;:42::i;:::-;29075:11;:18;;:63;;;;28984:156;29249:40;29262:11;:19;;;29282:6;29249:12;:40::i;:::-;29227:11;:19;;:62;;;;29315:25;29332:7;29315:12;;:16;;:25;;;;:::i;:::-;29300:12;:40;;;;28316:1;;28504:844:::0;;:::o;29472:368::-;28247:12;;;;;;;;;;;28233:26;;:10;:26;;;28225:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17885:11:::1;:23;;;17867:15;:41;17859:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29629:15:::2;29654:13;29647:31;;;29687:4;29647:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::2;5:2;29647:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;29647:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;29647:46:0;;;;;;;;;;;;;;;;29629:64;;29715:13;29708:30;;;29739:10;29751:7;29708:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::2;5:2;29708:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;29708:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;29708:51:0;;;;;;;;;;;;;;;;;17968:1;29472:368:::0;;:::o;26954:117::-;27009:7;27036:11;:21;27048:8;27036:21;;;;;;;;;;;;;;;:27;;;27029:34;;26954:117;;;:::o;28031:27::-;;;;;;;;;;;;;:::o;18255:153::-;18299:7;18326:54;18339:15;18356:11;:23;;;18326:12;:54::i;:::-;18319:61;;18255:153;:::o;28400:98::-;28247:12;;;;;;;;;;;28233:26;;:10;:26;;;28225:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28485:5:::1;28471:11;;:19;;;;;;;;;;;;;;;;;;28400:98:::0;:::o;15783:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20620:144::-;20678:4;20695:22;20708:8;20695:12;:22::i;:::-;;20718:16;:14;:16::i;:::-;;20752:4;20745:11;;20620:144;;;:::o;2067:181::-;2125:7;2145:9;2161:1;2157;:5;2145:17;;2186:1;2181;:6;;2173:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2239:1;2232:8;;;2067:181;;;;:::o;6740:107::-;6798:7;6830:1;6825;:6;;:14;;6838:1;6825:14;;;6834:1;6825:14;6818:21;;6740:107;;;;:::o;2523:136::-;2581:7;2608:43;2612:1;2615;2608:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2601:50;;2523:136;;;;:::o;20789:646::-;20855:7;21009:20;21032:12;;21009:35;;21084:5;21069:20;;:11;;;;;;;;;;;:20;;;21066:89;;;21107:46;21120:11;:18;;;21140:12;21107;:46::i;:::-;21092:61;;21066:89;21278:17;21298:43;21320:11;:20;;;21298:17;21310:4;21298:7;:11;;:17;;;;:::i;:::-;:21;;:43;;;;:::i;:::-;21278:63;;21359:37;21391:4;21359:27;21376:9;21359:12;:16;;:27;;;;:::i;:::-;:31;;:37;;;;:::i;:::-;21352:44;;;;20789:646;;;:::o;3439:471::-;3497:7;3747:1;3742;:6;3738:47;;;3772:1;3765:8;;;;3738:47;3797:9;3813:1;3809;:5;3797:17;;3842:1;3837;3833;:5;;;;;;:10;3825:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3901:1;3894:8;;;3439:471;;;;;:::o;4378:132::-;4436:7;4463:39;4467:1;4470;4463:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4456:46;;4378:132;;;;:::o;6923:106::-;6981:7;7012:1;7008;:5;:13;;7020:1;7008:13;;;7016:1;7008:13;7001:20;;6923:106;;;;:::o;20234:380::-;20292:7;20351:16;:14;:16::i;:::-;20316:11;:21;20328:8;20316:21;;;;;;;;;;;;;;;:32;;:51;;;;20461:22;20474:8;20461:12;:22::i;:::-;20423:11;:21;20435:8;20423:21;;;;;;;;;;;;;;;:35;;:60;;;;20533:13;:11;:13::i;:::-;20499:11;:21;20511:8;20499:21;;;;;;;;;;;;;;;:31;;:47;;;;20571:11;:21;20583:8;20571:21;;;;;;;;;;;;;;;:35;;;20564:42;;20234:380;;;:::o;19149:277::-;19193:7;19270:16;:14;:16::i;:::-;19242:11;:25;;:44;;;;19325:13;:11;:13::i;:::-;19301:11;:21;;:37;;;;19389:11;:25;;;19382:32;;19149:277;:::o;2996:192::-;3082:7;3115:1;3110;:6;;3118:12;3102:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3102:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3142:9;3158:1;3154;:5;3142:17;;3179:1;3172:8;;;2996:192;;;;;:::o;5040:345::-;5126:7;5225:1;5221;:5;5228:12;5213:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5213:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5252:9;5268:1;5264;:5;;;;;;5252:17;;5376:1;5369:8;;;5040:345;;;;;:::o
Swarm Source
ipfs://54e10d7ee9a5290993687d13cd1c792a41536866343c7a048650a141d01ce838
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.