ETH Price: $3,631.11 (+1.30%)

Token

X22 (X22)
 

Overview

Max Total Supply

20,000,022 X22

Holders

456 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
780.066994938942268216 X22

Value
$0.00
0xeB7E4Aa08e460b0cE06EbBeDE47967FCD79D1c1F
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

TWO TWO aims to break down the barriers between physical and virtual art to bring Extreme Art to the global community.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
X22Token

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-17
*/

pragma solidity 0.5.16;

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

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @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);
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
  // Empty internal constructor, to prevent people from mistakenly deploying
  // an instance of this contract, which should be used via inheritance.
  constructor () internal { }

  function _msgSender() internal view returns (address payable) {
    return msg.sender;
  }

  function _msgData() internal view returns (bytes memory) {
    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `+` operator.
   *
   * Requirements:
   * - Addition cannot overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    return sub(a, b, "SafeMath: subtraction overflow");
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
  }

  /**
   * @dev Returns the multiplication of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `*` operator.
   *
   * Requirements:
   * - Multiplication cannot overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return div(a, b, "SafeMath: division by zero");
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, errorMessage);
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    return mod(a, b, "SafeMath: modulo by zero");
  }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
  address private _owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () internal {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

  /**
   * @dev Returns the address of the current owner.
   */
  function owner() public view returns (address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(_owner == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  /**
   * @dev Leaves the contract without owner. It will not be possible to call
   * `onlyOwner` functions anymore. Can only be called by the current owner.
   *
   * NOTE: Renouncing ownership will leave the contract without an owner,
   * thereby removing any functionality that is only available to the owner.
   */
  function renounceOwnership() external onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) external onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

contract LGEWhitelisted is Context {
    
    using SafeMath for uint256;
    
    struct WhitelistRound {
        uint256 duration;
        uint256 amountMax;
        mapping(address => bool) addresses;
        mapping(address => uint256) purchased;
    }
  
    WhitelistRound[] public _lgeWhitelistRounds;
    
    uint256 public _lgeTimestamp;
    address public _lgePairAddress;
    
    address public _whitelister;
    
    event WhitelisterTransferred(address indexed previousWhitelister, address indexed newWhitelister);
    
    constructor () internal {
        _whitelister = _msgSender();
    }
    
    modifier onlyWhitelister() {
        require(_whitelister == _msgSender(), "Caller is not the whitelister");
        _;
    }
    
    function renounceWhitelister() external onlyWhitelister {
        emit WhitelisterTransferred(_whitelister, address(0));
        _whitelister = address(0);
    }
    
    function transferWhitelister(address newWhitelister) external onlyWhitelister {
        _transferWhitelister(newWhitelister);
    }
    
    function _transferWhitelister(address newWhitelister) internal {
        require(newWhitelister != address(0), "New whitelister is the zero address");
        emit WhitelisterTransferred(_whitelister, newWhitelister);
        _whitelister = newWhitelister;
    }
    
    /*
     * createLGEWhitelist - Call this after initial Token Generation Event (TGE) 
     * 
     * pairAddress - address generated from createPair() event on DEX
     * durations - array of durations (seconds) for each whitelist rounds
     * amountsMax - array of max amounts (TOKEN decimals) for each whitelist round
     * 
     */
  
    function createLGEWhitelist(address pairAddress, uint256[] calldata durations, uint256[] calldata amountsMax) external onlyWhitelister() {
        require(durations.length == amountsMax.length, "Invalid whitelist(s)");
        
        _lgePairAddress = pairAddress;
        
        if(durations.length > 0) {
            
            delete _lgeWhitelistRounds;
        
            for (uint256 i = 0; i < durations.length; i++) {
                _lgeWhitelistRounds.push(WhitelistRound(durations[i], amountsMax[i]));
            }
        
        }
    }
    
    /*
     * modifyLGEWhitelistAddresses - Define what addresses are included/excluded from a whitelist round
     * 
     * index - 0-based index of round to modify whitelist
     * duration - period in seconds from LGE event or previous whitelist round
     * amountMax - max amount (TOKEN decimals) for each whitelist round
     * 
     */
    
    function modifyLGEWhitelist(uint256 index, uint256 duration, uint256 amountMax, address[] calldata addresses, bool enabled) external onlyWhitelister() {
        require(index < _lgeWhitelistRounds.length, "Invalid index");
        require(amountMax > 0, "Invalid amountMax");

        if(duration != _lgeWhitelistRounds[index].duration)
            _lgeWhitelistRounds[index].duration = duration;
        
        if(amountMax != _lgeWhitelistRounds[index].amountMax)  
            _lgeWhitelistRounds[index].amountMax = amountMax;
        
        for (uint256 i = 0; i < addresses.length; i++) {
            _lgeWhitelistRounds[index].addresses[addresses[i]] = enabled;
        }
    }
    
    /*
     *  getLGEWhitelistRound
     *
     *  returns:
     *
     *  1. whitelist round number ( 0 = no active round now )
     *  2. duration, in seconds, current whitelist round is active for
     *  3. timestamp current whitelist round closes at
     *  4. maximum amount a whitelister can purchase in this round
     *  5. is caller whitelisted
     *  6. how much caller has purchased in current whitelist round
     *
     */
    
    function getLGEWhitelistRound() public view returns (uint256, uint256, uint256, uint256, bool, uint256) {
        
        if(_lgeTimestamp > 0) {
            
            uint256 wlCloseTimestampLast = _lgeTimestamp;
        
            for (uint256 i = 0; i < _lgeWhitelistRounds.length; i++) {
                
                WhitelistRound storage wlRound = _lgeWhitelistRounds[i];
                
                wlCloseTimestampLast = wlCloseTimestampLast.add(wlRound.duration);
                if(now <= wlCloseTimestampLast)
                    return (i.add(1), wlRound.duration, wlCloseTimestampLast, wlRound.amountMax, wlRound.addresses[_msgSender()], wlRound.purchased[_msgSender()]);
            }
        
        }
        
        return (0, 0, 0, 0, false, 0);
    }
    
    /*
     * _applyLGEWhitelist - internal function to be called initially before any transfers
     * 
     */
    
    function _applyLGEWhitelist(address sender, address recipient, uint256 amount) internal {
        
        if(_lgePairAddress == address(0) || _lgeWhitelistRounds.length == 0)
            return;
        
        if(_lgeTimestamp == 0 && sender != _lgePairAddress && recipient == _lgePairAddress && amount > 0)
            _lgeTimestamp = now;
        
        if(sender == _lgePairAddress && recipient != _lgePairAddress) {
            //buying
            
            (uint256 wlRoundNumber,,,,,) = getLGEWhitelistRound();
        
            if(wlRoundNumber > 0) {
                
                WhitelistRound storage wlRound = _lgeWhitelistRounds[wlRoundNumber.sub(1)];
                
                require(wlRound.addresses[recipient], "LGE - Buyer is not whitelisted");
                
                uint256 amountRemaining = 0;
                
                if(wlRound.purchased[recipient] < wlRound.amountMax)
                    amountRemaining = wlRound.amountMax.sub(wlRound.purchased[recipient]);
    
                require(amount <= amountRemaining, "LGE - Amount exceeds whitelist maximum");
                wlRound.purchased[recipient] = wlRound.purchased[recipient].add(amount);
                
            }
            
        }
        
    }
    
}

contract X22Token is Context, IERC20, Ownable, LGEWhitelisted {
    
    using SafeMath for uint256;
    
    mapping (address => uint256) private _balances;
    
    mapping (address => mapping (address => uint256)) private _allowances;
    
    uint256 private _totalSupply;
    uint8 private _decimals;
    string private _symbol;
    string private _name;
    
    constructor() public {
        _name = "X22";
        _symbol = "X22";
        _decimals = 18;
        _totalSupply = 20000022 * 10 ** 18;
        _balances[_msgSender()] = _totalSupply;
        
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    /**
    * @dev Returns the bep token owner.
    */
    
    function getOwner() external view returns (address) {
        return owner();
    }
    
    /**
    * @dev Returns the token decimals.
    */
    function decimals() external view returns (uint8) {
        return _decimals;
    }
    
    /**
    * @dev Returns the token symbol.
    */
    function symbol() external view returns (string memory) {
        return _symbol;
    }
    
    /**
    * @dev Returns the token name.
    */
    function name() external view returns (string memory) {
        return _name;
    }
    
    /**
    * @dev See {ERC20-totalSupply}.
    */
    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }
    
    /**
    * @dev See {ERC20-balanceOf}.
    */
    function balanceOf(address account) external view returns (uint256) {
        return _balances[account];
    }
    
    /**
    * @dev See {ERC20-transfer}.
    *
    * Requirements:
    *
    * - `recipient` cannot be the zero address.
    * - the caller must have a balance of at least `amount`.
    */
    function transfer(address recipient, uint256 amount) external returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    
    /**
    * @dev See {ERC20-allowance}.
    */
    function allowance(address owner, address spender) external view returns (uint256) {
        return _allowances[owner][spender];
    }
    
    /**
    * @dev See {ERC20-approve}.
    *
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    */
    function approve(address spender, uint256 amount) external returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    /**
    * @dev See {ERC20-transferFrom}.
    *
    * 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 amount) external returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    
    /**
    * @dev Atomically increases the allowance granted to `spender` by the caller.
    *
    * This is an alternative to {approve} that can be used as a mitigation for
    * problems described in {ERC20-approve}.
    *
    * Emits an {Approval} event indicating the updated allowance.
    *
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    */
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    
    /**
    * @dev Atomically decreases the allowance granted to `spender` by the caller.
    *
    * This is an alternative to {approve} that can be used as a mitigation for
    * problems described in {BEP20-approve}.
    *
    * Emits an {Approval} event indicating the updated allowance.
    *
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    * - `spender` must have allowance for the caller of at least
    * `subtractedValue`.
    */
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    /**
    * @dev Moves tokens `amount` from `sender` to `recipient`.
    *
    * This is internal function is equivalent to {transfer}, and can be used to
    * e.g. implement automatic token fees, slashing mechanisms, etc.
    *
    * Emits a {Transfer} event.
    *
    * Requirements:
    *
    * - `sender` cannot be the zero address.
    * - `recipient` cannot be the zero address.
    * - `sender` must have a balance of at least `amount`.
    */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        
        _applyLGEWhitelist(sender, recipient, amount);
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    
    /**
    * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
    *
    * This is internal function is equivalent to `approve`, and can be used to
    * e.g. set automatic allowances for certain subsystems, etc.
    *
    * Emits an {Approval} event.
    *
    * Requirements:
    *
    * - `owner` cannot be the zero address.
    * - `spender` cannot be the zero address.
    */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousWhitelister","type":"address"},{"indexed":true,"internalType":"address","name":"newWhitelister","type":"address"}],"name":"WhitelisterTransferred","type":"event"},{"constant":true,"inputs":[],"name":"_lgePairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_lgeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_lgeWhitelistRounds","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_whitelister","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pairAddress","type":"address"},{"internalType":"uint256[]","name":"durations","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsMax","type":"uint256[]"}],"name":"createLGEWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getLGEWhitelistRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"modifyLGEWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelister","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newWhitelister","type":"address"}],"name":"transferWhitelister","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50600062000024620002ae60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620000d2620002ae60201b60201c565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600381526020017f5832320000000000000000000000000000000000000000000000000000000000815250600a90805190602001906200015f929190620002b6565b506040518060400160405280600381526020017f583232000000000000000000000000000000000000000000000000000000000081525060099080519060200190620001ad929190620002b6565b506012600860006101000a81548160ff021916908360ff1602179055506a108b2b5d77b600f698000060078190555060075460056000620001f3620002ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000241620002ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a362000365565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002f957805160ff19168380011785556200032a565b828001600101855582156200032a579182015b82811115620003295782518255916020019190600101906200030c565b5b5090506200033991906200033d565b5090565b6200036291905b808211156200035e57600081600090555060010162000344565b5090565b90565b612a2380620003756000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063a77cac7a1161007c578063a77cac7a146107c1578063a9059cbb1461080a578063d5215d1114610870578063da91b76e146108ba578063dd62ed3e146108d8578063f2fde38b1461095057610158565b8063715018a614610630578063893d20e81461063a5780638da5cb5b1461068457806395d89b41146106ce5780639ad3a7ba14610751578063a457c2d71461075b57610158565b8063313ce56711610115578063313ce56714610373578063395093511461039757806344ade3c5146103fd57806349448898146104a0578063532f1fed146104ea57806370a08231146105d857610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd146102465780631b29b0cd1461026457806323b872dd146102a95780632e15e5c71461032f575b600080fd5b610165610994565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a36565b604051808215151515815260200191505060405180910390f35b61024e610a54565b6040518082815260200191505060405180910390f35b61026c610a5e565b6040518087815260200186815260200185815260200184815260200183151515158152602001828152602001965050505050505060405180910390f35b610315600480360360608110156102bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bdb565b604051808215151515815260200191505060405180910390f35b6103716004803603602081101561034557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cb4565b005b61037b610d8a565b604051808260ff1660ff16815260200191505060405180910390f35b6103e3600480360360408110156103ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610da1565b604051808215151515815260200191505060405180910390f35b61049e600480360360a081101561041357600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561044e57600080fd5b82018360208201111561046057600080fd5b8035906020019184602083028401116401000000008311171561048257600080fd5b9091929391929390803515159060200190929190505050610e54565b005b6104a8611162565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d66004803603606081101561050057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561053d57600080fd5b82018360208201111561054f57600080fd5b8035906020019184602083028401116401000000008311171561057157600080fd5b90919293919293908035906020019064010000000081111561059257600080fd5b8201836020820111156105a457600080fd5b803590602001918460208302840111640100000000831117156105c657600080fd5b9091929391929390505050611188565b005b61061a600480360360208110156105ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113cc565b6040518082815260200191505060405180910390f35b610638611415565b005b61064261159d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068c6115ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d66115d5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107165780820151818401526020810190506106fb565b50505050905090810190601f1680156107435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610759611677565b005b6107a76004803603604081101561077157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611802565b604051808215151515815260200191505060405180910390f35b6107ed600480360360208110156107d757600080fd5b81019080803590602001909291905050506118cf565b604051808381526020018281526020019250505060405180910390f35b6108566004803603604081101561082057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611900565b604051808215151515815260200191505060405180910390f35b61087861191e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c2611944565b6040518082815260200191505060405180910390f35b61093a600480360360408110156108ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061194a565b6040518082815260200191505060405180910390f35b6109926004803603602081101561096657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d1565b005b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b5050505050905090565b6000610a4a610a43611aa6565b8484611aae565b6001905092915050565b6000600754905090565b60008060008060008060006002541115610bae576000600254905060008090505b600180549050811015610bab57600060018281548110610a9b57fe5b90600052602060002090600402019050610ac2816000015484611ca590919063ffffffff16565b9250824211610b9d57610adf600183611ca590919063ffffffff16565b8160000154848360010154846002016000610af8611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16856003016000610b4e611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054985098509850985098509850505050610bd3565b508080600101915050610a7f565b50505b6000806000806000808595508494508393508292508090509550955095509550955095505b909192939495565b6000610be8848484611d2d565b610ca984610bf4611aa6565b610ca48560405180606001604052806028815260200161293660289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c5a611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ff29092919063ffffffff16565b611aae565b600190509392505050565b610cbc611aa6565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616c6c6572206973206e6f74207468652077686974656c697374657200000081525060200191505060405180910390fd5b610d87816120b2565b50565b6000600860009054906101000a900460ff16905090565b6000610e4a610dae611aa6565b84610e458560066000610dbf611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca590919063ffffffff16565b611aae565b6001905092915050565b610e5c611aa6565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616c6c6572206973206e6f74207468652077686974656c697374657200000081525060200191505060405180910390fd5b6001805490508610610f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c696420696e6465780000000000000000000000000000000000000081525060200191505060405180910390fd5b6000841161100e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420616d6f756e744d617800000000000000000000000000000081525060200191505060405180910390fd5b6001868154811061101b57fe5b906000526020600020906004020160000154851461105757846001878154811061104157fe5b9060005260206000209060040201600001819055505b6001868154811061106457fe5b90600052602060002090600402016001015484146110a057836001878154811061108a57fe5b9060005260206000209060040201600101819055505b60008090505b838390508110156111595781600188815481106110bf57fe5b906000526020600020906004020160020160008686858181106110de57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506110a6565b50505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611190611aa6565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616c6c6572206973206e6f74207468652077686974656c697374657200000081525060200191505060405180910390fd5b8181905084849050146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e76616c69642077686974656c69737428732900000000000000000000000081525060200191505060405180910390fd5b84600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008484905011156113c55760016000611328919061282b565b60008090505b848490508110156113c3576001604051806040016040528087878581811061135257fe5b90506020020135815260200185858581811061136a57fe5b90506020020135815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010155505050808060010191505061132e565b505b5050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141d611aa6565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115a76115ac565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561166d5780601f106116425761010080835404028352916020019161166d565b820191906000526020600020905b81548152906001019060200180831161165057829003601f168201915b5050505050905090565b61167f611aa6565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616c6c6572206973206e6f74207468652077686974656c697374657200000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b460405160405180910390a36000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006118c561180f611aa6565b846118c0856040518060600160405280602581526020016129ca6025913960066000611839611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ff29092919063ffffffff16565b611aae565b6001905092915050565b600181815481106118dc57fe5b90600052602060002090600402016000915090508060000154908060010154905082565b600061191461190d611aa6565b8484611d2d565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119d9611aa6565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611aa3816121f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806129a66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806128c86022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600080828401905083811015611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061295e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061287f6023913960400191505060405180910390fd5b611e4483838361233c565b611eb0816040518060600160405280602681526020016128ea60269139600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ff29092919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f4581600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca590919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083831115829061209f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612064578082015181840152602081019050612049565b50505050905090810190601f1680156120915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806129836023913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b460405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561227e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128a26026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061239e57506000600180549050145b156123a8576127dc565b60006002541480156124085750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124615750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561246d5750600081115b1561247a57426002819055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125255750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156127db576000612534610a5e565b5050505050905060008111156127d9576000600161255c6001846127e190919063ffffffff16565b8154811061256657fe5b906000526020600020906004020190508060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c4745202d204275796572206973206e6f742077686974656c6973746564000081525060200191505060405180910390fd5b600080905081600101548260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156126e4576126e18260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483600101546127e190919063ffffffff16565b90505b8084111561273d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129106026913960400191505060405180910390fd5b612791848360030160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca590919063ffffffff16565b8260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b505b5b505050565b600061282383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ff2565b905092915050565b508054600082556004029060005260206000209081019061284c919061284f565b50565b61287b91905b8082111561287757600080820160009055600182016000905550600401612855565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c4745202d20416d6f756e7420657863656564732077686974656c697374206d6178696d756d45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e65772077686974656c697374657220697320746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820b77bc3d363abdbc60802774a2fe9678edf5872c3047e50594f731d88dc5d193a64736f6c63430005100032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063a77cac7a1161007c578063a77cac7a146107c1578063a9059cbb1461080a578063d5215d1114610870578063da91b76e146108ba578063dd62ed3e146108d8578063f2fde38b1461095057610158565b8063715018a614610630578063893d20e81461063a5780638da5cb5b1461068457806395d89b41146106ce5780639ad3a7ba14610751578063a457c2d71461075b57610158565b8063313ce56711610115578063313ce56714610373578063395093511461039757806344ade3c5146103fd57806349448898146104a0578063532f1fed146104ea57806370a08231146105d857610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd146102465780631b29b0cd1461026457806323b872dd146102a95780632e15e5c71461032f575b600080fd5b610165610994565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a36565b604051808215151515815260200191505060405180910390f35b61024e610a54565b6040518082815260200191505060405180910390f35b61026c610a5e565b6040518087815260200186815260200185815260200184815260200183151515158152602001828152602001965050505050505060405180910390f35b610315600480360360608110156102bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bdb565b604051808215151515815260200191505060405180910390f35b6103716004803603602081101561034557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cb4565b005b61037b610d8a565b604051808260ff1660ff16815260200191505060405180910390f35b6103e3600480360360408110156103ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610da1565b604051808215151515815260200191505060405180910390f35b61049e600480360360a081101561041357600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561044e57600080fd5b82018360208201111561046057600080fd5b8035906020019184602083028401116401000000008311171561048257600080fd5b9091929391929390803515159060200190929190505050610e54565b005b6104a8611162565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d66004803603606081101561050057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561053d57600080fd5b82018360208201111561054f57600080fd5b8035906020019184602083028401116401000000008311171561057157600080fd5b90919293919293908035906020019064010000000081111561059257600080fd5b8201836020820111156105a457600080fd5b803590602001918460208302840111640100000000831117156105c657600080fd5b9091929391929390505050611188565b005b61061a600480360360208110156105ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113cc565b6040518082815260200191505060405180910390f35b610638611415565b005b61064261159d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068c6115ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d66115d5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107165780820151818401526020810190506106fb565b50505050905090810190601f1680156107435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610759611677565b005b6107a76004803603604081101561077157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611802565b604051808215151515815260200191505060405180910390f35b6107ed600480360360208110156107d757600080fd5b81019080803590602001909291905050506118cf565b604051808381526020018281526020019250505060405180910390f35b6108566004803603604081101561082057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611900565b604051808215151515815260200191505060405180910390f35b61087861191e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c2611944565b6040518082815260200191505060405180910390f35b61093a600480360360408110156108ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061194a565b6040518082815260200191505060405180910390f35b6109926004803603602081101561096657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d1565b005b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b5050505050905090565b6000610a4a610a43611aa6565b8484611aae565b6001905092915050565b6000600754905090565b60008060008060008060006002541115610bae576000600254905060008090505b600180549050811015610bab57600060018281548110610a9b57fe5b90600052602060002090600402019050610ac2816000015484611ca590919063ffffffff16565b9250824211610b9d57610adf600183611ca590919063ffffffff16565b8160000154848360010154846002016000610af8611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16856003016000610b4e611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054985098509850985098509850505050610bd3565b508080600101915050610a7f565b50505b6000806000806000808595508494508393508292508090509550955095509550955095505b909192939495565b6000610be8848484611d2d565b610ca984610bf4611aa6565b610ca48560405180606001604052806028815260200161293660289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c5a611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ff29092919063ffffffff16565b611aae565b600190509392505050565b610cbc611aa6565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616c6c6572206973206e6f74207468652077686974656c697374657200000081525060200191505060405180910390fd5b610d87816120b2565b50565b6000600860009054906101000a900460ff16905090565b6000610e4a610dae611aa6565b84610e458560066000610dbf611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca590919063ffffffff16565b611aae565b6001905092915050565b610e5c611aa6565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616c6c6572206973206e6f74207468652077686974656c697374657200000081525060200191505060405180910390fd5b6001805490508610610f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c696420696e6465780000000000000000000000000000000000000081525060200191505060405180910390fd5b6000841161100e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420616d6f756e744d617800000000000000000000000000000081525060200191505060405180910390fd5b6001868154811061101b57fe5b906000526020600020906004020160000154851461105757846001878154811061104157fe5b9060005260206000209060040201600001819055505b6001868154811061106457fe5b90600052602060002090600402016001015484146110a057836001878154811061108a57fe5b9060005260206000209060040201600101819055505b60008090505b838390508110156111595781600188815481106110bf57fe5b906000526020600020906004020160020160008686858181106110de57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506110a6565b50505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611190611aa6565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616c6c6572206973206e6f74207468652077686974656c697374657200000081525060200191505060405180910390fd5b8181905084849050146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e76616c69642077686974656c69737428732900000000000000000000000081525060200191505060405180910390fd5b84600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008484905011156113c55760016000611328919061282b565b60008090505b848490508110156113c3576001604051806040016040528087878581811061135257fe5b90506020020135815260200185858581811061136a57fe5b90506020020135815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010155505050808060010191505061132e565b505b5050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141d611aa6565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115a76115ac565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561166d5780601f106116425761010080835404028352916020019161166d565b820191906000526020600020905b81548152906001019060200180831161165057829003601f168201915b5050505050905090565b61167f611aa6565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616c6c6572206973206e6f74207468652077686974656c697374657200000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b460405160405180910390a36000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006118c561180f611aa6565b846118c0856040518060600160405280602581526020016129ca6025913960066000611839611aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ff29092919063ffffffff16565b611aae565b6001905092915050565b600181815481106118dc57fe5b90600052602060002090600402016000915090508060000154908060010154905082565b600061191461190d611aa6565b8484611d2d565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119d9611aa6565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611aa3816121f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806129a66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806128c86022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600080828401905083811015611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061295e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061287f6023913960400191505060405180910390fd5b611e4483838361233c565b611eb0816040518060600160405280602681526020016128ea60269139600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ff29092919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f4581600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca590919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083831115829061209f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612064578082015181840152602081019050612049565b50505050905090810190601f1680156120915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806129836023913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b460405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561227e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128a26026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061239e57506000600180549050145b156123a8576127dc565b60006002541480156124085750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124615750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561246d5750600081115b1561247a57426002819055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125255750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156127db576000612534610a5e565b5050505050905060008111156127d9576000600161255c6001846127e190919063ffffffff16565b8154811061256657fe5b906000526020600020906004020190508060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c4745202d204275796572206973206e6f742077686974656c6973746564000081525060200191505060405180910390fd5b600080905081600101548260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156126e4576126e18260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483600101546127e190919063ffffffff16565b90505b8084111561273d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806129106026913960400191505060405180910390fd5b612791848360030160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca590919063ffffffff16565b8260030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b505b5b505050565b600061282383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ff2565b905092915050565b508054600082556004029060005260206000209081019061284c919061284f565b50565b61287b91905b8082111561287757600080820160009055600182016000905550600401612855565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c4745202d20416d6f756e7420657863656564732077686974656c697374206d6178696d756d45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e65772077686974656c697374657220697320746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820b77bc3d363abdbc60802774a2fe9678edf5872c3047e50594f731d88dc5d193a64736f6c63430005100032

