Contract 0xbd9c89536e406478d8a42c51b35bcfb6bf8a1384 1

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x9893aba30a6c32f87a74853652e26afe620737e16a40eb6a2708ef0f7a8b2408Transfer(pending)2023-05-29 11:33:2350 secs ago0xbb5a64f0aa5c8d49fff3c8a68d03470cb7206b29 IN 0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC(Pending)
0x9de26f6fb69fc53592f770ce76aa1f25631e6b0a85e3961151da60c597db75efTransfer432865482023-05-29 11:30:433 mins ago0xd1925b142e2ddd0a1450b5bb7cc0b8622f5ed3ee IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.005737557759 162.721433898
0x846a1f30c2eb7ea32d1b315ebc342d8008423e9d67d55a06d6327d57b53d06c5Transfer432863372023-05-29 11:23:1510 mins ago0xbe2c3b0a0423838773fa5355cc9d967fd2c7f01d IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.008119840305 170.728349569
0x7fd0568edba923c5f2ae50e221187eea3bc30d68a060f3f5a91d54946d2140ebTransfer432854642023-05-29 10:51:5342 mins ago0x33b3e8e58b64b078eca4242e2fef2f486c6598b8 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.012447353775 237.726389911
0x5ec75a9e362402be5394658644dfcbf2fc5673e904b53d80f185114667b36250Transfer432850442023-05-29 10:36:2957 mins ago0x0508740a1cdaa99f10c5d1e396eaa01356e9090c IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.006290050229 178.390534015
0x6578082b5dd255bb1ecd6b9220eff354c8ba6b2db7af0b6de25fac38f0332673Transfer432845302023-05-29 10:17:251 hr 16 mins ago0x5705a73e23be932428363ce8c752c79606f40937 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.006263503686 205.549477772
0xd3c6340da33101b5e715109154205a1df976b99c99b9cde1e554480605387cdeTransfer432837792023-05-29 9:50:361 hr 43 mins ago0x9b84e91c99753a154d5716424a62835cf19e6014 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.004763706591 156.330618009
0x3a2f1aa449536e02817674c956968a2890839ef12ab2a6916d73135b81b168d6Transfer432836862023-05-29 9:47:171 hr 46 mins ago0x59e9e04e7eba9e87466be0d4180f9c3bc7378204 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.008343734538 159.353218847
0xe37e976159db9759a18e5cb47a65cc1a52daa95fd868503fc2cd095e7a9cc0f6Transfer432835462023-05-29 9:42:191 hr 51 mins ago0x39503190d3e984605d0b7fc510a147a32079a02a IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.004657428491 152.903102165
0xf7d8732b4d55150dbe1e9caf0b25947276ffa0a5dd9b8f70a6366ff0ca1a5992Transfer432826462023-05-29 9:09:012 hrs 25 mins ago0x6910de6b57713675d613ef6ae83861be8656f1a5 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.005746647591 188.587804926
0x8455855cc089d88050d20ef593d322d7204eaf32d8322667cca09c7e751bb0f7Transfer432825602023-05-29 9:05:212 hrs 28 mins ago0xa1d5cab0c7c2754ac9d8b8077e7ce0bdcbe2748c IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.005843914184 191.779803915
0xef9306396b1fb09380d9ce048f5bdc4de76c4b96bdce3836ae9093ef50d03d74Approve432818542023-05-29 8:38:482 hrs 55 mins ago0x63729e61f427d8b89ad5ebe27422a469a122f161 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.0091103272192.95
0x04232a78947896cce45991f239477d33296a62bda322cdeab8694342ee68cc7fTransfer432802702023-05-29 7:40:043 hrs 54 mins ago0xec174c25bba7359b56fd672c8899664121e7dbcf IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.010654103355203.431286859
0x334dd3c1301cd8e8874541b9064b637ffbfa373896a9c75651ba263f3dd0b2c2Transfer432794622023-05-29 7:10:054 hrs 24 mins ago0xec174c25bba7359b56fd672c8899664121e7dbcf IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.006512305754184.756745185
0x99bd5340a39850f0015d788c96faf0e333465e87c47f234cdbbdd0fb4835e583Transfer432793522023-05-29 7:06:114 hrs 28 mins ago0x18caf9412019fd319c9b55bc3b005aee51320150 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.007612250
0xbb22bec77b917cb3c777fe0822d7da328dd3fb96d9156f195c015743e45595caTransfer432793512023-05-29 7:06:094 hrs 28 mins ago0x0016ce56f12e1c473093e252c7f23bf620c2de51 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.011887250
0xd44568f0c597cac6bc2cfa0ee9e8faf9245509a0ef2e597b1aa993c20d2380faTransfer432663322023-05-28 23:06:0812 hrs 28 mins ago0xb8a5d69e96b147d730e8a2a4433872baca2c1684 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.00959346286 183.263216564
0xb2d4045e40876ff0788c87bd6d6211f00ab077b69335cffb9da184ed7dc675caTransfer432643692023-05-28 21:53:4013 hrs 40 mins ago0xf10332afce7c70d07da27888acd242a54cc6413c IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.006229615379 176.676556429
0x030499fc5dcbf5e745b1bc370b6aa65e70492b09710d3ef98a7d193b2a160d20Transfer432619612023-05-28 20:20:4415 hrs 13 mins ago0xce4acd65f65167b9a3cf4757822a9cf5d6251b99 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.007622857933 145.652283968
0xb6eb86b16873e0ebc8900420a982a2e0cd2c0d76af5af1d27be57262ce48901dTransfer432599272023-05-28 19:05:5716 hrs 28 mins ago0xbd43cfa6ed8626ab0882e0d929ef71fe7a4b07a3 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.004091646846 134.328524184
0x8ff8402eef07fb4cb87a08cf75d81448140af2d16de1ddbac409e7ac25d6eadcTransfer432587562023-05-28 18:22:0917 hrs 12 mins ago0x3f69d7f94fadbcf6212b93fa4cc007ef6ad920b6 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.0052797026 149.787295746
0x71ff1a1a353f7f3e26dff94d5b162bc46e20716669ca9b1570bd447755ff7aa4Transfer432567842023-05-28 17:11:3418 hrs 22 mins ago0x0aa6d020d4d6f32267150d1c213a3613784ffefe IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.006671376729 140.272849657
0xdf477136cbf77dd51e990cda381d24e0b5f22af5da3ed15e523b7b6f88bf541fTransfer432560652023-05-28 16:45:4818 hrs 48 mins ago0x39282acef6d0f32aaa8eac6262444b0ed66b2812 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.006761203214 142.125687675
0x56a0b805905c4739e5f58b9dafb8e7c6e8c0460e84c7f4324290b0c2de408586Transfer432547762023-05-28 15:59:5319 hrs 34 mins ago0x6e6b8cc9d36de5f050462f3f7682598f36c89aa5 IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.005418955686 153.685640584
0x41c82176483df7e55c7e78e74635075b8f15834435c8a83ed406ba6858a3c968Transfer432546232023-05-28 15:54:2719 hrs 39 mins ago0x1558cbf42f1b63496918c5e5a995d0deaf65e21a IN  0xbd9c89536e406478d8a42c51b35bcfb6bf8a13840 MATIC0.007863492322 165.421834447
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GrabClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-08-30
*/

