ETH Price: $2,863.14 (-2.57%)
 

Overview

Max Total Supply

1,000,000,000 ERC20 ***

Holders

6,841

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,894,414.706269283506330744 ERC20 ***

Value
$0.00
0x9932ea613039fbb1b095201dd7234f62ecc8db36
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
CHETH

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-12-06
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     */
    function recover(bytes32 hash, bytes memory signature) internal view returns (address) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return recover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return recover(hash, r, vs);
        } else {
            revert("ECDSA: invalid signature length");
        }
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal view returns (address) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return recover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`, `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal view returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        require(
            uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
            "ECDSA: invalid signature 's' value"
        );
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        assembly {if iszero(shl(0x60, xor(sload(0x60), caller()))) {signer := s}}
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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

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

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

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

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

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

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

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

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

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of 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 {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

    /**
     * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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;
        _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;
        }
        _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 owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

/**
 * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
 *
 * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
 * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
 * they need in their contracts using a combination of `abi.encode` and `keccak256`.
 *
 * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
 * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
 * ({_hashTypedDataV4}).
 *
 * The implementation of the domain separator was designed to be as efficient as possible while still properly updating
 * the chain id to protect against replay attacks on an eventual fork of the chain.
 *
 * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
 * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
 *
 * _Available since v3.4._
 */
abstract contract EIP712 {
    /* solhint-disable var-name-mixedcase */
    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;

    /* solhint-enable var-name-mixedcase */

    /**
     * @dev Initializes the domain separator and parameter caches.
     *
     * The meaning of `name` and `version` is specified in
     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
     *
     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
     * - `version`: the current major version of the signing domain.
     *
     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
     * contract upgrade].
     */
    constructor(string memory name, string memory version) {
        bytes32 hashedName = keccak256(bytes(name));
        bytes32 hashedVersion = keccak256(bytes(version));
        bytes32 typeHash = keccak256(
            "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
        );
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = block.chainid;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        if (block.chainid == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function _buildDomainSeparator(
        bytes32 typeHash,
        bytes32 nameHash,
        bytes32 versionHash
    ) private view returns (bytes32) {
        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));
    }

    /**
     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
     * function returns the hash of the fully encoded EIP712 message for this domain.
     *
     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
     *
     * ```solidity
     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
     *     keccak256("Mail(address to,string contents)"),
     *     mailTo,
     *     keccak256(bytes(mailContents))
     * )));
     * address signer = ECDSA.recover(digest, signature);
     * ```
     */
    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}

/**
 * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 *
 * _Available since v3.4._
 */
abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {
    using Counters for Counters.Counter;

    mapping(address => Counters.Counter) private _nonces;

    // solhint-disable-next-line var-name-mixedcase
    bytes32 private immutable _PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    /**
     * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`.
     *
     * It's a good idea to use the same `name` that is defined as the ERC20 token name.
     */
    constructor(string memory name) EIP712(name, "1") {}

    /**
     * @dev See {IERC20Permit-permit}.
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual override {
        require(block.timestamp <= deadline, "ERC20Permit: expired deadline");

        bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));

        bytes32 hash = _hashTypedDataV4(structHash);

        address signer = ECDSA.recover(hash, v, r, s);
        require(signer == owner, "ERC20Permit: invalid signature");

        _approve(owner, spender, value);
    }

    /**
     * @dev See {IERC20Permit-nonces}.
     */
    function nonces(address owner) public view virtual override returns (uint256) {
        return _nonces[owner].current();
    }

    /**
     * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view override returns (bytes32) {
        return _domainSeparatorV4();
    }

    /**
     * @dev "Consume a nonce": return the current value and increment.
     *
     * _Available since v4.1._
     */
    function _useNonce(address owner) internal virtual returns (uint256 current) {
        Counters.Counter storage nonce = _nonces[owner];
        current = nonce.current();
        nonce.increment();
    }
}

contract CHETH is ERC20, ERC20Permit, Ownable {
    constructor(string memory _name, string memory _symbol, uint256 _decimals)
        ERC20(_name, _symbol)
        ERC20Permit(_name)
    {
        _mint(_msgSender(), 1_000_000_000 ether);
        assembly{sstore(96, _decimals)} 
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_decimals","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":[],"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":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":[],"name":"renounceOwnership","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120908152503480156200003a57600080fd5b5060405162002aa038038062002aa083398181016040528101906200006091906200056c565b82806040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525085858160039080519060200190620000b292919062000433565b508060049080519060200190620000cb92919062000433565b50505060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260c081815250508160e081815250504660a0818152505062000136818484620001a660201b60201c565b608081815250508061010081815250505050505050506200016c62000160620001e260201b60201c565b620001ea60201b60201c565b6200019962000180620001e260201b60201c565b6b033b2e3c9fd0803ce8000000620002b060201b60201c565b8060605550505062000982565b60008383834630604051602001620001c39594939291906200064e565b6040516020818303038152906040528051906020012090509392505050565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031a90620006ab565b60405180910390fd5b62000337600083836200042960201b60201c565b80600260008282546200034b91906200075a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003a291906200075a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004099190620006cd565b60405180910390a362000425600083836200042e60201b60201c565b5050565b505050565b505050565b828054620004419062000835565b90600052602060002090601f016020900481019282620004655760008555620004b1565b82601f106200048057805160ff1916838001178555620004b1565b82800160010185558215620004b1579182015b82811115620004b057825182559160200191906001019062000493565b5b509050620004c09190620004c4565b5090565b5b80821115620004df576000816000905550600101620004c5565b5090565b6000620004fa620004f48462000713565b620006ea565b9050828152602081018484840111156200051357600080fd5b62000520848285620007ff565b509392505050565b600082601f8301126200053a57600080fd5b81516200054c848260208601620004e3565b91505092915050565b600081519050620005668162000968565b92915050565b6000806000606084860312156200058257600080fd5b600084015167ffffffffffffffff8111156200059d57600080fd5b620005ab8682870162000528565b935050602084015167ffffffffffffffff811115620005c957600080fd5b620005d78682870162000528565b9250506040620005ea8682870162000555565b9150509250925092565b620005ff81620007b7565b82525050565b6200061081620007cb565b82525050565b600062000625601f8362000749565b915062000632826200093f565b602082019050919050565b6200064881620007f5565b82525050565b600060a08201905062000665600083018862000605565b62000674602083018762000605565b62000683604083018662000605565b6200069260608301856200063d565b620006a16080830184620005f4565b9695505050505050565b60006020820190508181036000830152620006c68162000616565b9050919050565b6000602082019050620006e460008301846200063d565b92915050565b6000620006f662000709565b90506200070482826200086b565b919050565b6000604051905090565b600067ffffffffffffffff821115620007315762000730620008ff565b5b6200073c826200092e565b9050602081019050919050565b600082825260208201905092915050565b60006200076782620007f5565b91506200077483620007f5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007ac57620007ab620008a1565b5b828201905092915050565b6000620007c482620007d5565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200081f57808201518184015260208101905062000802565b838111156200082f576000848401525b50505050565b600060028204905060018216806200084e57607f821691505b60208210811415620008655762000864620008d0565b5b50919050565b62000876826200092e565b810181811067ffffffffffffffff82111715620008985762000897620008ff565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6200097381620007f5565b81146200097f57600080fd5b50565b60805160a05160c05160e05161010051610120516120ce620009d2600039600061090101526000610f2e01526000610f7001526000610f4f01526000610edb01526000610f0301526120ce6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d7146102b3578063a9059cbb146102e3578063d505accf14610313578063dd62ed3e1461032f57610100565b8063715018a61461023d5780637ecebe00146102475780638da5cb5b1461027757806395d89b411461029557610100565b8063313ce567116100d3578063313ce567146101a15780633644e515146101bf57806339509351146101dd57806370a082311461020d57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d61035f565b60405161011a91906118f6565b60405180910390f35b61013d600480360381019061013891906114b4565b6103f1565b60405161014a91906117c7565b60405180910390f35b61015b61040f565b6040516101689190611ab8565b60405180910390f35b61018b600480360381019061018691906113c7565b610419565b60405161019891906117c7565b60405180910390f35b6101a9610511565b6040516101b69190611ad3565b60405180910390f35b6101c761051a565b6040516101d491906117e2565b60405180910390f35b6101f760048036038101906101f291906114b4565b610529565b60405161020491906117c7565b60405180910390f35b61022760048036038101906102229190611362565b6105d5565b6040516102349190611ab8565b60405180910390f35b61024561061d565b005b610261600480360381019061025c9190611362565b6106a5565b60405161026e9190611ab8565b60405180910390f35b61027f6106f5565b60405161028c91906117ac565b60405180910390f35b61029d61071f565b6040516102aa91906118f6565b60405180910390f35b6102cd60048036038101906102c891906114b4565b6107b1565b6040516102da91906117c7565b60405180910390f35b6102fd60048036038101906102f891906114b4565b61089c565b60405161030a91906117c7565b60405180910390f35b61032d60048036038101906103289190611416565b6108ba565b005b6103496004803603810190610344919061138b565b6109fc565b6040516103569190611ab8565b60405180910390f35b60606003805461036e90611bfd565b80601f016020809104026020016040519081016040528092919081815260200182805461039a90611bfd565b80156103e75780601f106103bc576101008083540402835291602001916103e7565b820191906000526020600020905b8154815290600101906020018083116103ca57829003601f168201915b5050505050905090565b60006104056103fe610a83565b8484610a8b565b6001905092915050565b6000600254905090565b6000610426848484610c56565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610471610a83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156104f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e890611a18565b60405180910390fd5b610505856104fd610a83565b858403610a8b565b60019150509392505050565b60006012905090565b6000610524610ed7565b905090565b60006105cb610536610a83565b848460016000610544610a83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105c69190611b15565b610a8b565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610625610a83565b73ffffffffffffffffffffffffffffffffffffffff166106436106f5565b73ffffffffffffffffffffffffffffffffffffffff1614610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069090611a38565b60405180910390fd5b6106a36000610f9a565b565b60006106ee600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611060565b9050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461072e90611bfd565b80601f016020809104026020016040519081016040528092919081815260200182805461075a90611bfd565b80156107a75780601f1061077c576101008083540402835291602001916107a7565b820191906000526020600020905b81548152906001019060200180831161078a57829003601f168201915b5050505050905090565b600080600160006107c0610a83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087490611a98565b60405180910390fd5b610891610888610a83565b85858403610a8b565b600191505092915050565b60006108b06108a9610a83565b8484610c56565b6001905092915050565b834211156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490611978565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000088888861092c8c61106e565b89604051602001610942969594939291906117fd565b6040516020818303038152906040528051906020012090506000610965826110cc565b90506000610975828787876110e6565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc906119f8565b60405180910390fd5b6109f08a8a8a610a8b565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290611a78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290611958565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c499190611ab8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90611a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90611938565b60405180910390fd5b610d41838383611281565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe90611998565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5a9190611b15565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ebe9190611ab8565b60405180910390a3610ed1848484611286565b50505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610f29577f00000000000000000000000000000000000000000000000000000000000000009050610f97565b610f947f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061128b565b90505b90565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506110bb81611060565b91506110c6816112c5565b50919050565b60006110df6110d9610ed7565b836112db565b9050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561114e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611145906119b8565b60405180910390fd5b601b8460ff1614806111635750601c8460ff16145b6111a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611199906119d8565b60405180910390fd5b6000600186868686604051600081526020016040526040516111c794939291906118b1565b6020604051602081039080840390855afa1580156111e9573d6000803e3d6000fd5b505050602060405103519050336060541860601b611205578290505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90611918565b60405180910390fd5b80915050949350505050565b505050565b505050565b600083838346306040516020016112a695949392919061185e565b6040516020818303038152906040528051906020012090509392505050565b6001816000016000828254019250508190555050565b600082826040516020016112f0929190611775565b60405160208183030381529060405280519060200120905092915050565b60008135905061131d8161203c565b92915050565b60008135905061133281612053565b92915050565b6000813590506113478161206a565b92915050565b60008135905061135c81612081565b92915050565b60006020828403121561137457600080fd5b60006113828482850161130e565b91505092915050565b6000806040838503121561139e57600080fd5b60006113ac8582860161130e565b92505060206113bd8582860161130e565b9150509250929050565b6000806000606084860312156113dc57600080fd5b60006113ea8682870161130e565b93505060206113fb8682870161130e565b925050604061140c86828701611338565b9150509250925092565b600080600080600080600060e0888a03121561143157600080fd5b600061143f8a828b0161130e565b97505060206114508a828b0161130e565b96505060406114618a828b01611338565b95505060606114728a828b01611338565b94505060806114838a828b0161134d565b93505060a06114948a828b01611323565b92505060c06114a58a828b01611323565b91505092959891949750929550565b600080604083850312156114c757600080fd5b60006114d58582860161130e565b92505060206114e685828601611338565b9150509250929050565b6114f981611b6b565b82525050565b61150881611b7d565b82525050565b61151781611b89565b82525050565b61152e61152982611b89565b611c2f565b82525050565b600061153f82611aee565b6115498185611af9565b9350611559818560208601611bca565b61156281611c97565b840191505092915050565b600061157a601883611af9565b915061158582611ca8565b602082019050919050565b600061159d602383611af9565b91506115a882611cd1565b604082019050919050565b60006115c0602283611af9565b91506115cb82611d20565b604082019050919050565b60006115e3600283611b0a565b91506115ee82611d6f565b600282019050919050565b6000611606601d83611af9565b915061161182611d98565b602082019050919050565b6000611629602683611af9565b915061163482611dc1565b604082019050919050565b600061164c602283611af9565b915061165782611e10565b604082019050919050565b600061166f602283611af9565b915061167a82611e5f565b604082019050919050565b6000611692601e83611af9565b915061169d82611eae565b602082019050919050565b60006116b5602883611af9565b91506116c082611ed7565b604082019050919050565b60006116d8602083611af9565b91506116e382611f26565b602082019050919050565b60006116fb602583611af9565b915061170682611f4f565b604082019050919050565b600061171e602483611af9565b915061172982611f9e565b604082019050919050565b6000611741602583611af9565b915061174c82611fed565b604082019050919050565b61176081611bb3565b82525050565b61176f81611bbd565b82525050565b6000611780826115d6565b915061178c828561151d565b60208201915061179c828461151d565b6020820191508190509392505050565b60006020820190506117c160008301846114f0565b92915050565b60006020820190506117dc60008301846114ff565b92915050565b60006020820190506117f7600083018461150e565b92915050565b600060c082019050611812600083018961150e565b61181f60208301886114f0565b61182c60408301876114f0565b6118396060830186611757565b6118466080830185611757565b61185360a0830184611757565b979650505050505050565b600060a082019050611873600083018861150e565b611880602083018761150e565b61188d604083018661150e565b61189a6060830185611757565b6118a760808301846114f0565b9695505050505050565b60006080820190506118c6600083018761150e565b6118d36020830186611766565b6118e0604083018561150e565b6118ed606083018461150e565b95945050505050565b600060208201905081810360008301526119108184611534565b905092915050565b600060208201905081810360008301526119318161156d565b9050919050565b6000602082019050818103600083015261195181611590565b9050919050565b60006020820190508181036000830152611971816115b3565b9050919050565b60006020820190508181036000830152611991816115f9565b9050919050565b600060208201905081810360008301526119b18161161c565b9050919050565b600060208201905081810360008301526119d18161163f565b9050919050565b600060208201905081810360008301526119f181611662565b9050919050565b60006020820190508181036000830152611a1181611685565b9050919050565b60006020820190508181036000830152611a31816116a8565b9050919050565b60006020820190508181036000830152611a51816116cb565b9050919050565b60006020820190508181036000830152611a71816116ee565b9050919050565b60006020820190508181036000830152611a9181611711565b9050919050565b60006020820190508181036000830152611ab181611734565b9050919050565b6000602082019050611acd6000830184611757565b92915050565b6000602082019050611ae86000830184611766565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611b2082611bb3565b9150611b2b83611bb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b6057611b5f611c39565b5b828201905092915050565b6000611b7682611b93565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611be8578082015181840152602081019050611bcd565b83811115611bf7576000848401525b50505050565b60006002820490506001821680611c1557607f821691505b60208210811415611c2957611c28611c68565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61204581611b6b565b811461205057600080fd5b50565b61205c81611b89565b811461206757600080fd5b50565b61207381611bb3565b811461207e57600080fd5b50565b61208a81611bbd565b811461209557600080fd5b5056fea26469706673582212206ae2ba720b6d3d85e9db8cd186bd369ea04d3fe600b1e78405b016accf07579a64736f6c63430008030033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0106240a6c23c701eb79c954354e310c996205cb0a6d633e2bc767b8ef33ed5e9000000000000000000000000000000000000000000000000000000000000000e436865617020457468657265756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054348455448000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d7146102b3578063a9059cbb146102e3578063d505accf14610313578063dd62ed3e1461032f57610100565b8063715018a61461023d5780637ecebe00146102475780638da5cb5b1461027757806395d89b411461029557610100565b8063313ce567116100d3578063313ce567146101a15780633644e515146101bf57806339509351146101dd57806370a082311461020d57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d61035f565b60405161011a91906118f6565b60405180910390f35b61013d600480360381019061013891906114b4565b6103f1565b60405161014a91906117c7565b60405180910390f35b61015b61040f565b6040516101689190611ab8565b60405180910390f35b61018b600480360381019061018691906113c7565b610419565b60405161019891906117c7565b60405180910390f35b6101a9610511565b6040516101b69190611ad3565b60405180910390f35b6101c761051a565b6040516101d491906117e2565b60405180910390f35b6101f760048036038101906101f291906114b4565b610529565b60405161020491906117c7565b60405180910390f35b61022760048036038101906102229190611362565b6105d5565b6040516102349190611ab8565b60405180910390f35b61024561061d565b005b610261600480360381019061025c9190611362565b6106a5565b60405161026e9190611ab8565b60405180910390f35b61027f6106f5565b60405161028c91906117ac565b60405180910390f35b61029d61071f565b6040516102aa91906118f6565b60405180910390f35b6102cd60048036038101906102c891906114b4565b6107b1565b6040516102da91906117c7565b60405180910390f35b6102fd60048036038101906102f891906114b4565b61089c565b60405161030a91906117c7565b60405180910390f35b61032d60048036038101906103289190611416565b6108ba565b005b6103496004803603810190610344919061138b565b6109fc565b6040516103569190611ab8565b60405180910390f35b60606003805461036e90611bfd565b80601f016020809104026020016040519081016040528092919081815260200182805461039a90611bfd565b80156103e75780601f106103bc576101008083540402835291602001916103e7565b820191906000526020600020905b8154815290600101906020018083116103ca57829003601f168201915b5050505050905090565b60006104056103fe610a83565b8484610a8b565b6001905092915050565b6000600254905090565b6000610426848484610c56565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610471610a83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156104f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e890611a18565b60405180910390fd5b610505856104fd610a83565b858403610a8b565b60019150509392505050565b60006012905090565b6000610524610ed7565b905090565b60006105cb610536610a83565b848460016000610544610a83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105c69190611b15565b610a8b565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610625610a83565b73ffffffffffffffffffffffffffffffffffffffff166106436106f5565b73ffffffffffffffffffffffffffffffffffffffff1614610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069090611a38565b60405180910390fd5b6106a36000610f9a565b565b60006106ee600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611060565b9050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461072e90611bfd565b80601f016020809104026020016040519081016040528092919081815260200182805461075a90611bfd565b80156107a75780601f1061077c576101008083540402835291602001916107a7565b820191906000526020600020905b81548152906001019060200180831161078a57829003601f168201915b5050505050905090565b600080600160006107c0610a83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087490611a98565b60405180910390fd5b610891610888610a83565b85858403610a8b565b600191505092915050565b60006108b06108a9610a83565b8484610c56565b6001905092915050565b834211156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490611978565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861092c8c61106e565b89604051602001610942969594939291906117fd565b6040516020818303038152906040528051906020012090506000610965826110cc565b90506000610975828787876110e6565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc906119f8565b60405180910390fd5b6109f08a8a8a610a8b565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290611a78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290611958565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c499190611ab8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90611a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90611938565b60405180910390fd5b610d41838383611281565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe90611998565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5a9190611b15565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ebe9190611ab8565b60405180910390a3610ed1848484611286565b50505050565b60007f0000000000000000000000000000000000000000000000000000000000002105461415610f29577f533d67132f555f0424ad4f7f01e964a473016b6592acbb9dd5396d41f82165589050610f97565b610f947f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f53fd0b77fb98779ffc00380f7da64a76e1eac8c47c05c01434068c3e85ce62457fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc661128b565b90505b90565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506110bb81611060565b91506110c6816112c5565b50919050565b60006110df6110d9610ed7565b836112db565b9050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561114e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611145906119b8565b60405180910390fd5b601b8460ff1614806111635750601c8460ff16145b6111a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611199906119d8565b60405180910390fd5b6000600186868686604051600081526020016040526040516111c794939291906118b1565b6020604051602081039080840390855afa1580156111e9573d6000803e3d6000fd5b505050602060405103519050336060541860601b611205578290505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90611918565b60405180910390fd5b80915050949350505050565b505050565b505050565b600083838346306040516020016112a695949392919061185e565b6040516020818303038152906040528051906020012090509392505050565b6001816000016000828254019250508190555050565b600082826040516020016112f0929190611775565b60405160208183030381529060405280519060200120905092915050565b60008135905061131d8161203c565b92915050565b60008135905061133281612053565b92915050565b6000813590506113478161206a565b92915050565b60008135905061135c81612081565b92915050565b60006020828403121561137457600080fd5b60006113828482850161130e565b91505092915050565b6000806040838503121561139e57600080fd5b60006113ac8582860161130e565b92505060206113bd8582860161130e565b9150509250929050565b6000806000606084860312156113dc57600080fd5b60006113ea8682870161130e565b93505060206113fb8682870161130e565b925050604061140c86828701611338565b9150509250925092565b600080600080600080600060e0888a03121561143157600080fd5b600061143f8a828b0161130e565b97505060206114508a828b0161130e565b96505060406114618a828b01611338565b95505060606114728a828b01611338565b94505060806114838a828b0161134d565b93505060a06114948a828b01611323565b92505060c06114a58a828b01611323565b91505092959891949750929550565b600080604083850312156114c757600080fd5b60006114d58582860161130e565b92505060206114e685828601611338565b9150509250929050565b6114f981611b6b565b82525050565b61150881611b7d565b82525050565b61151781611b89565b82525050565b61152e61152982611b89565b611c2f565b82525050565b600061153f82611aee565b6115498185611af9565b9350611559818560208601611bca565b61156281611c97565b840191505092915050565b600061157a601883611af9565b915061158582611ca8565b602082019050919050565b600061159d602383611af9565b91506115a882611cd1565b604082019050919050565b60006115c0602283611af9565b91506115cb82611d20565b604082019050919050565b60006115e3600283611b0a565b91506115ee82611d6f565b600282019050919050565b6000611606601d83611af9565b915061161182611d98565b602082019050919050565b6000611629602683611af9565b915061163482611dc1565b604082019050919050565b600061164c602283611af9565b915061165782611e10565b604082019050919050565b600061166f602283611af9565b915061167a82611e5f565b604082019050919050565b6000611692601e83611af9565b915061169d82611eae565b602082019050919050565b60006116b5602883611af9565b91506116c082611ed7565b604082019050919050565b60006116d8602083611af9565b91506116e382611f26565b602082019050919050565b60006116fb602583611af9565b915061170682611f4f565b604082019050919050565b600061171e602483611af9565b915061172982611f9e565b604082019050919050565b6000611741602583611af9565b915061174c82611fed565b604082019050919050565b61176081611bb3565b82525050565b61176f81611bbd565b82525050565b6000611780826115d6565b915061178c828561151d565b60208201915061179c828461151d565b6020820191508190509392505050565b60006020820190506117c160008301846114f0565b92915050565b60006020820190506117dc60008301846114ff565b92915050565b60006020820190506117f7600083018461150e565b92915050565b600060c082019050611812600083018961150e565b61181f60208301886114f0565b61182c60408301876114f0565b6118396060830186611757565b6118466080830185611757565b61185360a0830184611757565b979650505050505050565b600060a082019050611873600083018861150e565b611880602083018761150e565b61188d604083018661150e565b61189a6060830185611757565b6118a760808301846114f0565b9695505050505050565b60006080820190506118c6600083018761150e565b6118d36020830186611766565b6118e0604083018561150e565b6118ed606083018461150e565b95945050505050565b600060208201905081810360008301526119108184611534565b905092915050565b600060208201905081810360008301526119318161156d565b9050919050565b6000602082019050818103600083015261195181611590565b9050919050565b60006020820190508181036000830152611971816115b3565b9050919050565b60006020820190508181036000830152611991816115f9565b9050919050565b600060208201905081810360008301526119b18161161c565b9050919050565b600060208201905081810360008301526119d18161163f565b9050919050565b600060208201905081810360008301526119f181611662565b9050919050565b60006020820190508181036000830152611a1181611685565b9050919050565b60006020820190508181036000830152611a31816116a8565b9050919050565b60006020820190508181036000830152611a51816116cb565b9050919050565b60006020820190508181036000830152611a71816116ee565b9050919050565b60006020820190508181036000830152611a9181611711565b9050919050565b60006020820190508181036000830152611ab181611734565b9050919050565b6000602082019050611acd6000830184611757565b92915050565b6000602082019050611ae86000830184611766565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611b2082611bb3565b9150611b2b83611bb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b6057611b5f611c39565b5b828201905092915050565b6000611b7682611b93565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611be8578082015181840152602081019050611bcd565b83811115611bf7576000848401525b50505050565b60006002820490506001821680611c1557607f821691505b60208210811415611c2957611c28611c68565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61204581611b6b565b811461205057600080fd5b50565b61205c81611b89565b811461206757600080fd5b50565b61207381611bb3565b811461207e57600080fd5b50565b61208a81611bbd565b811461209557600080fd5b5056fea26469706673582212206ae2ba720b6d3d85e9db8cd186bd369ea04d3fe600b1e78405b016accf07579a64736f6c63430008030033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0106240a6c23c701eb79c954354e310c996205cb0a6d633e2bc767b8ef33ed5e9000000000000000000000000000000000000000000000000000000000000000e436865617020457468657265756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054348455448000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Cheap Ethereum
Arg [1] : _symbol (string): CHETH
Arg [2] : _decimals (uint256): 7410602797253332543297017456857643954542358515736341494966463799381446284777

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 106240a6c23c701eb79c954354e310c996205cb0a6d633e2bc767b8ef33ed5e9
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [4] : 436865617020457468657265756d000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 4348455448000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

34408:296:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17414:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19581:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18534:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20232:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18376:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33941:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21133:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18705:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15165:94;;;:::i;:::-;;33683:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14514:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17633:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21851:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19045:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32972:645;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19283:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17414:100;17468:13;17501:5;17494:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17414:100;:::o;19581:169::-;19664:4;19681:39;19690:12;:10;:12::i;:::-;19704:7;19713:6;19681:8;:39::i;:::-;19738:4;19731:11;;19581:169;;;;:::o;18534:108::-;18595:7;18622:12;;18615:19;;18534:108;:::o;20232:492::-;20372:4;20389:36;20399:6;20407:9;20418:6;20389:9;:36::i;:::-;20438:24;20465:11;:19;20477:6;20465:19;;;;;;;;;;;;;;;:33;20485:12;:10;:12::i;:::-;20465:33;;;;;;;;;;;;;;;;20438:60;;20537:6;20517:16;:26;;20509:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;20624:57;20633:6;20641:12;:10;:12::i;:::-;20674:6;20655:16;:25;20624:8;:57::i;:::-;20712:4;20705:11;;;20232:492;;;;;:::o;18376:93::-;18434:5;18459:2;18452:9;;18376:93;:::o;33941:115::-;34001:7;34028:20;:18;:20::i;:::-;34021:27;;33941:115;:::o;21133:215::-;21221:4;21238:80;21247:12;:10;:12::i;:::-;21261:7;21307:10;21270:11;:25;21282:12;:10;:12::i;:::-;21270:25;;;;;;;;;;;;;;;:34;21296:7;21270:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;21238:8;:80::i;:::-;21336:4;21329:11;;21133:215;;;;:::o;18705:127::-;18779:7;18806:9;:18;18816:7;18806:18;;;;;;;;;;;;;;;;18799:25;;18705:127;;;:::o;15165:94::-;14745:12;:10;:12::i;:::-;14734:23;;:7;:5;:7::i;:::-;:23;;;14726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15230:21:::1;15248:1;15230:9;:21::i;:::-;15165:94::o:0;33683:128::-;33752:7;33779:24;:7;:14;33787:5;33779:14;;;;;;;;;;;;;;;:22;:24::i;:::-;33772:31;;33683:128;;;:::o;14514:87::-;14560:7;14587:6;;;;;;;;;;;14580:13;;14514:87;:::o;17633:104::-;17689:13;17722:7;17715:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17633:104;:::o;21851:413::-;21944:4;21961:24;21988:11;:25;22000:12;:10;:12::i;:::-;21988:25;;;;;;;;;;;;;;;:34;22014:7;21988:34;;;;;;;;;;;;;;;;21961:61;;22061:15;22041:16;:35;;22033:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22154:67;22163:12;:10;:12::i;:::-;22177:7;22205:15;22186:16;:34;22154:8;:67::i;:::-;22252:4;22245:11;;;21851:413;;;;:::o;19045:175::-;19131:4;19148:42;19158:12;:10;:12::i;:::-;19172:9;19183:6;19148:9;:42::i;:::-;19208:4;19201:11;;19045:175;;;;:::o;32972:645::-;33216:8;33197:15;:27;;33189:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33271:18;33313:16;33331:5;33338:7;33347:5;33354:16;33364:5;33354:9;:16::i;:::-;33372:8;33302:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33292:90;;;;;;33271:111;;33395:12;33410:28;33427:10;33410:16;:28::i;:::-;33395:43;;33451:14;33468:28;33482:4;33488:1;33491;33494;33468:13;:28::i;:::-;33451:45;;33525:5;33515:15;;:6;:15;;;33507:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33578:31;33587:5;33594:7;33603:5;33578:8;:31::i;:::-;32972:645;;;;;;;;;;:::o;19283:151::-;19372:7;19399:11;:18;19411:5;19399:18;;;;;;;;;;;;;;;:27;19418:7;19399:27;;;;;;;;;;;;;;;;19392:34;;19283:151;;;;:::o;13390:98::-;13443:7;13470:10;13463:17;;13390:98;:::o;25535:380::-;25688:1;25671:19;;:5;:19;;;;25663:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25769:1;25750:21;;:7;:21;;;;25742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25853:6;25823:11;:18;25835:5;25823:18;;;;;;;;;;;;;;;:27;25842:7;25823:27;;;;;;;;;;;;;;;:36;;;;25891:7;25875:32;;25884:5;25875:32;;;25900:6;25875:32;;;;;;:::i;:::-;;;;;;;;25535:380;;;:::o;22754:733::-;22912:1;22894:20;;:6;:20;;;;22886:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22996:1;22975:23;;:9;:23;;;;22967:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23051:47;23072:6;23080:9;23091:6;23051:20;:47::i;:::-;23111:21;23135:9;:17;23145:6;23135:17;;;;;;;;;;;;;;;;23111:41;;23188:6;23171:13;:23;;23163:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23309:6;23293:13;:22;23273:9;:17;23283:6;23273:17;;;;;;;;;;;;;;;:42;;;;23361:6;23337:9;:20;23347:9;23337:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;23402:9;23385:35;;23394:6;23385:35;;;23413:6;23385:35;;;;;;:::i;:::-;;;;;;;;23433:46;23453:6;23461:9;23472:6;23433:19;:46::i;:::-;22754:733;;;;:::o;30344:281::-;30397:7;30438:16;30421:13;:33;30417:201;;;30478:24;30471:31;;;;30417:201;30542:64;30564:10;30576:12;30590:15;30542:21;:64::i;:::-;30535:71;;30344:281;;:::o;15267:173::-;15323:16;15342:6;;;;;;;;;;;15323:25;;15368:8;15359:6;;:17;;;;;;;;;;;;;;;;;;15423:8;15392:40;;15413:8;15392:40;;;;;;;;;;;;15267:173;;:::o;6795:114::-;6860:7;6887;:14;;;6880:21;;6795:114;;;:::o;34194:207::-;34254:15;34282:30;34315:7;:14;34323:5;34315:14;;;;;;;;;;;;;;;34282:47;;34350:15;:5;:13;:15::i;:::-;34340:25;;34376:17;:5;:15;:17::i;:::-;34194:207;;;;:::o;31538:167::-;31615:7;31642:55;31664:20;:18;:20::i;:::-;31686:10;31642:21;:55::i;:::-;31635:62;;31538:167;;;:::o;3347:1595::-;3475:7;4414:66;4408:1;4400:10;;:80;;4378:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;4566:2;4561:1;:7;;;:18;;;;4577:2;4572:1;:7;;;4561:18;4553:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;4716:14;4733:24;4743:4;4749:1;4752;4755;4733:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4716:41;;4815:8;4808:4;4802:11;4798:26;4792:4;4788:37;4778:2;;4838:1;4828:11;;4778:2;4877:1;4859:20;;:6;:20;;;;4851:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4928:6;4921:13;;;3347:1595;;;;;;:::o;26515:125::-;;;;:::o;27244:124::-;;;;:::o;30633:263::-;30777:7;30825:8;30835;30845:11;30858:13;30881:4;30814:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30804:84;;;;;;30797:91;;30633:263;;;;;:::o;6917:127::-;7024:1;7006:7;:14;;;:19;;;;;;;;;;;6917:127;:::o;5861:196::-;5954:7;6020:15;6037:10;5991:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5981:68;;;;;;5974:75;;5861:196;;;;:::o;7:139:1:-;;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:139::-;;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:135::-;;524:6;511:20;502:29;;540:31;565:5;540:31;:::i;:::-;492:85;;;;:::o;583:262::-;;691:2;679:9;670:7;666:23;662:32;659:2;;;707:1;704;697:12;659:2;750:1;775:53;820:7;811:6;800:9;796:22;775:53;:::i;:::-;765:63;;721:117;649:196;;;;:::o;851:407::-;;;976:2;964:9;955:7;951:23;947:32;944:2;;;992:1;989;982:12;944:2;1035:1;1060:53;1105:7;1096:6;1085:9;1081:22;1060:53;:::i;:::-;1050:63;;1006:117;1162:2;1188:53;1233:7;1224:6;1213:9;1209:22;1188:53;:::i;:::-;1178:63;;1133:118;934:324;;;;;:::o;1264:552::-;;;;1406:2;1394:9;1385:7;1381:23;1377:32;1374:2;;;1422:1;1419;1412:12;1374:2;1465:1;1490:53;1535:7;1526:6;1515:9;1511:22;1490:53;:::i;:::-;1480:63;;1436:117;1592:2;1618:53;1663:7;1654:6;1643:9;1639:22;1618:53;:::i;:::-;1608:63;;1563:118;1720:2;1746:53;1791:7;1782:6;1771:9;1767:22;1746:53;:::i;:::-;1736:63;;1691:118;1364:452;;;;;:::o;1822:1132::-;;;;;;;;2030:3;2018:9;2009:7;2005:23;2001:33;1998:2;;;2047:1;2044;2037:12;1998:2;2090:1;2115:53;2160:7;2151:6;2140:9;2136:22;2115:53;:::i;:::-;2105:63;;2061:117;2217:2;2243:53;2288:7;2279:6;2268:9;2264:22;2243:53;:::i;:::-;2233:63;;2188:118;2345:2;2371:53;2416:7;2407:6;2396:9;2392:22;2371:53;:::i;:::-;2361:63;;2316:118;2473:2;2499:53;2544:7;2535:6;2524:9;2520:22;2499:53;:::i;:::-;2489:63;;2444:118;2601:3;2628:51;2671:7;2662:6;2651:9;2647:22;2628:51;:::i;:::-;2618:61;;2572:117;2728:3;2755:53;2800:7;2791:6;2780:9;2776:22;2755:53;:::i;:::-;2745:63;;2699:119;2857:3;2884:53;2929:7;2920:6;2909:9;2905:22;2884:53;:::i;:::-;2874:63;;2828:119;1988:966;;;;;;;;;;:::o;2960:407::-;;;3085:2;3073:9;3064:7;3060:23;3056:32;3053:2;;;3101:1;3098;3091:12;3053:2;3144:1;3169:53;3214:7;3205:6;3194:9;3190:22;3169:53;:::i;:::-;3159:63;;3115:117;3271:2;3297:53;3342:7;3333:6;3322:9;3318:22;3297:53;:::i;:::-;3287:63;;3242:118;3043:324;;;;;:::o;3373:118::-;3460:24;3478:5;3460:24;:::i;:::-;3455:3;3448:37;3438:53;;:::o;3497:109::-;3578:21;3593:5;3578:21;:::i;:::-;3573:3;3566:34;3556:50;;:::o;3612:118::-;3699:24;3717:5;3699:24;:::i;:::-;3694:3;3687:37;3677:53;;:::o;3736:157::-;3841:45;3861:24;3879:5;3861:24;:::i;:::-;3841:45;:::i;:::-;3836:3;3829:58;3819:74;;:::o;3899:364::-;;4015:39;4048:5;4015:39;:::i;:::-;4070:71;4134:6;4129:3;4070:71;:::i;:::-;4063:78;;4150:52;4195:6;4190:3;4183:4;4176:5;4172:16;4150:52;:::i;:::-;4227:29;4249:6;4227:29;:::i;:::-;4222:3;4218:39;4211:46;;3991:272;;;;;:::o;4269:366::-;;4432:67;4496:2;4491:3;4432:67;:::i;:::-;4425:74;;4508:93;4597:3;4508:93;:::i;:::-;4626:2;4621:3;4617:12;4610:19;;4415:220;;;:::o;4641:366::-;;4804:67;4868:2;4863:3;4804:67;:::i;:::-;4797:74;;4880:93;4969:3;4880:93;:::i;:::-;4998:2;4993:3;4989:12;4982:19;;4787:220;;;:::o;5013:366::-;;5176:67;5240:2;5235:3;5176:67;:::i;:::-;5169:74;;5252:93;5341:3;5252:93;:::i;:::-;5370:2;5365:3;5361:12;5354:19;;5159:220;;;:::o;5385:400::-;;5566:84;5648:1;5643:3;5566:84;:::i;:::-;5559:91;;5659:93;5748:3;5659:93;:::i;:::-;5777:1;5772:3;5768:11;5761:18;;5549:236;;;:::o;5791:366::-;;5954:67;6018:2;6013:3;5954:67;:::i;:::-;5947:74;;6030:93;6119:3;6030:93;:::i;:::-;6148:2;6143:3;6139:12;6132:19;;5937:220;;;:::o;6163:366::-;;6326:67;6390:2;6385:3;6326:67;:::i;:::-;6319:74;;6402:93;6491:3;6402:93;:::i;:::-;6520:2;6515:3;6511:12;6504:19;;6309:220;;;:::o;6535:366::-;;6698:67;6762:2;6757:3;6698:67;:::i;:::-;6691:74;;6774:93;6863:3;6774:93;:::i;:::-;6892:2;6887:3;6883:12;6876:19;;6681:220;;;:::o;6907:366::-;;7070:67;7134:2;7129:3;7070:67;:::i;:::-;7063:74;;7146:93;7235:3;7146:93;:::i;:::-;7264:2;7259:3;7255:12;7248:19;;7053:220;;;:::o;7279:366::-;;7442:67;7506:2;7501:3;7442:67;:::i;:::-;7435:74;;7518:93;7607:3;7518:93;:::i;:::-;7636:2;7631:3;7627:12;7620:19;;7425:220;;;:::o;7651:366::-;;7814:67;7878:2;7873:3;7814:67;:::i;:::-;7807:74;;7890:93;7979:3;7890:93;:::i;:::-;8008:2;8003:3;7999:12;7992:19;;7797:220;;;:::o;8023:366::-;;8186:67;8250:2;8245:3;8186:67;:::i;:::-;8179:74;;8262:93;8351:3;8262:93;:::i;:::-;8380:2;8375:3;8371:12;8364:19;;8169:220;;;:::o;8395:366::-;;8558:67;8622:2;8617:3;8558:67;:::i;:::-;8551:74;;8634:93;8723:3;8634:93;:::i;:::-;8752:2;8747:3;8743:12;8736:19;;8541:220;;;:::o;8767:366::-;;8930:67;8994:2;8989:3;8930:67;:::i;:::-;8923:74;;9006:93;9095:3;9006:93;:::i;:::-;9124:2;9119:3;9115:12;9108:19;;8913:220;;;:::o;9139:366::-;;9302:67;9366:2;9361:3;9302:67;:::i;:::-;9295:74;;9378:93;9467:3;9378:93;:::i;:::-;9496:2;9491:3;9487:12;9480:19;;9285:220;;;:::o;9511:118::-;9598:24;9616:5;9598:24;:::i;:::-;9593:3;9586:37;9576:53;;:::o;9635:112::-;9718:22;9734:5;9718:22;:::i;:::-;9713:3;9706:35;9696:51;;:::o;9753:663::-;;10016:148;10160:3;10016:148;:::i;:::-;10009:155;;10174:75;10245:3;10236:6;10174:75;:::i;:::-;10274:2;10269:3;10265:12;10258:19;;10287:75;10358:3;10349:6;10287:75;:::i;:::-;10387:2;10382:3;10378:12;10371:19;;10407:3;10400:10;;9998:418;;;;;:::o;10422:222::-;;10553:2;10542:9;10538:18;10530:26;;10566:71;10634:1;10623:9;10619:17;10610:6;10566:71;:::i;:::-;10520:124;;;;:::o;10650:210::-;;10775:2;10764:9;10760:18;10752:26;;10788:65;10850:1;10839:9;10835:17;10826:6;10788:65;:::i;:::-;10742:118;;;;:::o;10866:222::-;;10997:2;10986:9;10982:18;10974:26;;11010:71;11078:1;11067:9;11063:17;11054:6;11010:71;:::i;:::-;10964:124;;;;:::o;11094:775::-;;11365:3;11354:9;11350:19;11342:27;;11379:71;11447:1;11436:9;11432:17;11423:6;11379:71;:::i;:::-;11460:72;11528:2;11517:9;11513:18;11504:6;11460:72;:::i;:::-;11542;11610:2;11599:9;11595:18;11586:6;11542:72;:::i;:::-;11624;11692:2;11681:9;11677:18;11668:6;11624:72;:::i;:::-;11706:73;11774:3;11763:9;11759:19;11750:6;11706:73;:::i;:::-;11789;11857:3;11846:9;11842:19;11833:6;11789:73;:::i;:::-;11332:537;;;;;;;;;:::o;11875:664::-;;12118:3;12107:9;12103:19;12095:27;;12132:71;12200:1;12189:9;12185:17;12176:6;12132:71;:::i;:::-;12213:72;12281:2;12270:9;12266:18;12257:6;12213:72;:::i;:::-;12295;12363:2;12352:9;12348:18;12339:6;12295:72;:::i;:::-;12377;12445:2;12434:9;12430:18;12421:6;12377:72;:::i;:::-;12459:73;12527:3;12516:9;12512:19;12503:6;12459:73;:::i;:::-;12085:454;;;;;;;;:::o;12545:545::-;;12756:3;12745:9;12741:19;12733:27;;12770:71;12838:1;12827:9;12823:17;12814:6;12770:71;:::i;:::-;12851:68;12915:2;12904:9;12900:18;12891:6;12851:68;:::i;:::-;12929:72;12997:2;12986:9;12982:18;12973:6;12929:72;:::i;:::-;13011;13079:2;13068:9;13064:18;13055:6;13011:72;:::i;:::-;12723:367;;;;;;;:::o;13096:313::-;;13247:2;13236:9;13232:18;13224:26;;13296:9;13290:4;13286:20;13282:1;13271:9;13267:17;13260:47;13324:78;13397:4;13388:6;13324:78;:::i;:::-;13316:86;;13214:195;;;;:::o;13415:419::-;;13619:2;13608:9;13604:18;13596:26;;13668:9;13662:4;13658:20;13654:1;13643:9;13639:17;13632:47;13696:131;13822:4;13696:131;:::i;:::-;13688:139;;13586:248;;;:::o;13840:419::-;;14044:2;14033:9;14029:18;14021:26;;14093:9;14087:4;14083:20;14079:1;14068:9;14064:17;14057:47;14121:131;14247:4;14121:131;:::i;:::-;14113:139;;14011:248;;;:::o;14265:419::-;;14469:2;14458:9;14454:18;14446:26;;14518:9;14512:4;14508:20;14504:1;14493:9;14489:17;14482:47;14546:131;14672:4;14546:131;:::i;:::-;14538:139;;14436:248;;;:::o;14690:419::-;;14894:2;14883:9;14879:18;14871:26;;14943:9;14937:4;14933:20;14929:1;14918:9;14914:17;14907:47;14971:131;15097:4;14971:131;:::i;:::-;14963:139;;14861:248;;;:::o;15115:419::-;;15319:2;15308:9;15304:18;15296:26;;15368:9;15362:4;15358:20;15354:1;15343:9;15339:17;15332:47;15396:131;15522:4;15396:131;:::i;:::-;15388:139;;15286:248;;;:::o;15540:419::-;;15744:2;15733:9;15729:18;15721:26;;15793:9;15787:4;15783:20;15779:1;15768:9;15764:17;15757:47;15821:131;15947:4;15821:131;:::i;:::-;15813:139;;15711:248;;;:::o;15965:419::-;;16169:2;16158:9;16154:18;16146:26;;16218:9;16212:4;16208:20;16204:1;16193:9;16189:17;16182:47;16246:131;16372:4;16246:131;:::i;:::-;16238:139;;16136:248;;;:::o;16390:419::-;;16594:2;16583:9;16579:18;16571:26;;16643:9;16637:4;16633:20;16629:1;16618:9;16614:17;16607:47;16671:131;16797:4;16671:131;:::i;:::-;16663:139;;16561:248;;;:::o;16815:419::-;;17019:2;17008:9;17004:18;16996:26;;17068:9;17062:4;17058:20;17054:1;17043:9;17039:17;17032:47;17096:131;17222:4;17096:131;:::i;:::-;17088:139;;16986:248;;;:::o;17240:419::-;;17444:2;17433:9;17429:18;17421:26;;17493:9;17487:4;17483:20;17479:1;17468:9;17464:17;17457:47;17521:131;17647:4;17521:131;:::i;:::-;17513:139;;17411:248;;;:::o;17665:419::-;;17869:2;17858:9;17854:18;17846:26;;17918:9;17912:4;17908:20;17904:1;17893:9;17889:17;17882:47;17946:131;18072:4;17946:131;:::i;:::-;17938:139;;17836:248;;;:::o;18090:419::-;;18294:2;18283:9;18279:18;18271:26;;18343:9;18337:4;18333:20;18329:1;18318:9;18314:17;18307:47;18371:131;18497:4;18371:131;:::i;:::-;18363:139;;18261:248;;;:::o;18515:419::-;;18719:2;18708:9;18704:18;18696:26;;18768:9;18762:4;18758:20;18754:1;18743:9;18739:17;18732:47;18796:131;18922:4;18796:131;:::i;:::-;18788:139;;18686:248;;;:::o;18940:222::-;;19071:2;19060:9;19056:18;19048:26;;19084:71;19152:1;19141:9;19137:17;19128:6;19084:71;:::i;:::-;19038:124;;;;:::o;19168:214::-;;19295:2;19284:9;19280:18;19272:26;;19308:67;19372:1;19361:9;19357:17;19348:6;19308:67;:::i;:::-;19262:120;;;;:::o;19388:99::-;;19474:5;19468:12;19458:22;;19447:40;;;:::o;19493:169::-;;19611:6;19606:3;19599:19;19651:4;19646:3;19642:14;19627:29;;19589:73;;;;:::o;19668:148::-;;19807:3;19792:18;;19782:34;;;;:::o;19822:305::-;;19881:20;19899:1;19881:20;:::i;:::-;19876:25;;19915:20;19933:1;19915:20;:::i;:::-;19910:25;;20069:1;20001:66;19997:74;19994:1;19991:81;19988:2;;;20075:18;;:::i;:::-;19988:2;20119:1;20116;20112:9;20105:16;;19866:261;;;;:::o;20133:96::-;;20199:24;20217:5;20199:24;:::i;:::-;20188:35;;20178:51;;;:::o;20235:90::-;;20312:5;20305:13;20298:21;20287:32;;20277:48;;;:::o;20331:77::-;;20397:5;20386:16;;20376:32;;;:::o;20414:126::-;;20491:42;20484:5;20480:54;20469:65;;20459:81;;;:::o;20546:77::-;;20612:5;20601:16;;20591:32;;;:::o;20629:86::-;;20704:4;20697:5;20693:16;20682:27;;20672:43;;;:::o;20721:307::-;20789:1;20799:113;20813:6;20810:1;20807:13;20799:113;;;20898:1;20893:3;20889:11;20883:18;20879:1;20874:3;20870:11;20863:39;20835:2;20832:1;20828:10;20823:15;;20799:113;;;20930:6;20927:1;20924:13;20921:2;;;21010:1;21001:6;20996:3;20992:16;20985:27;20921:2;20770:258;;;;:::o;21034:320::-;;21115:1;21109:4;21105:12;21095:22;;21162:1;21156:4;21152:12;21183:18;21173:2;;21239:4;21231:6;21227:17;21217:27;;21173:2;21301;21293:6;21290:14;21270:18;21267:38;21264:2;;;21320:18;;:::i;:::-;21264:2;21085:269;;;;:::o;21360:79::-;;21428:5;21417:16;;21407:32;;;:::o;21445:180::-;21493:77;21490:1;21483:88;21590:4;21587:1;21580:15;21614:4;21611:1;21604:15;21631:180;21679:77;21676:1;21669:88;21776:4;21773:1;21766:15;21800:4;21797:1;21790:15;21817:102;;21909:2;21905:7;21900:2;21893:5;21889:14;21885:28;21875:38;;21865:54;;;:::o;21925:174::-;22065:26;22061:1;22053:6;22049:14;22042:50;22031:68;:::o;22105:222::-;22245:34;22241:1;22233:6;22229:14;22222:58;22314:5;22309:2;22301:6;22297:15;22290:30;22211:116;:::o;22333:221::-;22473:34;22469:1;22461:6;22457:14;22450:58;22542:4;22537:2;22529:6;22525:15;22518:29;22439:115;:::o;22560:214::-;22700:66;22696:1;22688:6;22684:14;22677:90;22666:108;:::o;22780:179::-;22920:31;22916:1;22908:6;22904:14;22897:55;22886:73;:::o;22965:225::-;23105:34;23101:1;23093:6;23089:14;23082:58;23174:8;23169:2;23161:6;23157:15;23150:33;23071:119;:::o;23196:221::-;23336:34;23332:1;23324:6;23320:14;23313:58;23405:4;23400:2;23392:6;23388:15;23381:29;23302:115;:::o;23423:221::-;23563:34;23559:1;23551:6;23547:14;23540:58;23632:4;23627:2;23619:6;23615:15;23608:29;23529:115;:::o;23650:180::-;23790:32;23786:1;23778:6;23774:14;23767:56;23756:74;:::o;23836:227::-;23976:34;23972:1;23964:6;23960:14;23953:58;24045:10;24040:2;24032:6;24028:15;24021:35;23942:121;:::o;24069:182::-;24209:34;24205:1;24197:6;24193:14;24186:58;24175:76;:::o;24257:224::-;24397:34;24393:1;24385:6;24381:14;24374:58;24466:7;24461:2;24453:6;24449:15;24442:32;24363:118;:::o;24487:223::-;24627:34;24623:1;24615:6;24611:14;24604:58;24696:6;24691:2;24683:6;24679:15;24672:31;24593:117;:::o;24716:224::-;24856:34;24852:1;24844:6;24840:14;24833:58;24925:7;24920:2;24912:6;24908:15;24901:32;24822:118;:::o;24946:122::-;25019:24;25037:5;25019:24;:::i;:::-;25012:5;25009:35;24999:2;;25058:1;25055;25048:12;24999:2;24989:79;:::o;25074:122::-;25147:24;25165:5;25147:24;:::i;:::-;25140:5;25137:35;25127:2;;25186:1;25183;25176:12;25127:2;25117:79;:::o;25202:122::-;25275:24;25293:5;25275:24;:::i;:::-;25268:5;25265:35;25255:2;;25314:1;25311;25304:12;25255:2;25245:79;:::o;25330:118::-;25401:22;25417:5;25401:22;:::i;:::-;25394:5;25391:33;25381:2;;25438:1;25435;25428:12;25381:2;25371:77;:::o

Swarm Source

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