Deployed Bytecode Sourcemap

17418:6425:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17418:6425:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18604:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18604:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19737:154;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19737:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18755:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15154:804;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20355:306;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20355:306:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12267:133;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12267:133:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18298:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21062:212;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21062:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13985:700;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13985:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;13985:700:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13985:700:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13985:700:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11676:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13042:573;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13042:573:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;13042:573:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13042:573:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13042:573:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;13042:573:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13042:573:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13042:573:0;;;;;;;;;;;;:::i;:::-;;18912:112;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18912:112:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10608:132;;;:::i;:::-;;18144:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10006:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18450:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18450:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12091:164;;;:::i;:::-;;21767:263;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21767:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11585:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11585:43:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19233:160;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19233:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11719:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11641:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19457:136;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19457:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10885:105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10885:105:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18604:85;18643:13;18676:5;18669:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18604:85;:::o;19737:154::-;19805:4;19822:39;19831:12;:10;:12::i;:::-;19845:7;19854:6;19822:8;:39::i;:::-;19879:4;19872:11;;19737:154;;;;:::o;18755:93::-;18801:7;18828:12;;18821:19;;18755:93;:::o;15154:804::-;15207:7;15216;15225;15234;15243:4;15249:7;15298:1;15282:13;;:17;15279:622;;;15330:28;15361:13;;15330:44;;15404:9;15416:1;15404:13;;15399:481;15423:19;:26;;;;15419:1;:30;15399:481;;;15493:30;15526:19;15546:1;15526:22;;;;;;;;;;;;;;;;;;15493:55;;15608:42;15633:7;:16;;;15608:20;:24;;:42;;;;:::i;:::-;15585:65;;15679:20;15672:3;:27;15669:195;;15730:8;15736:1;15730;:5;;:8;;;;:::i;:::-;15740:7;:16;;;15758:20;15780:7;:17;;;15799:7;:17;;:31;15817:12;:10;:12::i;:::-;15799:31;;;;;;;;;;;;;;;;;;;;;;;;;15832:7;:17;;:31;15850:12;:10;:12::i;:::-;15832:31;;;;;;;;;;;;;;;;15722:142;;;;;;;;;;;;;;;;;15669:195;15399:481;15451:3;;;;;;;15399:481;;;;15279:622;;15929:1;15932;15935;15938;15941:5;15948:1;15921:29;;;;;;;;;;;;;;;;;;;;;;;;;;;15154:804;;;;;;;:::o;20355:306::-;20446:4;20463:36;20473:6;20481:9;20492:6;20463:9;:36::i;:::-;20510:121;20519:6;20527:12;:10;:12::i;:::-;20541:89;20579:6;20541:89;;;;;;;;;;;;;;;;;:11;:19;20553:6;20541:19;;;;;;;;;;;;;;;:33;20561:12;:10;:12::i;:::-;20541:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20510:8;:121::i;:::-;20649:4;20642:11;;20355:306;;;;;:::o;12267:133::-;12013:12;:10;:12::i;:::-;11997:28;;:12;;;;;;;;;;;:28;;;11989:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12356:36;12377:14;12356:20;:36::i;:::-;12267:133;:::o;18298:85::-;18341:5;18366:9;;;;;;;;;;;18359:16;;18298:85;:::o;21062:212::-;21144:4;21161:83;21170:12;:10;:12::i;:::-;21184:7;21193:50;21232:10;21193:11;:25;21205:12;:10;:12::i;:::-;21193:25;;;;;;;;;;;;;;;:34;21219:7;21193:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21161:8;:83::i;:::-;21262:4;21255:11;;21062:212;;;;:::o;13985:700::-;12013:12;:10;:12::i;:::-;11997:28;;:12;;;;;;;;;;;:28;;;11989:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14163:19;:26;;;;14155:5;:34;14147:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14238:1;14226:9;:13;14218:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14289:19;14309:5;14289:26;;;;;;;;;;;;;;;;;;:35;;;14277:8;:47;14274:111;;14377:8;14339:19;14359:5;14339:26;;;;;;;;;;;;;;;;;;:35;;:46;;;;14274:111;14422:19;14442:5;14422:26;;;;;;;;;;;;;;;;;;:36;;;14409:9;:49;14406:117;;14514:9;14475:19;14495:5;14475:26;;;;;;;;;;;;;;;;;;:36;;:48;;;;14406:117;14549:9;14561:1;14549:13;;14544:134;14568:9;;:16;;14564:1;:20;14544:134;;;14659:7;14606:19;14626:5;14606:26;;;;;;;;;;;;;;;;;;:36;;:50;14643:9;;14653:1;14643:12;;;;;;;;;;;;;;;14606:50;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;14586:3;;;;;;;14544:134;;;;13985:700;;;;;;:::o;11676:30::-;;;;;;;;;;;;;:::o;13042:573::-;12013:12;:10;:12::i;:::-;11997:28;;:12;;;;;;;;;;;:28;;;11989:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13218:10;;:17;;13198:9;;:16;;:37;13190:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13299:11;13281:15;;:29;;;;;;;;;;;;;;;;;;13353:1;13334:9;;:16;;:20;13331:277;;;13392:19;;13385:26;;;;:::i;:::-;13441:9;13453:1;13441:13;;13436:151;13460:9;;:16;;13456:1;:20;13436:151;;;13502:19;13527:43;;;;;;;;13542:9;;13552:1;13542:12;;;;;;;;;;;;;13527:43;;;;13556:10;;13567:1;13556:13;;;;;;;;;;;;;13527:43;;;13502:69;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13502:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13478:3;;;;;;;13436:151;;;;13331:277;13042:573;;;;;:::o;18912:112::-;18971:7;18998:9;:18;19008:7;18998:18;;;;;;;;;;;;;;;;18991:25;;18912:112;;;:::o;10608:132::-;10210:12;:10;:12::i;:::-;10200:22;;:6;;;;;;;;;;;:22;;;10192:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10705:1;10668:40;;10689:6;;;;;;;;;;;10668:40;;;;;;;;;;;;10732:1;10715:6;;:19;;;;;;;;;;;;;;;;;;10608:132::o;18144:85::-;18187:7;18214;:5;:7::i;:::-;18207:14;;18144:85;:::o;10006:73::-;10044:7;10067:6;;;;;;;;;;;10060:13;;10006:73;:::o;18450:89::-;18491:13;18524:7;18517:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18450:89;:::o;12091:164::-;12013:12;:10;:12::i;:::-;11997:28;;:12;;;;;;;;;;;:28;;;11989:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12208:1;12163:48;;12186:12;;;;;;;;;;;12163:48;;;;;;;;;;;;12245:1;12222:12;;:25;;;;;;;;;;;;;;;;;;12091:164::o;21767:263::-;21854:4;21871:129;21880:12;:10;:12::i;:::-;21894:7;21903:96;21942:15;21903:96;;;;;;;;;;;;;;;;;:11;:25;21915:12;:10;:12::i;:::-;21903:25;;;;;;;;;;;;;;;:34;21929:7;21903:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21871:8;:129::i;:::-;22018:4;22011:11;;21767:263;;;;:::o;11585:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19233:160::-;19304:4;19321:42;19331:12;:10;:12::i;:::-;19345:9;19356:6;19321:9;:42::i;:::-;19381:4;19374:11;;19233:160;;;;:::o;11719:27::-;;;;;;;;;;;;;:::o;11641:28::-;;;;:::o;19457:136::-;19531:7;19558:11;:18;19570:5;19558:18;;;;;;;;;;;;;;;:27;19577:7;19558:27;;;;;;;;;;;;;;;;19551:34;;19457:136;;;;:::o;10885:105::-;10210:12;:10;:12::i;:::-;10200:22;;:6;;;;;;;;;;;:22;;;10192:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10956:28;10975:8;10956:18;:28::i;:::-;10885:105;:::o;3703:92::-;3748:15;3779:10;3772:17;;3703:92;:::o;23488:346::-;23599:1;23582:19;;:5;:19;;;;23574:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23680:1;23661:21;;:7;:21;;;;23653:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23772:6;23742:11;:18;23754:5;23742:18;;;;;;;;;;;;;;;:27;23761:7;23742:27;;;;;;;;;;;;;;;:36;;;;23810:7;23794:32;;23803:5;23794:32;;;23819:6;23794:32;;;;;;;;;;;;;;;;;;23488:346;;;:::o;4835:167::-;4893:7;4909:9;4925:1;4921;:5;4909:17;;4946:1;4941;:6;;4933:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4995:1;4988:8;;;4835:167;;;;:::o;22511:545::-;22627:1;22609:20;;:6;:20;;;;22601:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22711:1;22690:23;;:9;:23;;;;22682:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22774:45;22793:6;22801:9;22812:6;22774:18;:45::i;:::-;22860:71;22882:6;22860:71;;;;;;;;;;;;;;;;;:9;:17;22870:6;22860:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;22840:9;:17;22850:6;22840:17;;;;;;;;;;;;;;;:91;;;;22965:32;22990:6;22965:9;:20;22975:9;22965:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22942:9;:20;22952:9;22942:20;;;;;;;;;;;;;;;:55;;;;23030:9;23013:35;;23022:6;23013:35;;;23041:6;23013:35;;;;;;;;;;;;;;;;;;22511:545;;;:::o;5662:178::-;5748:7;5777:1;5772;:6;;5780:12;5764:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5764:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5800:9;5816:1;5812;:5;5800:17;;5833:1;5826:8;;;5662:178;;;;;:::o;12412:266::-;12520:1;12494:28;;:14;:28;;;;12486:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12615:14;12578:52;;12601:12;;;;;;;;;;;12578:52;;;;;;;;;;;;12656:14;12641:12;;:29;;;;;;;;;;;;;;;;;;12412:266;:::o;11088:215::-;11178:1;11158:22;;:8;:22;;;;11150:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11264:8;11235:38;;11256:6;;;;;;;;;;;11235:38;;;;;;;;;;;;11289:8;11280:6;;:17;;;;;;;;;;;;;;;;;;11088:215;:::o;16093:1312::-;16232:1;16205:29;;:15;;;;;;;;;;;:29;;;:64;;;;16268:1;16238:19;:26;;;;:31;16205:64;16202:89;;;16284:7;;16202:89;16331:1;16314:13;;:18;:47;;;;;16346:15;;;;;;;;;;;16336:25;;:6;:25;;;;16314:47;:79;;;;;16378:15;;;;;;;;;;;16365:28;;:9;:28;;;16314:79;:93;;;;;16406:1;16397:6;:10;16314:93;16311:130;;;16438:3;16422:13;:19;;;;16311:130;16475:15;;;;;;;;;;;16465:25;;:6;:25;;;:57;;;;;16507:15;;;;;;;;;;;16494:28;;:9;:28;;;;16465:57;16462:926;;;16576:21;16606:22;:20;:22::i;:::-;16575:53;;;;;;;16672:1;16656:13;:17;16653:710;;;16712:30;16745:19;16765:20;16783:1;16765:13;:17;;:20;;;;:::i;:::-;16745:41;;;;;;;;;;;;;;;;;;16712:74;;16831:7;:17;;:28;16849:9;16831:28;;;;;;;;;;;;;;;;;;;;;;;;;16823:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16931:23;16957:1;16931:27;;17029:7;:17;;;16998:7;:17;;:28;17016:9;16998:28;;;;;;;;;;;;;;;;:48;16995:143;;;17087:51;17109:7;:17;;:28;17127:9;17109:28;;;;;;;;;;;;;;;;17087:7;:17;;;:21;;:51;;;;:::i;:::-;17069:69;;16995:143;17181:15;17171:6;:25;;17163:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17289:40;17322:6;17289:7;:17;;:28;17307:9;17289:28;;;;;;;;;;;;;;;;:32;;:40;;;;:::i;:::-;17258:7;:17;;:28;17276:9;17258:28;;;;;;;;;;;;;;;:71;;;;16653:710;;;16462:926;;16093:1312;;;;:::o;5257:130::-;5315:7;5338:43;5342:1;5345;5338:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5331:50;;5257:130;;;;:::o;17418:6425::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://b77bc3d363abdbc60802774a2fe9678edf5872c3047e50594f731d88dc5d193a
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.