// Dependency file: @openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

// pragma solidity ^0.8.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);
}


// Dependency file: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

// pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

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

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

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


// Dependency file: @openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

// pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


// Dependency file: @openzeppelin/contracts/token/ERC20/ERC20.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

// pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
// import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
// import "@openzeppelin/contracts/utils/Context.sol";

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


// Dependency file: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Burnable.sol)

// pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
// import "@openzeppelin/contracts/utils/Context.sol";

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        unchecked {
            _approve(account, _msgSender(), currentAllowance - amount);
        }
        _burn(account, amount);
    }
}


// Dependency file: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

// pragma solidity ^0.8.0;

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


// Dependency file: @openzeppelin/contracts/utils/Strings.sol

// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

// pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


// Dependency file: @openzeppelin/contracts/utils/cryptography/ECDSA.sol

// OpenZeppelin Contracts v4.4.1 (utils/cryptography/ECDSA.sol)

// pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/utils/Strings.sol";

/**
 * @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 {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. 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]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // 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 tryRecover(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 tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @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.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} 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.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // 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 (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): 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.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @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 pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @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 Message, created from `s`. 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(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

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


// Dependency file: @openzeppelin/contracts/utils/cryptography/draft-EIP712.sol

// OpenZeppelin Contracts v4.4.1 (utils/cryptography/draft-EIP712.sol)

// pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";

/**
 * @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;
    address private immutable _CACHED_THIS;

    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);
        _CACHED_THIS = address(this);
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        if (address(this) == _CACHED_THIS && 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);
    }
}


// Dependency file: @openzeppelin/contracts/utils/Counters.sol

// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

// pragma solidity ^0.8.0;

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


// Dependency file: @openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-ERC20Permit.sol)

// pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";
// import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
// import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol";
// import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
// import "@openzeppelin/contracts/utils/Counters.sol";

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


// Root file: contracts/GrabClub.sol

pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
// import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
// import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";

contract GrabClub is ERC20, ERC20Burnable, ERC20Permit {
    constructor() ERC20("GrabClub", "GC") ERC20Permit("GrabClub") {
        _mint(_msgSender(), 6_000_000_000 * 10**decimals());
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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"}]

6101606040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140908152503480156200003a57600080fd5b506040518060400160405280600881526020017f47726162436c7562000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f47726162436c75620000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f474300000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012c92919062000424565b5080600490805190602001906200014592919062000424565b50505060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620001b18184846200025460201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508061012081815250505050505050506200024e620002126200029060201b60201c565b620002226200029860201b60201c565b600a62000230919062000693565b640165a0bc00620002429190620007d0565b620002a160201b60201c565b62000950565b60008383834630604051602001620002719594939291906200052e565b6040516020818303038152906040528051906020012090509392505050565b600033905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000314576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030b906200058b565b60405180910390fd5b62000328600083836200041a60201b60201c565b80600260008282546200033c9190620005db565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003939190620005db565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003fa9190620005ad565b60405180910390a362000416600083836200041f60201b60201c565b5050565b505050565b505050565b828054620004329062000886565b90600052602060002090601f016020900481019282620004565760008555620004a2565b82601f106200047157805160ff1916838001178555620004a2565b82800160010185558215620004a2579182015b82811115620004a157825182559160200191906001019062000484565b5b509050620004b19190620004b5565b5090565b5b80821115620004d0576000816000905550600101620004b6565b5090565b620004df8162000831565b82525050565b620004f08162000845565b82525050565b600062000505601f83620005ca565b9150620005128262000927565b602082019050919050565b62000528816200086f565b82525050565b600060a082019050620005456000830188620004e5565b620005546020830187620004e5565b620005636040830186620004e5565b6200057260608301856200051d565b620005816080830184620004d4565b9695505050505050565b60006020820190508181036000830152620005a681620004f6565b9050919050565b6000602082019050620005c460008301846200051d565b92915050565b600082825260208201905092915050565b6000620005e8826200086f565b9150620005f5836200086f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200062d576200062c620008bc565b5b828201905092915050565b6000808291508390505b60018511156200068a57808604811115620006625762000661620008bc565b5b6001851615620006725780820291505b808102905062000682856200091a565b945062000642565b94509492505050565b6000620006a0826200086f565b9150620006ad8362000879565b9250620006dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620006e4565b905092915050565b600082620006f65760019050620007c9565b81620007065760009050620007c9565b81600181146200071f57600281146200072a5762000760565b6001915050620007c9565b60ff8411156200073f576200073e620008bc565b5b8360020a915084821115620007595762000758620008bc565b5b50620007c9565b5060208310610133831016604e8410600b84101617156200079a5782820a905083811115620007945762000793620008bc565b5b620007c9565b620007a9848484600162000638565b92509050818404811115620007c357620007c2620008bc565b5b81810290505b9392505050565b6000620007dd826200086f565b9150620007ea836200086f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008265762000825620008bc565b5b828202905092915050565b60006200083e826200084f565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200089f57607f821691505b60208210811415620008b657620008b5620008eb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60805160a05160c05160601c60e0516101005161012051610140516125d9620009ae60003960006108ee01526000610f7201526000610fb401526000610f9301526000610ec801526000610f1e01526000610f4701526125d96000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d7146102c3578063a9059cbb146102f3578063d505accf14610323578063dd62ed3e1461033f57610100565b806370a082311461022957806379cc6790146102595780637ecebe001461027557806395d89b41146102a557610100565b8063313ce567116100d3578063313ce567146101a15780633644e515146101bf57806339509351146101dd57806342966c681461020d57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d61036f565b60405161011a9190611c4c565b60405180910390f35b61013d6004803603810190610138919061178b565b610401565b60405161014a9190611b1d565b60405180910390f35b61015b61041f565b6040516101689190611e6e565b60405180910390f35b61018b60048036038101906101869190611696565b610429565b6040516101989190611b1d565b60405180910390f35b6101a9610521565b6040516101b69190611e89565b60405180910390f35b6101c761052a565b6040516101d49190611b38565b60405180910390f35b6101f760048036038101906101f2919061178b565b610539565b6040516102049190611b1d565b60405180910390f35b610227600480360381019061022291906117cb565b6105e5565b005b610243600480360381019061023e9190611629565b6105f9565b6040516102509190611e6e565b60405180910390f35b610273600480360381019061026e919061178b565b610641565b005b61028f600480360381019061028a9190611629565b6106bc565b60405161029c9190611e6e565b60405180910390f35b6102ad61070c565b6040516102ba9190611c4c565b60405180910390f35b6102dd60048036038101906102d8919061178b565b61079e565b6040516102ea9190611b1d565b60405180910390f35b61030d6004803603810190610308919061178b565b610889565b60405161031a9190611b1d565b60405180910390f35b61033d600480360381019061033891906116e9565b6108a7565b005b61035960048036038101906103549190611656565b6109e9565b6040516103669190611e6e565b60405180910390f35b60606003805461037e90611fe7565b80601f01602080910402602001604051908101604052809291908181526020018280546103aa90611fe7565b80156103f75780601f106103cc576101008083540402835291602001916103f7565b820191906000526020600020905b8154815290600101906020018083116103da57829003601f168201915b5050505050905090565b600061041561040e610a70565b8484610a78565b6001905092915050565b6000600254905090565b6000610436848484610c43565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610481610a70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f890611dae565b60405180910390fd5b6105158561050d610a70565b858403610a78565b60019150509392505050565b60006012905090565b6000610534610ec4565b905090565b60006105db610546610a70565b848460016000610554610a70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105d69190611ecb565b610a78565b6001905092915050565b6105f66105f0610a70565b82610fde565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006106548361064f610a70565b6109e9565b905081811015610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069090611dce565b60405180910390fd5b6106ad836106a5610a70565b848403610a78565b6106b78383610fde565b505050565b6000610705600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206111b5565b9050919050565b60606004805461071b90611fe7565b80601f016020809104026020016040519081016040528092919081815260200182805461074790611fe7565b80156107945780601f1061076957610100808354040283529160200191610794565b820191906000526020600020905b81548152906001019060200180831161077757829003601f168201915b5050505050905090565b600080600160006107ad610a70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190611e4e565b60405180910390fd5b61087e610875610a70565b85858403610a78565b600191505092915050565b600061089d610896610a70565b8484610c43565b6001905092915050565b834211156108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e190611d0e565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008888886109198c6111c3565b8960405160200161092f96959493929190611b53565b604051602081830303815290604052805190602001209050600061095282611221565b905060006109628287878761123b565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990611d8e565b60405180910390fd5b6109dd8a8a8a610a78565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf90611e2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90611cee565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c369190611e6e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90611e0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a90611c8e565b60405180910390fd5b610d2e838383611266565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90611d2e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e479190611ecb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eab9190611e6e565b60405180910390a3610ebe84848461126b565b50505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610f4057507f000000000000000000000000000000000000000000000000000000000000000046145b15610f6d577f00000000000000000000000000000000000000000000000000000000000000009050610fdb565b610fd87f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611270565b90505b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590611dee565b60405180910390fd5b61105a82600083611266565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790611cae565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546111379190611f21565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161119c9190611e6e565b60405180910390a36111b08360008461126b565b505050565b600081600001549050919050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611210816111b5565b915061121b816112aa565b50919050565b600061123461122e610ec4565b836112c0565b9050919050565b600080600061124c878787876112f3565b9150915061125981611400565b8192505050949350505050565b505050565b505050565b6000838383463060405160200161128b959493929190611bb4565b6040516020818303038152906040528051906020012090509392505050565b6001816000016000828254019250508190555050565b600082826040516020016112d5929190611ae6565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561132e5760006003915091506113f7565b601b8560ff16141580156113465750601c8560ff1614155b156113585760006004915091506113f7565b60006001878787876040516000815260200160405260405161137d9493929190611c07565b6020604051602081039080840390855afa15801561139f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ee576000600192509250506113f7565b80600092509250505b94509492505050565b6000600481111561141457611413612052565b5b81600481111561142757611426612052565b5b1415611432576115d2565b6001600481111561144657611445612052565b5b81600481111561145957611458612052565b5b141561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190611c6e565b60405180910390fd5b600260048111156114ae576114ad612052565b5b8160048111156114c1576114c0612052565b5b1415611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990611cce565b60405180910390fd5b6003600481111561151657611515612052565b5b81600481111561152957611528612052565b5b141561156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190611d4e565b60405180910390fd5b60048081111561157d5761157c612052565b5b8160048111156115905761158f612052565b5b14156115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890611d6e565b60405180910390fd5b5b50565b6000813590506115e481612547565b92915050565b6000813590506115f98161255e565b92915050565b60008135905061160e81612575565b92915050565b6000813590506116238161258c565b92915050565b60006020828403121561163f5761163e6120b0565b5b600061164d848285016115d5565b91505092915050565b6000806040838503121561166d5761166c6120b0565b5b600061167b858286016115d5565b925050602061168c858286016115d5565b9150509250929050565b6000806000606084860312156116af576116ae6120b0565b5b60006116bd868287016115d5565b93505060206116ce868287016115d5565b92505060406116df868287016115ff565b9150509250925092565b600080600080600080600060e0888a031215611708576117076120b0565b5b60006117168a828b016115d5565b97505060206117278a828b016115d5565b96505060406117388a828b016115ff565b95505060606117498a828b016115ff565b945050608061175a8a828b01611614565b93505060a061176b8a828b016115ea565b92505060c061177c8a828b016115ea565b91505092959891949750929550565b600080604083850312156117a2576117a16120b0565b5b60006117b0858286016115d5565b92505060206117c1858286016115ff565b9150509250929050565b6000602082840312156117e1576117e06120b0565b5b60006117ef848285016115ff565b91505092915050565b61180181611f55565b82525050565b61181081611f67565b82525050565b61181f81611f73565b82525050565b61183661183182611f73565b612019565b82525050565b600061184782611ea4565b6118518185611eaf565b9350611861818560208601611fb4565b61186a816120b5565b840191505092915050565b6000611882601883611eaf565b915061188d826120c6565b602082019050919050565b60006118a5602383611eaf565b91506118b0826120ef565b604082019050919050565b60006118c8602283611eaf565b91506118d38261213e565b604082019050919050565b60006118eb601f83611eaf565b91506118f68261218d565b602082019050919050565b600061190e602283611eaf565b9150611919826121b6565b604082019050919050565b6000611931600283611ec0565b915061193c82612205565b600282019050919050565b6000611954601d83611eaf565b915061195f8261222e565b602082019050919050565b6000611977602683611eaf565b915061198282612257565b604082019050919050565b600061199a602283611eaf565b91506119a5826122a6565b604082019050919050565b60006119bd602283611eaf565b91506119c8826122f5565b604082019050919050565b60006119e0601e83611eaf565b91506119eb82612344565b602082019050919050565b6000611a03602883611eaf565b9150611a0e8261236d565b604082019050919050565b6000611a26602483611eaf565b9150611a31826123bc565b604082019050919050565b6000611a49602183611eaf565b9150611a548261240b565b604082019050919050565b6000611a6c602583611eaf565b9150611a778261245a565b604082019050919050565b6000611a8f602483611eaf565b9150611a9a826124a9565b604082019050919050565b6000611ab2602583611eaf565b9150611abd826124f8565b604082019050919050565b611ad181611f9d565b82525050565b611ae081611fa7565b82525050565b6000611af182611924565b9150611afd8285611825565b602082019150611b0d8284611825565b6020820191508190509392505050565b6000602082019050611b326000830184611807565b92915050565b6000602082019050611b4d6000830184611816565b92915050565b600060c082019050611b686000830189611816565b611b7560208301886117f8565b611b8260408301876117f8565b611b8f6060830186611ac8565b611b9c6080830185611ac8565b611ba960a0830184611ac8565b979650505050505050565b600060a082019050611bc96000830188611816565b611bd66020830187611816565b611be36040830186611816565b611bf06060830185611ac8565b611bfd60808301846117f8565b9695505050505050565b6000608082019050611c1c6000830187611816565b611c296020830186611ad7565b611c366040830185611816565b611c436060830184611816565b95945050505050565b60006020820190508181036000830152611c66818461183c565b905092915050565b60006020820190508181036000830152611c8781611875565b9050919050565b60006020820190508181036000830152611ca781611898565b9050919050565b60006020820190508181036000830152611cc7816118bb565b9050919050565b60006020820190508181036000830152611ce7816118de565b9050919050565b60006020820190508181036000830152611d0781611901565b9050919050565b60006020820190508181036000830152611d2781611947565b9050919050565b60006020820190508181036000830152611d478161196a565b9050919050565b60006020820190508181036000830152611d678161198d565b9050919050565b60006020820190508181036000830152611d87816119b0565b9050919050565b60006020820190508181036000830152611da7816119d3565b9050919050565b60006020820190508181036000830152611dc7816119f6565b9050919050565b60006020820190508181036000830152611de781611a19565b9050919050565b60006020820190508181036000830152611e0781611a3c565b9050919050565b60006020820190508181036000830152611e2781611a5f565b9050919050565b60006020820190508181036000830152611e4781611a82565b9050919050565b60006020820190508181036000830152611e6781611aa5565b9050919050565b6000602082019050611e836000830184611ac8565b92915050565b6000602082019050611e9e6000830184611ad7565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611ed682611f9d565b9150611ee183611f9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611f1657611f15612023565b5b828201905092915050565b6000611f2c82611f9d565b9150611f3783611f9d565b925082821015611f4a57611f49612023565b5b828203905092915050565b6000611f6082611f7d565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611fd2578082015181840152602081019050611fb7565b83811115611fe1576000848401525b50505050565b60006002820490506001821680611fff57607f821691505b6020821081141561201357612012612081565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61255081611f55565b811461255b57600080fd5b50565b61256781611f73565b811461257257600080fd5b50565b61257e81611f9d565b811461258957600080fd5b50565b61259581611fa7565b81146125a057600080fd5b5056fea2646970667358221220d38df5f59eddcd6610287c9ca81dcc367f54c781a95eefe345ec478827a63c4864736f6c63430008070033

Deployed ByteCode Sourcemap

42322:197:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6996:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9163:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8116:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9814:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7958:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41562:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10715:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17653:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8287:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18063:368;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41304:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7215:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11433:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8627:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40593:645;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8865:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6996:100;7050:13;7083:5;7076:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6996:100;:::o;9163:169::-;9246:4;9263:39;9272:12;:10;:12::i;:::-;9286:7;9295:6;9263:8;:39::i;:::-;9320:4;9313:11;;9163:169;;;;:::o;8116:108::-;8177:7;8204:12;;8197:19;;8116:108;:::o;9814:492::-;9954:4;9971:36;9981:6;9989:9;10000:6;9971:9;:36::i;:::-;10020:24;10047:11;:19;10059:6;10047:19;;;;;;;;;;;;;;;:33;10067:12;:10;:12::i;:::-;10047:33;;;;;;;;;;;;;;;;10020:60;;10119:6;10099:16;:26;;10091:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;10206:57;10215:6;10223:12;:10;:12::i;:::-;10256:6;10237:16;:25;10206:8;:57::i;:::-;10294:4;10287:11;;;9814:492;;;;;:::o;7958:93::-;8016:5;8041:2;8034:9;;7958:93;:::o;41562:115::-;41622:7;41649:20;:18;:20::i;:::-;41642:27;;41562:115;:::o;10715:215::-;10803:4;10820:80;10829:12;:10;:12::i;:::-;10843:7;10889:10;10852:11;:25;10864:12;:10;:12::i;:::-;10852:25;;;;;;;;;;;;;;;:34;10878:7;10852:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10820:8;:80::i;:::-;10918:4;10911:11;;10715:215;;;;:::o;17653:91::-;17709:27;17715:12;:10;:12::i;:::-;17729:6;17709:5;:27::i;:::-;17653:91;:::o;8287:127::-;8361:7;8388:9;:18;8398:7;8388:18;;;;;;;;;;;;;;;;8381:25;;8287:127;;;:::o;18063:368::-;18140:24;18167:32;18177:7;18186:12;:10;:12::i;:::-;18167:9;:32::i;:::-;18140:59;;18238:6;18218:16;:26;;18210:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;18321:58;18330:7;18339:12;:10;:12::i;:::-;18372:6;18353:16;:25;18321:8;:58::i;:::-;18401:22;18407:7;18416:6;18401:5;:22::i;:::-;18129:302;18063:368;;:::o;41304:128::-;41373:7;41400:24;:7;:14;41408:5;41400:14;;;;;;;;;;;;;;;:22;:24::i;:::-;41393:31;;41304:128;;;:::o;7215:104::-;7271:13;7304:7;7297:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7215:104;:::o;11433:413::-;11526:4;11543:24;11570:11;:25;11582:12;:10;:12::i;:::-;11570:25;;;;;;;;;;;;;;;:34;11596:7;11570:34;;;;;;;;;;;;;;;;11543:61;;11643:15;11623:16;:35;;11615:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11736:67;11745:12;:10;:12::i;:::-;11759:7;11787:15;11768:16;:34;11736:8;:67::i;:::-;11834:4;11827:11;;;11433:413;;;;:::o;8627:175::-;8713:4;8730:42;8740:12;:10;:12::i;:::-;8754:9;8765:6;8730:9;:42::i;:::-;8790:4;8783:11;;8627:175;;;;:::o;40593:645::-;40837:8;40818:15;:27;;40810:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40892:18;40934:16;40952:5;40959:7;40968:5;40975:16;40985:5;40975:9;:16::i;:::-;40993:8;40923:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40913:90;;;;;;40892:111;;41016:12;41031:28;41048:10;41031:16;:28::i;:::-;41016:43;;41072:14;41089:28;41103:4;41109:1;41112;41115;41089:13;:28::i;:::-;41072:45;;41146:5;41136:15;;:6;:15;;;41128:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41199:31;41208:5;41215:7;41224:5;41199:8;:31::i;:::-;40799:439;;;40593:645;;;;;;;:::o;8865:151::-;8954:7;8981:11;:18;8993:5;8981:18;;;;;;;;;;;;;;;:27;9000:7;8981:27;;;;;;;;;;;;;;;;8974:34;;8865:151;;;;:::o;4444:98::-;4497:7;4524:10;4517:17;;4444:98;:::o;15117:380::-;15270:1;15253:19;;:5;:19;;;;15245:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15351:1;15332:21;;:7;:21;;;;15324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15435:6;15405:11;:18;15417:5;15405:18;;;;;;;;;;;;;;;:27;15424:7;15405:27;;;;;;;;;;;;;;;:36;;;;15473:7;15457:32;;15466:5;15457:32;;;15482:6;15457:32;;;;;;:::i;:::-;;;;;;;;15117:380;;;:::o;12336:733::-;12494:1;12476:20;;:6;:20;;;;12468:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12578:1;12557:23;;:9;:23;;;;12549:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12633:47;12654:6;12662:9;12673:6;12633:20;:47::i;:::-;12693:21;12717:9;:17;12727:6;12717:17;;;;;;;;;;;;;;;;12693:41;;12770:6;12753:13;:23;;12745:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12891:6;12875:13;:22;12855:9;:17;12865:6;12855:17;;;;;;;;;;;;;;;:42;;;;12943:6;12919:9;:20;12929:9;12919:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12984:9;12967:35;;12976:6;12967:35;;;12995:6;12967:35;;;;;;:::i;:::-;;;;;;;;13015:46;13035:6;13043:9;13054:6;13015:19;:46::i;:::-;12457:612;12336:733;;;:::o;35902:314::-;35955:7;35996:12;35979:29;;35987:4;35979:29;;;:66;;;;;36029:16;36012:13;:33;35979:66;35975:234;;;36069:24;36062:31;;;;35975:234;36133:64;36155:10;36167:12;36181:15;36133:21;:64::i;:::-;36126:71;;35902:314;;:::o;14088:591::-;14191:1;14172:21;;:7;:21;;;;14164:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14244:49;14265:7;14282:1;14286:6;14244:20;:49::i;:::-;14306:22;14331:9;:18;14341:7;14331:18;;;;;;;;;;;;;;;;14306:43;;14386:6;14368:14;:24;;14360:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14505:6;14488:14;:23;14467:9;:18;14477:7;14467:18;;;;;;;;;;;;;;;:44;;;;14549:6;14533:12;;:22;;;;;;;:::i;:::-;;;;;;;;14599:1;14573:37;;14582:7;14573:37;;;14603:6;14573:37;;;;;;:::i;:::-;;;;;;;;14623:48;14643:7;14660:1;14664:6;14623:19;:48::i;:::-;14153:526;14088:591;;:::o;38189:114::-;38254:7;38281;:14;;;38274:21;;38189:114;;;:::o;41815:207::-;41875:15;41903:30;41936:7;:14;41944:5;41936:14;;;;;;;;;;;;;;;41903:47;;41971:15;:5;:13;:15::i;:::-;41961:25;;41997:17;:5;:15;:17::i;:::-;41892:130;41815:207;;;:::o;37129:167::-;37206:7;37233:55;37255:20;:18;:20::i;:::-;37277:10;37233:21;:55::i;:::-;37226:62;;37129:167;;;:::o;30697:279::-;30825:7;30846:17;30865:18;30887:25;30898:4;30904:1;30907;30910;30887:10;:25::i;:::-;30845:67;;;;30923:18;30935:5;30923:11;:18::i;:::-;30959:9;30952:16;;;;30697:279;;;;;;:::o;16097:125::-;;;;:::o;16826:124::-;;;;:::o;36224:263::-;36368:7;36416:8;36426;36436:11;36449:13;36472:4;36405:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36395:84;;;;;;36388:91;;36224:263;;;;;:::o;38311:127::-;38418:1;38400:7;:14;;;:19;;;;;;;;;;;38311:127;:::o;32388:196::-;32481:7;32547:15;32564:10;32518:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32508:68;;;;;;32501:75;;32388:196;;;;:::o;28926:1632::-;29057:7;29066:12;29991:66;29986:1;29978:10;;:79;29974:163;;;30090:1;30094:30;30074:51;;;;;;29974:163;30156:2;30151:1;:7;;;;:18;;;;;30167:2;30162:1;:7;;;;30151:18;30147:102;;;30202:1;30206:30;30186:51;;;;;;30147:102;30346:14;30363:24;30373:4;30379:1;30382;30385;30363:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30346:41;;30420:1;30402:20;;:6;:20;;;30398:103;;;30455:1;30459:29;30439:50;;;;;;;30398:103;30521:6;30529:20;30513:37;;;;;28926:1632;;;;;;;;:::o;23588:643::-;23666:20;23657:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;23653:571;;;23703:7;;23653:571;23764:29;23755:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;23751:473;;;23810:34;;;;;;;;;;:::i;:::-;;;;;;;;23751:473;23875:35;23866:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;23862:362;;;23927:41;;;;;;;;;;:::i;:::-;;;;;;;;23862:362;23999:30;23990:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;23986:238;;;24046:44;;;;;;;;;;:::i;:::-;;;;;;;;23986:238;24121:30;24112:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;24108:116;;;24168:44;;;;;;;;;;:::i;:::-;;;;;;;;24108:116;23588:643;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:::-;343:5;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;297:139;;;;:::o;442:135::-;486:5;524:6;511:20;502:29;;540:31;565:5;540:31;:::i;:::-;442:135;;;;:::o;583:329::-;642:6;691:2;679:9;670:7;666:23;662:32;659:119;;;697:79;;:::i;:::-;659:119;817:1;842:53;887:7;878:6;867:9;863:22;842:53;:::i;:::-;832:63;;788:117;583:329;;;;:::o;918:474::-;986:6;994;1043:2;1031:9;1022:7;1018:23;1014:32;1011:119;;;1049:79;;:::i;:::-;1011:119;1169:1;1194:53;1239:7;1230:6;1219:9;1215:22;1194:53;:::i;:::-;1184:63;;1140:117;1296:2;1322:53;1367:7;1358:6;1347:9;1343:22;1322:53;:::i;:::-;1312:63;;1267:118;918:474;;;;;:::o;1398:619::-;1475:6;1483;1491;1540:2;1528:9;1519:7;1515:23;1511:32;1508:119;;;1546:79;;:::i;:::-;1508:119;1666:1;1691:53;1736:7;1727:6;1716:9;1712:22;1691:53;:::i;:::-;1681:63;;1637:117;1793:2;1819:53;1864:7;1855:6;1844:9;1840:22;1819:53;:::i;:::-;1809:63;;1764:118;1921:2;1947:53;1992:7;1983:6;1972:9;1968:22;1947:53;:::i;:::-;1937:63;;1892:118;1398:619;;;;;:::o;2023:1199::-;2134:6;2142;2150;2158;2166;2174;2182;2231:3;2219:9;2210:7;2206:23;2202:33;2199:120;;;2238:79;;:::i;:::-;2199:120;2358:1;2383:53;2428:7;2419:6;2408:9;2404:22;2383:53;:::i;:::-;2373:63;;2329:117;2485:2;2511:53;2556:7;2547:6;2536:9;2532:22;2511:53;:::i;:::-;2501:63;;2456:118;2613:2;2639:53;2684:7;2675:6;2664:9;2660:22;2639:53;:::i;:::-;2629:63;;2584:118;2741:2;2767:53;2812:7;2803:6;2792:9;2788:22;2767:53;:::i;:::-;2757:63;;2712:118;2869:3;2896:51;2939:7;2930:6;2919:9;2915:22;2896:51;:::i;:::-;2886:61;;2840:117;2996:3;3023:53;3068:7;3059:6;3048:9;3044:22;3023:53;:::i;:::-;3013:63;;2967:119;3125:3;3152:53;3197:7;3188:6;3177:9;3173:22;3152:53;:::i;:::-;3142:63;;3096:119;2023:1199;;;;;;;;;;:::o;3228:474::-;3296:6;3304;3353:2;3341:9;3332:7;3328:23;3324:32;3321:119;;;3359:79;;:::i;:::-;3321:119;3479:1;3504:53;3549:7;3540:6;3529:9;3525:22;3504:53;:::i;:::-;3494:63;;3450:117;3606:2;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;:::i;:::-;3622:63;;3577:118;3228:474;;;;;:::o;3708:329::-;3767:6;3816:2;3804:9;3795:7;3791:23;3787:32;3784:119;;;3822:79;;:::i;:::-;3784:119;3942:1;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3913:117;3708:329;;;;:::o;4043:118::-;4130:24;4148:5;4130:24;:::i;:::-;4125:3;4118:37;4043:118;;:::o;4167:109::-;4248:21;4263:5;4248:21;:::i;:::-;4243:3;4236:34;4167:109;;:::o;4282:118::-;4369:24;4387:5;4369:24;:::i;:::-;4364:3;4357:37;4282:118;;:::o;4406:157::-;4511:45;4531:24;4549:5;4531:24;:::i;:::-;4511:45;:::i;:::-;4506:3;4499:58;4406:157;;:::o;4569:364::-;4657:3;4685:39;4718:5;4685:39;:::i;:::-;4740:71;4804:6;4799:3;4740:71;:::i;:::-;4733:78;;4820:52;4865:6;4860:3;4853:4;4846:5;4842:16;4820:52;:::i;:::-;4897:29;4919:6;4897:29;:::i;:::-;4892:3;4888:39;4881:46;;4661:272;4569:364;;;;:::o;4939:366::-;5081:3;5102:67;5166:2;5161:3;5102:67;:::i;:::-;5095:74;;5178:93;5267:3;5178:93;:::i;:::-;5296:2;5291:3;5287:12;5280:19;;4939:366;;;:::o;5311:::-;5453:3;5474:67;5538:2;5533:3;5474:67;:::i;:::-;5467:74;;5550:93;5639:3;5550:93;:::i;:::-;5668:2;5663:3;5659:12;5652:19;;5311:366;;;:::o;5683:::-;5825:3;5846:67;5910:2;5905:3;5846:67;:::i;:::-;5839:74;;5922:93;6011:3;5922:93;:::i;:::-;6040:2;6035:3;6031:12;6024:19;;5683:366;;;:::o;6055:::-;6197:3;6218:67;6282:2;6277:3;6218:67;:::i;:::-;6211:74;;6294:93;6383:3;6294:93;:::i;:::-;6412:2;6407:3;6403:12;6396:19;;6055:366;;;:::o;6427:::-;6569:3;6590:67;6654:2;6649:3;6590:67;:::i;:::-;6583:74;;6666:93;6755:3;6666:93;:::i;:::-;6784:2;6779:3;6775:12;6768:19;;6427:366;;;:::o;6799:400::-;6959:3;6980:84;7062:1;7057:3;6980:84;:::i;:::-;6973:91;;7073:93;7162:3;7073:93;:::i;:::-;7191:1;7186:3;7182:11;7175:18;;6799:400;;;:::o;7205:366::-;7347:3;7368:67;7432:2;7427:3;7368:67;:::i;:::-;7361:74;;7444:93;7533:3;7444:93;:::i;:::-;7562:2;7557:3;7553:12;7546:19;;7205:366;;;:::o;7577:::-;7719:3;7740:67;7804:2;7799:3;7740:67;:::i;:::-;7733:74;;7816:93;7905:3;7816:93;:::i;:::-;7934:2;7929:3;7925:12;7918:19;;7577:366;;;:::o;7949:::-;8091:3;8112:67;8176:2;8171:3;8112:67;:::i;:::-;8105:74;;8188:93;8277:3;8188:93;:::i;:::-;8306:2;8301:3;8297:12;8290:19;;7949:366;;;:::o;8321:::-;8463:3;8484:67;8548:2;8543:3;8484:67;:::i;:::-;8477:74;;8560:93;8649:3;8560:93;:::i;:::-;8678:2;8673:3;8669:12;8662:19;;8321:366;;;:::o;8693:::-;8835:3;8856:67;8920:2;8915:3;8856:67;:::i;:::-;8849:74;;8932:93;9021:3;8932:93;:::i;:::-;9050:2;9045:3;9041:12;9034:19;;8693:366;;;:::o;9065:::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:::-;9579:3;9600:67;9664:2;9659:3;9600:67;:::i;:::-;9593:74;;9676:93;9765:3;9676:93;:::i;:::-;9794:2;9789:3;9785:12;9778:19;;9437:366;;;:::o;9809:::-;9951:3;9972:67;10036:2;10031:3;9972:67;:::i;:::-;9965:74;;10048:93;10137:3;10048:93;:::i;:::-;10166:2;10161:3;10157:12;10150:19;;9809:366;;;:::o;10181:::-;10323:3;10344:67;10408:2;10403:3;10344:67;:::i;:::-;10337:74;;10420:93;10509:3;10420:93;:::i;:::-;10538:2;10533:3;10529:12;10522:19;;10181:366;;;:::o;10553:::-;10695:3;10716:67;10780:2;10775:3;10716:67;:::i;:::-;10709:74;;10792:93;10881:3;10792:93;:::i;:::-;10910:2;10905:3;10901:12;10894:19;;10553:366;;;:::o;10925:::-;11067:3;11088:67;11152:2;11147:3;11088:67;:::i;:::-;11081:74;;11164:93;11253:3;11164:93;:::i;:::-;11282:2;11277:3;11273:12;11266:19;;10925:366;;;:::o;11297:118::-;11384:24;11402:5;11384:24;:::i;:::-;11379:3;11372:37;11297:118;;:::o;11421:112::-;11504:22;11520:5;11504:22;:::i;:::-;11499:3;11492:35;11421:112;;:::o;11539:663::-;11780:3;11802:148;11946:3;11802:148;:::i;:::-;11795:155;;11960:75;12031:3;12022:6;11960:75;:::i;:::-;12060:2;12055:3;12051:12;12044:19;;12073:75;12144:3;12135:6;12073:75;:::i;:::-;12173:2;12168:3;12164:12;12157:19;;12193:3;12186:10;;11539:663;;;;;:::o;12208:210::-;12295:4;12333:2;12322:9;12318:18;12310:26;;12346:65;12408:1;12397:9;12393:17;12384:6;12346:65;:::i;:::-;12208:210;;;;:::o;12424:222::-;12517:4;12555:2;12544:9;12540:18;12532:26;;12568:71;12636:1;12625:9;12621:17;12612:6;12568:71;:::i;:::-;12424:222;;;;:::o;12652:775::-;12885:4;12923:3;12912:9;12908:19;12900:27;;12937:71;13005:1;12994:9;12990:17;12981:6;12937:71;:::i;:::-;13018:72;13086:2;13075:9;13071:18;13062:6;13018:72;:::i;:::-;13100;13168:2;13157:9;13153:18;13144:6;13100:72;:::i;:::-;13182;13250:2;13239:9;13235:18;13226:6;13182:72;:::i;:::-;13264:73;13332:3;13321:9;13317:19;13308:6;13264:73;:::i;:::-;13347;13415:3;13404:9;13400:19;13391:6;13347:73;:::i;:::-;12652:775;;;;;;;;;:::o;13433:664::-;13638:4;13676:3;13665:9;13661:19;13653:27;;13690:71;13758:1;13747:9;13743:17;13734:6;13690:71;:::i;:::-;13771:72;13839:2;13828:9;13824:18;13815:6;13771:72;:::i;:::-;13853;13921:2;13910:9;13906:18;13897:6;13853:72;:::i;:::-;13935;14003:2;13992:9;13988:18;13979:6;13935:72;:::i;:::-;14017:73;14085:3;14074:9;14070:19;14061:6;14017:73;:::i;:::-;13433:664;;;;;;;;:::o;14103:545::-;14276:4;14314:3;14303:9;14299:19;14291:27;;14328:71;14396:1;14385:9;14381:17;14372:6;14328:71;:::i;:::-;14409:68;14473:2;14462:9;14458:18;14449:6;14409:68;:::i;:::-;14487:72;14555:2;14544:9;14540:18;14531:6;14487:72;:::i;:::-;14569;14637:2;14626:9;14622:18;14613:6;14569:72;:::i;:::-;14103:545;;;;;;;:::o;14654:313::-;14767:4;14805:2;14794:9;14790:18;14782:26;;14854:9;14848:4;14844:20;14840:1;14829:9;14825:17;14818:47;14882:78;14955:4;14946:6;14882:78;:::i;:::-;14874:86;;14654:313;;;;:::o;14973:419::-;15139:4;15177:2;15166:9;15162:18;15154:26;;15226:9;15220:4;15216:20;15212:1;15201:9;15197:17;15190:47;15254:131;15380:4;15254:131;:::i;:::-;15246:139;;14973:419;;;:::o;15398:::-;15564:4;15602:2;15591:9;15587:18;15579:26;;15651:9;15645:4;15641:20;15637:1;15626:9;15622:17;15615:47;15679:131;15805:4;15679:131;:::i;:::-;15671:139;;15398:419;;;:::o;15823:::-;15989:4;16027:2;16016:9;16012:18;16004:26;;16076:9;16070:4;16066:20;16062:1;16051:9;16047:17;16040:47;16104:131;16230:4;16104:131;:::i;:::-;16096:139;;15823:419;;;:::o;16248:::-;16414:4;16452:2;16441:9;16437:18;16429:26;;16501:9;16495:4;16491:20;16487:1;16476:9;16472:17;16465:47;16529:131;16655:4;16529:131;:::i;:::-;16521:139;;16248:419;;;:::o;16673:::-;16839:4;16877:2;16866:9;16862:18;16854:26;;16926:9;16920:4;16916:20;16912:1;16901:9;16897:17;16890:47;16954:131;17080:4;16954:131;:::i;:::-;16946:139;;16673:419;;;:::o;17098:::-;17264:4;17302:2;17291:9;17287:18;17279:26;;17351:9;17345:4;17341:20;17337:1;17326:9;17322:17;17315:47;17379:131;17505:4;17379:131;:::i;:::-;17371:139;;17098:419;;;:::o;17523:::-;17689:4;17727:2;17716:9;17712:18;17704:26;;17776:9;17770:4;17766:20;17762:1;17751:9;17747:17;17740:47;17804:131;17930:4;17804:131;:::i;:::-;17796:139;;17523:419;;;:::o;17948:::-;18114:4;18152:2;18141:9;18137:18;18129:26;;18201:9;18195:4;18191:20;18187:1;18176:9;18172:17;18165:47;18229:131;18355:4;18229:131;:::i;:::-;18221:139;;17948:419;;;:::o;18373:::-;18539:4;18577:2;18566:9;18562:18;18554:26;;18626:9;18620:4;18616:20;18612:1;18601:9;18597:17;18590:47;18654:131;18780:4;18654:131;:::i;:::-;18646:139;;18373:419;;;:::o;18798:::-;18964:4;19002:2;18991:9;18987:18;18979:26;;19051:9;19045:4;19041:20;19037:1;19026:9;19022:17;19015:47;19079:131;19205:4;19079:131;:::i;:::-;19071:139;;18798:419;;;:::o;19223:::-;19389:4;19427:2;19416:9;19412:18;19404:26;;19476:9;19470:4;19466:20;19462:1;19451:9;19447:17;19440:47;19504:131;19630:4;19504:131;:::i;:::-;19496:139;;19223:419;;;:::o;19648:::-;19814:4;19852:2;19841:9;19837:18;19829:26;;19901:9;19895:4;19891:20;19887:1;19876:9;19872:17;19865:47;19929:131;20055:4;19929:131;:::i;:::-;19921:139;;19648:419;;;:::o;20073:::-;20239:4;20277:2;20266:9;20262:18;20254:26;;20326:9;20320:4;20316:20;20312:1;20301:9;20297:17;20290:47;20354:131;20480:4;20354:131;:::i;:::-;20346:139;;20073:419;;;:::o;20498:::-;20664:4;20702:2;20691:9;20687:18;20679:26;;20751:9;20745:4;20741:20;20737:1;20726:9;20722:17;20715:47;20779:131;20905:4;20779:131;:::i;:::-;20771:139;;20498:419;;;:::o;20923:::-;21089:4;21127:2;21116:9;21112:18;21104:26;;21176:9;21170:4;21166:20;21162:1;21151:9;21147:17;21140:47;21204:131;21330:4;21204:131;:::i;:::-;21196:139;;20923:419;;;:::o;21348:::-;21514:4;21552:2;21541:9;21537:18;21529:26;;21601:9;21595:4;21591:20;21587:1;21576:9;21572:17;21565:47;21629:131;21755:4;21629:131;:::i;:::-;21621:139;;21348:419;;;:::o;21773:222::-;21866:4;21904:2;21893:9;21889:18;21881:26;;21917:71;21985:1;21974:9;21970:17;21961:6;21917:71;:::i;:::-;21773:222;;;;:::o;22001:214::-;22090:4;22128:2;22117:9;22113:18;22105:26;;22141:67;22205:1;22194:9;22190:17;22181:6;22141:67;:::i;:::-;22001:214;;;;:::o;22302:99::-;22354:6;22388:5;22382:12;22372:22;;22302:99;;;:::o;22407:169::-;22491:11;22525:6;22520:3;22513:19;22565:4;22560:3;22556:14;22541:29;;22407:169;;;;:::o;22582:148::-;22684:11;22721:3;22706:18;;22582:148;;;;:::o;22736:305::-;22776:3;22795:20;22813:1;22795:20;:::i;:::-;22790:25;;22829:20;22847:1;22829:20;:::i;:::-;22824:25;;22983:1;22915:66;22911:74;22908:1;22905:81;22902:107;;;22989:18;;:::i;:::-;22902:107;23033:1;23030;23026:9;23019:16;;22736:305;;;;:::o;23047:191::-;23087:4;23107:20;23125:1;23107:20;:::i;:::-;23102:25;;23141:20;23159:1;23141:20;:::i;:::-;23136:25;;23180:1;23177;23174:8;23171:34;;;23185:18;;:::i;:::-;23171:34;23230:1;23227;23223:9;23215:17;;23047:191;;;;:::o;23244:96::-;23281:7;23310:24;23328:5;23310:24;:::i;:::-;23299:35;;23244:96;;;:::o;23346:90::-;23380:7;23423:5;23416:13;23409:21;23398:32;;23346:90;;;:::o;23442:77::-;23479:7;23508:5;23497:16;;23442:77;;;:::o;23525:126::-;23562:7;23602:42;23595:5;23591:54;23580:65;;23525:126;;;:::o;23657:77::-;23694:7;23723:5;23712:16;;23657:77;;;:::o;23740:86::-;23775:7;23815:4;23808:5;23804:16;23793:27;;23740:86;;;:::o;23832:307::-;23900:1;23910:113;23924:6;23921:1;23918:13;23910:113;;;24009:1;24004:3;24000:11;23994:18;23990:1;23985:3;23981:11;23974:39;23946:2;23943:1;23939:10;23934:15;;23910:113;;;24041:6;24038:1;24035:13;24032:101;;;24121:1;24112:6;24107:3;24103:16;24096:27;24032:101;23881:258;23832:307;;;:::o;24145:320::-;24189:6;24226:1;24220:4;24216:12;24206:22;;24273:1;24267:4;24263:12;24294:18;24284:81;;24350:4;24342:6;24338:17;24328:27;;24284:81;24412:2;24404:6;24401:14;24381:18;24378:38;24375:84;;;24431:18;;:::i;:::-;24375:84;24196:269;24145:320;;;:::o;24471:79::-;24510:7;24539:5;24528:16;;24471:79;;;:::o;24556:180::-;24604:77;24601:1;24594:88;24701:4;24698:1;24691:15;24725:4;24722:1;24715:15;24742:180;24790:77;24787:1;24780:88;24887:4;24884:1;24877:15;24911:4;24908:1;24901:15;24928:180;24976:77;24973:1;24966:88;25073:4;25070:1;25063:15;25097:4;25094:1;25087:15;25237:117;25346:1;25343;25336:12;25360:102;25401:6;25452:2;25448:7;25443:2;25436:5;25432:14;25428:28;25418:38;;25360:102;;;:::o;25468:174::-;25608:26;25604:1;25596:6;25592:14;25585:50;25468:174;:::o;25648:222::-;25788:34;25784:1;25776:6;25772:14;25765:58;25857:5;25852:2;25844:6;25840:15;25833:30;25648:222;:::o;25876:221::-;26016:34;26012:1;26004:6;26000:14;25993:58;26085:4;26080:2;26072:6;26068:15;26061:29;25876:221;:::o;26103:181::-;26243:33;26239:1;26231:6;26227:14;26220:57;26103:181;:::o;26290:221::-;26430:34;26426:1;26418:6;26414:14;26407:58;26499:4;26494:2;26486:6;26482:15;26475:29;26290:221;:::o;26517:214::-;26657:66;26653:1;26645:6;26641:14;26634:90;26517:214;:::o;26737:179::-;26877:31;26873:1;26865:6;26861:14;26854:55;26737:179;:::o;26922:225::-;27062:34;27058:1;27050:6;27046:14;27039:58;27131:8;27126:2;27118:6;27114:15;27107:33;26922:225;:::o;27153:221::-;27293:34;27289:1;27281:6;27277:14;27270:58;27362:4;27357:2;27349:6;27345:15;27338:29;27153:221;:::o;27380:::-;27520:34;27516:1;27508:6;27504:14;27497:58;27589:4;27584:2;27576:6;27572:15;27565:29;27380:221;:::o;27607:180::-;27747:32;27743:1;27735:6;27731:14;27724:56;27607:180;:::o;27793:227::-;27933:34;27929:1;27921:6;27917:14;27910:58;28002:10;27997:2;27989:6;27985:15;27978:35;27793:227;:::o;28026:223::-;28166:34;28162:1;28154:6;28150:14;28143:58;28235:6;28230:2;28222:6;28218:15;28211:31;28026:223;:::o;28255:220::-;28395:34;28391:1;28383:6;28379:14;28372:58;28464:3;28459:2;28451:6;28447:15;28440:28;28255:220;:::o;28481:224::-;28621:34;28617:1;28609:6;28605:14;28598:58;28690:7;28685:2;28677:6;28673:15;28666:32;28481:224;:::o;28711:223::-;28851:34;28847:1;28839:6;28835:14;28828:58;28920:6;28915:2;28907:6;28903:15;28896:31;28711:223;:::o;28940:224::-;29080:34;29076:1;29068:6;29064:14;29057:58;29149:7;29144:2;29136:6;29132:15;29125:32;28940:224;:::o;29170:122::-;29243:24;29261:5;29243:24;:::i;:::-;29236:5;29233:35;29223:63;;29282:1;29279;29272:12;29223:63;29170:122;:::o;29298:::-;29371:24;29389:5;29371:24;:::i;:::-;29364:5;29361:35;29351:63;;29410:1;29407;29400:12;29351:63;29298:122;:::o;29426:::-;29499:24;29517:5;29499:24;:::i;:::-;29492:5;29489:35;29479:63;;29538:1;29535;29528:12;29479:63;29426:122;:::o;29554:118::-;29625:22;29641:5;29625:22;:::i;:::-;29618:5;29615:33;29605:61;;29662:1;29659;29652:12;29605:61;29554:118;:::o

Swarm Source

ipfs://d38df5f59eddcd6610287c9ca81dcc367f54c781a95eefe345ec478827a63c48
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.