ETH Price: $3,398.78 (-0.66%)

Token

Savix (SVX)
 

Overview

Max Total Supply

223,666.70668902 SVX

Holders

1,304 (0.00%)

Market

Price

$0.08 @ 0.000023 ETH

Onchain Market Cap

$17,253.90

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000432 SVX

Value
$0.00 ( ~0 Eth) [0.0000%]
0xf6d9942a45ff849bebf9ace7cb8fd7e2aff35e37
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The DeFi answer to traditional savings accounts - Redefining passive income. It is the first predictable embedded staking protocol with gas-free staking rewards directly to a users wallet, compoundable with other DeFi projects.

# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Savix

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
petersburg EvmVersion, Audited
File 1 of 4 : Savix.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
import "./IERC20.sol";
import "./SafeMath.sol";
import "./SavixSupply.sol";

contract Savix is IERC20
{
    using SafeMath for uint256;

    address private _owner;
    string private constant NAME = "Savix";
    string private constant SYMBOL = "SVX";
    uint private constant DECIMALS = 9;
    uint private _constGradient = 0;
    address private constant BURNADDR = 0x000000000000000000000000000000000000dEaD; // global burn address

    bool private _stakingActive = false;
    uint256 private _stakingSince = 0;

    uint256 private constant MAX_UINT256 = 2**256 - 1;
    uint256 private constant INITIAL_TOKEN_SUPPLY = 10**5 * 10**DECIMALS;

    // TOTAL_FRAGMENTS is a multiple of INITIAL_TOKEN_SUPPLY so that _fragmentsPerToken is an integer.
    // Use the highest value that fits in a uint256 for max granularity.
    uint256 private constant TOTAL_FRAGMENTS = MAX_UINT256 - (MAX_UINT256 % INITIAL_TOKEN_SUPPLY);

    uint256 private _totalSupply = INITIAL_TOKEN_SUPPLY;
    uint256 private _lastTotalSupply = INITIAL_TOKEN_SUPPLY;
    // ** added: new variable _adjustTime
    uint256 private _adjustTime = 0;
    uint256 private _lastAdjustTime = 0;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    uint256 private _burnAmount;
    uint256[2][] private _supplyMap;

    constructor() public
    {
        _owner = msg.sender;
        
         _totalSupply = INITIAL_TOKEN_SUPPLY;
        _balances[_owner] = TOTAL_FRAGMENTS;

        _supplyMap.push([0, 100000 * 10**DECIMALS]);
        _supplyMap.push([7 * SavixSupply.SECPERDAY, 115000 * 10**DECIMALS]);
        _supplyMap.push([30 * SavixSupply.SECPERDAY, 130000 * 10**DECIMALS]);
        _supplyMap.push([6 * 30 * SavixSupply.SECPERDAY, 160000 * 10**DECIMALS]);
        _supplyMap.push([12 * 30 * SavixSupply.SECPERDAY, 185000 * 10**DECIMALS]);
        _supplyMap.push([18 * 30 * SavixSupply.SECPERDAY, 215000 * 10**DECIMALS]);
        _supplyMap.push([24 * 30 * SavixSupply.SECPERDAY, 240000 * 10**DECIMALS]);
        _supplyMap.push([48 * 30 * SavixSupply.SECPERDAY, 300000 * 10**DECIMALS]);
        // ** changed: gradient changed for slightly higher interest in far future 
        // _constGradient = SafeMath.div(INITIAL_TOKEN_SUPPLY * CONSTINTEREST, 360 * SavixSupply.SECPERDAY * 100); ** old version
        _constGradient = 8 * 10**(DECIMALS - 4);
    }
    
    modifier validRecipient(address to)
    {
        require(to != address(0) && to != address(this), "Invalid Recipient");
        _;
    }
    
    modifier onlyOwner 
    {
        require(msg.sender == _owner, "Only owner can call this function.");
        _;
    }

    function supplyMap() external view returns (uint256[2][] memory) 
    {
        return _supplyMap;
    }

    function initialSupply() external pure returns (uint256) 
    {
        return INITIAL_TOKEN_SUPPLY;
    }

    function finalGradient() external view returns (uint) 
    {
        return _constGradient;
    }

    function lastAdjustTime() external view returns (uint) 
    {
        return _lastAdjustTime;
    }

    function lastTotalSupply() external view returns (uint) 
    {
        return _lastTotalSupply;
    }

    function startStaking() 
      external 
      onlyOwner
    {
        _stakingActive = true;
        _stakingSince = block.timestamp;
        _totalSupply = _supplyMap[0][1];
        _lastTotalSupply = _totalSupply;
        _lastAdjustTime = 0;
        // ** added: new variable _adjustTime
        _adjustTime = 0;
    }

    function name() external pure returns (string memory) 
    {
        return NAME;
    }

    function symbol() external pure returns (string memory)
    {
        return SYMBOL;
    }

    function decimals() external pure returns (uint8)
    {
        return uint8(DECIMALS);
    }

    function stakingActive() external view returns (bool)
    {
        return _stakingActive;
    }

    function stakingSince() external view returns (uint256)
    {
        return _stakingSince;
    }

    function stakingFrequence() external pure returns (uint)
    {
        return SavixSupply.MINTIMEWIN;
    }

    
    function totalSupply() override external view returns (uint256)
    {
        // since we cannot directly decrease total supply without affecting all balances, we
        // track burned tokens and substract them here
        // we also substact burned tokens from the global burn address
        return _totalSupply - _burnAmount.div(TOTAL_FRAGMENTS.div(_totalSupply)) - balanceOf(BURNADDR);
    }

    // dailyInterest rate is given in percent with 2 decimals => result has to be divede by 10**9 to get correct number with precision 2
    function dailyInterest() external view returns (uint)
    {
            return SavixSupply.getDailyInterest(block.timestamp - _stakingSince, _lastAdjustTime, _totalSupply, _lastTotalSupply); 
    }

    // ** new method
    // yearlyInterest rate is given in percent with 2 decimals => result has to be divede by 10**9 to get correct number with precision 2
    function yearlyInterest() external view returns (uint)
    {
            return SavixSupply.getYearlyInterest(block.timestamp - _stakingSince, _lastAdjustTime, _totalSupply, _lastTotalSupply); 
    }

    function balanceOf(address account) override public view returns (uint256)
    {
        return _balances[account].div(TOTAL_FRAGMENTS.div(_totalSupply));
    }

    function _calculateFragments(uint256 value) internal returns (uint256)
    {
        if(_stakingActive && (block.timestamp - _stakingSince) - _lastAdjustTime >= SavixSupply.MINTIMEWIN)
        {
            uint256 newSupply = SavixSupply.getAdjustedSupply(_supplyMap, (block.timestamp - _stakingSince), _constGradient);
            if (_totalSupply != newSupply)
            {
              // ** changed: assignment order
              // ** added: new variable _adjustTime
              _lastAdjustTime = _adjustTime;
              _adjustTime = block.timestamp - _stakingSince;
              _lastTotalSupply = _totalSupply;
              _totalSupply = newSupply;
            }
        }
        // return value.mul(TOTAL_FRAGMENTS.div(_totalSupply));  ** old version
        // return TOTAL_FRAGMENTS.mul(value).div(_totalSupply);  ** this would be appropriate in order to multiply before division
        // But => leads to multiplication overflow due to extremly high numbers in which supply fragments are held 
        return TOTAL_FRAGMENTS.div(_totalSupply).mul(value);
    }

    function burn(uint256 value)
      external
      returns (bool)
    {
        uint256 rAmount = _calculateFragments(value);
        _balances[msg.sender] = _balances[msg.sender].sub(rAmount,"burn amount exceeds balance");
        // cannot modify totalsupply directly, otherwise all balances would decrease
        // we keep track of the burn amount and use it in the totalSupply() function to correctly
        // compute the totalsupply
        // also, burned tokens have to be stored as fragments (percentage) of the total supply
        // This means they gets affected by staking: the burned amount will automatically increase accordingly
        _burnAmount += rAmount;
        emit Transfer(msg.sender, address(0), value);
        return true;
    }

    function getBurnAmount() external view returns (uint256)
    {
        return _burnAmount.div(TOTAL_FRAGMENTS.div(_totalSupply)) + balanceOf(BURNADDR);
    }

    function transfer(address to, uint256 value) override
        external
        validRecipient(to)
        returns (bool)
    {
        uint256 rAmount = _calculateFragments(value);
        _balances[msg.sender] = _balances[msg.sender].sub(rAmount,"ERC20: transfer amount exceeds balance");
        _balances[to] = _balances[to].add(rAmount);
        emit Transfer(msg.sender, to, value);       
        return true;
    }

    /**
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 value) 
        override
        external
        returns (bool)
    {
        _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(value,"ERC20: transfer amount exceeds allowance");
        uint256 rAmount = _calculateFragments(value);

        _balances[sender] = _balances[sender].sub(rAmount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(rAmount);
        emit Transfer(sender, recipient, value);
        return true;
    }

    function allowance(address owner, address spender) override external view returns (uint256)
    {
        return _allowances[owner][spender];
    }

    
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool)
    {
        uint256 newValue = _allowances[msg.sender][spender].add(addedValue);
        _allowances[msg.sender][spender] = 0;
        _approve(msg.sender, spender, newValue);
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool)
    {
        uint256 newValue = _allowances[msg.sender][spender].sub(subtractedValue,"ERC20: decreased allowance below zero");
        _allowances[msg.sender][spender] = 0;
        _approve(msg.sender, spender, newValue);
        return true;
    }

    
    function approve(address spender, uint256 value) override external returns (bool) 
    {
        _allowances[msg.sender][spender] = 0;
        _approve(msg.sender, spender, value);
        return true;
    }

    function _approve(address owner, address spender, uint256 value) internal 
    {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        // In order to exclude front-running attacks:
        // To change the approve amount you first have to reduce the addresses`
        // allowance to zero by calling `approve(_spender, 0)` if it is not
        // already 0 to mitigate the race condition described here:
        // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require((value == 0 || _allowances[owner][spender] == 0), "possible front-running attack");

        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    // use same logic to adjust balances as in function transfer
    // only distribute from owner wallet (ecosystem fund)
    // gas friendly way to do airdrops or giveaways
    function distributeTokens(address[] memory addresses, uint256 value)
        external
        onlyOwner
    {
        uint256 rAmount = _calculateFragments(value);
        _balances[_owner] = _balances[_owner].sub(rAmount * addresses.length,"ERC20: distribution total amount exceeds balance");
        
        uint256 addressesLength = addresses.length;
        for (uint i = 0; i < addressesLength; i++)
        {
            _balances[addresses[i]] = _balances[addresses[i]].add(rAmount);
            emit Transfer(_owner, addresses[i], value);       
        }
    }

    // use same logic to adjust balances as in function transfer
    // only distribute from owner wallet (ecosystem fund)
    // gas friendly way to do airdrops or giveaways
    function distributeTokensFlexSum(address[] memory addresses, uint256[] memory values)
        external
        onlyOwner
    {
        // there has to be exacly 1 value per address
        require(addresses.length == values.length, "there has to be exacly 1 value per address"); // Overflow check

        uint256 valuesum = 0;
        uint256 valueLength = values.length;
        for (uint i = 0; i < valueLength; i++)
            valuesum += values[i];

        _balances[_owner] = _balances[_owner].sub( _calculateFragments(valuesum),"ERC20: distribution total amount exceeds balance");

        uint256 addressesLength = addresses.length;
        for (uint i = 0; i < addressesLength; i++)
        {
            _balances[addresses[i]] = _balances[addresses[i]].add(_calculateFragments(values[i]));
            emit Transfer(_owner, addresses[i], values[i]);       
        }
    }
    
    function getOwner() 
      external
      view 
    returns(address)
    {
        return _owner;
    }
}

File 2 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 4 : SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

/**
 * @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) public 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) public 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) public 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) public 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) public 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) public pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) public 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) public pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 4 of 4 : SavixSupply.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
import "./SafeMath.sol";

/**
 * @dev savix interest and supply calculations.
 *
*/
 library SavixSupply {
     
    uint256 public constant MAX_UINT256 = 2**256 - 1;
    uint256 public constant MAX_UINT128 = 2**128 - 1;
    uint public constant MINTIMEWIN = 7200; // 2 hours
    uint public constant SECPERDAY = 3600 * 24;
    uint public constant DECIMALS = 9;

    struct SupplyWinBoundary 
    {
        uint256 x1;
        uint256 x2;
        uint256 y1;
        uint256 y2;
    }

    function getSupplyWindow(uint256[2][] memory map, uint256 calcTime) internal pure returns (SupplyWinBoundary memory)
    {
        SupplyWinBoundary memory winBound;
        
        winBound.x1 = 0;
        winBound.x2 = 0;

        winBound.y1 = map[0][1];
        winBound.y2 = 0;

        for (uint i=0; i < map.length; i++)
        {
            if (map[i][0] == 0) 
              continue;

            if (calcTime < map[i][0])
            {
                winBound.x2 = map[i][0];
                winBound.y2 = map[i][1];
                break;
            }
            else
            {
                winBound.x1 = map[i][0];
                winBound.y1 = map[i][1];
            }
        }
        if (winBound.x2 == 0) winBound.x2 = MAX_UINT128;
        if (winBound.y2 == 0) winBound.y2 = MAX_UINT128;
        return winBound;
    }

    // function to calculate new Supply with SafeMath for divisions only, shortest (cheapest) form
    function getAdjustedSupply(uint256[2][] memory map, uint256 transactionTime, uint constGradient) internal pure returns (uint256)
    {
        if (transactionTime >= map[map.length-1][0])
        {
            // return (map[map.length-1][1] + constGradient * (SafeMath.sub(transactionTime, map[map.length-1][0])));  ** old version
            return (map[map.length-1][1] + SafeMath.mul(constGradient, SafeMath.sub(transactionTime, map[map.length-1][0])));
        }
        
        SupplyWinBoundary memory winBound = getSupplyWindow(map, transactionTime);
        // return (winBound.y1 + SafeMath.div(winBound.y2 - winBound.y1, winBound.x2 - winBound.x1) * (transactionTime - winBound.x1));  ** old version
        return (winBound.y1 + SafeMath.div(SafeMath.mul(SafeMath.sub(winBound.y2, winBound.y1), SafeMath.sub(transactionTime, winBound.x1)), SafeMath.sub(winBound.x2, winBound.x1)));
    }

    function getDailyInterest(uint256 currentTime, uint256 lastAdjustTime, uint256 currentSupply, uint256 lastSupply) internal pure returns (uint)
    {
        if (currentTime <= lastAdjustTime)
        {
           return uint128(0);
        }

        // ** old version                
        // uint256 InterestSinceLastAdjust = SafeMath.div((currentSupply - lastSupply) * 100, lastSupply);
        // return (SafeMath.div(InterestSinceLastAdjust * SECPERDAY, currentTime - lastAdjustTime));
        return (SafeMath.div(SafeMath.sub(currentSupply, lastSupply) * 100 * 10**DECIMALS * SECPERDAY, SafeMath.mul(SafeMath.sub(currentTime, lastAdjustTime), lastSupply)));
    }
 
    // ** new method
    // yearlyInterest rate is given in percent with 2 decimals => result has to be divede by 10**9 to get correct number with precision 2
    function getYearlyInterest(uint256 currentTime, uint256 lastAdjustTime, uint256 currentSupply, uint256 lastSupply) internal pure returns (uint)
    {
        if (currentTime <= lastAdjustTime)
        {
           return uint128(0);
        }
        return (SafeMath.div(SafeMath.sub(currentSupply, lastSupply) * 100 * 10**DECIMALS * SECPERDAY * 360, SafeMath.mul(SafeMath.sub(currentTime, lastAdjustTime), lastSupply)));
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "petersburg",
  "libraries": {
    "/C/prj/Savix/contracts/SafeMath.sol": {
      "SafeMath": "0x2BF254D95FC0f968ACcC0B12E6E7a91384619c7A"
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"distributeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"distributeTokensFlexSum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalGradient","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"lastAdjustTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"stakingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingFrequence","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"stakingSince","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyMap","outputs":[{"internalType":"uint256[2][]","name":"","type":"uint256[2][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yearlyInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405260006001556000600260006101000a81548160ff02191690831515021790555060006003556009600a0a620186a0026004556009600a0a620186a002600555600060065560006007553480156200005a57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a0a620186a0026004819055506009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81620000de57fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b6040518060400160405280600081526020016009600a0a620186a0028152509080600181540180825580915050600190039060005260206000209060020201600090919091909150906002620001bf9291906200047b565b50600b60405180604001604052806201518060070281526020016009600a0a6201c1380281525090806001815401808255809150506001900390600052602060002090600202016000909190919091509060026200021f9291906200047b565b50600b604051806040016040528062015180601e0281526020016009600a0a6201fbd00281525090806001815401808255809150506001900390600052602060002090600202016000909190919091509060026200027f9291906200047b565b50600b60405180604001604052806201518060b40281526020016009600a0a62027100028152509080600181540180825580915050600190039060005260206000209060020201600090919091909150906002620002df9291906200047b565b50600b6040518060400160405280620151806101680281526020016009600a0a6202d2a8028152509080600181540180825580915050600190039060005260206000209060020201600090919091909150906002620003409291906200047b565b50600b60405180604001604052806201518061021c0281526020016009600a0a620347d8028152509080600181540180825580915050600190039060005260206000209060020201600090919091909150906002620003a19291906200047b565b50600b6040518060400160405280620151806102d00281526020016009600a0a6203a980028152509080600181540180825580915050600190039060005260206000209060020201600090919091909150906002620004029291906200047b565b50600b6040518060400160405280620151806105a00281526020016009600a0a620493e0028152509080600181540180825580915050600190039060005260206000209060020201600090919091909150906002620004639291906200047b565b506004600903600a0a600802600181905550620004df565b8260028101928215620004ad579160200282015b82811115620004ac5782518255916020019190600101906200048f565b5b509050620004bc9190620004c0565b5090565b5b80821115620004db576000816000905550600101620004c1565b5090565b613c2180620004ef6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806342966c68116100f9578063a6ac4b3511610097578063c3351da911610071578063c3351da914610815578063d0c5c58514610833578063d46aa5e514610851578063dd62ed3e1461099d576101a9565b8063a6ac4b3514610773578063a9059cbb14610793578063b6508067146107f7576101a9565b806371b0cbfa116100d357806371b0cbfa1461064e578063893d20e81461065857806395d89b411461068c578063a457c2d71461070f576101a9565b806342966c68146105945780634c1c3321146105d857806370a08231146105f6576101a9565b8063256fa241116101665780633515a560116101405780633515a560146104d6578063378dc3dc146104f4578063395093511461051257806341d98b8214610576576101a9565b8063256fa241146103d5578063273aa9e314610497578063313ce567146104b5576101a9565b806302bc7b11146101ae578063043fb5111461022e57806306fdde031461024c578063095ea7b3146102cf57806318160ddd1461033357806323b872dd14610351575b600080fd5b6101b6610a15565b60405180806020018281038252838181518152602001915080516000925b8184101561021d5782846020026020010151600260200280838360005b8381101561020c5780820151818401526020810190506101f1565b5050505090500192600101926101d4565b925050509250505060405180910390f35b610236610aa5565b6040518082815260200191505060405180910390f35b610254610ac2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610294578082015181840152602081019050610279565b50505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031b600480360360408110156102e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610aff565b60405180821515815260200191505060405180910390f35b61033b610b97565b6040518082815260200191505060405180910390f35b6103bd6004803603606081101561036757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d2d565b60405180821515815260200191505060405180910390f35b610495600480360360408110156103eb57600080fd5b810190808035906020019064010000000081111561040857600080fd5b82018360208201111561041a57600080fd5b8035906020019184602083028401116401000000008311171561043c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506111a1565b005b61049f6115c2565b6040518082815260200191505060405180910390f35b6104bd6115cc565b604051808260ff16815260200191505060405180910390f35b6104de6115d5565b6040518082815260200191505060405180910390f35b6104fc6115f2565b6040518082815260200191505060405180910390f35b61055e6004803603604081101561052857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611603565b60405180821515815260200191505060405180910390f35b61057e6117b0565b6040518082815260200191505060405180910390f35b6105c0600480360360208110156105aa57600080fd5b81019080803590602001909291905050506117ba565b60405180821515815260200191505060405180910390f35b6105e0611997565b6040518082815260200191505060405180910390f35b6106386004803603602081101561060c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a1565b6040518082815260200191505060405180910390f35b610656611b66565b005b610660611c77565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610694611ca0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106d45780820151818401526020810190506106b9565b50505050905090810190601f1680156107015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61075b6004803603604081101561072557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cdd565b60405180821515815260200191505060405180910390f35b61077b611ea6565b60405180821515815260200191505060405180910390f35b6107df600480360360408110156107a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ebd565b60405180821515815260200191505060405180910390f35b6107ff612261565b6040518082815260200191505060405180910390f35b61081d61226b565b6040518082815260200191505060405180910390f35b61083b612275565b6040518082815260200191505060405180910390f35b61099b6004803603604081101561086757600080fd5b810190808035906020019064010000000081111561088457600080fd5b82018360208201111561089657600080fd5b803590602001918460208302840111640100000000831117156108b857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561091857600080fd5b82018360208201111561092a57600080fd5b8035906020019184602083028401116401000000008311171561094c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612407565b005b6109ff600480360360408110156109b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128e1565b6040518082815260200191505060405180910390f35b6060600b805480602002602001604051908101604052809291908181526020016000905b82821015610a9c5783829060005260206000209060020201600280602002604051908101604052809291908260028015610a88576020028201915b815481526020019060010190808311610a74575b505050505081526020019060010190610a39565b50505050905090565b6000610abd6003544203600754600454600554612968565b905090565b60606040518060400160405280600581526020017f5361766978000000000000000000000000000000000000000000000000000000815250905090565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b8d338484612bea565b6001905092915050565b6000610ba461dead6119a1565b600a54732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81610bf557fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610c7257600080fd5b505af4158015610c86573d6000803e3d6000fd5b505050506040513d6020811015610c9c57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610ce857600080fd5b505af4158015610cfc573d6000803e3d6000fd5b505050506040513d6020811015610d1257600080fd5b81019080805190602001909291905050506004540303905090565b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091846040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526028815260200180613b4b60289139604001935050505060206040518083038186803b158015610e2057600080fd5b505af4158015610e34573d6000803e3d6000fd5b505050506040513d6020811015610e4a57600080fd5b8101908080519060200190929190505050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610ee683612ede565b9050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091836040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526026815260200180613b2560269139604001935050505060206040518083038186803b158015610f9c57600080fd5b505af4158015610fb0573d6000803e3d6000fd5b505050506040513d6020811015610fc657600080fd5b8101908080519060200190929190505050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f79091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156110b257600080fd5b505af41580156110c6573d6000803e3d6000fd5b505050506040513d60208110156110dc57600080fd5b8101908080519060200190929190505050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ab76022913960400191505060405180910390fd5b600061125082612ede565b9050600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091855184026040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526030815260200180613b9760309139604001935050505060206040518083038186803b15801561132a57600080fd5b505af415801561133e573d6000803e3d6000fd5b505050506040513d602081101561135457600080fd5b8101908080519060200190929190505050600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008351905060005b818110156115bb57600860008683815181106113ea57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f79091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561148557600080fd5b505af4158015611499573d6000803e3d6000fd5b505050506040513d60208110156114af57600080fd5b8101908080519060200190929190505050600860008784815181106114d057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084818151811061152257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a380806001019150506113d2565b5050505050565b6000611c20905090565b60006009905090565b60006115ed600354420360075460045460055461315c565b905090565b60006009600a0a620186a002905090565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f79091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156116db57600080fd5b505af41580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b810190808051906020019092919050505090506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117a5338583612bea565b600191505092915050565b6000600754905090565b6000806117c683612ede565b9050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091836040518363ffffffff1660e01b815260040180838152602001828152602001806020018281038252601b8152602001807f6275726e20616d6f756e7420657863656564732062616c616e63650000000000815250602001935050505060206040518083038186803b15801561189957600080fd5b505af41580156118ad573d6000803e3d6000fd5b505050506040513d60208110156118c357600080fd5b8101908080519060200190929190505050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600a60008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a36001915050919050565b6000600354905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611a3157fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611aae57600080fd5b505af4158015611ac2573d6000803e3d6000fd5b505050506040513d6020811015611ad857600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611b2457600080fd5b505af4158015611b38573d6000803e3d6000fd5b505050506040513d6020811015611b4e57600080fd5b81019080805190602001909291905050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ab76022913960400191505060405180910390fd5b6001600260006101000a81548160ff02191690831515021790555042600381905550600b600081548110611c3a57fe5b9060005260206000209060020201600160028110611c5457fe5b015460048190555060045460058190555060006007819055506000600681905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5356580000000000000000000000000000000000000000000000000000000000815250905090565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091856040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526025815260200180613bc760259139604001935050505060206040518083038186803b158015611dd157600080fd5b505af4158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b810190808051906020019092919050505090506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e9b338583612bea565b600191505092915050565b6000600260009054906101000a900460ff16905090565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611f2957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611f9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420526563697069656e7400000000000000000000000000000081525060200191505060405180910390fd5b6000611fa684612ede565b9050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091836040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526026815260200180613b2560269139604001935050505060206040518083038186803b15801561205c57600080fd5b505af4158015612070573d6000803e3d6000fd5b505050506040513d602081101561208657600080fd5b8101908080519060200190929190505050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f79091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561217257600080fd5b505af4158015612186573d6000803e3d6000fd5b505050506040513d602081101561219c57600080fd5b8101908080519060200190929190505050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250505092915050565b6000600554905090565b6000600154905090565b600061228261dead6119a1565b600a54732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816122d357fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561235057600080fd5b505af4158015612364573d6000803e3d6000fd5b505050506040513d602081101561237a57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156123c657600080fd5b505af41580156123da573d6000803e3d6000fd5b505050506040513d60208110156123f057600080fd5b810190808051906020019092919050505001905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ab76022913960400191505060405180910390fd5b8051825114612505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613afb602a913960400191505060405180910390fd5b6000808251905060005b8181101561253c5783818151811061252357fe5b602002602001015183019250808060010191505061250f565b50600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a90916125c385612ede565b6040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526030815260200180613b9760309139604001935050505060206040518083038186803b15801561261a57600080fd5b505af415801561262e573d6000803e3d6000fd5b505050506040513d602081101561264457600080fd5b8101908080519060200190929190505050600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008451905060005b818110156128d957600860008783815181106126da57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f7909161275588858151811061274857fe5b6020026020010151612ede565b6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561279057600080fd5b505af41580156127a4573d6000803e3d6000fd5b505050506040513d60208110156127ba57600080fd5b8101908080519060200190929190505050600860008884815181106127db57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085818151811061282d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8784815181106128af57fe5b60200260200101516040518082815260200191505060405180910390a380806001019150506126c2565b505050505050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600083851161298c5760006fffffffffffffffffffffffffffffffff169050612be2565b732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b620151806009600a0a6064732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c589896040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612a0857600080fd5b505af4158015612a1c573d6000803e3d6000fd5b505050506040513d6020811015612a3257600080fd5b8101908080519060200190929190505050020202732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c58b8b6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612ab757600080fd5b505af4158015612acb573d6000803e3d6000fd5b505050506040513d6020811015612ae157600080fd5b8101908080519060200190929190505050876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612b2e57600080fd5b505af4158015612b42573d6000803e3d6000fd5b505050506040513d6020811015612b5857600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612ba457600080fd5b505af4158015612bb8573d6000803e3d6000fd5b505050506040513d6020811015612bce57600080fd5b810190808051906020019092919050505090505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613b736024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ad96022913960400191505060405180910390fd5b6000811480612d8157506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b612df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f706f737369626c652066726f6e742d72756e6e696e672061747461636b00000081525060200191505060405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000600260009054906101000a900460ff168015612f065750611c2060075460035442030310155b15612fd8576000612fa6600b805480602002602001604051908101604052809291908181526020016000905b82821015612f955783829060005260206000209060020201600280602002604051908101604052809291908260028015612f81576020028201915b815481526020019060010190808311612f6d575b505050505081526020019060010190612f32565b5050505060035442036001546133e2565b90508060045414612fd6576006546007819055506003544203600681905550600454600581905550806004819055505b505b6009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161300a57fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561308757600080fd5b505af415801561309b573d6000803e3d6000fd5b505050506040513d60208110156130b157600080fd5b8101908080519060200190929190505050732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c9091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561311a57600080fd5b505af415801561312e573d6000803e3d6000fd5b505050506040513d602081101561314457600080fd5b81019080805190602001909291905050509050919050565b60008385116131805760006fffffffffffffffffffffffffffffffff1690506133da565b732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b610168620151806009600a0a6064732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c58a8a6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156131ff57600080fd5b505af4158015613213573d6000803e3d6000fd5b505050506040513d602081101561322957600080fd5b810190808051906020019092919050505002020202732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c58b8b6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156132af57600080fd5b505af41580156132c3573d6000803e3d6000fd5b505050506040513d60208110156132d957600080fd5b8101908080519060200190929190505050876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561332657600080fd5b505af415801561333a573d6000803e3d6000fd5b505050506040513d602081101561335057600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561339c57600080fd5b505af41580156133b0573d6000803e3d6000fd5b505050506040513d60208110156133c657600080fd5b810190808051906020019092919050505090505b949350505050565b6000836001855103815181106133f457fe5b602002602001015160006002811061340857fe5b6020020151831061358f57732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c83732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c5878960018b51038151811061345957fe5b602002602001015160006002811061346d57fe5b60200201516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156134ad57600080fd5b505af41580156134c1573d6000803e3d6000fd5b505050506040513d60208110156134d757600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561352357600080fd5b505af4158015613537573d6000803e3d6000fd5b505050506040513d602081101561354d57600080fd5b81019080805190602001909291905050508460018651038151811061356e57fe5b602002602001015160016002811061358257fe5b6020020151019050613897565b613597613a8e565b6135a1858561389e565b9050732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c5866060015187604001516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561363657600080fd5b505af415801561364a573d6000803e3d6000fd5b505050506040513d602081101561366057600080fd5b8101908080519060200190929190505050732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c58a88600001516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156136cc57600080fd5b505af41580156136e0573d6000803e3d6000fd5b505050506040513d60208110156136f657600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561374257600080fd5b505af4158015613756573d6000803e3d6000fd5b505050506040513d602081101561376c57600080fd5b8101908080519060200190929190505050732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c5856020015186600001516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156137dc57600080fd5b505af41580156137f0573d6000803e3d6000fd5b505050506040513d602081101561380657600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561385257600080fd5b505af4158015613866573d6000803e3d6000fd5b505050506040513d602081101561387c57600080fd5b81019080805190602001909291905050508160400151019150505b9392505050565b6138a6613a8e565b6138ae613a8e565b60008160000181815250506000816020018181525050836000815181106138d157fe5b60200260200101516001600281106138e557fe5b6020020151816040018181525050600081606001818152505060005b8451811015613a3357600085828151811061391857fe5b602002602001015160006002811061392c57fe5b6020020151141561393c57613a26565b84818151811061394857fe5b602002602001015160006002811061395c57fe5b60200201518410156139c95784818151811061397457fe5b602002602001015160006002811061398857fe5b60200201518260200181815250508481815181106139a257fe5b60200260200101516001600281106139b657fe5b6020020151826060018181525050613a33565b8481815181106139d557fe5b60200260200101516000600281106139e957fe5b6020020151826000018181525050848181518110613a0357fe5b6020026020010151600160028110613a1757fe5b60200201518260400181815250505b8080600101915050613901565b50600081602001511415613a5c576fffffffffffffffffffffffffffffffff8160200181815250505b600081606001511415613a84576fffffffffffffffffffffffffffffffff8160600181815250505b8091505092915050565b604051806080016040528060008152602001600081526020016000815260200160008152509056fe4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6e2e45524332303a20617070726f766520746f20746865207a65726f206164647265737374686572652068617320746f20626520657861636c7920312076616c756520706572206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a20646973747269627574696f6e20746f74616c20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4eaae6b3d5b35bea78b5ddcaf35f410ec3f02f8625ebe0164d702880ba0a01164736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806342966c68116100f9578063a6ac4b3511610097578063c3351da911610071578063c3351da914610815578063d0c5c58514610833578063d46aa5e514610851578063dd62ed3e1461099d576101a9565b8063a6ac4b3514610773578063a9059cbb14610793578063b6508067146107f7576101a9565b806371b0cbfa116100d357806371b0cbfa1461064e578063893d20e81461065857806395d89b411461068c578063a457c2d71461070f576101a9565b806342966c68146105945780634c1c3321146105d857806370a08231146105f6576101a9565b8063256fa241116101665780633515a560116101405780633515a560146104d6578063378dc3dc146104f4578063395093511461051257806341d98b8214610576576101a9565b8063256fa241146103d5578063273aa9e314610497578063313ce567146104b5576101a9565b806302bc7b11146101ae578063043fb5111461022e57806306fdde031461024c578063095ea7b3146102cf57806318160ddd1461033357806323b872dd14610351575b600080fd5b6101b6610a15565b60405180806020018281038252838181518152602001915080516000925b8184101561021d5782846020026020010151600260200280838360005b8381101561020c5780820151818401526020810190506101f1565b5050505090500192600101926101d4565b925050509250505060405180910390f35b610236610aa5565b6040518082815260200191505060405180910390f35b610254610ac2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610294578082015181840152602081019050610279565b50505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031b600480360360408110156102e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610aff565b60405180821515815260200191505060405180910390f35b61033b610b97565b6040518082815260200191505060405180910390f35b6103bd6004803603606081101561036757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d2d565b60405180821515815260200191505060405180910390f35b610495600480360360408110156103eb57600080fd5b810190808035906020019064010000000081111561040857600080fd5b82018360208201111561041a57600080fd5b8035906020019184602083028401116401000000008311171561043c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506111a1565b005b61049f6115c2565b6040518082815260200191505060405180910390f35b6104bd6115cc565b604051808260ff16815260200191505060405180910390f35b6104de6115d5565b6040518082815260200191505060405180910390f35b6104fc6115f2565b6040518082815260200191505060405180910390f35b61055e6004803603604081101561052857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611603565b60405180821515815260200191505060405180910390f35b61057e6117b0565b6040518082815260200191505060405180910390f35b6105c0600480360360208110156105aa57600080fd5b81019080803590602001909291905050506117ba565b60405180821515815260200191505060405180910390f35b6105e0611997565b6040518082815260200191505060405180910390f35b6106386004803603602081101561060c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a1565b6040518082815260200191505060405180910390f35b610656611b66565b005b610660611c77565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610694611ca0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106d45780820151818401526020810190506106b9565b50505050905090810190601f1680156107015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61075b6004803603604081101561072557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cdd565b60405180821515815260200191505060405180910390f35b61077b611ea6565b60405180821515815260200191505060405180910390f35b6107df600480360360408110156107a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ebd565b60405180821515815260200191505060405180910390f35b6107ff612261565b6040518082815260200191505060405180910390f35b61081d61226b565b6040518082815260200191505060405180910390f35b61083b612275565b6040518082815260200191505060405180910390f35b61099b6004803603604081101561086757600080fd5b810190808035906020019064010000000081111561088457600080fd5b82018360208201111561089657600080fd5b803590602001918460208302840111640100000000831117156108b857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561091857600080fd5b82018360208201111561092a57600080fd5b8035906020019184602083028401116401000000008311171561094c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612407565b005b6109ff600480360360408110156109b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128e1565b6040518082815260200191505060405180910390f35b6060600b805480602002602001604051908101604052809291908181526020016000905b82821015610a9c5783829060005260206000209060020201600280602002604051908101604052809291908260028015610a88576020028201915b815481526020019060010190808311610a74575b505050505081526020019060010190610a39565b50505050905090565b6000610abd6003544203600754600454600554612968565b905090565b60606040518060400160405280600581526020017f5361766978000000000000000000000000000000000000000000000000000000815250905090565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b8d338484612bea565b6001905092915050565b6000610ba461dead6119a1565b600a54732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81610bf557fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610c7257600080fd5b505af4158015610c86573d6000803e3d6000fd5b505050506040513d6020811015610c9c57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610ce857600080fd5b505af4158015610cfc573d6000803e3d6000fd5b505050506040513d6020811015610d1257600080fd5b81019080805190602001909291905050506004540303905090565b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091846040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526028815260200180613b4b60289139604001935050505060206040518083038186803b158015610e2057600080fd5b505af4158015610e34573d6000803e3d6000fd5b505050506040513d6020811015610e4a57600080fd5b8101908080519060200190929190505050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610ee683612ede565b9050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091836040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526026815260200180613b2560269139604001935050505060206040518083038186803b158015610f9c57600080fd5b505af4158015610fb0573d6000803e3d6000fd5b505050506040513d6020811015610fc657600080fd5b8101908080519060200190929190505050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f79091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156110b257600080fd5b505af41580156110c6573d6000803e3d6000fd5b505050506040513d60208110156110dc57600080fd5b8101908080519060200190929190505050600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ab76022913960400191505060405180910390fd5b600061125082612ede565b9050600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091855184026040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526030815260200180613b9760309139604001935050505060206040518083038186803b15801561132a57600080fd5b505af415801561133e573d6000803e3d6000fd5b505050506040513d602081101561135457600080fd5b8101908080519060200190929190505050600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008351905060005b818110156115bb57600860008683815181106113ea57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f79091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561148557600080fd5b505af4158015611499573d6000803e3d6000fd5b505050506040513d60208110156114af57600080fd5b8101908080519060200190929190505050600860008784815181106114d057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084818151811061152257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a380806001019150506113d2565b5050505050565b6000611c20905090565b60006009905090565b60006115ed600354420360075460045460055461315c565b905090565b60006009600a0a620186a002905090565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f79091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156116db57600080fd5b505af41580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b810190808051906020019092919050505090506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117a5338583612bea565b600191505092915050565b6000600754905090565b6000806117c683612ede565b9050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091836040518363ffffffff1660e01b815260040180838152602001828152602001806020018281038252601b8152602001807f6275726e20616d6f756e7420657863656564732062616c616e63650000000000815250602001935050505060206040518083038186803b15801561189957600080fd5b505af41580156118ad573d6000803e3d6000fd5b505050506040513d60208110156118c357600080fd5b8101908080519060200190929190505050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600a60008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a36001915050919050565b6000600354905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611a3157fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611aae57600080fd5b505af4158015611ac2573d6000803e3d6000fd5b505050506040513d6020811015611ad857600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611b2457600080fd5b505af4158015611b38573d6000803e3d6000fd5b505050506040513d6020811015611b4e57600080fd5b81019080805190602001909291905050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ab76022913960400191505060405180910390fd5b6001600260006101000a81548160ff02191690831515021790555042600381905550600b600081548110611c3a57fe5b9060005260206000209060020201600160028110611c5457fe5b015460048190555060045460058190555060006007819055506000600681905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5356580000000000000000000000000000000000000000000000000000000000815250905090565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091856040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526025815260200180613bc760259139604001935050505060206040518083038186803b158015611dd157600080fd5b505af4158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b810190808051906020019092919050505090506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e9b338583612bea565b600191505092915050565b6000600260009054906101000a900460ff16905090565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611f2957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611f9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420526563697069656e7400000000000000000000000000000081525060200191505060405180910390fd5b6000611fa684612ede565b9050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a9091836040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526026815260200180613b2560269139604001935050505060206040518083038186803b15801561205c57600080fd5b505af4158015612070573d6000803e3d6000fd5b505050506040513d602081101561208657600080fd5b8101908080519060200190929190505050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f79091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561217257600080fd5b505af4158015612186573d6000803e3d6000fd5b505050506040513d602081101561219c57600080fd5b8101908080519060200190929190505050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019250505092915050565b6000600554905090565b6000600154905090565b600061228261dead6119a1565b600a54732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816122d357fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561235057600080fd5b505af4158015612364573d6000803e3d6000fd5b505050506040513d602081101561237a57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156123c657600080fd5b505af41580156123da573d6000803e3d6000fd5b505050506040513d60208110156123f057600080fd5b810190808051906020019092919050505001905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ab76022913960400191505060405180910390fd5b8051825114612505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613afb602a913960400191505060405180910390fd5b6000808251905060005b8181101561253c5783818151811061252357fe5b602002602001015183019250808060010191505061250f565b50600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63e31bdc0a90916125c385612ede565b6040518363ffffffff1660e01b8152600401808381526020018281526020018060200182810382526030815260200180613b9760309139604001935050505060206040518083038186803b15801561261a57600080fd5b505af415801561262e573d6000803e3d6000fd5b505050506040513d602081101561264457600080fd5b8101908080519060200190929190505050600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008451905060005b818110156128d957600860008783815181106126da57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054732bf254d95fc0f968accc0b12e6e7a91384619c7a63771602f7909161275588858151811061274857fe5b6020026020010151612ede565b6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561279057600080fd5b505af41580156127a4573d6000803e3d6000fd5b505050506040513d60208110156127ba57600080fd5b8101908080519060200190929190505050600860008884815181106127db57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085818151811061282d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8784815181106128af57fe5b60200260200101516040518082815260200191505060405180910390a380806001019150506126c2565b505050505050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600083851161298c5760006fffffffffffffffffffffffffffffffff169050612be2565b732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b620151806009600a0a6064732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c589896040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612a0857600080fd5b505af4158015612a1c573d6000803e3d6000fd5b505050506040513d6020811015612a3257600080fd5b8101908080519060200190929190505050020202732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c58b8b6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612ab757600080fd5b505af4158015612acb573d6000803e3d6000fd5b505050506040513d6020811015612ae157600080fd5b8101908080519060200190929190505050876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612b2e57600080fd5b505af4158015612b42573d6000803e3d6000fd5b505050506040513d6020811015612b5857600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612ba457600080fd5b505af4158015612bb8573d6000803e3d6000fd5b505050506040513d6020811015612bce57600080fd5b810190808051906020019092919050505090505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613b736024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ad96022913960400191505060405180910390fd5b6000811480612d8157506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b612df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f706f737369626c652066726f6e742d72756e6e696e672061747461636b00000081525060200191505060405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000600260009054906101000a900460ff168015612f065750611c2060075460035442030310155b15612fd8576000612fa6600b805480602002602001604051908101604052809291908181526020016000905b82821015612f955783829060005260206000209060020201600280602002604051908101604052809291908260028015612f81576020028201915b815481526020019060010190808311612f6d575b505050505081526020019060010190612f32565b5050505060035442036001546133e2565b90508060045414612fd6576006546007819055506003544203600681905550600454600581905550806004819055505b505b6009600a0a620186a0027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161300a57fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561308757600080fd5b505af415801561309b573d6000803e3d6000fd5b505050506040513d60208110156130b157600080fd5b8101908080519060200190929190505050732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c9091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561311a57600080fd5b505af415801561312e573d6000803e3d6000fd5b505050506040513d602081101561314457600080fd5b81019080805190602001909291905050509050919050565b60008385116131805760006fffffffffffffffffffffffffffffffff1690506133da565b732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b610168620151806009600a0a6064732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c58a8a6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156131ff57600080fd5b505af4158015613213573d6000803e3d6000fd5b505050506040513d602081101561322957600080fd5b810190808051906020019092919050505002020202732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c58b8b6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156132af57600080fd5b505af41580156132c3573d6000803e3d6000fd5b505050506040513d60208110156132d957600080fd5b8101908080519060200190929190505050876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561332657600080fd5b505af415801561333a573d6000803e3d6000fd5b505050506040513d602081101561335057600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561339c57600080fd5b505af41580156133b0573d6000803e3d6000fd5b505050506040513d60208110156133c657600080fd5b810190808051906020019092919050505090505b949350505050565b6000836001855103815181106133f457fe5b602002602001015160006002811061340857fe5b6020020151831061358f57732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c83732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c5878960018b51038151811061345957fe5b602002602001015160006002811061346d57fe5b60200201516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156134ad57600080fd5b505af41580156134c1573d6000803e3d6000fd5b505050506040513d60208110156134d757600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561352357600080fd5b505af4158015613537573d6000803e3d6000fd5b505050506040513d602081101561354d57600080fd5b81019080805190602001909291905050508460018651038151811061356e57fe5b602002602001015160016002811061358257fe5b6020020151019050613897565b613597613a8e565b6135a1858561389e565b9050732bf254d95fc0f968accc0b12e6e7a91384619c7a63a391c15b732bf254d95fc0f968accc0b12e6e7a91384619c7a63c8a4ac9c732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c5866060015187604001516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561363657600080fd5b505af415801561364a573d6000803e3d6000fd5b505050506040513d602081101561366057600080fd5b8101908080519060200190929190505050732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c58a88600001516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156136cc57600080fd5b505af41580156136e0573d6000803e3d6000fd5b505050506040513d60208110156136f657600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561374257600080fd5b505af4158015613756573d6000803e3d6000fd5b505050506040513d602081101561376c57600080fd5b8101908080519060200190929190505050732bf254d95fc0f968accc0b12e6e7a91384619c7a63b67d77c5856020015186600001516040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156137dc57600080fd5b505af41580156137f0573d6000803e3d6000fd5b505050506040513d602081101561380657600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561385257600080fd5b505af4158015613866573d6000803e3d6000fd5b505050506040513d602081101561387c57600080fd5b81019080805190602001909291905050508160400151019150505b9392505050565b6138a6613a8e565b6138ae613a8e565b60008160000181815250506000816020018181525050836000815181106138d157fe5b60200260200101516001600281106138e557fe5b6020020151816040018181525050600081606001818152505060005b8451811015613a3357600085828151811061391857fe5b602002602001015160006002811061392c57fe5b6020020151141561393c57613a26565b84818151811061394857fe5b602002602001015160006002811061395c57fe5b60200201518410156139c95784818151811061397457fe5b602002602001015160006002811061398857fe5b60200201518260200181815250508481815181106139a257fe5b60200260200101516001600281106139b657fe5b6020020151826060018181525050613a33565b8481815181106139d557fe5b60200260200101516000600281106139e957fe5b6020020151826000018181525050848181518110613a0357fe5b6020026020010151600160028110613a1757fe5b60200201518260400181815250505b8080600101915050613901565b50600081602001511415613a5c576fffffffffffffffffffffffffffffffff8160200181815250505b600081606001511415613a84576fffffffffffffffffffffffffffffffff8160600181815250505b8091505092915050565b604051806080016040528060008152602001600081526020016000815260200160008152509056fe4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6e2e45524332303a20617070726f766520746f20746865207a65726f206164647265737374686572652068617320746f20626520657861636c7920312076616c756520706572206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a20646973747269627574696f6e20746f74616c20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4eaae6b3d5b35bea78b5ddcaf35f410ec3f02f8625ebe0164d702880ba0a01164736f6c634300060c0033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.