ETH Price: $3,628.23 (-1.10%)

Token

ERC-20: CBPAY (CBPAY)

Overview

Max Total Supply

2,000,000,000 CBPAY

Holders

716

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
CBPAY

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2024-08-28
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

    /**
     * @dev Returns the 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: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


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

// File: @openzeppelin/contracts/utils/Context.sol


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

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 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 ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-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 ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 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: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @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 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.
 */
abstract contract ERC20 is Context, 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 EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `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);
    }

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

        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));
        }
        _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);
    }

    /**
     * @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: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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: contracts/cbpayTokenTest.sol


// Compatible with OpenZeppelin Contracts ^5.0.0
// Version 1.0
pragma solidity ^0.8.20;



contract CBPAY is ERC20, Ownable {
    mapping(address => bool) public _admins;
    
    uint256 private immutable _cap = 40000000000 * 10 ** decimals();

    event TokensMinted(address indexed to, uint256 amount);
    event TokensBurned(address indexed from, uint256 amount);
 
    modifier onlyAdmin() {
        require(_admins[_msgSender()], "Only Admin can execute this function");
        _;
    }

    function cap() public view returns(uint256) {
        return _cap;
    }

    function addAdmin(address newAdmin) public onlyOwner {
        require(!_admins[newAdmin], "Address is already an admin");
        _admins[newAdmin] = true;
    }

    function removeAdmin(address removedAdmin) public onlyOwner {
        require(_admins[removedAdmin], "Address is not an admin");
        _admins[removedAdmin] = false;
    }

    constructor() ERC20("CBPAY", "CBPAY") Ownable(_msgSender()) {}

    function mint(address to, uint256 amount) public onlyAdmin {
        require(to != address(0), "Mint address is not valid");
        require(to != address(this), "Cannot mint tokens to this contract");
        require(totalSupply() + amount <= cap(), "You have passed the cap");
        _mint(to, amount);
        emit TokensMinted(to, amount);
    }

    function burn(address burnAddress, uint256 value) public onlyAdmin {
        require(burnAddress != address(this), "Cannot burn tokens to this contract");
        _burn(burnAddress, value);
        emit TokensBurned(burnAddress, value);
    }

    function transferFrom(address from, address to, uint256 value) public override returns (bool) {
        require(to != address(this), "Cannot send tokens to this contract");
        return super.transferFrom(from, to, value);
    }

    function transfer(address to, uint256 value) public override returns (bool) {
        require(to != address(this), "Cannot send tokens to this contract");
        return super.transfer(to, value);
    }

    receive() external payable {
        revert("Cannot send ETH to this contract");
    }

    fallback() external payable {
        revert("Cannot send ETH to this contract");
    }
}

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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensMinted","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","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":"value","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":"address","name":"burnAddress","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"removedAdmin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"stateMutability":"payable","type":"receive"}]

60a0604052620000146200017760201b60201c565b600a620000229190620003e8565b6409502f900062000034919062000439565b6080908152503480156200004757600080fd5b50620000586200018060201b60201c565b6040518060400160405280600581526020017f43425041590000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f43425041590000000000000000000000000000000000000000000000000000008152508160039081620000d59190620006f4565b508060049081620000e79190620006f4565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200015f5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000156919062000820565b60405180910390fd5b62000170816200018860201b60201c565b506200083d565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620002dc57808604811115620002b457620002b36200024e565b5b6001851615620002c45780820291505b8081029050620002d4856200027d565b945062000294565b94509492505050565b600082620002f75760019050620003ca565b81620003075760009050620003ca565b81600181146200032057600281146200032b5762000361565b6001915050620003ca565b60ff84111562000340576200033f6200024e565b5b8360020a9150848211156200035a57620003596200024e565b5b50620003ca565b5060208310610133831016604e8410600b84101617156200039b5782820a9050838111156200039557620003946200024e565b5b620003ca565b620003aa84848460016200028a565b92509050818404811115620003c457620003c36200024e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620003f582620003d1565b91506200040283620003db565b9250620004317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620002e5565b905092915050565b60006200044682620003d1565b91506200045383620003d1565b92508282026200046381620003d1565b915082820484148315176200047d576200047c6200024e565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200050657607f821691505b6020821081036200051c576200051b620004be565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000547565b62000592868362000547565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620005d5620005cf620005c984620003d1565b620005aa565b620003d1565b9050919050565b6000819050919050565b620005f183620005b4565b620006096200060082620005dc565b84845462000554565b825550505050565b600090565b6200062062000611565b6200062d818484620005e6565b505050565b5b8181101562000655576200064960008262000616565b60018101905062000633565b5050565b601f821115620006a4576200066e8162000522565b620006798462000537565b8101602085101562000689578190505b620006a1620006988562000537565b83018262000632565b50505b505050565b600082821c905092915050565b6000620006c960001984600802620006a9565b1980831691505092915050565b6000620006e48383620006b6565b9150826002028217905092915050565b620006ff8262000484565b67ffffffffffffffff8111156200071b576200071a6200048f565b5b620007278254620004ed565b6200073482828562000659565b600060209050601f8311600181146200076c576000841562000757578287015190505b620007638582620006d6565b865550620007d3565b601f1984166200077c8662000522565b60005b82811015620007a6578489015182556001820191506020850194506020810190506200077f565b86831015620007c65784890151620007c2601f891682620006b6565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200080882620007db565b9050919050565b6200081a81620007fb565b82525050565b60006020820190506200083760008301846200080f565b92915050565b608051611f5c62000859600039600061073b0152611f5c6000f3fe60806040526004361061010d5760003560e01c8063704802751161009557806395d89b411161006457806395d89b41146103e55780639dc29fac14610410578063a9059cbb14610439578063dd62ed3e14610476578063f2fde38b146104b35761014d565b8063704802751461033d57806370a0823114610366578063715018a6146103a35780638da5cb5b146103ba5761014d565b806318160ddd116100dc57806318160ddd1461025657806323b872dd14610281578063313ce567146102be578063355274ea146102e957806340c10f19146103145761014d565b806306fdde0314610188578063095ea7b3146101b35780630d5e2053146101f05780631785f53c1461022d5761014d565b3661014d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014490611719565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f90611719565b60405180910390fd5b34801561019457600080fd5b5061019d6104dc565b6040516101aa91906117b8565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d59190611873565b61056e565b6040516101e791906118ce565b60405180910390f35b3480156101fc57600080fd5b50610217600480360381019061021291906118e9565b610591565b60405161022491906118ce565b60405180910390f35b34801561023957600080fd5b50610254600480360381019061024f91906118e9565b6105b1565b005b34801561026257600080fd5b5061026b6106a0565b6040516102789190611925565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190611940565b6106aa565b6040516102b591906118ce565b60405180910390f35b3480156102ca57600080fd5b506102d361072e565b6040516102e091906119af565b60405180910390f35b3480156102f557600080fd5b506102fe610737565b60405161030b9190611925565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190611873565b61075f565b005b34801561034957600080fd5b50610364600480360381019061035f91906118e9565b610987565b005b34801561037257600080fd5b5061038d600480360381019061038891906118e9565b610a77565b60405161039a9190611925565b60405180910390f35b3480156103af57600080fd5b506103b8610abf565b005b3480156103c657600080fd5b506103cf610ad3565b6040516103dc91906119d9565b60405180910390f35b3480156103f157600080fd5b506103fa610afd565b60405161040791906117b8565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190611873565b610b8f565b005b34801561044557600080fd5b50610460600480360381019061045b9190611873565b610cec565b60405161046d91906118ce565b60405180910390f35b34801561048257600080fd5b5061049d600480360381019061049891906119f4565b610d6e565b6040516104aa9190611925565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d591906118e9565b610df5565b005b6060600380546104eb90611a63565b80601f016020809104026020016040519081016040528092919081815260200182805461051790611a63565b80156105645780601f1061053957610100808354040283529160200191610564565b820191906000526020600020905b81548152906001019060200180831161054757829003601f168201915b5050505050905090565b600080610579610e7b565b9050610586818585610e83565b600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b6105b9610e95565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063c90611ae0565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361071a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071190611b72565b60405180910390fd5b610725848484610f1c565b90509392505050565b60006012905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6006600061076b610e7b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e990611c04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085890611c70565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690611d02565b60405180910390fd5b6108d7610737565b816108e06106a0565b6108ea9190611d51565b111561092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290611dd1565b60405180910390fd5b6109358282610f4b565b8173ffffffffffffffffffffffffffffffffffffffff167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a42738260405161097b9190611925565b60405180910390a25050565b61098f610e95565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390611e3d565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ac7610e95565b610ad16000610fcd565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b0c90611a63565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3890611a63565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b5050505050905090565b60066000610b9b610e7b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990611c04565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790611ecf565b60405180910390fd5b610c9a8282611093565b8173ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb682604051610ce09190611925565b60405180910390a25050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390611b72565b60405180910390fd5b610d668383611115565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610dfd610e95565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e6f5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e6691906119d9565b60405180910390fd5b610e7881610fcd565b50565b600033905090565b610e908383836001611138565b505050565b610e9d610e7b565b73ffffffffffffffffffffffffffffffffffffffff16610ebb610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610f1a57610ede610e7b565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f1191906119d9565b60405180910390fd5b565b600080610f27610e7b565b9050610f3485828561130f565b610f3f8585856113a3565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fbd5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610fb491906119d9565b60405180910390fd5b610fc960008383611497565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111055760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016110fc91906119d9565b60405180910390fd5b61111182600083611497565b5050565b600080611120610e7b565b905061112d8185856113a3565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111aa5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016111a191906119d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361121c5760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161121391906119d9565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611309578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113009190611925565b60405180910390a35b50505050565b600061131b8484610d6e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461139d578181101561138d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161138493929190611eef565b60405180910390fd5b61139c84848484036000611138565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114155760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161140c91906119d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114875760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161147e91906119d9565b60405180910390fd5b611492838383611497565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114e95780600260008282546114dd9190611d51565b925050819055506115bc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611575578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161156c93929190611eef565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116055780600260008282540392505081905550611652565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116af9190611925565b60405180910390a3505050565b600082825260208201905092915050565b7f43616e6e6f742073656e642045544820746f207468697320636f6e7472616374600082015250565b60006117036020836116bc565b915061170e826116cd565b602082019050919050565b60006020820190508181036000830152611732816116f6565b9050919050565b600081519050919050565b60005b83811015611762578082015181840152602081019050611747565b60008484015250505050565b6000601f19601f8301169050919050565b600061178a82611739565b61179481856116bc565b93506117a4818560208601611744565b6117ad8161176e565b840191505092915050565b600060208201905081810360008301526117d2818461177f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061180a826117df565b9050919050565b61181a816117ff565b811461182557600080fd5b50565b60008135905061183781611811565b92915050565b6000819050919050565b6118508161183d565b811461185b57600080fd5b50565b60008135905061186d81611847565b92915050565b6000806040838503121561188a576118896117da565b5b600061189885828601611828565b92505060206118a98582860161185e565b9150509250929050565b60008115159050919050565b6118c8816118b3565b82525050565b60006020820190506118e360008301846118bf565b92915050565b6000602082840312156118ff576118fe6117da565b5b600061190d84828501611828565b91505092915050565b61191f8161183d565b82525050565b600060208201905061193a6000830184611916565b92915050565b600080600060608486031215611959576119586117da565b5b600061196786828701611828565b935050602061197886828701611828565b92505060406119898682870161185e565b9150509250925092565b600060ff82169050919050565b6119a981611993565b82525050565b60006020820190506119c460008301846119a0565b92915050565b6119d3816117ff565b82525050565b60006020820190506119ee60008301846119ca565b92915050565b60008060408385031215611a0b57611a0a6117da565b5b6000611a1985828601611828565b9250506020611a2a85828601611828565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a7b57607f821691505b602082108103611a8e57611a8d611a34565b5b50919050565b7f41646472657373206973206e6f7420616e2061646d696e000000000000000000600082015250565b6000611aca6017836116bc565b9150611ad582611a94565b602082019050919050565b60006020820190508181036000830152611af981611abd565b9050919050565b7f43616e6e6f742073656e6420746f6b656e7320746f207468697320636f6e747260008201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b6000611b5c6023836116bc565b9150611b6782611b00565b604082019050919050565b60006020820190508181036000830152611b8b81611b4f565b9050919050565b7f4f6e6c792041646d696e2063616e206578656375746520746869732066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b6000611bee6024836116bc565b9150611bf982611b92565b604082019050919050565b60006020820190508181036000830152611c1d81611be1565b9050919050565b7f4d696e742061646472657373206973206e6f742076616c696400000000000000600082015250565b6000611c5a6019836116bc565b9150611c6582611c24565b602082019050919050565b60006020820190508181036000830152611c8981611c4d565b9050919050565b7f43616e6e6f74206d696e7420746f6b656e7320746f207468697320636f6e747260008201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b6000611cec6023836116bc565b9150611cf782611c90565b604082019050919050565b60006020820190508181036000830152611d1b81611cdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d5c8261183d565b9150611d678361183d565b9250828201905080821115611d7f57611d7e611d22565b5b92915050565b7f596f752068617665207061737365642074686520636170000000000000000000600082015250565b6000611dbb6017836116bc565b9150611dc682611d85565b602082019050919050565b60006020820190508181036000830152611dea81611dae565b9050919050565b7f4164647265737320697320616c726561647920616e2061646d696e0000000000600082015250565b6000611e27601b836116bc565b9150611e3282611df1565b602082019050919050565b60006020820190508181036000830152611e5681611e1a565b9050919050565b7f43616e6e6f74206275726e20746f6b656e7320746f207468697320636f6e747260008201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b6000611eb96023836116bc565b9150611ec482611e5d565b604082019050919050565b60006020820190508181036000830152611ee881611eac565b9050919050565b6000606082019050611f0460008301866119ca565b611f116020830185611916565b611f1e6040830184611916565b94935050505056fea2646970667358221220f489a2baa8aafb30d8d374cb3eab9f33adb32ae1d0efd3109fc962c0ab7191df64736f6c63430008140033

Deployed Bytecode

0x60806040526004361061010d5760003560e01c8063704802751161009557806395d89b411161006457806395d89b41146103e55780639dc29fac14610410578063a9059cbb14610439578063dd62ed3e14610476578063f2fde38b146104b35761014d565b8063704802751461033d57806370a0823114610366578063715018a6146103a35780638da5cb5b146103ba5761014d565b806318160ddd116100dc57806318160ddd1461025657806323b872dd14610281578063313ce567146102be578063355274ea146102e957806340c10f19146103145761014d565b806306fdde0314610188578063095ea7b3146101b35780630d5e2053146101f05780631785f53c1461022d5761014d565b3661014d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014490611719565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f90611719565b60405180910390fd5b34801561019457600080fd5b5061019d6104dc565b6040516101aa91906117b8565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d59190611873565b61056e565b6040516101e791906118ce565b60405180910390f35b3480156101fc57600080fd5b50610217600480360381019061021291906118e9565b610591565b60405161022491906118ce565b60405180910390f35b34801561023957600080fd5b50610254600480360381019061024f91906118e9565b6105b1565b005b34801561026257600080fd5b5061026b6106a0565b6040516102789190611925565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190611940565b6106aa565b6040516102b591906118ce565b60405180910390f35b3480156102ca57600080fd5b506102d361072e565b6040516102e091906119af565b60405180910390f35b3480156102f557600080fd5b506102fe610737565b60405161030b9190611925565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190611873565b61075f565b005b34801561034957600080fd5b50610364600480360381019061035f91906118e9565b610987565b005b34801561037257600080fd5b5061038d600480360381019061038891906118e9565b610a77565b60405161039a9190611925565b60405180910390f35b3480156103af57600080fd5b506103b8610abf565b005b3480156103c657600080fd5b506103cf610ad3565b6040516103dc91906119d9565b60405180910390f35b3480156103f157600080fd5b506103fa610afd565b60405161040791906117b8565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190611873565b610b8f565b005b34801561044557600080fd5b50610460600480360381019061045b9190611873565b610cec565b60405161046d91906118ce565b60405180910390f35b34801561048257600080fd5b5061049d600480360381019061049891906119f4565b610d6e565b6040516104aa9190611925565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d591906118e9565b610df5565b005b6060600380546104eb90611a63565b80601f016020809104026020016040519081016040528092919081815260200182805461051790611a63565b80156105645780601f1061053957610100808354040283529160200191610564565b820191906000526020600020905b81548152906001019060200180831161054757829003601f168201915b5050505050905090565b600080610579610e7b565b9050610586818585610e83565b600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b6105b9610e95565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063c90611ae0565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361071a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071190611b72565b60405180910390fd5b610725848484610f1c565b90509392505050565b60006012905090565b60007f0000000000000000000000000000000000000000813f3978f894098440000000905090565b6006600061076b610e7b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e990611c04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085890611c70565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690611d02565b60405180910390fd5b6108d7610737565b816108e06106a0565b6108ea9190611d51565b111561092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290611dd1565b60405180910390fd5b6109358282610f4b565b8173ffffffffffffffffffffffffffffffffffffffff167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a42738260405161097b9190611925565b60405180910390a25050565b61098f610e95565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390611e3d565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ac7610e95565b610ad16000610fcd565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b0c90611a63565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3890611a63565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b5050505050905090565b60066000610b9b610e7b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990611c04565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790611ecf565b60405180910390fd5b610c9a8282611093565b8173ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb682604051610ce09190611925565b60405180910390a25050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390611b72565b60405180910390fd5b610d668383611115565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610dfd610e95565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e6f5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e6691906119d9565b60405180910390fd5b610e7881610fcd565b50565b600033905090565b610e908383836001611138565b505050565b610e9d610e7b565b73ffffffffffffffffffffffffffffffffffffffff16610ebb610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610f1a57610ede610e7b565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f1191906119d9565b60405180910390fd5b565b600080610f27610e7b565b9050610f3485828561130f565b610f3f8585856113a3565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fbd5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610fb491906119d9565b60405180910390fd5b610fc960008383611497565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111055760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016110fc91906119d9565b60405180910390fd5b61111182600083611497565b5050565b600080611120610e7b565b905061112d8185856113a3565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111aa5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016111a191906119d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361121c5760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161121391906119d9565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611309578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113009190611925565b60405180910390a35b50505050565b600061131b8484610d6e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461139d578181101561138d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161138493929190611eef565b60405180910390fd5b61139c84848484036000611138565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114155760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161140c91906119d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114875760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161147e91906119d9565b60405180910390fd5b611492838383611497565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114e95780600260008282546114dd9190611d51565b925050819055506115bc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611575578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161156c93929190611eef565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116055780600260008282540392505081905550611652565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116af9190611925565b60405180910390a3505050565b600082825260208201905092915050565b7f43616e6e6f742073656e642045544820746f207468697320636f6e7472616374600082015250565b60006117036020836116bc565b915061170e826116cd565b602082019050919050565b60006020820190508181036000830152611732816116f6565b9050919050565b600081519050919050565b60005b83811015611762578082015181840152602081019050611747565b60008484015250505050565b6000601f19601f8301169050919050565b600061178a82611739565b61179481856116bc565b93506117a4818560208601611744565b6117ad8161176e565b840191505092915050565b600060208201905081810360008301526117d2818461177f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061180a826117df565b9050919050565b61181a816117ff565b811461182557600080fd5b50565b60008135905061183781611811565b92915050565b6000819050919050565b6118508161183d565b811461185b57600080fd5b50565b60008135905061186d81611847565b92915050565b6000806040838503121561188a576118896117da565b5b600061189885828601611828565b92505060206118a98582860161185e565b9150509250929050565b60008115159050919050565b6118c8816118b3565b82525050565b60006020820190506118e360008301846118bf565b92915050565b6000602082840312156118ff576118fe6117da565b5b600061190d84828501611828565b91505092915050565b61191f8161183d565b82525050565b600060208201905061193a6000830184611916565b92915050565b600080600060608486031215611959576119586117da565b5b600061196786828701611828565b935050602061197886828701611828565b92505060406119898682870161185e565b9150509250925092565b600060ff82169050919050565b6119a981611993565b82525050565b60006020820190506119c460008301846119a0565b92915050565b6119d3816117ff565b82525050565b60006020820190506119ee60008301846119ca565b92915050565b60008060408385031215611a0b57611a0a6117da565b5b6000611a1985828601611828565b9250506020611a2a85828601611828565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a7b57607f821691505b602082108103611a8e57611a8d611a34565b5b50919050565b7f41646472657373206973206e6f7420616e2061646d696e000000000000000000600082015250565b6000611aca6017836116bc565b9150611ad582611a94565b602082019050919050565b60006020820190508181036000830152611af981611abd565b9050919050565b7f43616e6e6f742073656e6420746f6b656e7320746f207468697320636f6e747260008201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b6000611b5c6023836116bc565b9150611b6782611b00565b604082019050919050565b60006020820190508181036000830152611b8b81611b4f565b9050919050565b7f4f6e6c792041646d696e2063616e206578656375746520746869732066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b6000611bee6024836116bc565b9150611bf982611b92565b604082019050919050565b60006020820190508181036000830152611c1d81611be1565b9050919050565b7f4d696e742061646472657373206973206e6f742076616c696400000000000000600082015250565b6000611c5a6019836116bc565b9150611c6582611c24565b602082019050919050565b60006020820190508181036000830152611c8981611c4d565b9050919050565b7f43616e6e6f74206d696e7420746f6b656e7320746f207468697320636f6e747260008201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b6000611cec6023836116bc565b9150611cf782611c90565b604082019050919050565b60006020820190508181036000830152611d1b81611cdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d5c8261183d565b9150611d678361183d565b9250828201905080821115611d7f57611d7e611d22565b5b92915050565b7f596f752068617665207061737365642074686520636170000000000000000000600082015250565b6000611dbb6017836116bc565b9150611dc682611d85565b602082019050919050565b60006020820190508181036000830152611dea81611dae565b9050919050565b7f4164647265737320697320616c726561647920616e2061646d696e0000000000600082015250565b6000611e27601b836116bc565b9150611e3282611df1565b602082019050919050565b60006020820190508181036000830152611e5681611e1a565b9050919050565b7f43616e6e6f74206275726e20746f6b656e7320746f207468697320636f6e747260008201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b6000611eb96023836116bc565b9150611ec482611e5d565b604082019050919050565b60006020820190508181036000830152611ee881611eac565b9050919050565b6000606082019050611f0460008301866119ca565b611f116020830185611916565b611f1e6040830184611916565b94935050505056fea2646970667358221220f489a2baa8aafb30d8d374cb3eab9f33adb32ae1d0efd3109fc962c0ab7191df64736f6c63430008140033

Deployed Bytecode Sourcemap

25949:2190:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27989:42;;;;;;;;;;:::i;:::-;;;;;;;;25949:2190;28086:42;;;;;;;;;;:::i;:::-;;;;;;;;13297:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15590:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25989:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26625:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14399:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27497:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14250:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26370:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26879:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26452:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14561:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24972:103;;;;;;;;;;;;;:::i;:::-;;24297:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13507:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27243:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27738:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15129:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25230:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13297:91;13342:13;13375:5;13368:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13297:91;:::o;15590:190::-;15663:4;15680:13;15696:12;:10;:12::i;:::-;15680:28;;15719:31;15728:5;15735:7;15744:5;15719:8;:31::i;:::-;15768:4;15761:11;;;15590:190;;;;:::o;25989:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;26625:176::-;24183:13;:11;:13::i;:::-;26704:7:::1;:21;26712:12;26704:21;;;;;;;;;;;;;;;;;;;;;;;;;26696:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26788:5;26764:7;:21;26772:12;26764:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26625:176:::0;:::o;14399:99::-;14451:7;14478:12;;14471:19;;14399:99;:::o;27497:233::-;27585:4;27624;27610:19;;:2;:19;;;27602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27687:35;27706:4;27712:2;27716:5;27687:18;:35::i;:::-;27680:42;;27497:233;;;;;:::o;14250:84::-;14299:5;14324:2;14317:9;;14250:84;:::o;26370:74::-;26405:7;26432:4;26425:11;;26370:74;:::o;26879:356::-;26280:7;:21;26288:12;:10;:12::i;:::-;26280:21;;;;;;;;;;;;;;;;;;;;;;;;;26272:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:1:::1;26957:16;;:2;:16;;::::0;26949:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27036:4;27022:19;;:2;:19;;::::0;27014:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27126:5;:3;:5::i;:::-;27116:6;27100:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:31;;27092:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27170:17;27176:2;27180:6;27170:5;:17::i;:::-;27216:2;27203:24;;;27220:6;27203:24;;;;;;:::i;:::-;;;;;;;;26879:356:::0;;:::o;26452:165::-;24183:13;:11;:13::i;:::-;26525:7:::1;:17;26533:8;26525:17;;;;;;;;;;;;;;;;;;;;;;;;;26524:18;26516:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26605:4;26585:7;:17;26593:8;26585:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;26452:165:::0;:::o;14561:118::-;14626:7;14653:9;:18;14663:7;14653:18;;;;;;;;;;;;;;;;14646:25;;14561:118;;;:::o;24972:103::-;24183:13;:11;:13::i;:::-;25037:30:::1;25064:1;25037:18;:30::i;:::-;24972:103::o:0;24297:87::-;24343:7;24370:6;;;;;;;;;;;24363:13;;24297:87;:::o;13507:95::-;13554:13;13587:7;13580:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13507:95;:::o;27243:246::-;26280:7;:21;26288:12;:10;:12::i;:::-;26280:21;;;;;;;;;;;;;;;;;;;;;;;;;26272:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27352:4:::1;27329:28;;:11;:28;;::::0;27321:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27408:25;27414:11;27427:5;27408;:25::i;:::-;27462:11;27449:32;;;27475:5;27449:32;;;;;;:::i;:::-;;;;;;;;27243:246:::0;;:::o;27738:205::-;27808:4;27847;27833:19;;:2;:19;;;27825:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27910:25;27925:2;27929:5;27910:14;:25::i;:::-;27903:32;;27738:205;;;;:::o;15129:142::-;15209:7;15236:11;:18;15248:5;15236:18;;;;;;;;;;;;;;;:27;15255:7;15236:27;;;;;;;;;;;;;;;;15229:34;;15129:142;;;;:::o;25230:220::-;24183:13;:11;:13::i;:::-;25335:1:::1;25315:22;;:8;:22;;::::0;25311:93:::1;;25389:1;25361:31;;;;;;;;;;;:::i;:::-;;;;;;;;25311:93;25414:28;25433:8;25414:18;:28::i;:::-;25230:220:::0;:::o;4302:98::-;4355:7;4382:10;4375:17;;4302:98;:::o;20417:130::-;20502:37;20511:5;20518:7;20527:5;20534:4;20502:8;:37::i;:::-;20417:130;;;:::o;24462:166::-;24533:12;:10;:12::i;:::-;24522:23;;:7;:5;:7::i;:::-;:23;;;24518:103;;24596:12;:10;:12::i;:::-;24569:40;;;;;;;;;;;:::i;:::-;;;;;;;;24518:103;24462:166::o;16358:249::-;16445:4;16462:15;16480:12;:10;:12::i;:::-;16462:30;;16503:37;16519:4;16525:7;16534:5;16503:15;:37::i;:::-;16551:26;16561:4;16567:2;16571:5;16551:9;:26::i;:::-;16595:4;16588:11;;;16358:249;;;;;:::o;19112:213::-;19202:1;19183:21;;:7;:21;;;19179:93;;19257:1;19228:32;;;;;;;;;;;:::i;:::-;;;;;;;;19179:93;19282:35;19298:1;19302:7;19311:5;19282:7;:35::i;:::-;19112:213;;:::o;25610:191::-;25684:16;25703:6;;;;;;;;;;;25684:25;;25729:8;25720:6;;:17;;;;;;;;;;;;;;;;;;25784:8;25753:40;;25774:8;25753:40;;;;;;;;;;;;25673:128;25610:191;:::o;19653:211::-;19743:1;19724:21;;:7;:21;;;19720:91;;19796:1;19769:30;;;;;;;;;;;:::i;:::-;;;;;;;;19720:91;19821:35;19829:7;19846:1;19850:5;19821:7;:35::i;:::-;19653:211;;:::o;14884:182::-;14953:4;14970:13;14986:12;:10;:12::i;:::-;14970:28;;15009:27;15019:5;15026:2;15030:5;15009:9;:27::i;:::-;15054:4;15047:11;;;14884:182;;;;:::o;21398:443::-;21528:1;21511:19;;:5;:19;;;21507:91;;21583:1;21554:32;;;;;;;;;;;:::i;:::-;;;;;;;;21507:91;21631:1;21612:21;;:7;:21;;;21608:92;;21685:1;21657:31;;;;;;;;;;;:::i;:::-;;;;;;;;21608:92;21740:5;21710:11;:18;21722:5;21710:18;;;;;;;;;;;;;;;:27;21729:7;21710:27;;;;;;;;;;;;;;;:35;;;;21760:9;21756:78;;;21807:7;21791:31;;21800:5;21791:31;;;21816:5;21791:31;;;;;;:::i;:::-;;;;;;;;21756:78;21398:443;;;;:::o;22133:487::-;22233:24;22260:25;22270:5;22277:7;22260:9;:25::i;:::-;22233:52;;22320:17;22300:16;:37;22296:317;;22377:5;22358:16;:24;22354:132;;;22437:7;22446:16;22464:5;22410:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;22354:132;22529:57;22538:5;22545:7;22573:5;22554:16;:24;22580:5;22529:8;:57::i;:::-;22296:317;22222:398;22133:487;;;:::o;16992:308::-;17092:1;17076:18;;:4;:18;;;17072:88;;17145:1;17118:30;;;;;;;;;;;:::i;:::-;;;;;;;;17072:88;17188:1;17174:16;;:2;:16;;;17170:88;;17243:1;17214:32;;;;;;;;;;;:::i;:::-;;;;;;;;17170:88;17268:24;17276:4;17282:2;17286:5;17268:7;:24::i;:::-;16992:308;;;:::o;17624:1135::-;17730:1;17714:18;;:4;:18;;;17710:552;;17868:5;17852:12;;:21;;;;;;;:::i;:::-;;;;;;;;17710:552;;;17906:19;17928:9;:15;17938:4;17928:15;;;;;;;;;;;;;;;;17906:37;;17976:5;17962:11;:19;17958:117;;;18034:4;18040:11;18053:5;18009:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;17958:117;18230:5;18216:11;:19;18198:9;:15;18208:4;18198:15;;;;;;;;;;;;;;;:37;;;;17891:371;17710:552;18292:1;18278:16;;:2;:16;;;18274:435;;18460:5;18444:12;;:21;;;;;;;;;;;18274:435;;;18677:5;18660:9;:13;18670:2;18660:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18274:435;18741:2;18726:25;;18735:4;18726:25;;;18745:5;18726:25;;;;;;:::i;:::-;;;;;;;;17624:1135;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:182::-;322:34;318:1;310:6;306:14;299:58;182:182;:::o;370:366::-;512:3;533:67;597:2;592:3;533:67;:::i;:::-;526:74;;609:93;698:3;609:93;:::i;:::-;727:2;722:3;718:12;711:19;;370:366;;;:::o;742:419::-;908:4;946:2;935:9;931:18;923:26;;995:9;989:4;985:20;981:1;970:9;966:17;959:47;1023:131;1149:4;1023:131;:::i;:::-;1015:139;;742:419;;;:::o;1167:99::-;1219:6;1253:5;1247:12;1237:22;;1167:99;;;:::o;1272:246::-;1353:1;1363:113;1377:6;1374:1;1371:13;1363:113;;;1462:1;1457:3;1453:11;1447:18;1443:1;1438:3;1434:11;1427:39;1399:2;1396:1;1392:10;1387:15;;1363:113;;;1510:1;1501:6;1496:3;1492:16;1485:27;1334:184;1272:246;;;:::o;1524:102::-;1565:6;1616:2;1612:7;1607:2;1600:5;1596:14;1592:28;1582:38;;1524:102;;;:::o;1632:377::-;1720:3;1748:39;1781:5;1748:39;:::i;:::-;1803:71;1867:6;1862:3;1803:71;:::i;:::-;1796:78;;1883:65;1941:6;1936:3;1929:4;1922:5;1918:16;1883:65;:::i;:::-;1973:29;1995:6;1973:29;:::i;:::-;1968:3;1964:39;1957:46;;1724:285;1632:377;;;;:::o;2015:313::-;2128:4;2166:2;2155:9;2151:18;2143:26;;2215:9;2209:4;2205:20;2201:1;2190:9;2186:17;2179:47;2243:78;2316:4;2307:6;2243:78;:::i;:::-;2235:86;;2015:313;;;;:::o;2415:117::-;2524:1;2521;2514:12;2661:126;2698:7;2738:42;2731:5;2727:54;2716:65;;2661:126;;;:::o;2793:96::-;2830:7;2859:24;2877:5;2859:24;:::i;:::-;2848:35;;2793:96;;;:::o;2895:122::-;2968:24;2986:5;2968:24;:::i;:::-;2961:5;2958:35;2948:63;;3007:1;3004;2997:12;2948:63;2895:122;:::o;3023:139::-;3069:5;3107:6;3094:20;3085:29;;3123:33;3150:5;3123:33;:::i;:::-;3023:139;;;;:::o;3168:77::-;3205:7;3234:5;3223:16;;3168:77;;;:::o;3251:122::-;3324:24;3342:5;3324:24;:::i;:::-;3317:5;3314:35;3304:63;;3363:1;3360;3353:12;3304:63;3251:122;:::o;3379:139::-;3425:5;3463:6;3450:20;3441:29;;3479:33;3506:5;3479:33;:::i;:::-;3379:139;;;;:::o;3524:474::-;3592:6;3600;3649:2;3637:9;3628:7;3624:23;3620:32;3617:119;;;3655:79;;:::i;:::-;3617:119;3775:1;3800:53;3845:7;3836:6;3825:9;3821:22;3800:53;:::i;:::-;3790:63;;3746:117;3902:2;3928:53;3973:7;3964:6;3953:9;3949:22;3928:53;:::i;:::-;3918:63;;3873:118;3524:474;;;;;:::o;4004:90::-;4038:7;4081:5;4074:13;4067:21;4056:32;;4004:90;;;:::o;4100:109::-;4181:21;4196:5;4181:21;:::i;:::-;4176:3;4169:34;4100:109;;:::o;4215:210::-;4302:4;4340:2;4329:9;4325:18;4317:26;;4353:65;4415:1;4404:9;4400:17;4391:6;4353:65;:::i;:::-;4215:210;;;;:::o;4431:329::-;4490:6;4539:2;4527:9;4518:7;4514:23;4510:32;4507:119;;;4545:79;;:::i;:::-;4507:119;4665:1;4690:53;4735:7;4726:6;4715:9;4711:22;4690:53;:::i;:::-;4680:63;;4636:117;4431:329;;;;:::o;4766:118::-;4853:24;4871:5;4853:24;:::i;:::-;4848:3;4841:37;4766:118;;:::o;4890:222::-;4983:4;5021:2;5010:9;5006:18;4998:26;;5034:71;5102:1;5091:9;5087:17;5078:6;5034:71;:::i;:::-;4890:222;;;;:::o;5118:619::-;5195:6;5203;5211;5260:2;5248:9;5239:7;5235:23;5231:32;5228:119;;;5266:79;;:::i;:::-;5228:119;5386:1;5411:53;5456:7;5447:6;5436:9;5432:22;5411:53;:::i;:::-;5401:63;;5357:117;5513:2;5539:53;5584:7;5575:6;5564:9;5560:22;5539:53;:::i;:::-;5529:63;;5484:118;5641:2;5667:53;5712:7;5703:6;5692:9;5688:22;5667:53;:::i;:::-;5657:63;;5612:118;5118:619;;;;;:::o;5743:86::-;5778:7;5818:4;5811:5;5807:16;5796:27;;5743:86;;;:::o;5835:112::-;5918:22;5934:5;5918:22;:::i;:::-;5913:3;5906:35;5835:112;;:::o;5953:214::-;6042:4;6080:2;6069:9;6065:18;6057:26;;6093:67;6157:1;6146:9;6142:17;6133:6;6093:67;:::i;:::-;5953:214;;;;:::o;6173:118::-;6260:24;6278:5;6260:24;:::i;:::-;6255:3;6248:37;6173:118;;:::o;6297:222::-;6390:4;6428:2;6417:9;6413:18;6405:26;;6441:71;6509:1;6498:9;6494:17;6485:6;6441:71;:::i;:::-;6297:222;;;;:::o;6525:474::-;6593:6;6601;6650:2;6638:9;6629:7;6625:23;6621:32;6618:119;;;6656:79;;:::i;:::-;6618:119;6776:1;6801:53;6846:7;6837:6;6826:9;6822:22;6801:53;:::i;:::-;6791:63;;6747:117;6903:2;6929:53;6974:7;6965:6;6954:9;6950:22;6929:53;:::i;:::-;6919:63;;6874:118;6525:474;;;;;:::o;7005:180::-;7053:77;7050:1;7043:88;7150:4;7147:1;7140:15;7174:4;7171:1;7164:15;7191:320;7235:6;7272:1;7266:4;7262:12;7252:22;;7319:1;7313:4;7309:12;7340:18;7330:81;;7396:4;7388:6;7384:17;7374:27;;7330:81;7458:2;7450:6;7447:14;7427:18;7424:38;7421:84;;7477:18;;:::i;:::-;7421:84;7242:269;7191:320;;;:::o;7517:173::-;7657:25;7653:1;7645:6;7641:14;7634:49;7517:173;:::o;7696:366::-;7838:3;7859:67;7923:2;7918:3;7859:67;:::i;:::-;7852:74;;7935:93;8024:3;7935:93;:::i;:::-;8053:2;8048:3;8044:12;8037:19;;7696:366;;;:::o;8068:419::-;8234:4;8272:2;8261:9;8257:18;8249:26;;8321:9;8315:4;8311:20;8307:1;8296:9;8292:17;8285:47;8349:131;8475:4;8349:131;:::i;:::-;8341:139;;8068:419;;;:::o;8493:222::-;8633:34;8629:1;8621:6;8617:14;8610:58;8702:5;8697:2;8689:6;8685:15;8678:30;8493:222;:::o;8721:366::-;8863:3;8884:67;8948:2;8943:3;8884:67;:::i;:::-;8877:74;;8960:93;9049:3;8960:93;:::i;:::-;9078:2;9073:3;9069:12;9062:19;;8721:366;;;:::o;9093:419::-;9259:4;9297:2;9286:9;9282:18;9274:26;;9346:9;9340:4;9336:20;9332:1;9321:9;9317:17;9310:47;9374:131;9500:4;9374:131;:::i;:::-;9366:139;;9093:419;;;:::o;9518:223::-;9658:34;9654:1;9646:6;9642:14;9635:58;9727:6;9722:2;9714:6;9710:15;9703:31;9518:223;:::o;9747:366::-;9889:3;9910:67;9974:2;9969:3;9910:67;:::i;:::-;9903:74;;9986:93;10075:3;9986:93;:::i;:::-;10104:2;10099:3;10095:12;10088:19;;9747:366;;;:::o;10119:419::-;10285:4;10323:2;10312:9;10308:18;10300:26;;10372:9;10366:4;10362:20;10358:1;10347:9;10343:17;10336:47;10400:131;10526:4;10400:131;:::i;:::-;10392:139;;10119:419;;;:::o;10544:175::-;10684:27;10680:1;10672:6;10668:14;10661:51;10544:175;:::o;10725:366::-;10867:3;10888:67;10952:2;10947:3;10888:67;:::i;:::-;10881:74;;10964:93;11053:3;10964:93;:::i;:::-;11082:2;11077:3;11073:12;11066:19;;10725:366;;;:::o;11097:419::-;11263:4;11301:2;11290:9;11286:18;11278:26;;11350:9;11344:4;11340:20;11336:1;11325:9;11321:17;11314:47;11378:131;11504:4;11378:131;:::i;:::-;11370:139;;11097:419;;;:::o;11522:222::-;11662:34;11658:1;11650:6;11646:14;11639:58;11731:5;11726:2;11718:6;11714:15;11707:30;11522:222;:::o;11750:366::-;11892:3;11913:67;11977:2;11972:3;11913:67;:::i;:::-;11906:74;;11989:93;12078:3;11989:93;:::i;:::-;12107:2;12102:3;12098:12;12091:19;;11750:366;;;:::o;12122:419::-;12288:4;12326:2;12315:9;12311:18;12303:26;;12375:9;12369:4;12365:20;12361:1;12350:9;12346:17;12339:47;12403:131;12529:4;12403:131;:::i;:::-;12395:139;;12122:419;;;:::o;12547:180::-;12595:77;12592:1;12585:88;12692:4;12689:1;12682:15;12716:4;12713:1;12706:15;12733:191;12773:3;12792:20;12810:1;12792:20;:::i;:::-;12787:25;;12826:20;12844:1;12826:20;:::i;:::-;12821:25;;12869:1;12866;12862:9;12855:16;;12890:3;12887:1;12884:10;12881:36;;;12897:18;;:::i;:::-;12881:36;12733:191;;;;:::o;12930:173::-;13070:25;13066:1;13058:6;13054:14;13047:49;12930:173;:::o;13109:366::-;13251:3;13272:67;13336:2;13331:3;13272:67;:::i;:::-;13265:74;;13348:93;13437:3;13348:93;:::i;:::-;13466:2;13461:3;13457:12;13450:19;;13109:366;;;:::o;13481:419::-;13647:4;13685:2;13674:9;13670:18;13662:26;;13734:9;13728:4;13724:20;13720:1;13709:9;13705:17;13698:47;13762:131;13888:4;13762:131;:::i;:::-;13754:139;;13481:419;;;:::o;13906:177::-;14046:29;14042:1;14034:6;14030:14;14023:53;13906:177;:::o;14089:366::-;14231:3;14252:67;14316:2;14311:3;14252:67;:::i;:::-;14245:74;;14328:93;14417:3;14328:93;:::i;:::-;14446:2;14441:3;14437:12;14430:19;;14089:366;;;:::o;14461:419::-;14627:4;14665:2;14654:9;14650:18;14642:26;;14714:9;14708:4;14704:20;14700:1;14689:9;14685:17;14678:47;14742:131;14868:4;14742:131;:::i;:::-;14734:139;;14461:419;;;:::o;14886:222::-;15026:34;15022:1;15014:6;15010:14;15003:58;15095:5;15090:2;15082:6;15078:15;15071:30;14886:222;:::o;15114:366::-;15256:3;15277:67;15341:2;15336:3;15277:67;:::i;:::-;15270:74;;15353:93;15442:3;15353:93;:::i;:::-;15471:2;15466:3;15462:12;15455:19;;15114:366;;;:::o;15486:419::-;15652:4;15690:2;15679:9;15675:18;15667:26;;15739:9;15733:4;15729:20;15725:1;15714:9;15710:17;15703:47;15767:131;15893:4;15767:131;:::i;:::-;15759:139;;15486:419;;;:::o;15911:442::-;16060:4;16098:2;16087:9;16083:18;16075:26;;16111:71;16179:1;16168:9;16164:17;16155:6;16111:71;:::i;:::-;16192:72;16260:2;16249:9;16245:18;16236:6;16192:72;:::i;:::-;16274;16342:2;16331:9;16327:18;16318:6;16274:72;:::i;:::-;15911:442;;;;;;:::o

Swarm Source

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