Overview
ETH Balance
2.8806394 ETH
Eth Value
$10,050.74 (@ $3,489.07/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 6,849 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
POOL1_harvest | 18295030 | 440 days ago | IN | 0 ETH | 0.00087151 | ||||
POOL2_unstake | 17962119 | 487 days ago | IN | 0 ETH | 0.00140268 | ||||
POOL2_harvest | 17962114 | 487 days ago | IN | 0 ETH | 0.0015544 | ||||
POOL1_unstake | 17879318 | 499 days ago | IN | 0 ETH | 0.00078742 | ||||
POOL1_unstake | 17879317 | 499 days ago | IN | 0 ETH | 0.00544952 | ||||
POOL1_harvest | 17492720 | 553 days ago | IN | 0 ETH | 0.00223002 | ||||
POOL1_unstake | 15742313 | 798 days ago | IN | 0 ETH | 0.00386449 | ||||
POOL1_unstake | 15236221 | 875 days ago | IN | 0 ETH | 0.00239704 | ||||
Set_GOVERNANCE | 14644207 | 971 days ago | IN | 0 ETH | 0.0005701 | ||||
POOL1_unstake | 14599333 | 978 days ago | IN | 0 ETH | 0.0027363 | ||||
POOL1_harvest | 14452864 | 1001 days ago | IN | 0 ETH | 0.00816433 | ||||
POOL1_harvest | 14452861 | 1001 days ago | IN | 0 ETH | 0.00909715 | ||||
POOL1_harvest | 14452851 | 1001 days ago | IN | 0 ETH | 0.00571996 | ||||
POOL1_unstake | 14428375 | 1005 days ago | IN | 0 ETH | 0.00276895 | ||||
POOL1_harvest | 14424443 | 1006 days ago | IN | 0 ETH | 0.00480378 | ||||
POOL1_harvest | 14421148 | 1006 days ago | IN | 0 ETH | 0.00250248 | ||||
POOL1_unstake | 14171569 | 1045 days ago | IN | 0 ETH | 0.00893289 | ||||
POOL1_unstake | 14104278 | 1055 days ago | IN | 0 ETH | 0.00243 | ||||
POOL1_unstake | 14103419 | 1055 days ago | IN | 0 ETH | 0.0024 | ||||
POOL1_unstake | 14076228 | 1060 days ago | IN | 0 ETH | 0.03612241 | ||||
POOL1_unstake | 14033125 | 1066 days ago | IN | 0 ETH | 0.01731737 | ||||
POOL1_unstake | 14014660 | 1069 days ago | IN | 0 ETH | 0.01621658 | ||||
POOL1_unstake | 13998610 | 1072 days ago | IN | 0 ETH | 0.03704588 | ||||
POOL1_harvest | 13968969 | 1076 days ago | IN | 0 ETH | 0.01445291 | ||||
POOL1_harvest | 13968943 | 1076 days ago | IN | 0 ETH | 0.01937136 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
17962119 | 487 days ago | 0.037 ETH | ||||
11734740 | 1423 days ago | 0.03 ETH | ||||
11712013 | 1427 days ago | 1 ETH | ||||
11711550 | 1427 days ago | 1 ETH | ||||
11711478 | 1427 days ago | 1 ETH | ||||
11709435 | 1427 days ago | 0.001 ETH | ||||
11708017 | 1427 days ago | 35 ETH | ||||
11703911 | 1428 days ago | 4.5 ETH | ||||
11702960 | 1428 days ago | 0.5 ETH | ||||
11699872 | 1429 days ago | 1 ETH | ||||
11697917 | 1429 days ago | 2 ETH | ||||
11697480 | 1429 days ago | 1 ETH | ||||
11695812 | 1429 days ago | 0.21 ETH | ||||
11695652 | 1429 days ago | 0.1 ETH | ||||
11695605 | 1429 days ago | 1.5 ETH | ||||
11695025 | 1429 days ago | 0.5 ETH | ||||
11694670 | 1429 days ago | 14 ETH | ||||
11694252 | 1430 days ago | 0.5 ETH | ||||
11694114 | 1430 days ago | 0.1 ETH | ||||
11693799 | 1430 days ago | 8.5 ETH | ||||
11693758 | 1430 days ago | 201 ETH | ||||
11693689 | 1430 days ago | 0.25 ETH | ||||
11693623 | 1430 days ago | 1 ETH | ||||
11693533 | 1430 days ago | 0.5 ETH | ||||
11692860 | 1430 days ago | 0.4 ETH |
Loading...
Loading
Contract Name:
GFarm
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-15 */ // File: contracts\GFarmTokenInterface.sol // SPDX-License-Identifier: MIT pragma solidity 0.7.5; interface GFarmTokenInterface{ function balanceOf(address account) external view returns (uint256); function transferFrom(address from, address to, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function burn(address from, uint256 amount) external; function mint(address to, uint256 amount) external; } // File: @openzeppelin\contracts\math\SafeMath.sol pragma solidity ^0.7.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. */ 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. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @uniswap\v2-core\contracts\interfaces\IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: contracts\GFarm.sol pragma solidity 0.7.5; contract GFarm { using SafeMath for uint; // VARIABLES & CONSTANTS // 1. Tokens GFarmTokenInterface public token; IUniswapV2Pair public lp; address public nft; // 2. Pool 1 uint public POOL1_MULTIPLIER; // 1e18 uint public POOL1_MULTIPLIER_UPDATED; uint public constant POOL1_MULTIPLIER_UPDATE_EVERY = 45000; // 1 week (blocks) uint public POOL1_lastRewardBlock; uint public POOL1_accTokensPerLP; // 1e18 uint public constant POOL1_REFERRAL_P = 6; // % 2 == 0 uint public constant POOL1_CREDITS_MIN_P = 1; // 3. Pool 2 uint public immutable POOL2_MULTIPLIER; // 1e18 uint public constant POOL2_DURATION = 32000; // 5 days uint public immutable POOL2_END; uint public POOL2_lastRewardBlock; uint public POOL2_accTokensPerETH; // 1e18 // 4. Pool 1 & Pool 2 uint public immutable POOLS_START; uint public constant POOLS_START_DELAY = 1775; uint public constant PRECISION = 1e5; // 5. Useful Uniswap addresses (for TVL & APY) address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IUniswapV2Pair constant ETH_USDC_PAIR = IUniswapV2Pair(0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc); // 6. Governance & dev fund address public GOVERNANCE; address public immutable DEV_FUND; uint constant GOVERNANCE_P = 500000; // PRECISION uint constant DEV_FUND_P = 500000; // PRECISION // 7. Info about each user struct User { uint POOL1_provided; uint POOL1_rewardDebt; address POOL1_referral; uint POOL1_referralReward; uint POOL2_provided; uint POOL2_rewardDebt; uint NFT_CREDITS_amount; uint NFT_CREDITS_lastUpdated; bool NFT_CREDITS_receiving; } mapping(address => User) public users; constructor(address _GOV, address _DEV){ // Distribution = 7500 * (3/4)^(n-1) (n = week) POOL1_MULTIPLIER = uint(7500 * 1e18) / 45000; POOL1_MULTIPLIER_UPDATED = block.number.add(POOLS_START_DELAY); POOL2_MULTIPLIER = POOL1_MULTIPLIER.div(10); POOL2_END = block.number.add(POOLS_START_DELAY) .add(POOL2_DURATION); POOLS_START = block.number.add(POOLS_START_DELAY); GOVERNANCE = _GOV; DEV_FUND = _DEV; } // GOVERNANCE // 0. Modifier modifier onlyGov(){ require(msg.sender == GOVERNANCE); _; } // 1. Update governance address function set_GOVERNANCE(address _gov) external onlyGov{ GOVERNANCE = _gov; } // 2. Set token address function set_TOKEN(address _token) external onlyGov{ require(token == GFarmTokenInterface(0), "Token address already set"); token = GFarmTokenInterface(_token); } // 3. Set lp address function set_LP(address _lp) external onlyGov{ require(lp == IUniswapV2Pair(0), "LP address already set"); lp = IUniswapV2Pair(_lp); } // 4. Set token address function set_NFT(address _nft) external onlyGov{ require(nft == address(0), "NFT address already set"); nft = _nft; } // POOL REWARDS BETWEEN 2 BLOCKS // 1. Pool 1 (1e18) function POOL1_getReward(uint _from, uint _to) private view returns (uint){ uint blocks; if(_from >= POOLS_START && _to >= POOLS_START){ blocks = _to.sub(_from); } return blocks.mul(POOL1_MULTIPLIER); } // 2. Pool 2 (1e18) function POOL2_getReward(uint _from, uint _to) private view returns (uint){ uint blocks; if(_from >= POOLS_START && _to >= POOLS_START){ // Before pool 2 has ended if(_from <= POOL2_END && _to <= POOL2_END){ blocks = _to.sub(_from); // Between before and after pool 2 has ended }else if(_from <= POOL2_END && _to > POOL2_END){ blocks = POOL2_END.sub(_from); // After pool 2 has ended }else if(_from > POOL2_END && _to > POOL2_END){ blocks = 0; } } return blocks.mul(POOL2_MULTIPLIER); } // UPDATE POOL VARIABLES // 1. Pool 1 function POOL1_update() private { uint lpSupply = lp.balanceOf(address(this)); if (POOL1_lastRewardBlock == 0 || lpSupply == 0) { POOL1_lastRewardBlock = block.number; return; } uint reward = POOL1_getReward(POOL1_lastRewardBlock, block.number); token.mint(address(this), reward); token.mint(GOVERNANCE, reward.mul(GOVERNANCE_P).div(100*PRECISION)); token.mint(DEV_FUND, reward.mul(DEV_FUND_P).div(100*PRECISION)); POOL1_accTokensPerLP = POOL1_accTokensPerLP.add( reward.mul(1e18).div(lpSupply) ); POOL1_lastRewardBlock = block.number; if(block.number >= POOL1_MULTIPLIER_UPDATED.add(POOL1_MULTIPLIER_UPDATE_EVERY)){ POOL1_MULTIPLIER = POOL1_MULTIPLIER.mul(3).div(4); POOL1_MULTIPLIER_UPDATED = block.number; } } // 2. Pool 2 function POOL2_update(uint ethJustStaked) private { // ETH balance is updated before the rest of the code uint ethSupply = address(this).balance.sub(ethJustStaked); if (POOL2_lastRewardBlock == 0 || ethSupply == 0) { POOL2_lastRewardBlock = block.number; return; } uint reward = POOL2_getReward(POOL2_lastRewardBlock, block.number); token.mint(address(this), reward); token.mint(GOVERNANCE, reward.mul(GOVERNANCE_P).div(100*PRECISION)); token.mint(DEV_FUND, reward.mul(DEV_FUND_P).div(100*PRECISION)); POOL2_accTokensPerETH = POOL2_accTokensPerETH.add(reward.mul(1e18).div(ethSupply)); POOL2_lastRewardBlock = block.number; } // PENDING REWARD // 1. Pool 1 external (1e18) function POOL1_pendingReward() external view returns(uint){ return _POOL1_pendingReward(users[msg.sender]); } // 2. Pool 1 private (1e18) function _POOL1_pendingReward(User memory u) private view returns(uint){ uint _POOL1_accTokensPerLP = POOL1_accTokensPerLP; uint lpSupply = lp.balanceOf(address(this)); if (block.number > POOL1_lastRewardBlock && lpSupply != 0) { uint pendingReward = POOL1_getReward(POOL1_lastRewardBlock, block.number); _POOL1_accTokensPerLP = _POOL1_accTokensPerLP.add( pendingReward.mul(1e18).div(lpSupply) ); } return u.POOL1_provided.mul(_POOL1_accTokensPerLP).div(1e18) .sub(u.POOL1_rewardDebt); } // 3. Pool 2 external (1e18) function POOL2_pendingReward() external view returns(uint){ return _POOL2_pendingReward(users[msg.sender], 0); } // 4. Pool 2 private (1e18) function _POOL2_pendingReward(User memory u, uint ethJustStaked) private view returns(uint){ uint _POOL2_accTokensPerETH = POOL2_accTokensPerETH; // ETH balance is updated before the rest of the code uint ethSupply = address(this).balance.sub(ethJustStaked); if (block.number > POOL2_lastRewardBlock && ethSupply != 0) { uint pendingReward = POOL2_getReward(POOL2_lastRewardBlock, block.number); _POOL2_accTokensPerETH = _POOL2_accTokensPerETH.add( pendingReward.mul(1e18).div(ethSupply) ); } return u.POOL2_provided.mul(_POOL2_accTokensPerETH).div(1e18) .sub(u.POOL2_rewardDebt); } // HARVEST REWARDS // 1. Pool 1 external function POOL1_harvest() external{ require(block.number >= POOLS_START, "Pool hasn't started yet."); _POOL1_harvest(msg.sender); } // 2. Pool 1 private function _POOL1_harvest(address a) private{ User storage u = users[a]; uint pending = _POOL1_pendingReward(u); POOL1_update(); if(pending > 0){ if(u.POOL1_referral == address(0)){ POOLS_safeTokenTransfer(a, pending); token.burn(a, pending.mul(POOL1_REFERRAL_P).div(100)); }else{ uint referralReward = pending.mul(POOL1_REFERRAL_P.div(2)).div(100); uint userReward = pending.sub(referralReward); POOLS_safeTokenTransfer(a, userReward); POOLS_safeTokenTransfer(u.POOL1_referral, referralReward); User storage referralUser = users[u.POOL1_referral]; referralUser.POOL1_referralReward = referralUser.POOL1_referralReward .add(referralReward); } } u.POOL1_rewardDebt = u.POOL1_provided.mul(POOL1_accTokensPerLP).div(1e18); } // 3. Pool 2 external function POOL2_harvest() external{ require(block.number >= POOLS_START, "Pool hasn't started yet."); _POOL2_harvest(msg.sender, 0); } // 4. Pool 2 private function _POOL2_harvest(address a, uint ethJustStaked) private{ User storage u = users[a]; uint pending = _POOL2_pendingReward(u, ethJustStaked); POOL2_update(ethJustStaked); if(pending > 0){ POOLS_safeTokenTransfer(a, pending); } u.POOL2_rewardDebt = u.POOL2_provided.mul(POOL2_accTokensPerETH).div(1e18); } // STAKE // 1. Pool 1 function POOL1_stake(uint amount, address referral) external{ require(tx.origin == msg.sender, "Contracts not allowed."); require(block.number >= POOLS_START, "Pool hasn't started yet."); require(amount > 0, "Staking 0 lp."); uint lpSupplyBefore = lp.balanceOf(address(this)); _POOL1_harvest(msg.sender); lp.transferFrom(msg.sender, address(this), amount); User storage u = users[msg.sender]; u.POOL1_provided = u.POOL1_provided.add(amount); u.POOL1_rewardDebt = u.POOL1_provided.mul(POOL1_accTokensPerLP).div(1e18); if(!u.NFT_CREDITS_receiving && u.POOL1_provided >= lpSupplyBefore.mul(POOL1_CREDITS_MIN_P).div(100)){ u.NFT_CREDITS_receiving = true; u.NFT_CREDITS_lastUpdated = block.number; } if(u.POOL1_referral == address(0) && referral != address(0) && referral != msg.sender){ u.POOL1_referral = referral; } } // 2. Pool 2 function POOL2_stake() payable external{ require(tx.origin == msg.sender, "Contracts not allowed."); require(block.number >= POOLS_START, "Pool hasn't started yet."); require(block.number <= POOL2_END, "Pool is finished, no more staking."); require(msg.value > 0, "Staking 0 ETH."); _POOL2_harvest(msg.sender, msg.value); User storage u = users[msg.sender]; u.POOL2_provided = u.POOL2_provided.add(msg.value); u.POOL2_rewardDebt = u.POOL2_provided.mul(POOL2_accTokensPerETH).div(1e18); } // UNSTAKE // 1. Pool 1 function POOL1_unstake(uint amount) external{ User storage u = users[msg.sender]; require(amount > 0, "Unstaking 0 lp."); require(u.POOL1_provided >= amount, "Unstaking more than currently staked."); _POOL1_harvest(msg.sender); lp.transfer(msg.sender, amount); u.POOL1_provided = u.POOL1_provided.sub(amount); u.POOL1_rewardDebt = u.POOL1_provided.mul(POOL1_accTokensPerLP).div(1e18); uint lpSupply = lp.balanceOf(address(this)); if(u.NFT_CREDITS_receiving && u.POOL1_provided < lpSupply.mul(POOL1_CREDITS_MIN_P).div(100) || u.NFT_CREDITS_receiving && lpSupply == 0){ u.NFT_CREDITS_amount = NFT_CREDITS_amount(msg.sender); u.NFT_CREDITS_receiving = false; u.NFT_CREDITS_lastUpdated = block.number; } } // 2. Pool 2 function POOL2_unstake(uint amount) external{ User storage u = users[msg.sender]; require(amount > 0, "Unstaking 0 ETH."); require(u.POOL2_provided >= amount, "Unstaking more than currently staked."); _POOL2_harvest(msg.sender, 0); msg.sender.transfer(amount); u.POOL2_provided = u.POOL2_provided.sub(amount); u.POOL2_rewardDebt = u.POOL2_provided.mul(POOL2_accTokensPerETH).div(1e18); } // NFTs // 1. NFT credits of msg.sender function NFT_CREDITS_amount(address a) public view returns(uint){ User memory u = users[a]; if(u.NFT_CREDITS_receiving){ return u.NFT_CREDITS_amount.add(block.number.sub(u.NFT_CREDITS_lastUpdated)); }else{ return u.NFT_CREDITS_amount; } } // 2. Spend NFT credits when claiming an NFT function spendCredits(address a, uint requiredCredits) external{ require(msg.sender == nft, "Can only called by GFarmNFT."); User storage u = users[a]; u.NFT_CREDITS_amount = NFT_CREDITS_amount(a).sub(requiredCredits); u.NFT_CREDITS_lastUpdated = block.number; } // PREVENT ROUNDING ERRORS function POOLS_safeTokenTransfer(address _to, uint _amount) private { uint bal = token.balanceOf(address(this)); if (_amount > bal) { token.transfer(_to, bal); } else { token.transfer(_to, _amount); } } // USEFUL PRICING FUNCTIONS (FOR TVL & APY) // 1. ETH/USD price (PRECISION) function getEthPrice() private view returns(uint){ (uint112 reserves0, uint112 reserves1, ) = ETH_USDC_PAIR.getReserves(); uint reserveUSDC; uint reserveETH; if(WETH == ETH_USDC_PAIR.token0()){ reserveETH = reserves0; reserveUSDC = reserves1; }else{ reserveUSDC = reserves0; reserveETH = reserves1; } // Divide number of USDC by number of ETH // we multiply by 1e12 because USDC only has 6 decimals return reserveUSDC.mul(1e12).mul(PRECISION).div(reserveETH); } // 2. GFARM/ETH price (PRECISION) function getGFarmPriceEth() private view returns(uint){ (uint112 reserves0, uint112 reserves1, ) = lp.getReserves(); uint reserveETH; uint reserveGFARM; if(WETH == lp.token0()){ reserveETH = reserves0; reserveGFARM = reserves1; }else{ reserveGFARM = reserves0; reserveETH = reserves1; } return reserveETH.mul(PRECISION).div(reserveGFARM); } // UI VIEW FUNCTIONS (READ-ONLY) function POOLS_blocksLeftUntilStart() external view returns(uint){ if(block.number > POOLS_START){ return 0; } return POOLS_START.sub(block.number); } function POOL1_getMultiplier() public view returns (uint) { if(block.number < POOLS_START){ return 0; } return POOL1_MULTIPLIER; } function POOL2_getMultiplier() public view returns (uint) { if(block.number < POOLS_START || block.number > POOL2_END){ return 0; } return POOL2_MULTIPLIER; } function POOL1_provided() external view returns(uint){ return users[msg.sender].POOL1_provided; } function POOL2_provided() external view returns(uint){ return users[msg.sender].POOL2_provided; } function POOL1_referralReward() external view returns(uint){ return users[msg.sender].POOL1_referralReward; } function POOL2_blocksLeft() external view returns(uint){ if(block.number > POOL2_END){ return 0; } return POOL2_END.sub(block.number); } function POOL1_referral() external view returns(address){ return users[msg.sender].POOL1_referral; } function POOL1_minLpsNftCredits() external view returns(uint){ return lp.balanceOf(address(this)).mul(POOL1_CREDITS_MIN_P).div(100); } // (PRECISION) function POOL1_tvl() public view returns(uint){ if(lp.totalSupply() == 0){ return 0; } (uint112 reserves0, uint112 reserves1, ) = lp.getReserves(); uint reserveEth; if(WETH == lp.token0()){ reserveEth = reserves0; }else{ reserveEth = reserves1; } uint lpPriceEth = reserveEth.mul(1e5).mul(2).div(lp.totalSupply()); uint lpPriceUsd = lpPriceEth.mul(getEthPrice()).div(1e5); return lp.balanceOf(address(this)).mul(lpPriceUsd).div(1e18); } // (PRECISION) function POOL2_tvl() public view returns(uint){ return address(this).balance.mul(getEthPrice()).div(1e18); } // (PRECISION) function POOLS_tvl() external view returns(uint){ return POOL1_tvl().add(POOL2_tvl()); } // (PRECISION) function POOL1_apy() external view returns(uint){ if(POOL1_tvl() == 0){ return 0; } return POOL1_MULTIPLIER.mul(2336000) .mul(getGFarmPriceEth()).mul(getEthPrice()) .mul(100).div(POOL1_tvl()); } // (PRECISION) function POOL2_apy() external view returns(uint){ if(POOL2_tvl() == 0){ return 0; } return POOL2_MULTIPLIER.mul(2336000) .mul(getGFarmPriceEth()).mul(getEthPrice()) .mul(100).div(POOL2_tvl()); } function myNftCredits() external view returns(uint){ return NFT_CREDITS_amount(msg.sender); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_GOV","type":"address"},{"internalType":"address","name":"_DEV","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DEV_FUND","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNANCE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"NFT_CREDITS_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_CREDITS_MIN_P","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_MULTIPLIER_UPDATED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_MULTIPLIER_UPDATE_EVERY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_REFERRAL_P","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_accTokensPerLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_apy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"POOL1_lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_minLpsNftCredits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_provided","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_referral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL1_referralReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"POOL1_stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"POOL1_tvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"POOL1_unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"POOL2_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_END","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_accTokensPerETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_apy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_blocksLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"POOL2_lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_provided","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL2_stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"POOL2_tvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"POOL2_unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"POOLS_START","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOLS_START_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOLS_blocksLeftUntilStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOLS_tvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lp","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myNftCredits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"set_GOVERNANCE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lp","type":"address"}],"name":"set_LP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"}],"name":"set_NFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"set_TOKEN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"requiredCredits","type":"uint256"}],"name":"spendCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract GFarmTokenInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"POOL1_provided","type":"uint256"},{"internalType":"uint256","name":"POOL1_rewardDebt","type":"uint256"},{"internalType":"address","name":"POOL1_referral","type":"address"},{"internalType":"uint256","name":"POOL1_referralReward","type":"uint256"},{"internalType":"uint256","name":"POOL2_provided","type":"uint256"},{"internalType":"uint256","name":"POOL2_rewardDebt","type":"uint256"},{"internalType":"uint256","name":"NFT_CREDITS_amount","type":"uint256"},{"internalType":"uint256","name":"NFT_CREDITS_lastUpdated","type":"uint256"},{"internalType":"bool","name":"NFT_CREDITS_receiving","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101006040523480156200001257600080fd5b506040516200348138038062003481833981810160405260408110156200003857600080fd5b50805160209091015161afc86901969368974c05b00000046003556200006d436106ef6200011f602090811b62001e6b17901c565b60048190555062000090600a6003546200018160201b62001ece1790919060201c565b608052620000c8617d00620000b4436106ef6200011f602090811b62001e6b17901c565b6200011f60201b62001e6b1790919060201c565b60a052620000e5436106ef6200011f602090811b62001e6b17901c565b60c052600980546001600160a01b0319166001600160a01b03939093169290921790915560601b6001600160601b03191660e05262000272565b6000828201838110156200017a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006200017a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620001cb60201b60201c565b600081836200025b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200021f57818101518382015260200162000205565b50505050905090810190601f1680156200024d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200026857fe5b0495945050505050565b60805160a05160c05160e05160601c61314a6200033760003980611e1f52806129175280612d27525080610cba52806113a65280611426528061144c52806116925280611c295280611cad5280611dc55280611df85280612e2a5280612e555280612fe752806130125250806108e4528061128c52806112bf52806117075280611c525280612e7f5280612eaa5280612ee55280612f105280612f3c5280612f635280612f8d525080610c425280610fe35280611c845280612fbe525061314a6000f3fe6080604052600436106103295760003560e01c806398f17a3b116101a5578063be8682db116100ec578063dae8f1fd11610095578063f34184fa1161006f578063f34184fa1461088e578063fa8aa3d7146108a3578063fc0c546a146108b8578063fc60a096146108cd57610329565b8063dae8f1fd1461084f578063e3beb31414610864578063ea550ad91461087957610329565b8063cd312cc4116100c6578063cd312cc414610810578063cf71d21114610825578063d34d05b91461083a57610329565b8063be8682db146107b3578063c135916f146107c8578063c7b30602146107fb57610329565b8063a87430ba1161014e578063b4af648911610128578063b4af648914610763578063b53e51e114610796578063b568d8a41461079e57610329565b8063a87430ba146106b5578063aaf5eb6814610739578063b082d99c1461074e57610329565b80639d9165231161017f5780639d916523146106585780639f7fd11d1461066d578063a7ae510b1461068257610329565b806398f17a3b14610619578063997f5dac1461062e5780639acd5e831461064357610329565b80634edbbb5d1161027457806360f5a98b1161021d5780638a8cd1e3116101f75780638a8cd1e3146105a75780638b49f078146105bc57806392570992146105d15780639332fddc1461060457610329565b806360f5a98b146105535780637159ffd8146105685780637417f9261461057d57610329565b8063546ae0391161024e578063546ae03914610514578063577b4059146105295780635ee3f1a71461053e57610329565b80634edbbb5d146104b15780634f90ea4a146104c65780635407886c146104ff57610329565b8063313c06a0116102d657806347ccca02116102b057806347ccca021461045457806349263637146104695780634d159df71461049c57610329565b8063313c06a0146104005780633dfe7304146104155780633e2183611461043f57610329565b80632614d4a4116103075780632614d4a41461039b5780632ecf03f6146103d6578063307c7a26146103eb57610329565b8063054b3cfd1461032e57806314627834146103555780631c2f991814610386575b600080fd5b34801561033a57600080fd5b506103436108e2565b60408051918252519081900360200190f35b34801561036157600080fd5b5061036a610906565b604080516001600160a01b039092168252519081900360200190f35b34801561039257600080fd5b50610343610915565b3480156103a757600080fd5b506103d4600480360360408110156103be57600080fd5b506001600160a01b03813516906020013561091b565b005b3480156103e257600080fd5b506103436109b5565b3480156103f757600080fd5b506103436109bb565b34801561040c57600080fd5b5061036a6109dc565b34801561042157600080fd5b506103d46004803603602081101561043857600080fd5b50356109eb565b34801561044b57600080fd5b50610343610b08565b34801561046057600080fd5b5061036a610b0e565b34801561047557600080fd5b506103d46004803603602081101561048c57600080fd5b50356001600160a01b0316610b1d565b3480156104a857600080fd5b50610343610bb4565b3480156104bd57600080fd5b50610343610c40565b3480156104d257600080fd5b506103d4600480360360408110156104e957600080fd5b50803590602001356001600160a01b0316610c64565b34801561050b57600080fd5b50610343610f82565b34801561052057600080fd5b50610343610fa2565b34801561053557600080fd5b50610343611011565b34801561054a57600080fd5b5061034361101c565b34801561055f57600080fd5b50610343611022565b34801561057457600080fd5b5061036a611028565b34801561058957600080fd5b506103d4600480360360208110156105a057600080fd5b5035611047565b3480156105b357600080fd5b50610343611282565b3480156105c857600080fd5b50610343611288565b3480156105dd57600080fd5b506103d4600480360360208110156105f457600080fd5b50356001600160a01b03166112e4565b34801561061057600080fd5b5061034361137b565b34801561062557600080fd5b50610343611391565b34801561063a57600080fd5b506103d46113a4565b34801561064f57600080fd5b50610343611424565b34801561066457600080fd5b50610343611448565b34801561067957600080fd5b50610343611481565b34801561068e57600080fd5b506103d4600480360360208110156106a557600080fd5b50356001600160a01b03166114cd565b3480156106c157600080fd5b506106e8600480360360208110156106d857600080fd5b50356001600160a01b0316611506565b60408051998a5260208a01989098526001600160a01b03909616888801526060880194909452608087019290925260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561074557600080fd5b5061034361155e565b34801561075a57600080fd5b50610343611565565b34801561076f57600080fd5b506103436004803603602081101561078657600080fd5b50356001600160a01b031661156b565b6103d461163c565b3480156107aa57600080fd5b5061034361180b565b3480156107bf57600080fd5b50610343611896565b3480156107d457600080fd5b506103d4600480360360208110156107eb57600080fd5b50356001600160a01b0316611b8e565b34801561080757600080fd5b50610343611c25565b34801561081c57600080fd5b50610343611ca6565b34801561083157600080fd5b506103d4611cab565b34801561084657600080fd5b50610343611d2b565b34801561085b57600080fd5b50610343611db5565b34801561087057600080fd5b50610343611dbb565b34801561088557600080fd5b50610343611dc1565b34801561089a57600080fd5b5061036a611e1d565b3480156108af57600080fd5b50610343611e41565b3480156108c457600080fd5b5061036a611e57565b3480156108d957600080fd5b50610343611e66565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009546001600160a01b031681565b60055481565b6002546001600160a01b0316331461097a576040805162461bcd60e51b815260206004820152601c60248201527f43616e206f6e6c792063616c6c656420627920474661726d4e46542e00000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090206109a58261099f8561156b565b90611f10565b6006820155436007909101555050565b60075481565b60006109d66109c8610f82565b6109d0611896565b90611e6b565b90505b90565b6001546001600160a01b031681565b336000908152600a6020526040902081610a4c576040805162461bcd60e51b815260206004820152601060248201527f556e7374616b696e672030204554482e00000000000000000000000000000000604482015290519081900360640190fd5b8181600401541015610a8f5760405162461bcd60e51b81526004018080602001828103825260258152602001806130ad6025913960400191505060405180910390fd5b610a9a336000611f52565b604051339083156108fc029084906000818181858888f19350505050158015610ac7573d6000803e3d6000fd5b506004810154610ad79083611f10565b60048201819055600854610aff91670de0b6b3a764000091610af9919061202d565b90611ece565b60059091015550565b617d0081565b6002546001600160a01b031681565b6009546001600160a01b03163314610b3457600080fd5b6000546001600160a01b031615610b92576040805162461bcd60e51b815260206004820152601960248201527f546f6b656e206164647265737320616c72656164792073657400000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60018054604080516370a0823160e01b815230600482015290516000936109d693606493610af9936001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610c0e57600080fd5b505afa158015610c22573d6000803e3d6000fd5b505050506040513d6020811015610c3857600080fd5b50519061202d565b7f000000000000000000000000000000000000000000000000000000000000000081565b323314610cb8576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000431015610d2d576040805162461bcd60e51b815260206004820152601860248201527f506f6f6c206861736e27742073746172746564207965742e0000000000000000604482015290519081900360640190fd5b60008211610d82576040805162461bcd60e51b815260206004820152600d60248201527f5374616b696e672030206c702e00000000000000000000000000000000000000604482015290519081900360640190fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610dcd57600080fd5b505afa158015610de1573d6000803e3d6000fd5b505050506040513d6020811015610df757600080fd5b50519050610e0433612086565b600154604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b505050506040513d6020811015610ea157600080fd5b5050336000908152600a602052604090208054610ebe9085611e6b565b808255600654610edc91670de0b6b3a764000091610af9919061202d565b6001820155600881015460ff16158015610f065750610f016064610af984600161202d565b815410155b15610f215760088101805460ff191660011790554360078201555b60028101546001600160a01b0316158015610f4457506001600160a01b03831615155b8015610f5957506001600160a01b0383163314155b15610f7c576002810180546001600160a01b0319166001600160a01b0385161790555b50505050565b60006109d6670de0b6b3a7640000610af9610f9b612268565b479061202d565b6000610fac610f82565b610fb8575060006109d9565b6109d6610fc3610f82565b610af9606461100b610fd3612268565b61100b610fde6123e7565b61100b7f00000000000000000000000000000000000000000000000000000000000000006223a50061202d565b9061202d565b60006109d63361156b565b60035481565b60045481565b336000908152600a60205260409020600201546001600160a01b031690565b336000908152600a60205260409020816110a8576040805162461bcd60e51b815260206004820152600f60248201527f556e7374616b696e672030206c702e0000000000000000000000000000000000604482015290519081900360640190fd5b80548211156110e85760405162461bcd60e51b81526004018080602001828103825260258152602001806130ad6025913960400191505060405180910390fd5b6110f133612086565b6001546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561114557600080fd5b505af1158015611159573d6000803e3d6000fd5b505050506040513d602081101561116f57600080fd5b5050805461117d9083611f10565b80825560065461119b91670de0b6b3a764000091610af9919061202d565b60018083019190915554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156111ed57600080fd5b505afa158015611201573d6000803e3d6000fd5b505050506040513d602081101561121757600080fd5b5051600883015490915060ff16801561123f575061123b6064610af983600161202d565b8254105b806112575750600882015460ff168015611257575080155b1561127d576112653361156b565b600683015560088201805460ff191690554360078301555b505050565b61afc881565b60007f00000000000000000000000000000000000000000000000000000000000000004311156112ba575060006109d9565b6109d67f000000000000000000000000000000000000000000000000000000000000000043611f10565b6009546001600160a01b031633146112fb57600080fd5b6002546001600160a01b031615611359576040805162461bcd60e51b815260206004820152601760248201527f4e4654206164647265737320616c726561647920736574000000000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600a602052604090206003015490565b336000908152600a602052604090205490565b7f0000000000000000000000000000000000000000000000000000000000000000431015611419576040805162461bcd60e51b815260206004820152601860248201527f506f6f6c206861736e27742073746172746564207965742e0000000000000000604482015290519081900360640190fd5b61142233612086565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000043101561147a575060006109d9565b5060035490565b600061148b611896565b611497575060006109d9565b6109d66114a2611896565b610af9606461100b6114b2612268565b61100b6114bd6123e7565b60035461100b906223a50061202d565b6009546001600160a01b031633146114e457600080fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600a60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600890980154969795966001600160a01b039095169593949293919290919060ff1689565b620186a081565b6106ef81565b6000611575613055565b506001600160a01b038083166000908152600a6020908152604091829020825161012081018452815481526001820154928101929092526002810154909316918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015460ff161580156101008301526116305761162861161d8260e0015143611f1090919063ffffffff16565b60c083015190611e6b565b915050611637565b60c0015190505b919050565b323314611690576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000431015611705576040805162461bcd60e51b815260206004820152601860248201527f506f6f6c206861736e27742073746172746564207965742e0000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000004311156117645760405162461bcd60e51b81526004018080602001828103825260228152602001806130d26022913960400191505060405180910390fd5b600034116117b9576040805162461bcd60e51b815260206004820152600e60248201527f5374616b696e672030204554482e000000000000000000000000000000000000604482015290519081900360640190fd5b6117c33334611f52565b336000908152600a6020526040902060048101546117e19034611e6b565b6004820181905560085461180391670de0b6b3a764000091610af9919061202d565b600590910155565b336000908152600a602090815260408083208151610120810183528154815260018201549381019390935260028101546001600160a01b0316918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015460ff1615156101008201526109d6908261254d565b600154604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156118f457600080fd5b505afa158015611908573d6000803e3d6000fd5b505050506040513d602081101561191e57600080fd5b505161192c575060006109d9565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561197d57600080fd5b505afa158015611991573d6000803e3d6000fd5b505050506040513d60608110156119a757600080fd5b50805160209182015160015460408051630dfe168160e01b815290519396509194506000936001600160a01b0390911692630dfe1681926004808201939291829003018186803b1580156119fa57600080fd5b505afa158015611a0e573d6000803e3d6000fd5b505050506040513d6020811015611a2457600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415611a6157506dffffffffffffffffffffffffffff8216611a74565b506dffffffffffffffffffffffffffff81165b6000611b05600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ac757600080fd5b505afa158015611adb573d6000803e3d6000fd5b505050506040513d6020811015611af157600080fd5b5051610af9600261100b86620186a061202d565b90506000611b22620186a0610af9611b1b612268565b859061202d565b600154604080516370a0823160e01b81523060048201529051929350611b8492670de0b6b3a764000092610af99286926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610c0e57600080fd5b9550505050505090565b6009546001600160a01b03163314611ba557600080fd5b6001546001600160a01b031615611c03576040805162461bcd60e51b815260206004820152601660248201527f4c50206164647265737320616c72656164792073657400000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60007f0000000000000000000000000000000000000000000000000000000000000000431080611c7457507f000000000000000000000000000000000000000000000000000000000000000043115b15611c81575060006109d9565b507f000000000000000000000000000000000000000000000000000000000000000090565b600181565b7f0000000000000000000000000000000000000000000000000000000000000000431015611d20576040805162461bcd60e51b815260206004820152601860248201527f506f6f6c206861736e27742073746172746564207965742e0000000000000000604482015290519081900360640190fd5b611422336000611f52565b336000908152600a602090815260408083208151610120810183528154815260018201549381019390935260028101546001600160a01b0316918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015460ff1615156101008201526109d6906125dd565b60085481565b60065481565b60007f0000000000000000000000000000000000000000000000000000000000000000431115611df3575060006109d9565b6109d67f000000000000000000000000000000000000000000000000000000000000000043611f10565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152600a602052604090206004015490565b6000546001600160a01b031681565b600681565b600082820183811015611ec5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000611ec583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126d5565b6000611ec583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612777565b6001600160a01b038083166000908152600a60209081526040808320815161012081018352815481526001820154938101939093526002810154909416908201526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e0820152600883015460ff161515610100820152611fdf908461254d565b9050611fea836127d1565b8015611ffa57611ffa84826129e0565b61201f670de0b6b3a7640000610af9600854856004015461202d90919063ffffffff16565b826005018190555050505050565b60008261203c57506000611ec8565b8282028284828161204957fe5b0414611ec55760405162461bcd60e51b81526004018080602001828103825260218152602001806130f46021913960400191505060405180910390fd5b6001600160a01b038082166000908152600a60209081526040808320815161012081018352815481526001820154938101939093526002810154909416908201526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e0820152600883015460ff161515610100820152612112906125dd565b905061211c612b77565b801561223f5760028201546001600160a01b03166121c35761213e83826129e0565b6000546001600160a01b0316639dc29fac846121606064610af986600661202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156121a657600080fd5b505af11580156121ba573d6000803e3d6000fd5b5050505061223f565b60006121d96064610af9611b1b60066002611ece565b905060006121e78383611f10565b90506121f385826129e0565b600284015461220b906001600160a01b0316836129e0565b60028401546001600160a01b03166000908152600a6020526040902060038101546122369084611e6b565b60039091015550505b600654825461225b91670de0b6b3a764000091610af99161202d565b8260010181905550505050565b600080600073b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156122ba57600080fd5b505afa1580156122ce573d6000803e3d6000fd5b505050506040513d60608110156122e457600080fd5b50805160209182015160408051630dfe168160e01b81529051929550909350600092839273b4e16d0168e52d35cacd2c6185b44281ec28c9dc92630dfe1681926004808301939192829003018186803b15801561234057600080fd5b505afa158015612354573d6000803e3d6000fd5b505050506040513d602081101561236a57600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214156123ac5750506dffffffffffffffffffffffffffff8181169083166123c4565b50506dffffffffffffffffffffffffffff8083169082165b6123de81610af9620186a061100b8664e8d4a5100061202d565b94505050505090565b6000806000600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561243a57600080fd5b505afa15801561244e573d6000803e3d6000fd5b505050506040513d606081101561246457600080fd5b50805160209182015160015460408051630dfe168160e01b8152905193965091945060009384936001600160a01b0390921692630dfe16819260048083019392829003018186803b1580156124b857600080fd5b505afa1580156124cc573d6000803e3d6000fd5b505050506040513d60208110156124e257600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214156125245750506dffffffffffffffffffffffffffff80831690821661253c565b50506dffffffffffffffffffffffffffff8181169083165b6123de81610af984620186a061202d565b6008546000908161255e4785611f10565b90506007544311801561257057508015155b156125a957600061258360075443612e25565b90506125a561259e83610af984670de0b6b3a764000061202d565b8490611e6b565b9250505b6125d48560a0015161099f670de0b6b3a7640000610af9868a6080015161202d90919063ffffffff16565b95945050505050565b600654600154604080516370a0823160e01b815230600482015290516000939284926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561263157600080fd5b505afa158015612645573d6000803e3d6000fd5b505050506040513d602081101561265b57600080fd5b50516005549091504311801561267057508015155b156126a257600061268360055443612fe2565b905061269e61259e83610af984670de0b6b3a764000061202d565b9250505b6126cd846020015161099f670de0b6b3a7640000610af986896000015161202d90919063ffffffff16565b949350505050565b600081836127615760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561272657818101518382015260200161270e565b50505050905090810190601f1680156127535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161276d57fe5b0495945050505050565b600081848411156127c95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561272657818101518382015260200161270e565b505050900390565b60006127dd4783611f10565b9050600754600014806127ee575080155b156127fd5750436007556129dd565b600061280b60075443612e25565b60008054604080516340c10f1960e01b81523060048201526024810185905290519394506001600160a01b03909116926340c10f199260448084019391929182900301818387803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b50506000546009546001600160a01b0391821693506340c10f199250166128a462989680610af9866207a12061202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156128ea57600080fd5b505af11580156128fe573d6000803e3d6000fd5b50506000546001600160a01b031691506340c10f1990507f000000000000000000000000000000000000000000000000000000000000000061294a62989680610af9866207a12061202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561299057600080fd5b505af11580156129a4573d6000803e3d6000fd5b505050506129d36129ca83610af9670de0b6b3a76400008561202d90919063ffffffff16565b60085490611e6b565b6008555050436007555b50565b60008054604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a2c57600080fd5b505afa158015612a40573d6000803e3d6000fd5b505050506040513d6020811015612a5657600080fd5b5051905080821115612aed57600080546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018690529151919092169263a9059cbb92604480820193602093909283900390910190829087803b158015612abb57600080fd5b505af1158015612acf573d6000803e3d6000fd5b505050506040513d6020811015612ae557600080fd5b5061127d9050565b600080546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018790529151919092169263a9059cbb92604480820193602093909283900390910190829087803b158015612b4657600080fd5b505af1158015612b5a573d6000803e3d6000fd5b505050506040513d6020811015612b7057600080fd5b5050505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612bc257600080fd5b505afa158015612bd6573d6000803e3d6000fd5b505050506040513d6020811015612bec57600080fd5b50516005549091501580612bfe575080155b15612c0d575043600555611422565b6000612c1b60055443612fe2565b60008054604080516340c10f1960e01b81523060048201526024810185905290519394506001600160a01b03909116926340c10f199260448084019391929182900301818387803b158015612c6f57600080fd5b505af1158015612c83573d6000803e3d6000fd5b50506000546009546001600160a01b0391821693506340c10f19925016612cb462989680610af9866207a12061202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612cfa57600080fd5b505af1158015612d0e573d6000803e3d6000fd5b50506000546001600160a01b031691506340c10f1990507f0000000000000000000000000000000000000000000000000000000000000000612d5a62989680610af9866207a12061202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612da057600080fd5b505af1158015612db4573d6000803e3d6000fd5b50505050612de3612dda83610af9670de0b6b3a76400008561202d90919063ffffffff16565b60065490611e6b565b60065543600555600454612df99061afc8611e6b565b4310612e2157612e196004610af96003805461202d90919063ffffffff16565b600355436004555b5050565b6000807f00000000000000000000000000000000000000000000000000000000000000008410158015612e7857507f00000000000000000000000000000000000000000000000000000000000000008310155b15612fb8577f00000000000000000000000000000000000000000000000000000000000000008411158015612ecd57507f00000000000000000000000000000000000000000000000000000000000000008311155b15612ee357612edc8385611f10565b9050612fb8565b7f00000000000000000000000000000000000000000000000000000000000000008411158015612f3257507f000000000000000000000000000000000000000000000000000000000000000083115b15612f6157612edc7f000000000000000000000000000000000000000000000000000000000000000085611f10565b7f000000000000000000000000000000000000000000000000000000000000000084118015612faf57507f000000000000000000000000000000000000000000000000000000000000000083115b15612fb8575060005b6126cd817f000000000000000000000000000000000000000000000000000000000000000061202d565b6000807f0000000000000000000000000000000000000000000000000000000000000000841015801561303557507f00000000000000000000000000000000000000000000000000000000000000008310155b15613047576130448385611f10565b90505b6003546126cd90829061202d565b604051806101200160405280600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152509056fe556e7374616b696e67206d6f7265207468616e2063757272656e746c79207374616b65642e506f6f6c2069732066696e69736865642c206e6f206d6f7265207374616b696e672e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212200a4d01bf19c9be3ae010a82ca714584710abfd893d36fa31692f3ceea195c38f64736f6c63430007050033000000000000000000000000c66fbe50dd33c9aadd65707f7088d597c86fe00f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d
Deployed Bytecode
0x6080604052600436106103295760003560e01c806398f17a3b116101a5578063be8682db116100ec578063dae8f1fd11610095578063f34184fa1161006f578063f34184fa1461088e578063fa8aa3d7146108a3578063fc0c546a146108b8578063fc60a096146108cd57610329565b8063dae8f1fd1461084f578063e3beb31414610864578063ea550ad91461087957610329565b8063cd312cc4116100c6578063cd312cc414610810578063cf71d21114610825578063d34d05b91461083a57610329565b8063be8682db146107b3578063c135916f146107c8578063c7b30602146107fb57610329565b8063a87430ba1161014e578063b4af648911610128578063b4af648914610763578063b53e51e114610796578063b568d8a41461079e57610329565b8063a87430ba146106b5578063aaf5eb6814610739578063b082d99c1461074e57610329565b80639d9165231161017f5780639d916523146106585780639f7fd11d1461066d578063a7ae510b1461068257610329565b806398f17a3b14610619578063997f5dac1461062e5780639acd5e831461064357610329565b80634edbbb5d1161027457806360f5a98b1161021d5780638a8cd1e3116101f75780638a8cd1e3146105a75780638b49f078146105bc57806392570992146105d15780639332fddc1461060457610329565b806360f5a98b146105535780637159ffd8146105685780637417f9261461057d57610329565b8063546ae0391161024e578063546ae03914610514578063577b4059146105295780635ee3f1a71461053e57610329565b80634edbbb5d146104b15780634f90ea4a146104c65780635407886c146104ff57610329565b8063313c06a0116102d657806347ccca02116102b057806347ccca021461045457806349263637146104695780634d159df71461049c57610329565b8063313c06a0146104005780633dfe7304146104155780633e2183611461043f57610329565b80632614d4a4116103075780632614d4a41461039b5780632ecf03f6146103d6578063307c7a26146103eb57610329565b8063054b3cfd1461032e57806314627834146103555780631c2f991814610386575b600080fd5b34801561033a57600080fd5b506103436108e2565b60408051918252519081900360200190f35b34801561036157600080fd5b5061036a610906565b604080516001600160a01b039092168252519081900360200190f35b34801561039257600080fd5b50610343610915565b3480156103a757600080fd5b506103d4600480360360408110156103be57600080fd5b506001600160a01b03813516906020013561091b565b005b3480156103e257600080fd5b506103436109b5565b3480156103f757600080fd5b506103436109bb565b34801561040c57600080fd5b5061036a6109dc565b34801561042157600080fd5b506103d46004803603602081101561043857600080fd5b50356109eb565b34801561044b57600080fd5b50610343610b08565b34801561046057600080fd5b5061036a610b0e565b34801561047557600080fd5b506103d46004803603602081101561048c57600080fd5b50356001600160a01b0316610b1d565b3480156104a857600080fd5b50610343610bb4565b3480156104bd57600080fd5b50610343610c40565b3480156104d257600080fd5b506103d4600480360360408110156104e957600080fd5b50803590602001356001600160a01b0316610c64565b34801561050b57600080fd5b50610343610f82565b34801561052057600080fd5b50610343610fa2565b34801561053557600080fd5b50610343611011565b34801561054a57600080fd5b5061034361101c565b34801561055f57600080fd5b50610343611022565b34801561057457600080fd5b5061036a611028565b34801561058957600080fd5b506103d4600480360360208110156105a057600080fd5b5035611047565b3480156105b357600080fd5b50610343611282565b3480156105c857600080fd5b50610343611288565b3480156105dd57600080fd5b506103d4600480360360208110156105f457600080fd5b50356001600160a01b03166112e4565b34801561061057600080fd5b5061034361137b565b34801561062557600080fd5b50610343611391565b34801561063a57600080fd5b506103d46113a4565b34801561064f57600080fd5b50610343611424565b34801561066457600080fd5b50610343611448565b34801561067957600080fd5b50610343611481565b34801561068e57600080fd5b506103d4600480360360208110156106a557600080fd5b50356001600160a01b03166114cd565b3480156106c157600080fd5b506106e8600480360360208110156106d857600080fd5b50356001600160a01b0316611506565b60408051998a5260208a01989098526001600160a01b03909616888801526060880194909452608087019290925260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561074557600080fd5b5061034361155e565b34801561075a57600080fd5b50610343611565565b34801561076f57600080fd5b506103436004803603602081101561078657600080fd5b50356001600160a01b031661156b565b6103d461163c565b3480156107aa57600080fd5b5061034361180b565b3480156107bf57600080fd5b50610343611896565b3480156107d457600080fd5b506103d4600480360360208110156107eb57600080fd5b50356001600160a01b0316611b8e565b34801561080757600080fd5b50610343611c25565b34801561081c57600080fd5b50610343611ca6565b34801561083157600080fd5b506103d4611cab565b34801561084657600080fd5b50610343611d2b565b34801561085b57600080fd5b50610343611db5565b34801561087057600080fd5b50610343611dbb565b34801561088557600080fd5b50610343611dc1565b34801561089a57600080fd5b5061036a611e1d565b3480156108af57600080fd5b50610343611e41565b3480156108c457600080fd5b5061036a611e57565b3480156108d957600080fd5b50610343611e66565b7f0000000000000000000000000000000000000000000000000000000000b2670c81565b6009546001600160a01b031681565b60055481565b6002546001600160a01b0316331461097a576040805162461bcd60e51b815260206004820152601c60248201527f43616e206f6e6c792063616c6c656420627920474661726d4e46542e00000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090206109a58261099f8561156b565b90611f10565b6006820155436007909101555050565b60075481565b60006109d66109c8610f82565b6109d0611896565b90611e6b565b90505b90565b6001546001600160a01b031681565b336000908152600a6020526040902081610a4c576040805162461bcd60e51b815260206004820152601060248201527f556e7374616b696e672030204554482e00000000000000000000000000000000604482015290519081900360640190fd5b8181600401541015610a8f5760405162461bcd60e51b81526004018080602001828103825260258152602001806130ad6025913960400191505060405180910390fd5b610a9a336000611f52565b604051339083156108fc029084906000818181858888f19350505050158015610ac7573d6000803e3d6000fd5b506004810154610ad79083611f10565b60048201819055600854610aff91670de0b6b3a764000091610af9919061202d565b90611ece565b60059091015550565b617d0081565b6002546001600160a01b031681565b6009546001600160a01b03163314610b3457600080fd5b6000546001600160a01b031615610b92576040805162461bcd60e51b815260206004820152601960248201527f546f6b656e206164647265737320616c72656164792073657400000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60018054604080516370a0823160e01b815230600482015290516000936109d693606493610af9936001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610c0e57600080fd5b505afa158015610c22573d6000803e3d6000fd5b505050506040513d6020811015610c3857600080fd5b50519061202d565b7f000000000000000000000000000000000000000000000000003b363eba41aaaa81565b323314610cb8576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000b1ea0c431015610d2d576040805162461bcd60e51b815260206004820152601860248201527f506f6f6c206861736e27742073746172746564207965742e0000000000000000604482015290519081900360640190fd5b60008211610d82576040805162461bcd60e51b815260206004820152600d60248201527f5374616b696e672030206c702e00000000000000000000000000000000000000604482015290519081900360640190fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610dcd57600080fd5b505afa158015610de1573d6000803e3d6000fd5b505050506040513d6020811015610df757600080fd5b50519050610e0433612086565b600154604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b505050506040513d6020811015610ea157600080fd5b5050336000908152600a602052604090208054610ebe9085611e6b565b808255600654610edc91670de0b6b3a764000091610af9919061202d565b6001820155600881015460ff16158015610f065750610f016064610af984600161202d565b815410155b15610f215760088101805460ff191660011790554360078201555b60028101546001600160a01b0316158015610f4457506001600160a01b03831615155b8015610f5957506001600160a01b0383163314155b15610f7c576002810180546001600160a01b0319166001600160a01b0385161790555b50505050565b60006109d6670de0b6b3a7640000610af9610f9b612268565b479061202d565b6000610fac610f82565b610fb8575060006109d9565b6109d6610fc3610f82565b610af9606461100b610fd3612268565b61100b610fde6123e7565b61100b7f000000000000000000000000000000000000000000000000003b363eba41aaaa6223a50061202d565b9061202d565b60006109d63361156b565b60035481565b60045481565b336000908152600a60205260409020600201546001600160a01b031690565b336000908152600a60205260409020816110a8576040805162461bcd60e51b815260206004820152600f60248201527f556e7374616b696e672030206c702e0000000000000000000000000000000000604482015290519081900360640190fd5b80548211156110e85760405162461bcd60e51b81526004018080602001828103825260258152602001806130ad6025913960400191505060405180910390fd5b6110f133612086565b6001546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561114557600080fd5b505af1158015611159573d6000803e3d6000fd5b505050506040513d602081101561116f57600080fd5b5050805461117d9083611f10565b80825560065461119b91670de0b6b3a764000091610af9919061202d565b60018083019190915554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156111ed57600080fd5b505afa158015611201573d6000803e3d6000fd5b505050506040513d602081101561121757600080fd5b5051600883015490915060ff16801561123f575061123b6064610af983600161202d565b8254105b806112575750600882015460ff168015611257575080155b1561127d576112653361156b565b600683015560088201805460ff191690554360078301555b505050565b61afc881565b60007f0000000000000000000000000000000000000000000000000000000000b2670c4311156112ba575060006109d9565b6109d67f0000000000000000000000000000000000000000000000000000000000b2670c43611f10565b6009546001600160a01b031633146112fb57600080fd5b6002546001600160a01b031615611359576040805162461bcd60e51b815260206004820152601760248201527f4e4654206164647265737320616c726561647920736574000000000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600a602052604090206003015490565b336000908152600a602052604090205490565b7f0000000000000000000000000000000000000000000000000000000000b1ea0c431015611419576040805162461bcd60e51b815260206004820152601860248201527f506f6f6c206861736e27742073746172746564207965742e0000000000000000604482015290519081900360640190fd5b61142233612086565b565b7f0000000000000000000000000000000000000000000000000000000000b1ea0c81565b60007f0000000000000000000000000000000000000000000000000000000000b1ea0c43101561147a575060006109d9565b5060035490565b600061148b611896565b611497575060006109d9565b6109d66114a2611896565b610af9606461100b6114b2612268565b61100b6114bd6123e7565b60035461100b906223a50061202d565b6009546001600160a01b031633146114e457600080fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600a60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600890980154969795966001600160a01b039095169593949293919290919060ff1689565b620186a081565b6106ef81565b6000611575613055565b506001600160a01b038083166000908152600a6020908152604091829020825161012081018452815481526001820154928101929092526002810154909316918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015460ff161580156101008301526116305761162861161d8260e0015143611f1090919063ffffffff16565b60c083015190611e6b565b915050611637565b60c0015190505b919050565b323314611690576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000b1ea0c431015611705576040805162461bcd60e51b815260206004820152601860248201527f506f6f6c206861736e27742073746172746564207965742e0000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000b2670c4311156117645760405162461bcd60e51b81526004018080602001828103825260228152602001806130d26022913960400191505060405180910390fd5b600034116117b9576040805162461bcd60e51b815260206004820152600e60248201527f5374616b696e672030204554482e000000000000000000000000000000000000604482015290519081900360640190fd5b6117c33334611f52565b336000908152600a6020526040902060048101546117e19034611e6b565b6004820181905560085461180391670de0b6b3a764000091610af9919061202d565b600590910155565b336000908152600a602090815260408083208151610120810183528154815260018201549381019390935260028101546001600160a01b0316918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015460ff1615156101008201526109d6908261254d565b600154604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156118f457600080fd5b505afa158015611908573d6000803e3d6000fd5b505050506040513d602081101561191e57600080fd5b505161192c575060006109d9565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561197d57600080fd5b505afa158015611991573d6000803e3d6000fd5b505050506040513d60608110156119a757600080fd5b50805160209182015160015460408051630dfe168160e01b815290519396509194506000936001600160a01b0390911692630dfe1681926004808201939291829003018186803b1580156119fa57600080fd5b505afa158015611a0e573d6000803e3d6000fd5b505050506040513d6020811015611a2457600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415611a6157506dffffffffffffffffffffffffffff8216611a74565b506dffffffffffffffffffffffffffff81165b6000611b05600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ac757600080fd5b505afa158015611adb573d6000803e3d6000fd5b505050506040513d6020811015611af157600080fd5b5051610af9600261100b86620186a061202d565b90506000611b22620186a0610af9611b1b612268565b859061202d565b600154604080516370a0823160e01b81523060048201529051929350611b8492670de0b6b3a764000092610af99286926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610c0e57600080fd5b9550505050505090565b6009546001600160a01b03163314611ba557600080fd5b6001546001600160a01b031615611c03576040805162461bcd60e51b815260206004820152601660248201527f4c50206164647265737320616c72656164792073657400000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60007f0000000000000000000000000000000000000000000000000000000000b1ea0c431080611c7457507f0000000000000000000000000000000000000000000000000000000000b2670c43115b15611c81575060006109d9565b507f000000000000000000000000000000000000000000000000003b363eba41aaaa90565b600181565b7f0000000000000000000000000000000000000000000000000000000000b1ea0c431015611d20576040805162461bcd60e51b815260206004820152601860248201527f506f6f6c206861736e27742073746172746564207965742e0000000000000000604482015290519081900360640190fd5b611422336000611f52565b336000908152600a602090815260408083208151610120810183528154815260018201549381019390935260028101546001600160a01b0316918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015460ff1615156101008201526109d6906125dd565b60085481565b60065481565b60007f0000000000000000000000000000000000000000000000000000000000b1ea0c431115611df3575060006109d9565b6109d67f0000000000000000000000000000000000000000000000000000000000b1ea0c43611f10565b7f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d81565b336000908152600a602052604090206004015490565b6000546001600160a01b031681565b600681565b600082820183811015611ec5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000611ec583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126d5565b6000611ec583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612777565b6001600160a01b038083166000908152600a60209081526040808320815161012081018352815481526001820154938101939093526002810154909416908201526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e0820152600883015460ff161515610100820152611fdf908461254d565b9050611fea836127d1565b8015611ffa57611ffa84826129e0565b61201f670de0b6b3a7640000610af9600854856004015461202d90919063ffffffff16565b826005018190555050505050565b60008261203c57506000611ec8565b8282028284828161204957fe5b0414611ec55760405162461bcd60e51b81526004018080602001828103825260218152602001806130f46021913960400191505060405180910390fd5b6001600160a01b038082166000908152600a60209081526040808320815161012081018352815481526001820154938101939093526002810154909416908201526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e0820152600883015460ff161515610100820152612112906125dd565b905061211c612b77565b801561223f5760028201546001600160a01b03166121c35761213e83826129e0565b6000546001600160a01b0316639dc29fac846121606064610af986600661202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156121a657600080fd5b505af11580156121ba573d6000803e3d6000fd5b5050505061223f565b60006121d96064610af9611b1b60066002611ece565b905060006121e78383611f10565b90506121f385826129e0565b600284015461220b906001600160a01b0316836129e0565b60028401546001600160a01b03166000908152600a6020526040902060038101546122369084611e6b565b60039091015550505b600654825461225b91670de0b6b3a764000091610af99161202d565b8260010181905550505050565b600080600073b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156122ba57600080fd5b505afa1580156122ce573d6000803e3d6000fd5b505050506040513d60608110156122e457600080fd5b50805160209182015160408051630dfe168160e01b81529051929550909350600092839273b4e16d0168e52d35cacd2c6185b44281ec28c9dc92630dfe1681926004808301939192829003018186803b15801561234057600080fd5b505afa158015612354573d6000803e3d6000fd5b505050506040513d602081101561236a57600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214156123ac5750506dffffffffffffffffffffffffffff8181169083166123c4565b50506dffffffffffffffffffffffffffff8083169082165b6123de81610af9620186a061100b8664e8d4a5100061202d565b94505050505090565b6000806000600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561243a57600080fd5b505afa15801561244e573d6000803e3d6000fd5b505050506040513d606081101561246457600080fd5b50805160209182015160015460408051630dfe168160e01b8152905193965091945060009384936001600160a01b0390921692630dfe16819260048083019392829003018186803b1580156124b857600080fd5b505afa1580156124cc573d6000803e3d6000fd5b505050506040513d60208110156124e257600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214156125245750506dffffffffffffffffffffffffffff80831690821661253c565b50506dffffffffffffffffffffffffffff8181169083165b6123de81610af984620186a061202d565b6008546000908161255e4785611f10565b90506007544311801561257057508015155b156125a957600061258360075443612e25565b90506125a561259e83610af984670de0b6b3a764000061202d565b8490611e6b565b9250505b6125d48560a0015161099f670de0b6b3a7640000610af9868a6080015161202d90919063ffffffff16565b95945050505050565b600654600154604080516370a0823160e01b815230600482015290516000939284926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561263157600080fd5b505afa158015612645573d6000803e3d6000fd5b505050506040513d602081101561265b57600080fd5b50516005549091504311801561267057508015155b156126a257600061268360055443612fe2565b905061269e61259e83610af984670de0b6b3a764000061202d565b9250505b6126cd846020015161099f670de0b6b3a7640000610af986896000015161202d90919063ffffffff16565b949350505050565b600081836127615760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561272657818101518382015260200161270e565b50505050905090810190601f1680156127535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161276d57fe5b0495945050505050565b600081848411156127c95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561272657818101518382015260200161270e565b505050900390565b60006127dd4783611f10565b9050600754600014806127ee575080155b156127fd5750436007556129dd565b600061280b60075443612e25565b60008054604080516340c10f1960e01b81523060048201526024810185905290519394506001600160a01b03909116926340c10f199260448084019391929182900301818387803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b50506000546009546001600160a01b0391821693506340c10f199250166128a462989680610af9866207a12061202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156128ea57600080fd5b505af11580156128fe573d6000803e3d6000fd5b50506000546001600160a01b031691506340c10f1990507f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d61294a62989680610af9866207a12061202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561299057600080fd5b505af11580156129a4573d6000803e3d6000fd5b505050506129d36129ca83610af9670de0b6b3a76400008561202d90919063ffffffff16565b60085490611e6b565b6008555050436007555b50565b60008054604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a2c57600080fd5b505afa158015612a40573d6000803e3d6000fd5b505050506040513d6020811015612a5657600080fd5b5051905080821115612aed57600080546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018690529151919092169263a9059cbb92604480820193602093909283900390910190829087803b158015612abb57600080fd5b505af1158015612acf573d6000803e3d6000fd5b505050506040513d6020811015612ae557600080fd5b5061127d9050565b600080546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018790529151919092169263a9059cbb92604480820193602093909283900390910190829087803b158015612b4657600080fd5b505af1158015612b5a573d6000803e3d6000fd5b505050506040513d6020811015612b7057600080fd5b5050505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612bc257600080fd5b505afa158015612bd6573d6000803e3d6000fd5b505050506040513d6020811015612bec57600080fd5b50516005549091501580612bfe575080155b15612c0d575043600555611422565b6000612c1b60055443612fe2565b60008054604080516340c10f1960e01b81523060048201526024810185905290519394506001600160a01b03909116926340c10f199260448084019391929182900301818387803b158015612c6f57600080fd5b505af1158015612c83573d6000803e3d6000fd5b50506000546009546001600160a01b0391821693506340c10f19925016612cb462989680610af9866207a12061202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612cfa57600080fd5b505af1158015612d0e573d6000803e3d6000fd5b50506000546001600160a01b031691506340c10f1990507f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d612d5a62989680610af9866207a12061202d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612da057600080fd5b505af1158015612db4573d6000803e3d6000fd5b50505050612de3612dda83610af9670de0b6b3a76400008561202d90919063ffffffff16565b60065490611e6b565b60065543600555600454612df99061afc8611e6b565b4310612e2157612e196004610af96003805461202d90919063ffffffff16565b600355436004555b5050565b6000807f0000000000000000000000000000000000000000000000000000000000b1ea0c8410158015612e7857507f0000000000000000000000000000000000000000000000000000000000b1ea0c8310155b15612fb8577f0000000000000000000000000000000000000000000000000000000000b2670c8411158015612ecd57507f0000000000000000000000000000000000000000000000000000000000b2670c8311155b15612ee357612edc8385611f10565b9050612fb8565b7f0000000000000000000000000000000000000000000000000000000000b2670c8411158015612f3257507f0000000000000000000000000000000000000000000000000000000000b2670c83115b15612f6157612edc7f0000000000000000000000000000000000000000000000000000000000b2670c85611f10565b7f0000000000000000000000000000000000000000000000000000000000b2670c84118015612faf57507f0000000000000000000000000000000000000000000000000000000000b2670c83115b15612fb8575060005b6126cd817f000000000000000000000000000000000000000000000000003b363eba41aaaa61202d565b6000807f0000000000000000000000000000000000000000000000000000000000b1ea0c841015801561303557507f0000000000000000000000000000000000000000000000000000000000b1ea0c8310155b15613047576130448385611f10565b90505b6003546126cd90829061202d565b604051806101200160405280600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152509056fe556e7374616b696e67206d6f7265207468616e2063757272656e746c79207374616b65642e506f6f6c2069732066696e69736865642c206e6f206d6f7265207374616b696e672e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212200a4d01bf19c9be3ae010a82ca714584710abfd893d36fa31692f3ceea195c38f64736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c66fbe50dd33c9aadd65707f7088d597c86fe00f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d
-----Decoded View---------------
Arg [0] : _GOV (address): 0xC66FbE50Dd33c9AAdd65707F7088D597C86fE00F
Arg [1] : _DEV (address): 0xd39A38bD2D2d552f3908ff698a5530aa397fb92d
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c66fbe50dd33c9aadd65707f7088d597c86fe00f
Arg [1] : 000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d
Deployed Bytecode Sourcemap
8657:17965:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9379:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9936:25;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;9936:25:0;;;;;;;;;;;;;;9048:33;;;;;;;;;;;;;:::i;21803:303::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21803:303:0;;;;;;;;:::i;:::-;;9417:33;;;;;;;;;;;;;:::i;25842:102::-;;;;;;;;;;;;;:::i;8802:24::-;;;;;;;;;;;;;:::i;20921:459::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20921:459:0;;:::i;9319:43::-;;;;;;;;;;;;;:::i;8833:18::-;;;;;;;;;;;;;:::i;11338:185::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11338:185:0;-1:-1:-1;;;;;11338:185:0;;:::i;24932:148::-;;;;;;;;;;;;;:::i;9266:38::-;;;;;;;;;;;;;:::i;18376:1012::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18376:1012:0;;;;;;-1:-1:-1;;;;;18376:1012:0;;:::i;25692:122::-;;;;;;;;;;;;;:::i;26251:251::-;;;;;;;;;;;;;:::i;26510:107::-;;;;;;;;;;;;;:::i;8878:28::-;;;;;;;;;;;;;:::i;8921:36::-;;;;;;;;;;;;;:::i;24810:114::-;;;;;;;;;;;;;:::i;20026:869::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20026:869:0;;:::i;8964:58::-;;;;;;;;;;;;;:::i;24621:181::-;;;;;;;;;;;;;:::i;11751:140::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11751:140:0;-1:-1:-1;;;;;11751:140:0;;:::i;24490:123::-;;;;;;;;;;;;;:::i;24252:111::-;;;;;;;;;;;;;:::i;16520:153::-;;;;;;;;;;;;;:::i;9534:33::-;;;;;;;;;;;;;:::i;23858:175::-;;;;;;;;;;;;;:::i;25972:251::-;;;;;;;;;;;;;:::i;11211:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11211:90:0;-1:-1:-1;;;;;11211:90:0;;:::i;10483:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10483:37:0;-1:-1:-1;;;;;10483:37:0;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;10483:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9626:36;;;;;;;;;;;;;:::i;9574:45::-;;;;;;;;;;;;;:::i;21440:305::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21440:305:0;-1:-1:-1;;;;;21440:305:0;;:::i;19414:568::-;;;:::i;15574:126::-;;;;;;;;;;;;;:::i;25108:556::-;;;;;;;;;;;;;:::i;11557:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11557:157:0;-1:-1:-1;;;;;11557:157:0;;:::i;24041:203::-;;;;;;;;;;;;;:::i;9195:44::-;;;;;;;;;;;;;:::i;17756:156::-;;;;;;;;;;;;;:::i;14754:123::-;;;;;;;;;;;;;:::i;9457:33::-;;;;;;;;;;;;;:::i;9088:32::-;;;;;;;;;;;;;:::i;23677:173::-;;;;;;;;;;;;;:::i;9968:33::-;;;;;;;;;;;;;:::i;24371:111::-;;;;;;;;;;;;;:::i;8763:32::-;;;;;;;;;;;;;:::i;9135:41::-;;;;;;;;;;;;;:::i;9379:31::-;;;:::o;9936:25::-;;;-1:-1:-1;;;;;9936:25:0;;:::o;9048:33::-;;;;:::o;21803:303::-;21899:3;;-1:-1:-1;;;;;21899:3:0;21885:10;:17;21877:58;;;;;-1:-1:-1;;;21877:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21963:8:0;;21946:14;21963:8;;;:5;:8;;;;;22005:42;22031:15;22005:21;21969:1;22005:18;:21::i;:::-;:25;;:42::i;:::-;21982:20;;;:65;22086:12;22058:25;;;;:40;-1:-1:-1;;21803:303:0:o;9417:33::-;;;;:::o;25842:102::-;25885:4;25908:28;25924:11;:9;:11::i;:::-;25908;:9;:11::i;:::-;:15;;:28::i;:::-;25901:35;;25842:102;;:::o;8802:24::-;;;-1:-1:-1;;;;;8802:24:0;;:::o;20921:459::-;20999:10;20976:14;20993:17;;;:5;:17;;;;;21029:10;21021:39;;;;;-1:-1:-1;;;21021:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21099:6;21079:1;:16;;;:26;;21071:76;;;;-1:-1:-1;;;21071:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21160:29;21175:10;21187:1;21160:14;:29::i;:::-;21200:27;;:10;;:27;;;;;21220:6;;21200:27;;;;21220:6;21200:10;:27;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21259:16:0;;;;:28;;21280:6;21259:20;:28::i;:::-;21240:16;;;:47;;;21340:21;;21319:53;;21367:4;;21319:43;;21240:47;21319:20;:43::i;:::-;:47;;:53::i;:::-;21298:18;;;;:74;-1:-1:-1;20921:459:0:o;9319:43::-;9357:5;9319:43;:::o;8833:18::-;;;-1:-1:-1;;;;;8833:18:0;;:::o;11338:185::-;11135:10;;-1:-1:-1;;;;;11135:10:0;11121;:24;11113:33;;;;;;11437:1:::1;11408:5:::0;-1:-1:-1;;;;;11408:5:0::1;:31:::0;11400:69:::1;;;::::0;;-1:-1:-1;;;11400:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;11480:5;:35:::0;;-1:-1:-1;;;;;;11480:35:0::1;-1:-1:-1::0;;;;;11480:35:0;;;::::1;::::0;;;::::1;::::0;;11338:185::o;24932:148::-;9238:1;25011:2;;:27;;;-1:-1:-1;;;25011:27:0;;25032:4;25011:27;;;;;;24988:4;;25011:61;;25068:3;;25011:52;;-1:-1:-1;;;;;25011:2:0;;;;:12;;:27;;;;;;;;;;;;;;;:2;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25011:27:0;;:31;:52::i;9266:38::-;;;:::o;18376:1012::-;18455:9;18468:10;18455:23;18447:58;;;;;-1:-1:-1;;;18447:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18540:11;18524:12;:27;;18516:64;;;;;-1:-1:-1;;;18516:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18608:1;18599:6;:10;18591:36;;;;;-1:-1:-1;;;18591:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18662:2;;:27;;;-1:-1:-1;;;18662:27:0;;18683:4;18662:27;;;;;;18640:19;;-1:-1:-1;;;;;18662:2:0;;:12;;:27;;;;;;;;;;;;;;:2;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18662:27:0;;-1:-1:-1;18702:26:0;18717:10;18702:14;:26::i;:::-;18739:2;;:50;;;;;;18755:10;18739:50;;;;18775:4;18739:50;;;;;;;;;;;;-1:-1:-1;;;;;18739:2:0;;;;:15;;:50;;;;;;;;;;;;;;;:2;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18825:10:0;18802:14;18819:17;;;:5;18739:50;18819:17;;;;18866:16;;:28;;18887:6;18866:20;:28::i;:::-;18847:47;;;18947:20;;18926:52;;18973:4;;18926:42;;18847:47;18926:20;:42::i;:52::-;18905:18;;;:73;18995:23;;;;;;18994:24;:109;;;;-1:-1:-1;19055:48:0;19099:3;19055:39;:14;9238:1;19055:18;:39::i;:48::-;19035:16;;:68;;18994:109;18991:225;;;19119:23;;;:30;;-1:-1:-1;;19119:30:0;19145:4;19119:30;;;19192:12;19164:25;;;:40;18991:225;19231:16;;;;-1:-1:-1;;;;;19231:16:0;:30;:56;;;;-1:-1:-1;;;;;;19265:22:0;;;;19231:56;:95;;;;-1:-1:-1;;;;;;19304:22:0;;19316:10;19304:22;;19231:95;19228:153;;;19342:16;;;:27;;-1:-1:-1;;;;;;19342:27:0;-1:-1:-1;;;;;19342:27:0;;;;;19228:153;18376:1012;;;;:::o;25692:122::-;25733:4;25756:50;25801:4;25756:40;25782:13;:11;:13::i;:::-;25756:21;;:25;:40::i;26251:251::-;26294:4;26313:11;:9;:11::i;:::-;26310:33;;-1:-1:-1;26339:1:0;26332:8;;26310:33;26360:134;26482:11;:9;:11::i;:::-;26360:117;26473:3;26360:90;26436:13;:11;:13::i;:::-;26360:71;26412:18;:16;:18::i;:::-;26360:29;:16;26381:7;26360:20;:29::i;:::-;:51;;:71::i;26510:107::-;26556:4;26579:30;26598:10;26579:18;:30::i;8878:28::-;;;;:::o;8921:36::-;;;;:::o;24810:114::-;24890:10;24858:7;24884:17;;;:5;:17;;;;;:32;;;-1:-1:-1;;;;;24884:32:0;24810:114;:::o;20026:869::-;20104:10;20081:14;20098:17;;;:5;:17;;;;;20134:10;20126:38;;;;;-1:-1:-1;;;20126:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20183:16;;:26;-1:-1:-1;20183:26:0;20175:76;;;;-1:-1:-1;;;20175:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20264:26;20279:10;20264:14;:26::i;:::-;20301:2;;:31;;;-1:-1:-1;;;20301:31:0;;20313:10;20301:31;;;;;;;;;;;;-1:-1:-1;;;;;20301:2:0;;;;:11;;:31;;;;;;;;;;;;;;;:2;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20364:16:0;;:28;;20385:6;20364:20;:28::i;:::-;20345:47;;;20445:20;;20424:52;;20471:4;;20424:42;;20345:47;20424:20;:42::i;:52::-;20403:18;;;;:73;;;;20505:2;:27;;;-1:-1:-1;;;20505:27:0;;20526:4;20505:27;;;;;;20489:13;;-1:-1:-1;;;;;20505:2:0;;:12;;:27;;;;;;;;;;;;;;:2;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20505:27:0;20548:23;;;;20505:27;;-1:-1:-1;20548:23:0;;:101;;;;-1:-1:-1;20607:42:0;20645:3;20607:33;:8;9238:1;20607:12;:33::i;:42::-;20588:16;;:61;20548:101;:158;;;-1:-1:-1;20666:23:0;;;;;;:40;;;;-1:-1:-1;20693:13:0;;20666:40;20545:343;;;20745:30;20764:10;20745:18;:30::i;:::-;20722:20;;;:53;20790:23;;;:31;;-1:-1:-1;;20790:31:0;;;20864:12;20836:25;;;:40;20545:343;20026:869;;;:::o;8964:58::-;9017:5;8964:58;:::o;24621:181::-;24671:4;24705:9;24690:12;:24;24687:63;;;-1:-1:-1;24737:1:0;24730:8;;24687:63;24767:27;:9;24781:12;24767:13;:27::i;11751:140::-;11135:10;;-1:-1:-1;;;;;11135:10:0;11121;:24;11113:33;;;;;;11817:3:::1;::::0;-1:-1:-1;;;;;11817:3:0::1;:17:::0;11809:53:::1;;;::::0;;-1:-1:-1;;;11809:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;11873:3;:10:::0;;-1:-1:-1;;;;;;11873:10:0::1;-1:-1:-1::0;;;;;11873:10:0;;;::::1;::::0;;;::::1;::::0;;11751:140::o;24490:123::-;24573:10;24544:4;24567:17;;;:5;:17;;;;;:38;;;24490:123;:::o;24252:111::-;24329:10;24300:4;24323:17;;;:5;:17;;;;;:32;24252:111;:::o;16520:153::-;16588:11;16572:12;:27;;16564:64;;;;;-1:-1:-1;;;16564:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16639:26;16654:10;16639:14;:26::i;:::-;16520:153::o;9534:33::-;;;:::o;23858:175::-;23910:4;23945:11;23930:12;:26;23927:65;;;-1:-1:-1;23979:1:0;23972:8;;23927:65;-1:-1:-1;24009:16:0;;23858:175;:::o;25972:251::-;26015:4;26034:11;:9;:11::i;:::-;26031:33;;-1:-1:-1;26060:1:0;26053:8;;26031:33;26081:134;26203:11;:9;:11::i;:::-;26081:117;26194:3;26081:90;26157:13;:11;:13::i;:::-;26081:71;26133:18;:16;:18::i;:::-;26081:16;;:29;;26102:7;26081:20;:29::i;11211:90::-;11135:10;;-1:-1:-1;;;;;11135:10:0;11121;:24;11113:33;;;;;;11276:10:::1;:17:::0;;-1:-1:-1;;;;;;11276:17:0::1;-1:-1:-1::0;;;;;11276:17:0;;;::::1;::::0;;;::::1;::::0;;11211:90::o;10483:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10483:37:0;;;;;;;;;;;;;;;;:::o;9626:36::-;9659:3;9626:36;:::o;9574:45::-;9615:4;9574:45;:::o;21440:305::-;21499:4;21515:13;;:::i;:::-;-1:-1:-1;;;;;;21531:8:0;;;;;;;:5;:8;;;;;;;;;21515:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21550:188;;21599:69;21624:43;21641:1;:25;;;21624:12;:16;;:43;;;;:::i;:::-;21599:20;;;;;:24;:69::i;:::-;21592:76;;;;;21550:188;21706:20;;;;-1:-1:-1;21440:305:0;;;;:::o;19414:568::-;19472:9;19485:10;19472:23;19464:58;;;;;-1:-1:-1;;;19464:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19557:11;19541:12;:27;;19533:64;;;;;-1:-1:-1;;;19533:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19632:9;19616:12;:25;;19608:72;;;;-1:-1:-1;;;19608:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19711:1;19699:9;:13;19691:40;;;;;-1:-1:-1;;;19691:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19744:37;19759:10;19771:9;19744:14;:37::i;:::-;19817:10;19794:14;19811:17;;;:5;:17;;;;;19858:16;;;;:31;;19879:9;19858:20;:31::i;:::-;19839:16;;;:50;;;19942:21;;19921:53;;19969:4;;19921:43;;19839:50;19921:20;:43::i;:53::-;19900:18;;;;:74;19414:568::o;15574:126::-;15677:10;15627:4;15671:17;;;:5;:17;;;;;;;;15650:42;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15650:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15627:4;15650:20;:42::i;25108:556::-;25168:2;;:16;;;;;;;;25149:4;;-1:-1:-1;;;;;25168:2:0;;:14;;:16;;;;;;;;;;;;;;:2;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25168:16:0;25165:38;;-1:-1:-1;25199:1:0;25192:8;;25165:38;25216:17;25235;25258:2;;;;;;;;;-1:-1:-1;;;;;25258:2:0;-1:-1:-1;;;;;25258:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25258:16:0;;;;;;;25324:2;;25258:16;25324:11;;-1:-1:-1;;;25324:11:0;;;;25258:16;;-1:-1:-1;25258:16:0;;-1:-1:-1;25285:15:0;;-1:-1:-1;;;;;25324:2:0;;;;:9;;:11;;;;;25258:16;25324:11;;;;;;:2;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25324:11:0;-1:-1:-1;;;;;25316:19:0;9747:42;25316:19;25313:125;;;-1:-1:-1;25351:22:0;;;25313:125;;;-1:-1:-1;25404:22:0;;;25313:125;25450:15;25468:48;25499:2;;;;;;;;;-1:-1:-1;;;;;25499:2:0;-1:-1:-1;;;;;25499:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25499:16:0;25468:26;25492:1;25468:19;:10;25483:3;25468:14;:19::i;:48::-;25450:66;;25527:15;25545:38;25579:3;25545:29;25560:13;:11;:13::i;:::-;25545:10;;:14;:29::i;:38::-;25603:2;;:27;;;-1:-1:-1;;;25603:27:0;;25624:4;25603:27;;;;;;25527:56;;-1:-1:-1;25603:53:0;;25651:4;;25603:43;;25527:56;;-1:-1:-1;;;;;25603:2:0;;;;:12;;:27;;;;;;;;;;;;;;;:2;:27;;;;;;;;;;:53;25596:60;;;;;;;25108:556;:::o;11557:157::-;11135:10;;-1:-1:-1;;;;;11135:10:0;11121;:24;11113:33;;;;;;11621:2:::1;::::0;-1:-1:-1;;;;;11621:2:0::1;:23:::0;11613:58:::1;;;::::0;;-1:-1:-1;;;11613:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;11682:2;:24:::0;;-1:-1:-1;;;;;;11682:24:0::1;-1:-1:-1::0;;;;;11682:24:0;;;::::1;::::0;;;::::1;::::0;;11557:157::o;24041:203::-;24093:4;24128:11;24113:12;:26;:54;;;;24158:9;24143:12;:24;24113:54;24110:93;;;-1:-1:-1;24190:1:0;24183:8;;24110:93;-1:-1:-1;24220:16:0;24041:203;:::o;9195:44::-;9238:1;9195:44;:::o;17756:156::-;17824:11;17808:12;:27;;17800:64;;;;;-1:-1:-1;;;17800:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17875:29;17890:10;17902:1;17875:14;:29::i;14754:123::-;14857:10;14807:4;14851:17;;;:5;:17;;;;;;;;14830:39;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14830:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:39::i;9457:33::-;;;;:::o;9088:32::-;;;;:::o;23677:173::-;23737:4;23771:11;23756:12;:26;23753:43;;;-1:-1:-1;23792:1:0;23785:8;;23753:43;23813:29;:11;23829:12;23813:15;:29::i;9968:33::-;;;:::o;24371:111::-;24448:10;24419:4;24442:17;;;:5;:17;;;;;:32;;;24371:111;:::o;8763:32::-;;;-1:-1:-1;;;;;8763:32:0;;:::o;9135:41::-;9175:1;9135:41;:::o;1586:181::-;1644:7;1676:5;;;1700:6;;;;1692:46;;;;;-1:-1:-1;;;1692:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1758:1;-1:-1:-1;1586:181:0;;;;;:::o;3887:132::-;3945:7;3972:39;3976:1;3979;3972:39;;;;;;;;;;;;;;;;;:3;:39::i;2050:136::-;2108:7;2135:43;2139:1;2142;2135:43;;;;;;;;;;;;;;;;;:3;:43::i;17950:384::-;-1:-1:-1;;;;;18040:8:0;;;18023:14;18040:8;;;:5;:8;;;;;;;;18074:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18098:13;18074:20;:38::i;:::-;18059:53;;18123:27;18136:13;18123:12;:27::i;:::-;18166:11;;18163:77;;18193:35;18217:1;18220:7;18193:23;:35::i;:::-;18273:53;18321:4;18273:43;18294:21;;18273:1;:16;;;:20;;:43;;;;:::i;:53::-;18252:1;:18;;:74;;;;17950:384;;;;:::o;2940:471::-;2998:7;3243:6;3239:47;;-1:-1:-1;3273:1:0;3266:8;;3239:47;3310:5;;;3314:1;3310;:5;:1;3334:5;;;;;:10;3326:56;;;;-1:-1:-1;;;3326:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16707:1014;-1:-1:-1;;;;;16777:8:0;;;16760:14;16777:8;;;:5;:8;;;;;;;;16811:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:23::i;:::-;16796:38;;16845:14;:12;:14::i;:::-;16875:11;;16872:756;;16905:16;;;;-1:-1:-1;;;;;16905:16:0;16902:715;;16955:35;16979:1;16982:7;16955:23;:35::i;:::-;17009:5;;-1:-1:-1;;;;;17009:5:0;:10;17020:1;17023:38;17057:3;17023:29;:7;9175:1;17023:11;:29::i;:38::-;17009:53;;;;;;;;;;;;;-1:-1:-1;;;;;17009:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16902:715;;;17101:19;17123:45;17164:3;17123:36;17135:23;9175:1;17156;17135:20;:23::i;17123:45::-;17101:67;-1:-1:-1;17187:15:0;17205:27;:7;17101:67;17205:11;:27::i;:::-;17187:45;;17253:38;17277:1;17280:10;17253:23;:38::i;:::-;17334:16;;;;17310:57;;-1:-1:-1;;;;;17334:16:0;17352:14;17310:23;:57::i;:::-;17422:16;;;;-1:-1:-1;;;;;17422:16:0;17388:25;17416:23;;;:5;:23;;;;;17494:33;;;;:107;;17586:14;17494:91;:107::i;:::-;17458:33;;;;:143;-1:-1:-1;;16902:715:0;17682:20;;17661:16;;:52;;17708:4;;17661:42;;:20;:42::i;:52::-;17640:1;:18;;:73;;;;16707:1014;;;:::o;22513:601::-;22557:4;22574:17;22593;9851:42;-1:-1:-1;;;;;22616:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22616:27:0;;;;;;;;22720:22;;-1:-1:-1;;;22720:22:0;;;;22616:27;;-1:-1:-1;22616:27:0;;-1:-1:-1;22654:16:0;;;;9851:42;;22720:20;;:22;;;;;22616:27;;22720:22;;;;;9851:42;22720:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22720:22:0;-1:-1:-1;;;;;22712:30:0;9747:42;22712:30;22709:212;;;-1:-1:-1;;22758:22:0;22795:23;;;;22758:22;;22709:212;;;-1:-1:-1;;22849:23:0;;;;;22887:22;;22709:212;23054:52;23095:10;23054:36;9659:3;23054:21;:11;23070:4;23054:15;:21::i;:52::-;23047:59;;;;;;22513:601;:::o;23159:466::-;23208:4;23225:17;23244;23267:2;;;;;;;;;-1:-1:-1;;;;;23267:2:0;-1:-1:-1;;;;;23267:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23267:16:0;;;;;;;23363:2;;23267:16;23363:11;;-1:-1:-1;;;23363:11:0;;;;23267:16;;-1:-1:-1;23267:16:0;;-1:-1:-1;23296:15:0;;;;-1:-1:-1;;;;;23363:2:0;;;;:9;;:11;;;;;23267:16;23363:11;;;;;:2;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23363:11:0;-1:-1:-1;;;;;23355:19:0;9747:42;23355:19;23352:203;;;-1:-1:-1;;23390:22:0;;;;;23427:24;;23352:203;;;-1:-1:-1;;23482:24:0;23521:22;;;;23482:24;;23352:203;23574:43;23604:12;23574:25;:10;9659:3;23574:14;:25::i;15745:714::-;15877:21;;15831:4;;;15989:40;:21;16015:13;15989:25;:40::i;:::-;15972:57;;16061:21;;16046:12;:36;:54;;;;-1:-1:-1;16086:14:0;;;16046:54;16042:298;;;16117:18;16138:52;16154:21;;16177:12;16138:15;:52::i;:::-;16117:73;-1:-1:-1;16230:98:0;16275:38;16303:9;16275:23;16117:73;16293:4;16275:17;:23::i;:38::-;16230:22;;:26;:98::i;:::-;16205:123;;16042:298;;16359:92;16432:1;:18;;;16359:54;16408:4;16359:44;16380:22;16359:1;:16;;;:20;;:44;;;;:::i;:92::-;16352:99;15745:714;-1:-1:-1;;;;;15745:714:0:o;14918:614::-;15029:20;;15076:2;;:27;;;-1:-1:-1;;;15076:27:0;;15097:4;15076:27;;;;;;14984:4;;15029:20;14984:4;;-1:-1:-1;;;;;15076:2:0;;;;:12;;:27;;;;;;;;;;;;;;;:2;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15076:27:0;15135:21;;15076:27;;-1:-1:-1;15120:12:0;:36;:53;;;;-1:-1:-1;15160:13:0;;;15120:53;15116:294;;;15190:18;15211:52;15227:21;;15250:12;15211:15;:52::i;:::-;15190:73;-1:-1:-1;15302:96:0;15346:37;15374:8;15346:23;15190:73;15364:4;15346:17;:23::i;15302:96::-;15278:120;;15116:294;;15429:95;15505:1;:18;;;15429:53;15477:4;15429:43;15450:21;15429:1;:16;;;:20;;:43;;;;:::i;:95::-;15422:102;14918:614;-1:-1:-1;;;;14918:614:0:o;4515:278::-;4601:7;4636:12;4629:5;4621:28;;;;-1:-1:-1;;;4621:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4660:9;4676:1;4672;:5;;;;;;;4515:278;-1:-1:-1;;;;;4515:278:0:o;2489:192::-;2575:7;2611:12;2603:6;;;;2595:29;;;;-1:-1:-1;;;2595:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2647:5:0;;;2489:192::o;13925:762::-;14049:14;14066:40;:21;14092:13;14066:25;:40::i;:::-;14049:57;;14123:21;;14148:1;14123:26;:44;;;-1:-1:-1;14153:14:0;;14123:44;14119:134;;;-1:-1:-1;14208:12:0;14184:21;:36;14235:7;;14119:134;14265:11;14279:52;14295:21;;14318:12;14279:15;:52::i;:::-;14352:5;;;:33;;;-1:-1:-1;;;14352:33:0;;14371:4;14352:33;;;;;;;;;;;;14265:66;;-1:-1:-1;;;;;;14352:5:0;;;;:10;;:33;;;;;:5;;:33;;;;;;:5;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14396:5:0;;14407:10;;-1:-1:-1;;;;;14396:5:0;;;;-1:-1:-1;14396:10:0;;-1:-1:-1;14407:10:0;14419:43;14448:13;14419:24;:6;10037;14419:10;:24::i;:43::-;14396:67;;;;;;;;;;;;;-1:-1:-1;;;;;14396:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14474:5:0;;-1:-1:-1;;;;;14474:5:0;;-1:-1:-1;14474:10:0;;-1:-1:-1;14485:8:0;14495:41;14522:13;14495:22;:6;10090;14495:10;:22::i;:41::-;14474:63;;;;;;;;;;;;;-1:-1:-1;;;;;14474:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14574:58;14600:31;14621:9;14600:16;14611:4;14600:6;:10;;:16;;;;:::i;:31::-;14574:21;;;:25;:58::i;:::-;14550:21;:82;-1:-1:-1;;14667:12:0;14643:21;:36;13925:762;;:::o;22148:269::-;22227:8;22238:5;;:30;;;-1:-1:-1;;;22238:30:0;;22262:4;22238:30;;;;;;-1:-1:-1;;;;;22238:5:0;;;;:15;;:30;;;;;;;;;;;;;;;:5;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22238:30:0;;-1:-1:-1;22283:13:0;;;22279:131;;;22313:5;;;:24;;;-1:-1:-1;;;22313:24:0;;-1:-1:-1;;;;;22313:24:0;;;;;;;;;;;;;;;:5;;;;;:14;;:24;;;;;;;;;;;;;;;;;;:5;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22279:131:0;;-1:-1:-1;22279:131:0;;22370:5;;;:28;;;-1:-1:-1;;;22370:28:0;;-1:-1:-1;;;;;22370:28:0;;;;;;;;;;;;;;;:5;;;;;:14;;:28;;;;;;;;;;;;;;;;;;:5;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22148:269:0;;;:::o;12988:908::-;13047:2;;:27;;;-1:-1:-1;;;13047:27:0;;13068:4;13047:27;;;;;;13031:13;;-1:-1:-1;;;;;13047:2:0;;:12;;:27;;;;;;;;;;;;;;:2;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13047:27:0;13091:21;;13047:27;;-1:-1:-1;13091:26:0;;:43;;-1:-1:-1;13121:13:0;;13091:43;13087:133;;;-1:-1:-1;13175:12:0;13151:21;:36;13202:7;;13087:133;13232:11;13246:52;13262:21;;13285:12;13246:15;:52::i;:::-;13319:5;;;:33;;;-1:-1:-1;;;13319:33:0;;13338:4;13319:33;;;;;;;;;;;;13232:66;;-1:-1:-1;;;;;;13319:5:0;;;;:10;;:33;;;;;:5;;:33;;;;;;:5;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13363:5:0;;13374:10;;-1:-1:-1;;;;;13363:5:0;;;;-1:-1:-1;13363:10:0;;-1:-1:-1;13374:10:0;13386:43;13415:13;13386:24;:6;10037;13386:10;:24::i;:43::-;13363:67;;;;;;;;;;;;;-1:-1:-1;;;;;13363:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13441:5:0;;-1:-1:-1;;;;;13441:5:0;;-1:-1:-1;13441:10:0;;-1:-1:-1;13452:8:0;13462:41;13489:13;13462:22;:6;10090;13462:10;:22::i;:41::-;13441:63;;;;;;;;;;;;;-1:-1:-1;;;;;13441:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13540:80;13579:30;13600:8;13579:16;13590:4;13579:6;:10;;:16;;;;:::i;:30::-;13540:20;;;:24;:80::i;:::-;13517:20;:103;13655:12;13631:21;:36;13699:24;;:59;;9017:5;13699:28;:59::i;:::-;13683:12;:75;13680:209;;13793:30;13821:1;13793:23;13814:1;13793:16;;:20;;:23;;;;:::i;:30::-;13774:16;:49;13865:12;13838:24;:39;13680:209;12988:908;;:::o;12257:673::-;12326:4;12342:11;12378;12369:5;:20;;:42;;;;;12400:11;12393:3;:18;;12369:42;12366:509;;;12479:9;12470:5;:18;;:38;;;;;12499:9;12492:3;:16;;12470:38;12467:397;;;12537:14;:3;12545:5;12537:7;:14::i;:::-;12528:23;;12467:397;;;12642:9;12633:5;:18;;:37;;;;;12661:9;12655:3;:15;12633:37;12630:234;;;12699:20;:9;12713:5;12699:13;:20::i;12630:234::-;12790:9;12782:5;:17;:36;;;;;12809:9;12803:3;:15;12782:36;12779:85;;;-1:-1:-1;12847:1:0;12779:85;12894:28;:6;12905:16;12894:10;:28::i;11964:260::-;12033:4;12049:11;12085;12076:5;:20;;:42;;;;;12107:11;12100:3;:18;;12076:42;12073:96;;;12143:14;:3;12151:5;12143:7;:14::i;:::-;12134:23;;12073:96;12199:16;;12188:28;;:6;;:10;:28::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://0a4d01bf19c9be3ae010a82ca714584710abfd893d36fa31692f3ceea195c38f
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.