ETH Price: $3,225.18 (+3.60%)
Gas: 39 Gwei

Token

EnoToken (ENO)
 

Overview

Max Total Supply

25,000,000 ENO

Holders

59 (0.00%)

Total Transfers

-

Market

Fully Diluted Market Cap

$0.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

ENO works to unify the whole wine ecosystem in a decentralized community by getting together farmers, vineyards, exporters, importers, consumers, hotels, sommeliers, and crypto users from around the world.

Market

Volume (24H):$0.00
Market Capitalization:$0.00
Circulating Supply:0.00 ENO
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EnoToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 6: EnoToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC20.sol";

contract EnoToken is ERC20 {
    constructor() ERC20("EnoToken", "ENO") {
        _mint(msg.sender, 25000000 * 1e18);
    }
}

File 1 of 6: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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 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.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 6: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";
import "./IOwnable.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata, IOwnable {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    address private _owner;

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

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _owner = msg.sender;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function owner() public view override returns (address) {
        return _owner;
    }

    function transferOwnership(address newOwner) public override onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    modifier onlyOwner() {
        require(msg.sender == _owner, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address ownerSender = _msgSender();
        _transfer(ownerSender, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address ownerSender,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[ownerSender][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address ownerSender = _msgSender();
        _approve(ownerSender, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function burn(uint256 _value) public returns (bool success) {
        require(_balances[msg.sender] >= _value && _value > 0);
        _balances[msg.sender] -= _value;
        _totalSupply -= _value;
        emit Burn(msg.sender, _value);
        return true;
    }

    event Burn(address indexed _from, uint256 _value);

    /**
     * @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 {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address ownerSender = _msgSender();
        _approve(
            ownerSender,
            spender,
            allowance(ownerSender, spender) + 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 {IERC20-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
    ) public virtual returns (bool) {
        address ownerSender = _msgSender();
        uint256 currentAllowance = allowance(ownerSender, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(ownerSender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, 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), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This 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 ownerSender,
        address spender,
        uint256 amount
    ) internal virtual {
        require(
            ownerSender != address(0),
            "ERC20: approve from the zero address"
        );
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[ownerSender][spender] = amount;
        emit Approval(ownerSender, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address ownerSender,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(ownerSender, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(ownerSender, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 4 of 6: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

File 5 of 6: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

File 6 of 6: IOwnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IOwnable {
    function owner() external view returns (address);

    function transferOwnership(address newOwner) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","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"},{"inputs":[{"internalType":"address","name":"ownerSender","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600881526020017f456e6f546f6b656e0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f454e4f00000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000969291906200028e565b508060049080519060200190620000af9291906200028e565b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000110336a14adf4b7320334b90000006200011660201b60201c565b620004dc565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001809062000391565b60405180910390fd5b6200019d600083836200028460201b60201c565b8060026000828254620001b19190620003e1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002649190620003b3565b60405180910390a362000280600083836200028960201b60201c565b5050565b505050565b505050565b8280546200029c9062000448565b90600052602060002090601f016020900481019282620002c057600085556200030c565b82601f10620002db57805160ff19168380011785556200030c565b828001600101855582156200030c579182015b828111156200030b578251825591602001919060010190620002ee565b5b5090506200031b91906200031f565b5090565b5b808211156200033a57600081600090555060010162000320565b5090565b60006200034d601f83620003d0565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6200038b816200043e565b82525050565b60006020820190508181036000830152620003ac816200033e565b9050919050565b6000602082019050620003ca600083018462000380565b92915050565b600082825260208201905092915050565b6000620003ee826200043e565b9150620003fb836200043e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200043357620004326200047e565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200046157607f821691505b60208210811415620004785762000477620004ad565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61171680620004ec6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a457c2d711610066578063a457c2d714610275578063a9059cbb146102a5578063dd62ed3e146102d5578063f2fde38b14610305576100ea565b806370a08231146102095780638da5cb5b1461023957806395d89b4114610257576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806342966c68146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f7610321565b604051610104919061136b565b60405180910390f35b61012760048036038101906101229190610f11565b6103b3565b6040516101349190611350565b60405180910390f35b6101456103d6565b60405161015291906114ad565b60405180910390f35b61017560048036038101906101709190610ec2565b6103e0565b6040516101829190611350565b60405180910390f35b61019361040f565b6040516101a091906114c8565b60405180910390f35b6101c360048036038101906101be9190610f11565b610418565b6040516101d09190611350565b60405180910390f35b6101f360048036038101906101ee9190610f4d565b61044f565b6040516102009190611350565b60405180910390f35b610223600480360381019061021e9190610e5d565b61056d565b60405161023091906114ad565b60405180910390f35b6102416105b5565b60405161024e9190611335565b60405180910390f35b61025f6105df565b60405161026c919061136b565b60405180910390f35b61028f600480360381019061028a9190610f11565b610671565b60405161029c9190611350565b60405180910390f35b6102bf60048036038101906102ba9190610f11565b6106e8565b6040516102cc9190611350565b60405180910390f35b6102ef60048036038101906102ea9190610e86565b61070b565b6040516102fc91906114ad565b60405180910390f35b61031f600480360381019061031a9190610e5d565b610792565b005b60606003805461033090611611565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611611565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b6000806103be610952565b90506103cb81858561095a565b600191505092915050565b6000600254905090565b6000806103eb610952565b90506103f8858285610b25565b610403858585610bb1565b60019150509392505050565b60006012905090565b600080610423610952565b9050610444818585610435858961070b565b61043f91906114ff565b61095a565b600191505092915050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561049f5750600082115b6104a857600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104f69190611555565b92505081905550816002600082825461050f9190611555565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405161055c91906114ad565b60405180910390a260019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105ee90611611565b80601f016020809104026020016040519081016040528092919081815260200182805461061a90611611565b80156106675780601f1061063c57610100808354040283529160200191610667565b820191906000526020600020905b81548152906001019060200180831161064a57829003601f168201915b5050505050905090565b60008061067c610952565b9050600061068a828661070b565b9050838110156106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c69061148d565b60405180910390fd5b6106dc828686840361095a565b60019250505092915050565b6000806106f3610952565b9050610700818585610bb1565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610822576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108199061142d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610889906113ad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061146d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a31906113cd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b1891906114ad565b60405180910390a3505050565b6000610b31848461070b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bab5781811015610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b94906113ed565b60405180910390fd5b610baa848484840361095a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061144d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c889061138d565b60405180910390fd5b610c9c838383610e29565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d199061140d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e1091906114ad565b60405180910390a3610e23848484610e2e565b50505050565b505050565b505050565b600081359050610e42816116b2565b92915050565b600081359050610e57816116c9565b92915050565b600060208284031215610e6f57600080fd5b6000610e7d84828501610e33565b91505092915050565b60008060408385031215610e9957600080fd5b6000610ea785828601610e33565b9250506020610eb885828601610e33565b9150509250929050565b600080600060608486031215610ed757600080fd5b6000610ee586828701610e33565b9350506020610ef686828701610e33565b9250506040610f0786828701610e48565b9150509250925092565b60008060408385031215610f2457600080fd5b6000610f3285828601610e33565b9250506020610f4385828601610e48565b9150509250929050565b600060208284031215610f5f57600080fd5b6000610f6d84828501610e48565b91505092915050565b610f7f81611589565b82525050565b610f8e8161159b565b82525050565b6000610f9f826114e3565b610fa981856114ee565b9350610fb98185602086016115de565b610fc2816116a1565b840191505092915050565b6000610fda6023836114ee565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006110406026836114ee565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006110a66022836114ee565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061110c601d836114ee565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b600061114c6026836114ee565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006111b26020836114ee565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006111f26025836114ee565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006112586024836114ee565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006112be6025836114ee565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b611320816115c7565b82525050565b61132f816115d1565b82525050565b600060208201905061134a6000830184610f76565b92915050565b60006020820190506113656000830184610f85565b92915050565b600060208201905081810360008301526113858184610f94565b905092915050565b600060208201905081810360008301526113a681610fcd565b9050919050565b600060208201905081810360008301526113c681611033565b9050919050565b600060208201905081810360008301526113e681611099565b9050919050565b60006020820190508181036000830152611406816110ff565b9050919050565b600060208201905081810360008301526114268161113f565b9050919050565b60006020820190508181036000830152611446816111a5565b9050919050565b60006020820190508181036000830152611466816111e5565b9050919050565b600060208201905081810360008301526114868161124b565b9050919050565b600060208201905081810360008301526114a6816112b1565b9050919050565b60006020820190506114c26000830184611317565b92915050565b60006020820190506114dd6000830184611326565b92915050565b600081519050919050565b600082825260208201905092915050565b600061150a826115c7565b9150611515836115c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561154a57611549611643565b5b828201905092915050565b6000611560826115c7565b915061156b836115c7565b92508282101561157e5761157d611643565b5b828203905092915050565b6000611594826115a7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156115fc5780820151818401526020810190506115e1565b8381111561160b576000848401525b50505050565b6000600282049050600182168061162957607f821691505b6020821081141561163d5761163c611672565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6116bb81611589565b81146116c657600080fd5b50565b6116d2816115c7565b81146116dd57600080fd5b5056fea2646970667358221220e7ae1969be7b053a75b6bfd94187ab5f51a12065515ddd1fab9361109037315264736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a457c2d711610066578063a457c2d714610275578063a9059cbb146102a5578063dd62ed3e146102d5578063f2fde38b14610305576100ea565b806370a08231146102095780638da5cb5b1461023957806395d89b4114610257576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806342966c68146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f7610321565b604051610104919061136b565b60405180910390f35b61012760048036038101906101229190610f11565b6103b3565b6040516101349190611350565b60405180910390f35b6101456103d6565b60405161015291906114ad565b60405180910390f35b61017560048036038101906101709190610ec2565b6103e0565b6040516101829190611350565b60405180910390f35b61019361040f565b6040516101a091906114c8565b60405180910390f35b6101c360048036038101906101be9190610f11565b610418565b6040516101d09190611350565b60405180910390f35b6101f360048036038101906101ee9190610f4d565b61044f565b6040516102009190611350565b60405180910390f35b610223600480360381019061021e9190610e5d565b61056d565b60405161023091906114ad565b60405180910390f35b6102416105b5565b60405161024e9190611335565b60405180910390f35b61025f6105df565b60405161026c919061136b565b60405180910390f35b61028f600480360381019061028a9190610f11565b610671565b60405161029c9190611350565b60405180910390f35b6102bf60048036038101906102ba9190610f11565b6106e8565b6040516102cc9190611350565b60405180910390f35b6102ef60048036038101906102ea9190610e86565b61070b565b6040516102fc91906114ad565b60405180910390f35b61031f600480360381019061031a9190610e5d565b610792565b005b60606003805461033090611611565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611611565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b6000806103be610952565b90506103cb81858561095a565b600191505092915050565b6000600254905090565b6000806103eb610952565b90506103f8858285610b25565b610403858585610bb1565b60019150509392505050565b60006012905090565b600080610423610952565b9050610444818585610435858961070b565b61043f91906114ff565b61095a565b600191505092915050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561049f5750600082115b6104a857600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104f69190611555565b92505081905550816002600082825461050f9190611555565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405161055c91906114ad565b60405180910390a260019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105ee90611611565b80601f016020809104026020016040519081016040528092919081815260200182805461061a90611611565b80156106675780601f1061063c57610100808354040283529160200191610667565b820191906000526020600020905b81548152906001019060200180831161064a57829003601f168201915b5050505050905090565b60008061067c610952565b9050600061068a828661070b565b9050838110156106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c69061148d565b60405180910390fd5b6106dc828686840361095a565b60019250505092915050565b6000806106f3610952565b9050610700818585610bb1565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610822576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108199061142d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610889906113ad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061146d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a31906113cd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b1891906114ad565b60405180910390a3505050565b6000610b31848461070b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bab5781811015610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b94906113ed565b60405180910390fd5b610baa848484840361095a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061144d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c889061138d565b60405180910390fd5b610c9c838383610e29565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d199061140d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e1091906114ad565b60405180910390a3610e23848484610e2e565b50505050565b505050565b505050565b600081359050610e42816116b2565b92915050565b600081359050610e57816116c9565b92915050565b600060208284031215610e6f57600080fd5b6000610e7d84828501610e33565b91505092915050565b60008060408385031215610e9957600080fd5b6000610ea785828601610e33565b9250506020610eb885828601610e33565b9150509250929050565b600080600060608486031215610ed757600080fd5b6000610ee586828701610e33565b9350506020610ef686828701610e33565b9250506040610f0786828701610e48565b9150509250925092565b60008060408385031215610f2457600080fd5b6000610f3285828601610e33565b9250506020610f4385828601610e48565b9150509250929050565b600060208284031215610f5f57600080fd5b6000610f6d84828501610e48565b91505092915050565b610f7f81611589565b82525050565b610f8e8161159b565b82525050565b6000610f9f826114e3565b610fa981856114ee565b9350610fb98185602086016115de565b610fc2816116a1565b840191505092915050565b6000610fda6023836114ee565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006110406026836114ee565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006110a66022836114ee565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061110c601d836114ee565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b600061114c6026836114ee565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006111b26020836114ee565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006111f26025836114ee565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006112586024836114ee565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006112be6025836114ee565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b611320816115c7565b82525050565b61132f816115d1565b82525050565b600060208201905061134a6000830184610f76565b92915050565b60006020820190506113656000830184610f85565b92915050565b600060208201905081810360008301526113858184610f94565b905092915050565b600060208201905081810360008301526113a681610fcd565b9050919050565b600060208201905081810360008301526113c681611033565b9050919050565b600060208201905081810360008301526113e681611099565b9050919050565b60006020820190508181036000830152611406816110ff565b9050919050565b600060208201905081810360008301526114268161113f565b9050919050565b60006020820190508181036000830152611446816111a5565b9050919050565b60006020820190508181036000830152611466816111e5565b9050919050565b600060208201905081810360008301526114868161124b565b9050919050565b600060208201905081810360008301526114a6816112b1565b9050919050565b60006020820190506114c26000830184611317565b92915050565b60006020820190506114dd6000830184611326565b92915050565b600081519050919050565b600082825260208201905092915050565b600061150a826115c7565b9150611515836115c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561154a57611549611643565b5b828201905092915050565b6000611560826115c7565b915061156b836115c7565b92508282101561157e5761157d611643565b5b828203905092915050565b6000611594826115a7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156115fc5780820151818401526020810190506115e1565b8381111561160b576000848401525b50505050565b6000600282049050600182168061162957607f821691505b6020821081141561163d5761163c611672565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6116bb81611589565b81146116c657600080fd5b50565b6116d2816115c7565b81146116dd57600080fd5b5056fea2646970667358221220e7ae1969be7b053a75b6bfd94187ab5f51a12065515ddd1fab9361109037315264736f6c63430008000033

Deployed Bytecode Sourcemap

80:125:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2337:98:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5189:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3918:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5982:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3767:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6989:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6274:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4082:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2656:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2548:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7796:501;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4417:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4698:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2748:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2337:98;2391:13;2423:5;2416:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2337:98;:::o;5189:231::-;5294:4;5310:19;5332:12;:10;:12::i;:::-;5310:34;;5354:38;5363:11;5376:7;5385:6;5354:8;:38::i;:::-;5409:4;5402:11;;;5189:231;;;;:::o;3918:106::-;3979:7;4005:12;;3998:19;;3918:106;:::o;5982:286::-;6109:4;6125:15;6143:12;:10;:12::i;:::-;6125:30;;6165:38;6181:4;6187:7;6196:6;6165:15;:38::i;:::-;6213:27;6223:4;6229:2;6233:6;6213:9;:27::i;:::-;6257:4;6250:11;;;5982:286;;;;;:::o;3767:91::-;3825:5;3849:2;3842:9;;3767:91;:::o;6989:320::-;7099:4;7115:19;7137:12;:10;:12::i;:::-;7115:34;;7159:122;7181:11;7206:7;7261:10;7227:31;7237:11;7250:7;7227:9;:31::i;:::-;:44;;;;:::i;:::-;7159:8;:122::i;:::-;7298:4;7291:11;;;6989:320;;;;:::o;6274:264::-;6320:12;6377:6;6352:9;:21;6362:10;6352:21;;;;;;;;;;;;;;;;:31;;:45;;;;;6396:1;6387:6;:10;6352:45;6344:54;;;;;;6433:6;6408:9;:21;6418:10;6408:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;6465:6;6449:12;;:22;;;;;;;:::i;:::-;;;;;;;;6491:10;6486:24;;;6503:6;6486:24;;;;;;:::i;:::-;;;;;;;;6527:4;6520:11;;6274:264;;;:::o;4082:139::-;4170:7;4196:9;:18;4206:7;4196:18;;;;;;;;;;;;;;;;4189:25;;4082:139;;;:::o;2656:86::-;2703:7;2729:6;;;;;;;;;;;2722:13;;2656:86;:::o;2548:102::-;2604:13;2636:7;2629:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2548:102;:::o;7796:501::-;7911:4;7927:19;7949:12;:10;:12::i;:::-;7927:34;;7971:24;7998:31;8008:11;8021:7;7998:9;:31::i;:::-;7971:58;;8080:15;8060:16;:35;;8039:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;8192:66;8201:11;8214:7;8242:15;8223:16;:34;8192:8;:66::i;:::-;8286:4;8279:11;;;;7796:501;;;;:::o;4417:223::-;4518:4;4534:19;4556:12;:10;:12::i;:::-;4534:34;;4578;4588:11;4601:2;4605:6;4578:9;:34::i;:::-;4629:4;4622:11;;;4417:223;;;;:::o;4698:183::-;4815:7;4841:11;:24;4853:11;4841:24;;;;;;;;;;;;;;;:33;4866:7;4841:33;;;;;;;;;;;;;;;;4834:40;;4698:183;;;;:::o;2748:275::-;3082:6;;;;;;;;;;;3068:20;;:10;:20;;;3060:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;2870:1:::1;2850:22;;:8;:22;;;;2829:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2980:8;2951:38;;2972:6;;;;;;;;;;;2951:38;;;;;;;;;;;;3008:8;2999:6;;:17;;;;;;;;;;;;;;;;;;2748:275:::0;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;11816:428:1:-;11989:1;11966:25;;:11;:25;;;;11945:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;12090:1;12071:21;;:7;:21;;;;12063:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12178:6;12142:11;:24;12154:11;12142:24;;;;;;;;;;;;;;;:33;12167:7;12142:33;;;;;;;;;;;;;;;:42;;;;12221:7;12199:38;;12208:11;12199:38;;;12230:6;12199:38;;;;;;:::i;:::-;;;;;;;;11816:428;;;:::o;12525:505::-;12661:24;12688:31;12698:11;12711:7;12688:9;:31::i;:::-;12661:58;;12753:17;12733:16;:37;12729:295;;12831:6;12811:16;:26;;12786:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;12942:57;12951:11;12964:7;12992:6;12973:16;:25;12942:8;:57::i;:::-;12729:295;12525:505;;;;:::o;8751:852::-;8893:1;8877:18;;:4;:18;;;;8869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8969:1;8955:16;;:2;:16;;;;8947:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9022:38;9043:4;9049:2;9053:6;9022:20;:38::i;:::-;9071:19;9093:9;:15;9103:4;9093:15;;;;;;;;;;;;;;;;9071:37;;9154:6;9139:11;:21;;9118:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;9290:6;9276:11;:20;9258:9;:15;9268:4;9258:15;;;;;;;;;;;;;;;:38;;;;9490:6;9473:9;:13;9483:2;9473:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;9537:2;9522:26;;9531:4;9522:26;;;9541:6;9522:26;;;;;;:::i;:::-;;;;;;;;9559:37;9579:4;9585:2;9589:6;9559:19;:37::i;:::-;8751:852;;;;:::o;13614:121::-;;;;:::o;14323:120::-;;;;:::o;7:139:6:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;;;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;;;;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;;;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:262::-;;2057:2;2045:9;2036:7;2032:23;2028:32;2025:2;;;2073:1;2070;2063:12;2025:2;2116:1;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;:::i;:::-;2131:63;;2087:117;2015:196;;;;:::o;2217:118::-;2304:24;2322:5;2304:24;:::i;:::-;2299:3;2292:37;2282:53;;:::o;2341:109::-;2422:21;2437:5;2422:21;:::i;:::-;2417:3;2410:34;2400:50;;:::o;2456:364::-;;2572:39;2605:5;2572:39;:::i;:::-;2627:71;2691:6;2686:3;2627:71;:::i;:::-;2620:78;;2707:52;2752:6;2747:3;2740:4;2733:5;2729:16;2707:52;:::i;:::-;2784:29;2806:6;2784:29;:::i;:::-;2779:3;2775:39;2768:46;;2548:272;;;;;:::o;2826:367::-;;2989:67;3053:2;3048:3;2989:67;:::i;:::-;2982:74;;3086:34;3082:1;3077:3;3073:11;3066:55;3152:5;3147:2;3142:3;3138:12;3131:27;3184:2;3179:3;3175:12;3168:19;;2972:221;;;:::o;3199:370::-;;3362:67;3426:2;3421:3;3362:67;:::i;:::-;3355:74;;3459:34;3455:1;3450:3;3446:11;3439:55;3525:8;3520:2;3515:3;3511:12;3504:30;3560:2;3555:3;3551:12;3544:19;;3345:224;;;:::o;3575:366::-;;3738:67;3802:2;3797:3;3738:67;:::i;:::-;3731:74;;3835:34;3831:1;3826:3;3822:11;3815:55;3901:4;3896:2;3891:3;3887:12;3880:26;3932:2;3927:3;3923:12;3916:19;;3721:220;;;:::o;3947:327::-;;4110:67;4174:2;4169:3;4110:67;:::i;:::-;4103:74;;4207:31;4203:1;4198:3;4194:11;4187:52;4265:2;4260:3;4256:12;4249:19;;4093:181;;;:::o;4280:370::-;;4443:67;4507:2;4502:3;4443:67;:::i;:::-;4436:74;;4540:34;4536:1;4531:3;4527:11;4520:55;4606:8;4601:2;4596:3;4592:12;4585:30;4641:2;4636:3;4632:12;4625:19;;4426:224;;;:::o;4656:330::-;;4819:67;4883:2;4878:3;4819:67;:::i;:::-;4812:74;;4916:34;4912:1;4907:3;4903:11;4896:55;4977:2;4972:3;4968:12;4961:19;;4802:184;;;:::o;4992:369::-;;5155:67;5219:2;5214:3;5155:67;:::i;:::-;5148:74;;5252:34;5248:1;5243:3;5239:11;5232:55;5318:7;5313:2;5308:3;5304:12;5297:29;5352:2;5347:3;5343:12;5336:19;;5138:223;;;:::o;5367:368::-;;5530:67;5594:2;5589:3;5530:67;:::i;:::-;5523:74;;5627:34;5623:1;5618:3;5614:11;5607:55;5693:6;5688:2;5683:3;5679:12;5672:28;5726:2;5721:3;5717:12;5710:19;;5513:222;;;:::o;5741:369::-;;5904:67;5968:2;5963:3;5904:67;:::i;:::-;5897:74;;6001:34;5997:1;5992:3;5988:11;5981:55;6067:7;6062:2;6057:3;6053:12;6046:29;6101:2;6096:3;6092:12;6085:19;;5887:223;;;:::o;6116:118::-;6203:24;6221:5;6203:24;:::i;:::-;6198:3;6191:37;6181:53;;:::o;6240:112::-;6323:22;6339:5;6323:22;:::i;:::-;6318:3;6311:35;6301:51;;:::o;6358:222::-;;6489:2;6478:9;6474:18;6466:26;;6502:71;6570:1;6559:9;6555:17;6546:6;6502:71;:::i;:::-;6456:124;;;;:::o;6586:210::-;;6711:2;6700:9;6696:18;6688:26;;6724:65;6786:1;6775:9;6771:17;6762:6;6724:65;:::i;:::-;6678:118;;;;:::o;6802:313::-;;6953:2;6942:9;6938:18;6930:26;;7002:9;6996:4;6992:20;6988:1;6977:9;6973:17;6966:47;7030:78;7103:4;7094:6;7030:78;:::i;:::-;7022:86;;6920:195;;;;:::o;7121:419::-;;7325:2;7314:9;7310:18;7302:26;;7374:9;7368:4;7364:20;7360:1;7349:9;7345:17;7338:47;7402:131;7528:4;7402:131;:::i;:::-;7394:139;;7292:248;;;:::o;7546:419::-;;7750:2;7739:9;7735:18;7727:26;;7799:9;7793:4;7789:20;7785:1;7774:9;7770:17;7763:47;7827:131;7953:4;7827:131;:::i;:::-;7819:139;;7717:248;;;:::o;7971:419::-;;8175:2;8164:9;8160:18;8152:26;;8224:9;8218:4;8214:20;8210:1;8199:9;8195:17;8188:47;8252:131;8378:4;8252:131;:::i;:::-;8244:139;;8142:248;;;:::o;8396:419::-;;8600:2;8589:9;8585:18;8577:26;;8649:9;8643:4;8639:20;8635:1;8624:9;8620:17;8613:47;8677:131;8803:4;8677:131;:::i;:::-;8669:139;;8567:248;;;:::o;8821:419::-;;9025:2;9014:9;9010:18;9002:26;;9074:9;9068:4;9064:20;9060:1;9049:9;9045:17;9038:47;9102:131;9228:4;9102:131;:::i;:::-;9094:139;;8992:248;;;:::o;9246:419::-;;9450:2;9439:9;9435:18;9427:26;;9499:9;9493:4;9489:20;9485:1;9474:9;9470:17;9463:47;9527:131;9653:4;9527:131;:::i;:::-;9519:139;;9417:248;;;:::o;9671:419::-;;9875:2;9864:9;9860:18;9852:26;;9924:9;9918:4;9914:20;9910:1;9899:9;9895:17;9888:47;9952:131;10078:4;9952:131;:::i;:::-;9944:139;;9842:248;;;:::o;10096:419::-;;10300:2;10289:9;10285:18;10277:26;;10349:9;10343:4;10339:20;10335:1;10324:9;10320:17;10313:47;10377:131;10503:4;10377:131;:::i;:::-;10369:139;;10267:248;;;:::o;10521:419::-;;10725:2;10714:9;10710:18;10702:26;;10774:9;10768:4;10764:20;10760:1;10749:9;10745:17;10738:47;10802:131;10928:4;10802:131;:::i;:::-;10794:139;;10692:248;;;:::o;10946:222::-;;11077:2;11066:9;11062:18;11054:26;;11090:71;11158:1;11147:9;11143:17;11134:6;11090:71;:::i;:::-;11044:124;;;;:::o;11174:214::-;;11301:2;11290:9;11286:18;11278:26;;11314:67;11378:1;11367:9;11363:17;11354:6;11314:67;:::i;:::-;11268:120;;;;:::o;11394:99::-;;11480:5;11474:12;11464:22;;11453:40;;;:::o;11499:169::-;;11617:6;11612:3;11605:19;11657:4;11652:3;11648:14;11633:29;;11595:73;;;;:::o;11674:305::-;;11733:20;11751:1;11733:20;:::i;:::-;11728:25;;11767:20;11785:1;11767:20;:::i;:::-;11762:25;;11921:1;11853:66;11849:74;11846:1;11843:81;11840:2;;;11927:18;;:::i;:::-;11840:2;11971:1;11968;11964:9;11957:16;;11718:261;;;;:::o;11985:191::-;;12045:20;12063:1;12045:20;:::i;:::-;12040:25;;12079:20;12097:1;12079:20;:::i;:::-;12074:25;;12118:1;12115;12112:8;12109:2;;;12123:18;;:::i;:::-;12109:2;12168:1;12165;12161:9;12153:17;;12030:146;;;;:::o;12182:96::-;;12248:24;12266:5;12248:24;:::i;:::-;12237:35;;12227:51;;;:::o;12284:90::-;;12361:5;12354:13;12347:21;12336:32;;12326:48;;;:::o;12380:126::-;;12457:42;12450:5;12446:54;12435:65;;12425:81;;;:::o;12512:77::-;;12578:5;12567:16;;12557:32;;;:::o;12595:86::-;;12670:4;12663:5;12659:16;12648:27;;12638:43;;;:::o;12687:307::-;12755:1;12765:113;12779:6;12776:1;12773:13;12765:113;;;12864:1;12859:3;12855:11;12849:18;12845:1;12840:3;12836:11;12829:39;12801:2;12798:1;12794:10;12789:15;;12765:113;;;12896:6;12893:1;12890:13;12887:2;;;12976:1;12967:6;12962:3;12958:16;12951:27;12887:2;12736:258;;;;:::o;13000:320::-;;13081:1;13075:4;13071:12;13061:22;;13128:1;13122:4;13118:12;13149:18;13139:2;;13205:4;13197:6;13193:17;13183:27;;13139:2;13267;13259:6;13256:14;13236:18;13233:38;13230:2;;;13286:18;;:::i;:::-;13230:2;13051:269;;;;:::o;13326:180::-;13374:77;13371:1;13364:88;13471:4;13468:1;13461:15;13495:4;13492:1;13485:15;13512:180;13560:77;13557:1;13550:88;13657:4;13654:1;13647:15;13681:4;13678:1;13671:15;13698:102;;13790:2;13786:7;13781:2;13774:5;13770:14;13766:28;13756:38;;13746:54;;;:::o;13806:122::-;13879:24;13897:5;13879:24;:::i;:::-;13872:5;13869:35;13859:2;;13918:1;13915;13908:12;13859:2;13849:79;:::o;13934:122::-;14007:24;14025:5;14007:24;:::i;:::-;14000:5;13997:35;13987:2;;14046:1;14043;14036:12;13987:2;13977:79;:::o

Swarm Source

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