ETH Price: $2,509.09 (+0.43%)

Token

WhiteSwap (WSD)
 

Overview

Max Total Supply

1,000,000,000 WSD

Holders

633

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
WhiteSwap: Deployer
Balance
303,226.894293713 WSD

Value
$0.00
0x95db09ff2644eca19cb4b99318483254bfd52dae
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WSGov

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-31
*/

/**
 *Submitted for verification at Etherscan.io on 2020-11-09
*/

// SPDX-License-Identifier: GPL-3.0-or-later


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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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


pragma solidity ^0.6.12;

contract WSGov {
    /// @dev EIP-20 token name for this token
    string public constant name = "WhiteSwap";

    /// @dev EIP-20 token symbol for this token
    string public constant symbol = "WSD";

    /// @dev EIP-20 token decimals for this token
    uint8 public constant decimals = 18;

    /// @dev Total number of tokens in circulation
    uint public totalSupply = 21_000_000e18; // 1 billion WSG

    /// @dev Address which may mint new tokens
    address public minter;

    /// @dev Allowance amounts on behalf of others
    mapping (address => mapping (address => uint96)) internal allowances;

    /// @dev Official record of token balances for each account
    mapping (address => uint96) internal balances;

    /// @dev A record of each accounts delegate
    mapping (address => address) public delegates;

    /// @dev A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint96 votes;
    }

    /// @dev A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @dev The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @dev The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @dev The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @dev The EIP-712 typehash for the permit struct used by the contract
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    /// @dev A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @dev An event thats emitted when the minter address is changed
    event MinterChanged(address minter, address newMinter);

    /// @dev An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @dev An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /// @dev The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @dev The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /**
     * @dev Construct a new WSG token
     */
    constructor() public {
        balances[msg.sender] = uint96(totalSupply);
        emit Transfer(address(0), msg.sender, totalSupply);
        minter = msg.sender;
        emit MinterChanged(address(0), minter);
    }

    /**
     * @dev Change the minter address
     * @param minter_ The address of the new minter
     */
    function setMinter(address minter_) external {
        require(msg.sender == minter, "WSG::setMinter: only the minter can change the minter address");
        emit MinterChanged(minter, minter_);
        minter = minter_;
    }

    /**
     * @dev Mint new tokens
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to be minted
     */
    function mint(address dst, uint rawAmount) external {
        require(msg.sender == minter, "WSG::mint: only the minter can mint");
        require(dst != address(0), "WSG::mint: cannot transfer to the zero address");

        // mint the amount
        uint96 amount = safe96(rawAmount, "WSG::mint: amount exceeds 96 bits");
        totalSupply = safe96(SafeMath.add(totalSupply, amount), "WSG::mint: totalSupply exceeds 96 bits");

        // transfer the amount to the recipient
        balances[dst] = add96(balances[dst], amount, "WSG::mint: transfer amount overflows");
        emit Transfer(address(0), dst, amount);

        // move delegates
        _moveDelegates(address(0), delegates[dst], amount);
    }

     /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "WSG::burn: burn from the zero address");
        uint256 accountBalance = balances[account];
        require(accountBalance >= amount, "WSG::burn: burn amount exceeds balance");
        balances[account] = safe96(SafeMath.sub(accountBalance, amount), "WSG::burn: amount exceeds 96 bits");
        totalSupply = safe96(SafeMath.sub(totalSupply, amount), "WSG::burn: amount exceeds 96 bits");

        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(msg.sender, amount);
    }

    /**
     * @dev Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param account The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

    /**
     * @dev Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint rawAmount) external returns (bool) {
        uint96 amount;
        if (rawAmount == uint(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(rawAmount, "WSG::approve: amount exceeds 96 bits");
        }

        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /**
     * @dev Triggers an approval from owner to spends
     * @param owner The address to approve from
     * @param spender The address to be approved
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @param deadline The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function permit(address owner, address spender, uint rawAmount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        uint96 amount;
        if (rawAmount == uint(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(rawAmount, "WSG::permit: amount exceeds 96 bits");
        }

        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, rawAmount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "WSG::permit: invalid signature");
        require(signatory == owner, "WSG::permit: unauthorized");
        require(now <= deadline, "WSG::permit: signature expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    /**
     * @dev Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint rawAmount) external returns (bool) {
        uint96 amount = safe96(rawAmount, "WSG::transfer: amount exceeds 96 bits");
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    /**
     * @dev Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint rawAmount) external returns (bool) {
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(rawAmount, "WSG::approve: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != uint96(-1)) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "WSG::transferFrom: transfer amount exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    /**
     * @dev Delegate votes from `msg.sender` to `delegatee`
     * @param delegatee The address to delegate votes to
     */
    function delegate(address delegatee) public {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @dev Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "WSG::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "WSG::delegateBySig: invalid nonce");
        require(now <= expiry, "WSG::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @dev Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint96) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @dev Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber) public view returns (uint96) {
        require(blockNumber < block.number, "WSG::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint96 delegatorBalance = balances[delegator];
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _transferTokens(address src, address dst, uint96 amount) internal {
        require(src != address(0), "WSG::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "WSG::_transferTokens: cannot transfer to the zero address");

        balances[src] = sub96(balances[src], amount, "WSG::_transferTokens: transfer amount exceeds balance");
        balances[dst] = add96(balances[dst], amount, "WSG::_transferTokens: transfer amount overflows");
        emit Transfer(src, dst, amount);

        _moveDelegates(delegates[src], delegates[dst], amount);
    }

    function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint96 srcRepNew = sub96(srcRepOld, amount, "WSG::_moveVotes: vote amount underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint96 dstRepNew = add96(dstRepOld, amount, "WSG::_moveVotes: vote amount overflows");
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal {
      uint32 blockNumber = safe32(block.number, "WSG::_writeCheckpoint: block number exceeds 32 bits");

      if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
          checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
      } else {
          checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
          numCheckpoints[delegatee] = nCheckpoints + 1;
      }

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint n, string memory errorMessage) internal pure returns (uint96) {
        require(n < 2**96, errorMessage);
        return uint96(n);
    }

    function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        uint96 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

    function sub96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        require(b <= a, errorMessage);
        return a - b;
    }

    function getChainId() internal pure returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

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":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"address","name":"newMinter","type":"address"}],"name":"MinterChanged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"rawAmount","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":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter_","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526a115eec47f6cf7e3500000060005534801561001f57600080fd5b50600080543380835260036020908152604080852080546001600160601b0319166001600160601b03909516949094179093558354835190815292519193927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3600180546001600160a01b03191633179081905560408051600081526001600160a01b0392909216602083015280517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69281900390910190a1612e0c806100f16000396000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80636fcfff45116100ee578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e1461061e578063e7a324dc14610659578063f1127ed814610661578063fca3b5aa146106cd576101a3565b8063b4b5ea5714610539578063c3cda5201461056c578063d505accf146105c0576101a3565b80637ecebe00116100c85780637ecebe00146104c557806395d89b41146104f8578063a9059cbb14610500576101a3565b80636fcfff45146103ec57806370a0823114610438578063782d6fe11461046b576101a3565b806330adf81f1161015057806342966c681161012a57806342966c6814610369578063587cde1e146103865780635c19a95c146103b9576101a3565b806330adf81f14610308578063313ce5671461031057806340c10f191461032e576101a3565b806318160ddd1161018157806318160ddd146102a357806320606b70146102bd57806323b872dd146102c5576101a3565b806306fdde03146101a85780630754617214610225578063095ea7b314610256575b600080fd5b6101b0610700565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ea5781810151838201526020016101d2565b50505050905090810190601f1680156102175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022d610739565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61028f6004803603604081101561026c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610755565b604080519115158252519081900360200190f35b6102ab610879565b60408051918252519081900360200190f35b6102ab61087f565b61028f600480360360608110156102db57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356108a3565b6102ab610a43565b610318610a67565b6040805160ff9092168252519081900360200190f35b6103676004803603604081101561034457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a6c565b005b6103676004803603602081101561037f57600080fd5b5035610cd9565b61022d6004803603602081101561039c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ce6565b610367600480360360208110156103cf57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d0e565b61041f6004803603602081101561040257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d18565b6040805163ffffffff9092168252519081900360200190f35b6102ab6004803603602081101561044e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d30565b6104a46004803603604081101561048157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610d66565b604080516bffffffffffffffffffffffff9092168252519081900360200190f35b6102ab600480360360208110156104db57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611067565b6101b0611079565b61028f6004803603604081101561051657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356110b2565b6104a46004803603602081101561054f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110ee565b610367600480360360c081101561058257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060ff6060820135169060808101359060a0013561119d565b610367600480360360e08110156105d657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611523565b6102ab6004803603604081101561063457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611a9e565b6102ab611ae4565b6106a06004803603604081101561067757600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16611b08565b6040805163ffffffff90931683526bffffffffffffffffffffffff90911660208301528051918290030190f35b610367600480360360208110156106e357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b43565b6040518060400160405280600981526020017f576869746553776170000000000000000000000000000000000000000000000081525081565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156107a757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107cc565b6107c983604051806060016040528060248152602001612ae860249139611c4f565b90505b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff8716908117909155815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a360019150505b92915050565b60005481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203380855290835281842054825160608101909352602480845291936bffffffffffffffffffffffff90911692859261090d9288929190612ae890830139611c4f565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561095957506bffffffffffffffffffffffff82811614155b15610a2b57600061098383836040518060600160405280603c8152602001612b0c603c9139611d0c565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600260209081526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915582519081529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b610a36878783611d9d565b5060019695505050505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60015473ffffffffffffffffffffffffffffffffffffffff163314610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612c586023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610b48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612bfb602e913960400191505060405180910390fd5b6000610b6c82604051806060016040528060218152602001612d4660219139611c4f565b9050610ba9610b8b600054836bffffffffffffffffffffffff1661203e565b604051806060016040528060268152602001612a3f60269139611c4f565b6bffffffffffffffffffffffff908116600090815573ffffffffffffffffffffffffffffffffffffffff8516815260036020908152604091829020548251606081019093526024808452610c0d9491909116928592909190612d22908301396120b2565b73ffffffffffffffffffffffffffffffffffffffff8416600081815260036020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790558051948616855251929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a373ffffffffffffffffffffffffffffffffffffffff808416600090815260046020526040812054610cd492168361213b565b505050565b610ce33382612382565b50565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b610ce3338261257a565b60066020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152600360205260409020546bffffffffffffffffffffffff1690565b6000438210610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bd56026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205463ffffffff1680610dfb576000915050610873565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181168552925290912054168310610ed35773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff169050610873565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832083805290915290205463ffffffff16831015610f1b576000915050610873565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff16111561100f57600282820363ffffffff16048103610f6b6129c9565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260056020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff169181019190915290871415610fea576020015194506108739350505050565b805163ffffffff1687111561100157819350611008565b6001820392505b5050610f41565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60076020526000908152604090205481565b6040518060400160405280600381526020017f575344000000000000000000000000000000000000000000000000000000000081525081565b6000806110d783604051806060016040528060258152602001612d8d60259139611c4f565b90506110e4338583611d9d565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205463ffffffff1680611126576000611196565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9392505050565b60408051808201909152600981527f576869746553776170000000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f61703dc3790c56209e077e2cef46210302a1533403439bfe37f3f85237f86a1b61121e61262e565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c084015273ffffffffffffffffffffffffffffffffffffffff8b1660e084015261010083018a90526101208084018a905282518085039091018152610140840183528051908501207f19010000000000000000000000000000000000000000000000000000000000006101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8b166101e287015261020286018a905261022286018990529351929650909492939092600192610242808401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa158015611397573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661142e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612ac36025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260076020526040902080546001810190915589146114b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b7b6021913960400191505060405180910390fd5b8742111561150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612db26025913960400191505060405180910390fd5b611516818b61257a565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561157457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611599565b611596866040518060600160405280602381526020016129e160239139611c4f565b90505b60408051808201909152600981527f576869746553776170000000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f61703dc3790c56209e077e2cef46210302a1533403439bfe37f3f85237f86a1b61161a61262e565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a08301825280519084012073ffffffffffffffffffffffffffffffffffffffff8d8116600081815260078752848120805460018082019092557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960c089015260e0880193909352928f1661010087015261012086018e90526101408601919091526101608086018d905284518087039091018152610180860185528051908701207f19010000000000000000000000000000000000000000000000000000000000006101a08701526101a286018490526101c2808701829052855180880390910181526101e2870180875281519189019190912090839052610202870180875281905260ff8d1661022288015261024287018c905261026287018b905294519397509593949093919261028280830193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa1580156117bc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661186957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5753473a3a7065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461190357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5753473a3a7065726d69743a20756e617574686f72697a656400000000000000604482015290519081900360640190fd5b8842111561197257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5753473a3a7065726d69743a207369676e617475726520657870697265640000604482015290519081900360640190fd5b84600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405180826bffffffffffffffffffffffff16815260200191505060405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526002602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600560209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b60015473ffffffffffffffffffffffffffffffffffffffff163314611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a65603d913960400191505060405180910390fd5b6001546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69281900390910190a1600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000816c010000000000000000000000008410611d04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cc9578181015183820152602001611cb1565b50505050905090810190601f168015611cf65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cc9578181015183820152602001611cb1565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316611e09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180612a04603b913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b9c6039913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020908152604091829020548251606081019093526035808452611ed2936bffffffffffffffffffffffff9092169285929190612c7b90830139611d0c565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260036020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96871617905592861682529082902054825160608101909352602f808452611f649491909116928592909190612c29908301396120b2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790558151948616855290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a373ffffffffffffffffffffffffffffffffffffffff808416600090815260046020526040808220548584168352912054610cd49291821691168361213b565b60008282018381101561119657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000838301826bffffffffffffffffffffffff8087169083161015612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cc9578181015183820152602001611cb1565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561218557506000816bffffffffffffffffffffffff16115b15610cd45773ffffffffffffffffffffffffffffffffffffffff8316156122885773ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604081205463ffffffff1690816121df57600061224f565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b905060006122768285604051806060016040528060278152602001612cd560279139611d0c565b905061228486848484612632565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615610cd45773ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604081205463ffffffff1690816122dd57600061234d565b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b905060006123748285604051806060016040528060268152602001612cfc602691396120b2565b905061151b85848484612632565b73ffffffffffffffffffffffffffffffffffffffff82166123ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612cb06025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020546bffffffffffffffffffffffff168181101561247b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612d676026913960400191505060405180910390fd5b6124a661248882846128ab565b604051806060016040528060218152602001612aa260219139611c4f565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9390931692909217909155546125169061248890846128ab565b6bffffffffffffffffffffffff16600090815560408051848152905173ffffffffffffffffffffffffffffffffffffffff8616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260046020818152604080842080546003845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461262882848361213b565b50505050565b4690565b600061265643604051806060016040528060338152602001612b48603391396128ed565b905060008463ffffffff161180156126ca575073ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b156127695773ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055612845565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152600583528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252600690935292909220805460018801909316929091169190911790555b604080516bffffffffffffffffffffffff808616825284166020820152815173ffffffffffffffffffffffffffffffffffffffff8816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b600061119683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061295d565b6000816401000000008410611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cc9578181015183820152602001611cb1565b60008184841115611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cc9578181015183820152602001611cb1565b60408051808201909152600080825260208201529056fe5753473a3a7065726d69743a20616d6f756e74206578636565647320393620626974735753473a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573735753473a3a6d696e743a20746f74616c537570706c79206578636565647320393620626974735753473a3a7365744d696e7465723a206f6e6c7920746865206d696e7465722063616e206368616e676520746865206d696e74657220616464726573735753473a3a6275726e3a20616d6f756e74206578636565647320393620626974735753473a3a64656c656761746542795369673a20696e76616c6964207369676e61747572655753473a3a617070726f76653a20616d6f756e74206578636565647320393620626974735753473a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63655753473a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974735753473a3a64656c656761746542795369673a20696e76616c6964206e6f6e63655753473a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573735753473a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65645753473a3a6d696e743a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573735753473a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77735753473a3a6d696e743a206f6e6c7920746865206d696e7465722063616e206d696e745753473a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63655753473a3a6275726e3a206275726e2066726f6d20746865207a65726f20616464726573735753473a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77735753473a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77735753473a3a6d696e743a207472616e7366657220616d6f756e74206f766572666c6f77735753473a3a6d696e743a20616d6f756e74206578636565647320393620626974735753473a3a6275726e3a206275726e20616d6f756e7420657863656564732062616c616e63655753473a3a7472616e736665723a20616d6f756e74206578636565647320393620626974735753473a3a64656c656761746542795369673a207369676e61747572652065787069726564a26469706673582212209ba542a226cb8476c3792b0fc646f66a8fa8af9fdc8b2c56b948a3f4fefba06d64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80636fcfff45116100ee578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e1461061e578063e7a324dc14610659578063f1127ed814610661578063fca3b5aa146106cd576101a3565b8063b4b5ea5714610539578063c3cda5201461056c578063d505accf146105c0576101a3565b80637ecebe00116100c85780637ecebe00146104c557806395d89b41146104f8578063a9059cbb14610500576101a3565b80636fcfff45146103ec57806370a0823114610438578063782d6fe11461046b576101a3565b806330adf81f1161015057806342966c681161012a57806342966c6814610369578063587cde1e146103865780635c19a95c146103b9576101a3565b806330adf81f14610308578063313ce5671461031057806340c10f191461032e576101a3565b806318160ddd1161018157806318160ddd146102a357806320606b70146102bd57806323b872dd146102c5576101a3565b806306fdde03146101a85780630754617214610225578063095ea7b314610256575b600080fd5b6101b0610700565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ea5781810151838201526020016101d2565b50505050905090810190601f1680156102175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022d610739565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61028f6004803603604081101561026c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610755565b604080519115158252519081900360200190f35b6102ab610879565b60408051918252519081900360200190f35b6102ab61087f565b61028f600480360360608110156102db57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356108a3565b6102ab610a43565b610318610a67565b6040805160ff9092168252519081900360200190f35b6103676004803603604081101561034457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a6c565b005b6103676004803603602081101561037f57600080fd5b5035610cd9565b61022d6004803603602081101561039c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ce6565b610367600480360360208110156103cf57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d0e565b61041f6004803603602081101561040257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d18565b6040805163ffffffff9092168252519081900360200190f35b6102ab6004803603602081101561044e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d30565b6104a46004803603604081101561048157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610d66565b604080516bffffffffffffffffffffffff9092168252519081900360200190f35b6102ab600480360360208110156104db57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611067565b6101b0611079565b61028f6004803603604081101561051657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356110b2565b6104a46004803603602081101561054f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110ee565b610367600480360360c081101561058257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060ff6060820135169060808101359060a0013561119d565b610367600480360360e08110156105d657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611523565b6102ab6004803603604081101561063457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611a9e565b6102ab611ae4565b6106a06004803603604081101561067757600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16611b08565b6040805163ffffffff90931683526bffffffffffffffffffffffff90911660208301528051918290030190f35b610367600480360360208110156106e357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b43565b6040518060400160405280600981526020017f576869746553776170000000000000000000000000000000000000000000000081525081565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156107a757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107cc565b6107c983604051806060016040528060248152602001612ae860249139611c4f565b90505b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff8716908117909155815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a360019150505b92915050565b60005481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203380855290835281842054825160608101909352602480845291936bffffffffffffffffffffffff90911692859261090d9288929190612ae890830139611c4f565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561095957506bffffffffffffffffffffffff82811614155b15610a2b57600061098383836040518060600160405280603c8152602001612b0c603c9139611d0c565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600260209081526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915582519081529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b610a36878783611d9d565b5060019695505050505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60015473ffffffffffffffffffffffffffffffffffffffff163314610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612c586023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610b48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612bfb602e913960400191505060405180910390fd5b6000610b6c82604051806060016040528060218152602001612d4660219139611c4f565b9050610ba9610b8b600054836bffffffffffffffffffffffff1661203e565b604051806060016040528060268152602001612a3f60269139611c4f565b6bffffffffffffffffffffffff908116600090815573ffffffffffffffffffffffffffffffffffffffff8516815260036020908152604091829020548251606081019093526024808452610c0d9491909116928592909190612d22908301396120b2565b73ffffffffffffffffffffffffffffffffffffffff8416600081815260036020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790558051948616855251929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a373ffffffffffffffffffffffffffffffffffffffff808416600090815260046020526040812054610cd492168361213b565b505050565b610ce33382612382565b50565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b610ce3338261257a565b60066020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152600360205260409020546bffffffffffffffffffffffff1690565b6000438210610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bd56026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205463ffffffff1680610dfb576000915050610873565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181168552925290912054168310610ed35773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff169050610873565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832083805290915290205463ffffffff16831015610f1b576000915050610873565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff16111561100f57600282820363ffffffff16048103610f6b6129c9565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260056020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff169181019190915290871415610fea576020015194506108739350505050565b805163ffffffff1687111561100157819350611008565b6001820392505b5050610f41565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60076020526000908152604090205481565b6040518060400160405280600381526020017f575344000000000000000000000000000000000000000000000000000000000081525081565b6000806110d783604051806060016040528060258152602001612d8d60259139611c4f565b90506110e4338583611d9d565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205463ffffffff1680611126576000611196565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9392505050565b60408051808201909152600981527f576869746553776170000000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f61703dc3790c56209e077e2cef46210302a1533403439bfe37f3f85237f86a1b61121e61262e565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c084015273ffffffffffffffffffffffffffffffffffffffff8b1660e084015261010083018a90526101208084018a905282518085039091018152610140840183528051908501207f19010000000000000000000000000000000000000000000000000000000000006101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8b166101e287015261020286018a905261022286018990529351929650909492939092600192610242808401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa158015611397573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661142e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612ac36025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260076020526040902080546001810190915589146114b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b7b6021913960400191505060405180910390fd5b8742111561150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612db26025913960400191505060405180910390fd5b611516818b61257a565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561157457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611599565b611596866040518060600160405280602381526020016129e160239139611c4f565b90505b60408051808201909152600981527f576869746553776170000000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f61703dc3790c56209e077e2cef46210302a1533403439bfe37f3f85237f86a1b61161a61262e565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a08301825280519084012073ffffffffffffffffffffffffffffffffffffffff8d8116600081815260078752848120805460018082019092557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960c089015260e0880193909352928f1661010087015261012086018e90526101408601919091526101608086018d905284518087039091018152610180860185528051908701207f19010000000000000000000000000000000000000000000000000000000000006101a08701526101a286018490526101c2808701829052855180880390910181526101e2870180875281519189019190912090839052610202870180875281905260ff8d1661022288015261024287018c905261026287018b905294519397509593949093919261028280830193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa1580156117bc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661186957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5753473a3a7065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461190357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5753473a3a7065726d69743a20756e617574686f72697a656400000000000000604482015290519081900360640190fd5b8842111561197257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5753473a3a7065726d69743a207369676e617475726520657870697265640000604482015290519081900360640190fd5b84600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405180826bffffffffffffffffffffffff16815260200191505060405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526002602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600560209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b60015473ffffffffffffffffffffffffffffffffffffffff163314611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612a65603d913960400191505060405180910390fd5b6001546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69281900390910190a1600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000816c010000000000000000000000008410611d04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cc9578181015183820152602001611cb1565b50505050905090810190601f168015611cf65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cc9578181015183820152602001611cb1565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316611e09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180612a04603b913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180612b9c6039913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020908152604091829020548251606081019093526035808452611ed2936bffffffffffffffffffffffff9092169285929190612c7b90830139611d0c565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260036020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96871617905592861682529082902054825160608101909352602f808452611f649491909116928592909190612c29908301396120b2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790558151948616855290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a373ffffffffffffffffffffffffffffffffffffffff808416600090815260046020526040808220548584168352912054610cd49291821691168361213b565b60008282018381101561119657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000838301826bffffffffffffffffffffffff8087169083161015612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cc9578181015183820152602001611cb1565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561218557506000816bffffffffffffffffffffffff16115b15610cd45773ffffffffffffffffffffffffffffffffffffffff8316156122885773ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604081205463ffffffff1690816121df57600061224f565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b905060006122768285604051806060016040528060278152602001612cd560279139611d0c565b905061228486848484612632565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615610cd45773ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604081205463ffffffff1690816122dd57600061234d565b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b905060006123748285604051806060016040528060268152602001612cfc602691396120b2565b905061151b85848484612632565b73ffffffffffffffffffffffffffffffffffffffff82166123ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612cb06025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020546bffffffffffffffffffffffff168181101561247b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612d676026913960400191505060405180910390fd5b6124a661248882846128ab565b604051806060016040528060218152602001612aa260219139611c4f565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9390931692909217909155546125169061248890846128ab565b6bffffffffffffffffffffffff16600090815560408051848152905173ffffffffffffffffffffffffffffffffffffffff8616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260046020818152604080842080546003845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461262882848361213b565b50505050565b4690565b600061265643604051806060016040528060338152602001612b48603391396128ed565b905060008463ffffffff161180156126ca575073ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b156127695773ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055612845565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152600583528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252600690935292909220805460018801909316929091169190911790555b604080516bffffffffffffffffffffffff808616825284166020820152815173ffffffffffffffffffffffffffffffffffffffff8816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b600061119683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061295d565b6000816401000000008410611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cc9578181015183820152602001611cb1565b60008184841115611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cc9578181015183820152602001611cb1565b60408051808201909152600080825260208201529056fe5753473a3a7065726d69743a20616d6f756e74206578636565647320393620626974735753473a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573735753473a3a6d696e743a20746f74616c537570706c79206578636565647320393620626974735753473a3a7365744d696e7465723a206f6e6c7920746865206d696e7465722063616e206368616e676520746865206d696e74657220616464726573735753473a3a6275726e3a20616d6f756e74206578636565647320393620626974735753473a3a64656c656761746542795369673a20696e76616c6964207369676e61747572655753473a3a617070726f76653a20616d6f756e74206578636565647320393620626974735753473a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63655753473a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974735753473a3a64656c656761746542795369673a20696e76616c6964206e6f6e63655753473a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573735753473a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65645753473a3a6d696e743a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573735753473a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77735753473a3a6d696e743a206f6e6c7920746865206d696e7465722063616e206d696e745753473a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63655753473a3a6275726e3a206275726e2066726f6d20746865207a65726f20616464726573735753473a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77735753473a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77735753473a3a6d696e743a207472616e7366657220616d6f756e74206f766572666c6f77735753473a3a6d696e743a20616d6f756e74206578636565647320393620626974735753473a3a6275726e3a206275726e20616d6f756e7420657863656564732062616c616e63655753473a3a7472616e736665723a20616d6f756e74206578636565647320393620626974735753473a3a64656c656761746542795369673a207369676e61747572652065787069726564a26469706673582212209ba542a226cb8476c3792b0fc646f66a8fa8af9fdc8b2c56b948a3f4fefba06d64736f6c634300060c0033

Deployed Bytecode Sourcemap

5557:17058:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5626:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6031:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11895:418;;;;;;;;;;;;;;;;-1:-1:-1;11895:418:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5918:39;;;:::i;:::-;;;;;;;;;;;;;;;;6896:122;;;:::i;14963:670::-;;;;;;;;;;;;;;;;-1:-1:-1;14963:670:0;;;;;;;;;;;;;;;;;;:::i;7313:137::-;;;:::i;5822:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9150:730;;;;;;;;;;;;;;;;-1:-1:-1;9150:730:0;;;;;;;;;:::i;:::-;;10894:89;;;;;;;;;;;;;;;;-1:-1:-1;10894:89:0;;:::i;6358:45::-;;;;;;;;;;;;;;;;-1:-1:-1;6358:45:0;;;;:::i;15778:102::-;;;;;;;;;;;;;;;;-1:-1:-1;15778:102:0;;;;:::i;6777:49::-;;;;;;;;;;;;;;;;-1:-1:-1;6777:49:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14050:108;;;;;;;;;;;;;;;;-1:-1:-1;14050:108:0;;;;:::i;17945:1217::-;;;;;;;;;;;;;;;;-1:-1:-1;17945:1217:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7528:39;;;;;;;;;;;;;;;;-1:-1:-1;7528:39:0;;;;:::i;5725:37::-;;;:::i;14419:237::-;;;;;;;;;;;;;;;;-1:-1:-1;14419:237:0;;;;;;;;;:::i;17295:222::-;;;;;;;;;;;;;;;;-1:-1:-1;17295:222:0;;;;:::i;16311:786::-;;;;;;;;;;;;;;;;-1:-1:-1;16311:786:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12800:1050::-;;;;;;;;;;;;;;;;-1:-1:-1;12800:1050:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11284:136::-;;;;;;;;;;;;;;;;-1:-1:-1;11284:136:0;;;;;;;;;;;:::i;7109:117::-;;;:::i;6641:70::-;;;;;;;;;;;;;;;;-1:-1:-1;6641:70:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;8747:231;;;;;;;;;;;;;;;;-1:-1:-1;8747:231:0;;;;:::i;5626:41::-;;;;;;;;;;;;;;;;;;;:::o;6031:21::-;;;;;;:::o;11895:418::-;11963:4;11980:13;12026:2;12008:9;:21;12004:172;;;-1:-1:-1;12062:2:0;12004:172;;;12107:57;12114:9;12107:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;12098:66;;12004:172;12199:10;12188:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;;:40;;;;;;;;;;;;;12246:37;;;;;;;12188:31;;12199:10;12246:37;;;;;;;;;;;12301:4;12294:11;;;11895:418;;;;;:::o;5918:39::-;;;;:::o;6896:122::-;6938:80;6896:122;:::o;14963:670::-;15127:15;;;15045:4;15127:15;;;:10;:15;;;;;;;;15080:10;15127:24;;;;;;;;;;15178:57;;;;;;;;;;;;15080:10;;15127:24;;;;;15045:4;;15178:57;;15185:9;;15178:57;;;;;;;:6;:57::i;:::-;15162:73;;15263:3;15252:14;;:7;:14;;;;:48;;;;-1:-1:-1;15270:30:0;;;;;;15252:48;15248:310;;;15317:19;15339:95;15345:16;15363:6;15339:95;;;;;;;;;;;;;;;;;:5;:95::i;:::-;15449:15;;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;:39;;;;;;;;;;;;;15510:36;;;;;;;15449:39;;-1:-1:-1;15449:24:0;;:15;;15510:36;;;;;;;;;15248:310;;15570:33;15586:3;15591;15596:6;15570:15;:33::i;:::-;-1:-1:-1;15621:4:0;;14963:670;-1:-1:-1;;;;;;14963:670:0:o;7313:137::-;7355:95;7313:137;:::o;5822:35::-;5855:2;5822:35;:::o;9150:730::-;9235:6;;;;9221:10;:20;9213:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9300:17;;;9292:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9409:13;9425:54;9432:9;9425:54;;;;;;;;;;;;;;;;;:6;:54::i;:::-;9409:70;;9504:83;9511:33;9524:11;;9537:6;9511:33;;:12;:33::i;:::-;9504:83;;;;;;;;;;;;;;;;;:6;:83::i;:::-;9490:97;;;;:11;:97;;;9671:13;;;;;:8;:13;;;;;;;;;;9665:68;;;;;;;;;;;;;;9671:13;;;;;9686:6;;9665:68;;;;;;;;:5;:68::i;:::-;9649:13;;;;;;;:8;:13;;;;;;;;:84;;;;;;;;;;;9749:33;;;;;;;;9649:13;;;;9749:33;;;;;;;;;;9849:14;;;;9845:1;9849:14;;;:9;:14;;;;;;9822:50;;9849:14;9865:6;9822:14;:50::i;:::-;9150:730;;;:::o;10894:89::-;10950:25;10956:10;10968:6;10950:5;:25::i;:::-;10894:89;:::o;6358:45::-;;;;;;;;;;;;;;;:::o;15778:102::-;15840:32;15850:10;15862:9;15840;:32::i;6777:49::-;;;;;;;;;;;;;;;:::o;14050:108::-;14133:17;;14109:4;14133:17;;;:8;:17;;;;;;;;;14050:108::o;17945:1217::-;18024:6;18065:12;18051:11;:26;18043:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18155:23;;;18133:19;18155:23;;;:14;:23;;;;;;;;18193:17;18189:58;;18234:1;18227:8;;;;;18189:58;18307:20;;;;;;;:11;:20;;;;;;;;:38;18328:16;;;18307:38;;;;;;;;;:48;;:63;-1:-1:-1;18303:147:0;;18394:20;;;;;;;:11;:20;;;;;;;;18415:16;;;;;18394:38;;;;;;;;:44;;;;;;;-1:-1:-1;18387:51:0;;18303:147;18511:20;;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;18507:88:0;;;18582:1;18575:8;;;;;18507:88;18607:12;18649:16;;;18676:428;18691:5;18683:13;;:5;:13;;;18676:428;;;18755:1;18738:13;;;18737:19;;;18729:27;;18798:20;;:::i;:::-;-1:-1:-1;18821:20:0;;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;18798:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18868:27;;18864:229;;;18923:8;;;;-1:-1:-1;18916:15:0;;-1:-1:-1;;;;18916:15:0;18864:229;18957:12;;:26;;;-1:-1:-1;18953:140:0;;;19012:6;19004:14;;18953:140;;;19076:1;19067:6;:10;19059:18;;18953:140;18676:428;;;;;-1:-1:-1;19121:20:0;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;;;;;-1:-1:-1;;17945:1217:0;;;;:::o;7528:39::-;;;;;;;;;;;;;:::o;5725:37::-;;;;;;;;;;;;;;;;;;;:::o;14419:237::-;14484:4;14501:13;14517:58;14524:9;14517:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;14501:74;;14586:40;14602:10;14614:3;14619:6;14586:15;:40::i;:::-;-1:-1:-1;14644:4:0;;14419:237;-1:-1:-1;;;14419:237:0:o;17295:222::-;17401:23;;;17360:6;17401:23;;;:14;:23;;;;;;;;17442:16;:67;;17508:1;17442:67;;;17461:20;;;;;;;:11;:20;;;;;;;;17482:16;;;17461:38;;;;;;;;;:44;;;;;;17442:67;17435:74;17295:222;-1:-1:-1;;;17295:222:0:o;16311:786::-;16507:4;;;;;;;;;;;;;;;;;;16427:23;6938:80;16491:22;16515:12;:10;:12::i;:::-;16463:80;;;;;;;;;;;;;;;;;;;;;;;;;16537:4;16463:80;;;;;;;;;;;;;;;;;;;;;;;16453:91;;;;;;7155:71;16586:57;;;;16463:80;16586:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16576:68;;;;;;16682:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16672:68;;;;;;;;;-1:-1:-1;16771:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16453:91;;-1:-1:-1;16576:68:0;;16672;;-1:-1:-1;;16771:26:0;;;;;;;-1:-1:-1;16771:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16771:26:0;;;;;;-1:-1:-1;;16816:23:0;;;16808:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16909:17;;;;;;;:6;:17;;;;;:19;;;;;;;;16900:28;;16892:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16992:6;16985:3;:13;;16977:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17058:31;17068:9;17079;17058;:31::i;:::-;17051:38;;;;16311:786;;;;;;;:::o;12800:1050::-;12930:13;12976:2;12958:9;:21;12954:171;;;-1:-1:-1;13012:2:0;12954:171;;;13057:56;13064:9;13057:56;;;;;;;;;;;;;;;;;:6;:56::i;:::-;13048:65;;12954:171;13217:4;;;;;;;;;;;;;;;;;;13137:23;6938:80;13201:22;13225:12;:10;:12::i;:::-;13173:80;;;;;;;;;;;;;;;;;;;;;;;;;13247:4;13173:80;;;;;;;;;;;;;;;;;;;;;;;13163:91;;;;;;13173:80;13351:13;;;-1:-1:-1;13351:13:0;;;:6;:13;;;;;:15;;;;;;;;;7355:95;13296:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13286:92;;;;;;13416:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13406:68;;;;;;;;;13505:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13163:91;;-1:-1:-1;13286:92:0;13406:68;;-1:-1:-1;;13351:15:0;;13505:26;;;;;13173:80;-1:-1:-1;13505:26:0;;;;;;;;;;;13351:15;13505:26;;;;;;;;;;;;;;;-1:-1:-1;;13505:26:0;;;;;;-1:-1:-1;;13550:23:0;;;13542:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13640:5;13627:18;;:9;:18;;;13619:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13701:8;13694:3;:15;;13686:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13786:6;13757:10;:17;13768:5;13757:17;;;;;;;;;;;;;;;:26;13775:7;13757:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;13826:7;13810:32;;13819:5;13810:32;;;13835:6;13810:32;;;;;;;;;;;;;;;;;;;;12800:1050;;;;;;;;;;;;:::o;11284:136::-;11384:19;;;;11360:4;11384:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;;;11284:136::o;7109:117::-;7155:71;7109:117;:::o;6641:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8747:231::-;8825:6;;;;8811:10;:20;8803:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8927:6;;8913:30;;;8927:6;;;;8913:30;;;;;;;;;;;;;;;;;;;;;8954:6;:16;;;;;;;;;;;;;;;8747:231::o;21921:161::-;21996:6;22034:12;22027:5;22023:9;;22015:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22072:1:0;;21921:161;-1:-1:-1;;21921:161:0:o;22286:165::-;22372:6;22404:1;22399:6;;:1;:6;;;;22407:12;22391:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22438:5:0;;;22286:165::o;19553:610::-;19647:17;;;19639:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19747:17;;;19739:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19861:13;;;;;;;:8;:13;;;;;;;;;;19855:85;;;;;;;;;;;;;;19861:13;;;;;19876:6;;19855:85;;;;;;;:5;:85::i;:::-;19839:13;;;;;;;;:8;:13;;;;;;;;:101;;;;;;;;;;;19973:13;;;;;;;;;;19967:79;;;;;;;;;;;;;;19973:13;;;;;19988:6;;19967:79;;;;;;;;:5;:79::i;:::-;19951:13;;;;;;;;:8;:13;;;;;;;;;:95;;;;;;;;;;;20062:26;;;;;;;;;19951:13;;20062:26;;;;;;;;;;;;;;;20116:14;;;;;;;;:9;:14;;;;;;;20132;;;;;;;;20101:54;;20116:14;;;;20132;20148:6;20101:14;:54::i;1067:181::-;1125:7;1157:5;;;1181:6;;;;1173:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22090:188;22176:6;22206:5;;;22238:12;22230:6;;;;;;;;;22222:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22269:1:0;22090:188;-1:-1:-1;;;;22090:188:0:o;20171:937::-;20276:6;20266:16;;:6;:16;;;;:30;;;;;20295:1;20286:6;:10;;;20266:30;20262:839;;;20317:20;;;;20313:381;;20377:22;;;20358:16;20377:22;;;:14;:22;;;;;;;;;20437:13;:60;;20496:1;20437:60;;;20453:19;;;;;;;:11;:19;;;;;;;;20473:13;;;20453:34;;;;;;;;;:40;;;;;;20437:60;20418:79;;20516:16;20535:67;20541:9;20552:6;20535:67;;;;;;;;;;;;;;;;;:5;:67::i;:::-;20516:86;;20621:57;20638:6;20646:9;20657;20668;20621:16;:57::i;:::-;20313:381;;;;20714:20;;;;20710:380;;20774:22;;;20755:16;20774:22;;;:14;:22;;;;;;;;;20834:13;:60;;20893:1;20834:60;;;20850:19;;;;;;;:11;:19;;;;;;;;20870:13;;;20850:34;;;;;;;;;:40;;;;;;20834:60;20815:79;;20913:16;20932:66;20938:9;20949:6;20932:66;;;;;;;;;;;;;;;;;:5;:66::i;:::-;20913:85;;21017:57;21034:6;21042:9;21053;21064;21017:16;:57::i;10214:564::-;10298:21;;;10290:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10397:17;;;10372:22;10397:17;;;:8;:17;;;;;;;;10433:24;;;;10425:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10531:81;10538:36;10551:14;10567:6;10538:12;:36::i;:::-;10531:81;;;;;;;;;;;;;;;;;:6;:81::i;:::-;10511:17;;;;;;;:8;:17;;;;;:101;;;;;;;;;;;;;;;;10657:11;10637:78;;10644:33;;10670:6;10644:12;:33::i;10637:78::-;10623:92;;:11;:92;;;10733:37;;;;;;;;;;;;;;;;;;;;;;10214:564;;;:::o;19170:375::-;19273:20;;;;19247:23;19273:20;;;:9;:20;;;;;;;;;;19330:8;:19;;;;;;19360:20;;;;:32;;;;;;;;;;;19410:54;;19273:20;;;;;19330:19;;;;;19360:32;;19273:20;;;19410:54;;19247:23;19410:54;19477:60;19492:15;19509:9;19520:16;19477:14;:60::i;:::-;19170:375;;;;:::o;22459:153::-;22569:9;22459:153;:::o;21116:628::-;21234:18;21255:75;21262:12;21255:75;;;;;;;;;;;;;;;;;:6;:75::i;:::-;21234:96;;21360:1;21345:12;:16;;;:85;;;;-1:-1:-1;21365:22:0;;;;;;;:11;:22;;;;;;;;:65;21388:16;;;21365:40;;;;;;;;;:50;:65;;;:50;;:65;21345:85;21341:329;;;21445:22;;;;;;;:11;:22;;;;;;;;21468:16;;;21445:40;;;;;;;;;:57;;;;;;;;;;;;21341:329;;;21570:33;;;;;;;;;;;;;;;;;;;;;;;;;21531:22;;;-1:-1:-1;21531:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21616:25;;;:14;:25;;;;;;;:44;;21531:72;21644:16;;21616:44;;;;;;;;;;;;;21341:329;21685:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21116:628;;;;;:::o;1531:136::-;1589:7;1616:43;1620:1;1623;1616:43;;;;;;;;;;;;;;;;;:3;:43::i;21752:161::-;21827:6;21865:12;21858:5;21854:9;;21846:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1970:192;2056:7;2092:12;2084:6;;;;2076:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://9ba542a226cb8476c3792b0fc646f66a8fa8af9fdc8b2c56b948a3f4fefba06d
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.