ETH Price: $3,331.39 (-3.95%)
Gas: 5 Gwei

Token

IndexxPhoenix (INXP)
 

Overview

Max Total Supply

500 INXP

Holders

1

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000...000
Balance
0 INXP

Value
$0.00
0x0000000000000000000000000000000000000000
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:
IndexxPhoenix

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-02
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/access/IAccessControl.sol


// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)

pragma solidity ^0.8.0;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/AccessControl.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol)

pragma solidity ^0.8.0;





/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `_msgSender()` is missing `role`.
     * Overriding this function changes the behavior of the {onlyRole} modifier.
     *
     * Format of the revert message is described in {_checkRole}.
     *
     * _Available since v4.6._
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleGranted} event.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleRevoked} event.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     *
     * May emit a {RoleRevoked} event.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * May emit a {RoleGranted} event.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleGranted} event.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleRevoked} event.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



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

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

// File: contracts/inxp-eth-test/ETH_IndexxPhoenix.sol


pragma solidity ^0.8.4;






//
/**
 * @title IndexxPhoenix token
 * @notice BEP20 Token with pausable, mintable and burn features
 */
contract IndexxPhoenix is ERC20, ERC20Burnable, Pausable, AccessControl {
    using SafeMath for uint256;

    bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    address public feeAdmin;
    bool public feeActive = true;
 
    /**
     * @dev Constructor assigning Token name, symbol and minter, pauser and admin role to msg.sender
     */
    constructor() ERC20("IndexxPhoenix", "INXP") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _grantRole(MINTER_ROLE, msg.sender);
        feeAdmin = msg.sender;
    }

    /**
     * @dev Function to change Fee admin address
     * @param _newFeeAdmin The address of new fee admin
     */
    function changeFeeAdmin(address _newFeeAdmin) external onlyRole(MINTER_ROLE){
        feeAdmin = _newFeeAdmin;
    }

    /**
     * @dev Function to change Fee active status
     * @param status new status for fee charging
     */
    function changeFeeStatus(bool status) external onlyRole(MINTER_ROLE){
        feeActive = status;
    }

    /**
     * @dev Function to pause token transfer
     */
    function pause() public onlyRole(PAUSER_ROLE) {
        _pause();
    }

    /**
     * @dev Function to mint tokens
     */
    function unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    /**
     * @dev Function to mint tokens
     * @param to The address that will receive the minted tokens.
     * @param amount The amount of tokens to mint.
     */
    function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) {
        _mint(to, amount);
    }

    /**
     * @dev Function to halt token transfers in case of extreme events and emergencies
     * @param to The address that will send the tokens.
     * @param from The address that will receive the tokens.
     * @param amount The amount of tokens to mint.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal override whenNotPaused {
        super._beforeTokenTransfer(from, to, amount);
    }

    function transfer(address to, uint256 amount)
        public
        override
        returns (bool)
    {
        address owner = _msgSender();

        if ( feeActive == true && amount > 20000 * 10**18) {
            uint256 fee;
            if (amount > 40000 * 10**18) {
                if (amount > 80000 * 10**18) {
                    fee = amount.mul(15).div(1000);
                } else {
                    fee = amount.div(100);
                }
            } else {
                fee = amount.mul(5).div(1000);
            }
            _transfer(owner, feeAdmin, fee);
            amount = amount.sub(fee);
        }

        _transfer(owner, to, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);

        if (feeActive == true && amount > 20000 * 10**18) {
            uint256 fee;
            if (amount > 40000 * 10**18) {
                if (amount > 80000 * 10**18) {
                    fee = amount.mul(15).div(1000);
                } else {
                    fee = amount.div(100);
                }
            } else {
                fee = amount.mul(5).div(1000);
            }
            _transfer(from, feeAdmin, fee);
            amount = amount.sub(fee);
        }
        _transfer(from, to, amount);

        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeAdmin","type":"address"}],"name":"changeFeeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeFeeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600760146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600d81526020017f496e6465787850686f656e6978000000000000000000000000000000000000008152506040518060400160405280600481526020017f494e5850000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b19291906200030d565b508060049080519060200190620000ca9291906200030d565b5050506000600560006101000a81548160ff021916908315150217905550620000fd6000801b33620001a860201b60201c565b6200012f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620001a860201b60201c565b620001617f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620001a860201b60201c565b33600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000422565b620001ba82826200029a60201b60201c565b620002965760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200023b6200030560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b8280546200031b90620003bd565b90600052602060002090601f0160209004810192826200033f57600085556200038b565b82601f106200035a57805160ff19168380011785556200038b565b828001600101855582156200038b579182015b828111156200038a5782518255916020019190600101906200036d565b5b5090506200039a91906200039e565b5090565b5b80821115620003b95760008160009055506001016200039f565b5090565b60006002820490506001821680620003d657607f821691505b60208210811415620003ed57620003ec620003f3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612dda80620004326000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063a457c2d7116100a2578063d547741f11610071578063d547741f14610557578063dd62ed3e14610573578063e39e165a146105a3578063e63ab1e9146105c1576101da565b8063a457c2d7146104bd578063a9059cbb146104ed578063af1171ca1461051d578063d539139314610539576101da565b806391d14854116100de57806391d148541461043557806395d89b41146104655780639e7bd52514610483578063a217fddf1461049f576101da565b806370a08231146103df57806379cc67901461040f5780638456cb591461042b576101da565b806330a402c01161017c5780633f4ba83a1161014b5780633f4ba83a1461037f57806340c10f191461038957806342966c68146103a55780635c975abb146103c1576101da565b806330a402c0146102f7578063313ce5671461031557806336568abe14610333578063395093511461034f576101da565b806318160ddd116101b857806318160ddd1461025d57806323b872dd1461027b578063248a9ca3146102ab5780632f2ff15d146102db576101da565b806301ffc9a7146101df57806306fdde031461020f578063095ea7b31461022d575b600080fd5b6101f960048036038101906101f49190612012565b6105df565b60405161020691906123a6565b60405180910390f35b610217610659565b60405161022491906123dc565b60405180910390f35b61024760048036038101906102429190611f38565b6106eb565b60405161025491906123a6565b60405180910390f35b61026561070e565b60405161027291906125be565b60405180910390f35b61029560048036038101906102909190611ee5565b610718565b6040516102a291906123a6565b60405180910390f35b6102c560048036038101906102c09190611fa5565b610858565b6040516102d291906123c1565b60405180910390f35b6102f560048036038101906102f09190611fd2565b610878565b005b6102ff610899565b60405161030c919061238b565b60405180910390f35b61031d6108bf565b60405161032a91906125d9565b60405180910390f35b61034d60048036038101906103489190611fd2565b6108c8565b005b61036960048036038101906103649190611f38565b61094b565b60405161037691906123a6565b60405180910390f35b610387610982565b005b6103a3600480360381019061039e9190611f38565b6109b7565b005b6103bf60048036038101906103ba919061203f565b6109f0565b005b6103c9610a04565b6040516103d691906123a6565b60405180910390f35b6103f960048036038101906103f49190611e78565b610a1b565b60405161040691906125be565b60405180910390f35b61042960048036038101906104249190611f38565b610a63565b005b610433610a83565b005b61044f600480360381019061044a9190611fd2565b610ab8565b60405161045c91906123a6565b60405180910390f35b61046d610b23565b60405161047a91906123dc565b60405180910390f35b61049d60048036038101906104989190611f78565b610bb5565b005b6104a7610bfd565b6040516104b491906123c1565b60405180910390f35b6104d760048036038101906104d29190611f38565b610c04565b6040516104e491906123a6565b60405180910390f35b61050760048036038101906105029190611f38565b610c7b565b60405161051491906123a6565b60405180910390f35b61053760048036038101906105329190611e78565b610daf565b005b610541610e1e565b60405161054e91906123c1565b60405180910390f35b610571600480360381019061056c9190611fd2565b610e42565b005b61058d60048036038101906105889190611ea5565b610e63565b60405161059a91906125be565b60405180910390f35b6105ab610eea565b6040516105b891906123a6565b60405180910390f35b6105c9610efd565b6040516105d691906123c1565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610652575061065182610f21565b5b9050919050565b60606003805461066890612818565b80601f016020809104026020016040519081016040528092919081815260200182805461069490612818565b80156106e15780601f106106b6576101008083540402835291602001916106e1565b820191906000526020600020905b8154815290600101906020018083116106c457829003601f168201915b5050505050905090565b6000806106f6610f8b565b9050610703818585610f93565b600191505092915050565b6000600254905090565b600080610723610f8b565b905061073085828561115e565b60011515600760149054906101000a900460ff16151514801561075c575069043c33c193756480000083115b15610841576000690878678326eac90000008411156107d2576910f0cf064dd5920000008411156107b6576107af6103e86107a1600f876111ea90919063ffffffff16565b61120090919063ffffffff16565b90506107cd565b6107ca60648561120090919063ffffffff16565b90505b6107fd565b6107fa6103e86107ec6005876111ea90919063ffffffff16565b61120090919063ffffffff16565b90505b61082a86600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611216565b61083d818561149790919063ffffffff16565b9350505b61084c858585611216565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b61088182610858565b61088a816114ad565b61089483836114c1565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b6108d0610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109349061257e565b60405180910390fd5b61094782826115a2565b5050565b600080610956610f8b565b90506109778185856109688589610e63565b610972919061261b565b610f93565b600191505092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109ac816114ad565b6109b4611684565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109e1816114ad565b6109eb83836116e7565b505050565b610a016109fb610f8b565b82611847565b50565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a7582610a6f610f8b565b8361115e565b610a7f8282611847565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610aad816114ad565b610ab5611a1e565b50565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610b3290612818565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5e90612818565b8015610bab5780601f10610b8057610100808354040283529160200191610bab565b820191906000526020600020905b815481529060010190602001808311610b8e57829003601f168201915b5050505050905090565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610bdf816114ad565b81600760146101000a81548160ff0219169083151502179055505050565b6000801b81565b600080610c0f610f8b565b90506000610c1d8286610e63565b905083811015610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c599061255e565b60405180910390fd5b610c6f8286868403610f93565b60019250505092915050565b600080610c86610f8b565b905060011515600760149054906101000a900460ff161515148015610cb4575069043c33c193756480000083115b15610d99576000690878678326eac9000000841115610d2a576910f0cf064dd592000000841115610d0e57610d076103e8610cf9600f876111ea90919063ffffffff16565b61120090919063ffffffff16565b9050610d25565b610d2260648561120090919063ffffffff16565b90505b610d55565b610d526103e8610d446005876111ea90919063ffffffff16565b61120090919063ffffffff16565b90505b610d8282600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611216565b610d95818561149790919063ffffffff16565b9350505b610da4818585611216565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610dd9816114ad565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e4b82610858565b610e54816114ad565b610e5e83836115a2565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760149054906101000a900460ff1681565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa9061253e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a9061247e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161115191906125be565b60405180910390a3505050565b600061116a8484610e63565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111e457818110156111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd9061249e565b60405180910390fd5b6111e38484848403610f93565b5b50505050565b600081836111f891906126a2565b905092915050565b6000818361120e9190612671565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d9061251e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed9061241e565b60405180910390fd5b611301838383611a81565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906124be565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141a919061261b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161147e91906125be565b60405180910390a3611491848484611a99565b50505050565b600081836114a591906126fc565b905092915050565b6114be816114b9610f8b565b611a9e565b50565b6114cb8282610ab8565b61159e5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611543610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6115ac8282610ab8565b156116805760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611625610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b61168c611b3b565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116d0610f8b565b6040516116dd919061238b565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061259e565b60405180910390fd5b61176360008383611a81565b8060026000828254611775919061261b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117ca919061261b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161182f91906125be565b60405180910390a361184360008383611a99565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae906124fe565b60405180910390fd5b6118c382600083611a81565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119409061245e565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119a091906126fc565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0591906125be565b60405180910390a3611a1983600084611a99565b505050565b611a26611b84565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a6a610f8b565b604051611a77919061238b565b60405180910390a1565b611a89611b84565b611a94838383611bce565b505050565b505050565b611aa88282610ab8565b611b3757611acd8173ffffffffffffffffffffffffffffffffffffffff166014611bd3565b611adb8360001c6020611bd3565b604051602001611aec929190612351565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e91906123dc565b60405180910390fd5b5050565b611b43610a04565b611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b799061243e565b60405180910390fd5b565b611b8c610a04565b15611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc3906124de565b60405180910390fd5b565b505050565b606060006002836002611be691906126a2565b611bf0919061261b565b67ffffffffffffffff811115611c0957611c08612906565b5b6040519080825280601f01601f191660200182016040528015611c3b5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611c7357611c726128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611cd757611cd66128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611d1791906126a2565b611d21919061261b565b90505b6001811115611dc1577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611d6357611d626128d7565b5b1a60f81b828281518110611d7a57611d796128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611dba906127ee565b9050611d24565b5060008414611e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfc906123fe565b60405180910390fd5b8091505092915050565b600081359050611e1e81612d31565b92915050565b600081359050611e3381612d48565b92915050565b600081359050611e4881612d5f565b92915050565b600081359050611e5d81612d76565b92915050565b600081359050611e7281612d8d565b92915050565b600060208284031215611e8e57611e8d612935565b5b6000611e9c84828501611e0f565b91505092915050565b60008060408385031215611ebc57611ebb612935565b5b6000611eca85828601611e0f565b9250506020611edb85828601611e0f565b9150509250929050565b600080600060608486031215611efe57611efd612935565b5b6000611f0c86828701611e0f565b9350506020611f1d86828701611e0f565b9250506040611f2e86828701611e63565b9150509250925092565b60008060408385031215611f4f57611f4e612935565b5b6000611f5d85828601611e0f565b9250506020611f6e85828601611e63565b9150509250929050565b600060208284031215611f8e57611f8d612935565b5b6000611f9c84828501611e24565b91505092915050565b600060208284031215611fbb57611fba612935565b5b6000611fc984828501611e39565b91505092915050565b60008060408385031215611fe957611fe8612935565b5b6000611ff785828601611e39565b925050602061200885828601611e0f565b9150509250929050565b60006020828403121561202857612027612935565b5b600061203684828501611e4e565b91505092915050565b60006020828403121561205557612054612935565b5b600061206384828501611e63565b91505092915050565b61207581612730565b82525050565b61208481612742565b82525050565b6120938161274e565b82525050565b60006120a4826125f4565b6120ae81856125ff565b93506120be8185602086016127bb565b6120c78161293a565b840191505092915050565b60006120dd826125f4565b6120e78185612610565b93506120f78185602086016127bb565b80840191505092915050565b60006121106020836125ff565b915061211b8261294b565b602082019050919050565b60006121336023836125ff565b915061213e82612974565b604082019050919050565b60006121566014836125ff565b9150612161826129c3565b602082019050919050565b60006121796022836125ff565b9150612184826129ec565b604082019050919050565b600061219c6022836125ff565b91506121a782612a3b565b604082019050919050565b60006121bf601d836125ff565b91506121ca82612a8a565b602082019050919050565b60006121e26026836125ff565b91506121ed82612ab3565b604082019050919050565b60006122056010836125ff565b915061221082612b02565b602082019050919050565b60006122286021836125ff565b915061223382612b2b565b604082019050919050565b600061224b6025836125ff565b915061225682612b7a565b604082019050919050565b600061226e6024836125ff565b915061227982612bc9565b604082019050919050565b6000612291601783612610565b915061229c82612c18565b601782019050919050565b60006122b46025836125ff565b91506122bf82612c41565b604082019050919050565b60006122d7601183612610565b91506122e282612c90565b601182019050919050565b60006122fa602f836125ff565b915061230582612cb9565b604082019050919050565b600061231d601f836125ff565b915061232882612d08565b602082019050919050565b61233c816127a4565b82525050565b61234b816127ae565b82525050565b600061235c82612284565b915061236882856120d2565b9150612373826122ca565b915061237f82846120d2565b91508190509392505050565b60006020820190506123a0600083018461206c565b92915050565b60006020820190506123bb600083018461207b565b92915050565b60006020820190506123d6600083018461208a565b92915050565b600060208201905081810360008301526123f68184612099565b905092915050565b6000602082019050818103600083015261241781612103565b9050919050565b6000602082019050818103600083015261243781612126565b9050919050565b6000602082019050818103600083015261245781612149565b9050919050565b600060208201905081810360008301526124778161216c565b9050919050565b600060208201905081810360008301526124978161218f565b9050919050565b600060208201905081810360008301526124b7816121b2565b9050919050565b600060208201905081810360008301526124d7816121d5565b9050919050565b600060208201905081810360008301526124f7816121f8565b9050919050565b600060208201905081810360008301526125178161221b565b9050919050565b600060208201905081810360008301526125378161223e565b9050919050565b6000602082019050818103600083015261255781612261565b9050919050565b60006020820190508181036000830152612577816122a7565b9050919050565b60006020820190508181036000830152612597816122ed565b9050919050565b600060208201905081810360008301526125b781612310565b9050919050565b60006020820190506125d36000830184612333565b92915050565b60006020820190506125ee6000830184612342565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000612626826127a4565b9150612631836127a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126665761266561284a565b5b828201905092915050565b600061267c826127a4565b9150612687836127a4565b92508261269757612696612879565b5b828204905092915050565b60006126ad826127a4565b91506126b8836127a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126f1576126f061284a565b5b828202905092915050565b6000612707826127a4565b9150612712836127a4565b9250828210156127255761272461284a565b5b828203905092915050565b600061273b82612784565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156127d95780820151818401526020810190506127be565b838111156127e8576000848401525b50505050565b60006127f9826127a4565b9150600082141561280d5761280c61284a565b5b600182039050919050565b6000600282049050600182168061283057607f821691505b60208210811415612844576128436128a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612d3a81612730565b8114612d4557600080fd5b50565b612d5181612742565b8114612d5c57600080fd5b50565b612d688161274e565b8114612d7357600080fd5b50565b612d7f81612758565b8114612d8a57600080fd5b50565b612d96816127a4565b8114612da157600080fd5b5056fea26469706673582212205b5c32d5fbf1fde4cdf03a94e9e6b503d1db8c5b24fe032a5ef67af7e8605c2264736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063a457c2d7116100a2578063d547741f11610071578063d547741f14610557578063dd62ed3e14610573578063e39e165a146105a3578063e63ab1e9146105c1576101da565b8063a457c2d7146104bd578063a9059cbb146104ed578063af1171ca1461051d578063d539139314610539576101da565b806391d14854116100de57806391d148541461043557806395d89b41146104655780639e7bd52514610483578063a217fddf1461049f576101da565b806370a08231146103df57806379cc67901461040f5780638456cb591461042b576101da565b806330a402c01161017c5780633f4ba83a1161014b5780633f4ba83a1461037f57806340c10f191461038957806342966c68146103a55780635c975abb146103c1576101da565b806330a402c0146102f7578063313ce5671461031557806336568abe14610333578063395093511461034f576101da565b806318160ddd116101b857806318160ddd1461025d57806323b872dd1461027b578063248a9ca3146102ab5780632f2ff15d146102db576101da565b806301ffc9a7146101df57806306fdde031461020f578063095ea7b31461022d575b600080fd5b6101f960048036038101906101f49190612012565b6105df565b60405161020691906123a6565b60405180910390f35b610217610659565b60405161022491906123dc565b60405180910390f35b61024760048036038101906102429190611f38565b6106eb565b60405161025491906123a6565b60405180910390f35b61026561070e565b60405161027291906125be565b60405180910390f35b61029560048036038101906102909190611ee5565b610718565b6040516102a291906123a6565b60405180910390f35b6102c560048036038101906102c09190611fa5565b610858565b6040516102d291906123c1565b60405180910390f35b6102f560048036038101906102f09190611fd2565b610878565b005b6102ff610899565b60405161030c919061238b565b60405180910390f35b61031d6108bf565b60405161032a91906125d9565b60405180910390f35b61034d60048036038101906103489190611fd2565b6108c8565b005b61036960048036038101906103649190611f38565b61094b565b60405161037691906123a6565b60405180910390f35b610387610982565b005b6103a3600480360381019061039e9190611f38565b6109b7565b005b6103bf60048036038101906103ba919061203f565b6109f0565b005b6103c9610a04565b6040516103d691906123a6565b60405180910390f35b6103f960048036038101906103f49190611e78565b610a1b565b60405161040691906125be565b60405180910390f35b61042960048036038101906104249190611f38565b610a63565b005b610433610a83565b005b61044f600480360381019061044a9190611fd2565b610ab8565b60405161045c91906123a6565b60405180910390f35b61046d610b23565b60405161047a91906123dc565b60405180910390f35b61049d60048036038101906104989190611f78565b610bb5565b005b6104a7610bfd565b6040516104b491906123c1565b60405180910390f35b6104d760048036038101906104d29190611f38565b610c04565b6040516104e491906123a6565b60405180910390f35b61050760048036038101906105029190611f38565b610c7b565b60405161051491906123a6565b60405180910390f35b61053760048036038101906105329190611e78565b610daf565b005b610541610e1e565b60405161054e91906123c1565b60405180910390f35b610571600480360381019061056c9190611fd2565b610e42565b005b61058d60048036038101906105889190611ea5565b610e63565b60405161059a91906125be565b60405180910390f35b6105ab610eea565b6040516105b891906123a6565b60405180910390f35b6105c9610efd565b6040516105d691906123c1565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610652575061065182610f21565b5b9050919050565b60606003805461066890612818565b80601f016020809104026020016040519081016040528092919081815260200182805461069490612818565b80156106e15780601f106106b6576101008083540402835291602001916106e1565b820191906000526020600020905b8154815290600101906020018083116106c457829003601f168201915b5050505050905090565b6000806106f6610f8b565b9050610703818585610f93565b600191505092915050565b6000600254905090565b600080610723610f8b565b905061073085828561115e565b60011515600760149054906101000a900460ff16151514801561075c575069043c33c193756480000083115b15610841576000690878678326eac90000008411156107d2576910f0cf064dd5920000008411156107b6576107af6103e86107a1600f876111ea90919063ffffffff16565b61120090919063ffffffff16565b90506107cd565b6107ca60648561120090919063ffffffff16565b90505b6107fd565b6107fa6103e86107ec6005876111ea90919063ffffffff16565b61120090919063ffffffff16565b90505b61082a86600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611216565b61083d818561149790919063ffffffff16565b9350505b61084c858585611216565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b61088182610858565b61088a816114ad565b61089483836114c1565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b6108d0610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109349061257e565b60405180910390fd5b61094782826115a2565b5050565b600080610956610f8b565b90506109778185856109688589610e63565b610972919061261b565b610f93565b600191505092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109ac816114ad565b6109b4611684565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109e1816114ad565b6109eb83836116e7565b505050565b610a016109fb610f8b565b82611847565b50565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a7582610a6f610f8b565b8361115e565b610a7f8282611847565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610aad816114ad565b610ab5611a1e565b50565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610b3290612818565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5e90612818565b8015610bab5780601f10610b8057610100808354040283529160200191610bab565b820191906000526020600020905b815481529060010190602001808311610b8e57829003601f168201915b5050505050905090565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610bdf816114ad565b81600760146101000a81548160ff0219169083151502179055505050565b6000801b81565b600080610c0f610f8b565b90506000610c1d8286610e63565b905083811015610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c599061255e565b60405180910390fd5b610c6f8286868403610f93565b60019250505092915050565b600080610c86610f8b565b905060011515600760149054906101000a900460ff161515148015610cb4575069043c33c193756480000083115b15610d99576000690878678326eac9000000841115610d2a576910f0cf064dd592000000841115610d0e57610d076103e8610cf9600f876111ea90919063ffffffff16565b61120090919063ffffffff16565b9050610d25565b610d2260648561120090919063ffffffff16565b90505b610d55565b610d526103e8610d446005876111ea90919063ffffffff16565b61120090919063ffffffff16565b90505b610d8282600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611216565b610d95818561149790919063ffffffff16565b9350505b610da4818585611216565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610dd9816114ad565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e4b82610858565b610e54816114ad565b610e5e83836115a2565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760149054906101000a900460ff1681565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa9061253e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a9061247e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161115191906125be565b60405180910390a3505050565b600061116a8484610e63565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111e457818110156111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd9061249e565b60405180910390fd5b6111e38484848403610f93565b5b50505050565b600081836111f891906126a2565b905092915050565b6000818361120e9190612671565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d9061251e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed9061241e565b60405180910390fd5b611301838383611a81565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906124be565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141a919061261b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161147e91906125be565b60405180910390a3611491848484611a99565b50505050565b600081836114a591906126fc565b905092915050565b6114be816114b9610f8b565b611a9e565b50565b6114cb8282610ab8565b61159e5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611543610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6115ac8282610ab8565b156116805760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611625610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b61168c611b3b565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116d0610f8b565b6040516116dd919061238b565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061259e565b60405180910390fd5b61176360008383611a81565b8060026000828254611775919061261b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117ca919061261b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161182f91906125be565b60405180910390a361184360008383611a99565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae906124fe565b60405180910390fd5b6118c382600083611a81565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119409061245e565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119a091906126fc565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0591906125be565b60405180910390a3611a1983600084611a99565b505050565b611a26611b84565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a6a610f8b565b604051611a77919061238b565b60405180910390a1565b611a89611b84565b611a94838383611bce565b505050565b505050565b611aa88282610ab8565b611b3757611acd8173ffffffffffffffffffffffffffffffffffffffff166014611bd3565b611adb8360001c6020611bd3565b604051602001611aec929190612351565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e91906123dc565b60405180910390fd5b5050565b611b43610a04565b611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b799061243e565b60405180910390fd5b565b611b8c610a04565b15611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc3906124de565b60405180910390fd5b565b505050565b606060006002836002611be691906126a2565b611bf0919061261b565b67ffffffffffffffff811115611c0957611c08612906565b5b6040519080825280601f01601f191660200182016040528015611c3b5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611c7357611c726128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611cd757611cd66128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611d1791906126a2565b611d21919061261b565b90505b6001811115611dc1577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611d6357611d626128d7565b5b1a60f81b828281518110611d7a57611d796128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611dba906127ee565b9050611d24565b5060008414611e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfc906123fe565b60405180910390fd5b8091505092915050565b600081359050611e1e81612d31565b92915050565b600081359050611e3381612d48565b92915050565b600081359050611e4881612d5f565b92915050565b600081359050611e5d81612d76565b92915050565b600081359050611e7281612d8d565b92915050565b600060208284031215611e8e57611e8d612935565b5b6000611e9c84828501611e0f565b91505092915050565b60008060408385031215611ebc57611ebb612935565b5b6000611eca85828601611e0f565b9250506020611edb85828601611e0f565b9150509250929050565b600080600060608486031215611efe57611efd612935565b5b6000611f0c86828701611e0f565b9350506020611f1d86828701611e0f565b9250506040611f2e86828701611e63565b9150509250925092565b60008060408385031215611f4f57611f4e612935565b5b6000611f5d85828601611e0f565b9250506020611f6e85828601611e63565b9150509250929050565b600060208284031215611f8e57611f8d612935565b5b6000611f9c84828501611e24565b91505092915050565b600060208284031215611fbb57611fba612935565b5b6000611fc984828501611e39565b91505092915050565b60008060408385031215611fe957611fe8612935565b5b6000611ff785828601611e39565b925050602061200885828601611e0f565b9150509250929050565b60006020828403121561202857612027612935565b5b600061203684828501611e4e565b91505092915050565b60006020828403121561205557612054612935565b5b600061206384828501611e63565b91505092915050565b61207581612730565b82525050565b61208481612742565b82525050565b6120938161274e565b82525050565b60006120a4826125f4565b6120ae81856125ff565b93506120be8185602086016127bb565b6120c78161293a565b840191505092915050565b60006120dd826125f4565b6120e78185612610565b93506120f78185602086016127bb565b80840191505092915050565b60006121106020836125ff565b915061211b8261294b565b602082019050919050565b60006121336023836125ff565b915061213e82612974565b604082019050919050565b60006121566014836125ff565b9150612161826129c3565b602082019050919050565b60006121796022836125ff565b9150612184826129ec565b604082019050919050565b600061219c6022836125ff565b91506121a782612a3b565b604082019050919050565b60006121bf601d836125ff565b91506121ca82612a8a565b602082019050919050565b60006121e26026836125ff565b91506121ed82612ab3565b604082019050919050565b60006122056010836125ff565b915061221082612b02565b602082019050919050565b60006122286021836125ff565b915061223382612b2b565b604082019050919050565b600061224b6025836125ff565b915061225682612b7a565b604082019050919050565b600061226e6024836125ff565b915061227982612bc9565b604082019050919050565b6000612291601783612610565b915061229c82612c18565b601782019050919050565b60006122b46025836125ff565b91506122bf82612c41565b604082019050919050565b60006122d7601183612610565b91506122e282612c90565b601182019050919050565b60006122fa602f836125ff565b915061230582612cb9565b604082019050919050565b600061231d601f836125ff565b915061232882612d08565b602082019050919050565b61233c816127a4565b82525050565b61234b816127ae565b82525050565b600061235c82612284565b915061236882856120d2565b9150612373826122ca565b915061237f82846120d2565b91508190509392505050565b60006020820190506123a0600083018461206c565b92915050565b60006020820190506123bb600083018461207b565b92915050565b60006020820190506123d6600083018461208a565b92915050565b600060208201905081810360008301526123f68184612099565b905092915050565b6000602082019050818103600083015261241781612103565b9050919050565b6000602082019050818103600083015261243781612126565b9050919050565b6000602082019050818103600083015261245781612149565b9050919050565b600060208201905081810360008301526124778161216c565b9050919050565b600060208201905081810360008301526124978161218f565b9050919050565b600060208201905081810360008301526124b7816121b2565b9050919050565b600060208201905081810360008301526124d7816121d5565b9050919050565b600060208201905081810360008301526124f7816121f8565b9050919050565b600060208201905081810360008301526125178161221b565b9050919050565b600060208201905081810360008301526125378161223e565b9050919050565b6000602082019050818103600083015261255781612261565b9050919050565b60006020820190508181036000830152612577816122a7565b9050919050565b60006020820190508181036000830152612597816122ed565b9050919050565b600060208201905081810360008301526125b781612310565b9050919050565b60006020820190506125d36000830184612333565b92915050565b60006020820190506125ee6000830184612342565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000612626826127a4565b9150612631836127a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126665761266561284a565b5b828201905092915050565b600061267c826127a4565b9150612687836127a4565b92508261269757612696612879565b5b828204905092915050565b60006126ad826127a4565b91506126b8836127a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126f1576126f061284a565b5b828202905092915050565b6000612707826127a4565b9150612712836127a4565b9250828210156127255761272461284a565b5b828203905092915050565b600061273b82612784565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156127d95780820151818401526020810190506127be565b838111156127e8576000848401525b50505050565b60006127f9826127a4565b9150600082141561280d5761280c61284a565b5b600182039050919050565b6000600282049050600182168061283057607f821691505b60208210811415612844576128436128a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612d3a81612730565b8114612d4557600080fd5b50565b612d5181612742565b8114612d5c57600080fd5b50565b612d688161274e565b8114612d7357600080fd5b50565b612d7f81612758565b8114612d8a57600080fd5b50565b612d96816127a4565b8114612da157600080fd5b5056fea26469706673582212205b5c32d5fbf1fde4cdf03a94e9e6b503d1db8c5b24fe032a5ef67af7e8605c2264736f6c63430008070033

Deployed Bytecode Sourcemap

44250:3749:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17995:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32092:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34443:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33212:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47202:792;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19831:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20272:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44502:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33054:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21416:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35928:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45610:77;;;:::i;:::-;;45869:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43461:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25350:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33383:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43871:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45474:73;;;:::i;:::-;;18291:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32311:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45297:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17396:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36669:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46470:724;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45053:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44433:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20712:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33972:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44532:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44364:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17995:204;18080:4;18119:32;18104:47;;;:11;:47;;;;:87;;;;18155:36;18179:11;18155:23;:36::i;:::-;18104:87;18097:94;;17995:204;;;:::o;32092:100::-;32146:13;32179:5;32172:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32092:100;:::o;34443:201::-;34526:4;34543:13;34559:12;:10;:12::i;:::-;34543:28;;34582:32;34591:5;34598:7;34607:6;34582:8;:32::i;:::-;34632:4;34625:11;;;34443:201;;;;:::o;33212:108::-;33273:7;33300:12;;33293:19;;33212:108;:::o;47202:792::-;47325:4;47342:15;47360:12;:10;:12::i;:::-;47342:30;;47383:38;47399:4;47405:7;47414:6;47383:15;:38::i;:::-;47451:4;47438:17;;:9;;;;;;;;;;;:17;;;:44;;;;;47468:14;47459:6;:23;47438:44;47434:491;;;47499:11;47538:14;47529:6;:23;47525:305;;;47586:14;47577:6;:23;47573:172;;;47631:24;47650:4;47631:14;47642:2;47631:6;:10;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;47625:30;;47573:172;;;47710:15;47721:3;47710:6;:10;;:15;;;;:::i;:::-;47704:21;;47573:172;47525:305;;;47791:23;47809:4;47791:13;47802:1;47791:6;:10;;:13;;;;:::i;:::-;:17;;:23;;;;:::i;:::-;47785:29;;47525:305;47844:30;47854:4;47860:8;;;;;;;;;;;47870:3;47844:9;:30::i;:::-;47898:15;47909:3;47898:6;:10;;:15;;;;:::i;:::-;47889:24;;47484:441;47434:491;47935:27;47945:4;47951:2;47955:6;47935:9;:27::i;:::-;47982:4;47975:11;;;47202:792;;;;;:::o;19831:131::-;19905:7;19932:6;:12;19939:4;19932:12;;;;;;;;;;;:22;;;19925:29;;19831:131;;;:::o;20272:147::-;20355:18;20368:4;20355:12;:18::i;:::-;17887:16;17898:4;17887:10;:16::i;:::-;20386:25:::1;20397:4;20403:7;20386:10;:25::i;:::-;20272:147:::0;;;:::o;44502:23::-;;;;;;;;;;;;;:::o;33054:93::-;33112:5;33137:2;33130:9;;33054:93;:::o;21416:218::-;21523:12;:10;:12::i;:::-;21512:23;;:7;:23;;;21504:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21600:26;21612:4;21618:7;21600:11;:26::i;:::-;21416:218;;:::o;35928:238::-;36016:4;36033:13;36049:12;:10;:12::i;:::-;36033:28;;36072:64;36081:5;36088:7;36125:10;36097:25;36107:5;36114:7;36097:9;:25::i;:::-;:38;;;;:::i;:::-;36072:8;:64::i;:::-;36154:4;36147:11;;;35928:238;;;;:::o;45610:77::-;44402:24;17887:16;17898:4;17887:10;:16::i;:::-;45669:10:::1;:8;:10::i;:::-;45610:77:::0;:::o;45869:107::-;44471:24;17887:16;17898:4;17887:10;:16::i;:::-;45951:17:::1;45957:2;45961:6;45951:5;:17::i;:::-;45869:107:::0;;;:::o;43461:91::-;43517:27;43523:12;:10;:12::i;:::-;43537:6;43517:5;:27::i;:::-;43461:91;:::o;25350:86::-;25397:4;25421:7;;;;;;;;;;;25414:14;;25350:86;:::o;33383:127::-;33457:7;33484:9;:18;33494:7;33484:18;;;;;;;;;;;;;;;;33477:25;;33383:127;;;:::o;43871:164::-;43948:46;43964:7;43973:12;:10;:12::i;:::-;43987:6;43948:15;:46::i;:::-;44005:22;44011:7;44020:6;44005:5;:22::i;:::-;43871:164;;:::o;45474:73::-;44402:24;17887:16;17898:4;17887:10;:16::i;:::-;45531:8:::1;:6;:8::i;:::-;45474:73:::0;:::o;18291:147::-;18377:4;18401:6;:12;18408:4;18401:12;;;;;;;;;;;:20;;:29;18422:7;18401:29;;;;;;;;;;;;;;;;;;;;;;;;;18394:36;;18291:147;;;;:::o;32311:104::-;32367:13;32400:7;32393:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32311:104;:::o;45297:105::-;44471:24;17887:16;17898:4;17887:10;:16::i;:::-;45388:6:::1;45376:9;;:18;;;;;;;;;;;;;;;;;;45297:105:::0;;:::o;17396:49::-;17441:4;17396:49;;;:::o;36669:436::-;36762:4;36779:13;36795:12;:10;:12::i;:::-;36779:28;;36818:24;36845:25;36855:5;36862:7;36845:9;:25::i;:::-;36818:52;;36909:15;36889:16;:35;;36881:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37002:60;37011:5;37018:7;37046:15;37027:16;:34;37002:8;:60::i;:::-;37093:4;37086:11;;;;36669:436;;;;:::o;46470:724::-;46568:4;46590:13;46606:12;:10;:12::i;:::-;46590:28;;46649:4;46636:17;;:9;;;;;;;;;;;:17;;;:44;;;;;46666:14;46657:6;:23;46636:44;46631:493;;;46697:11;46736:14;46727:6;:23;46723:305;;;46784:14;46775:6;:23;46771:172;;;46829:24;46848:4;46829:14;46840:2;46829:6;:10;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;46823:30;;46771:172;;;46908:15;46919:3;46908:6;:10;;:15;;;;:::i;:::-;46902:21;;46771:172;46723:305;;;46989:23;47007:4;46989:13;47000:1;46989:6;:10;;:13;;;;:::i;:::-;:17;;:23;;;;:::i;:::-;46983:29;;46723:305;47042:31;47052:5;47059:8;;;;;;;;;;;47069:3;47042:9;:31::i;:::-;47097:15;47108:3;47097:6;:10;;:15;;;;:::i;:::-;47088:24;;46682:442;46631:493;47136:28;47146:5;47153:2;47157:6;47136:9;:28::i;:::-;47182:4;47175:11;;;46470:724;;;;:::o;45053:118::-;44471:24;17887:16;17898:4;17887:10;:16::i;:::-;45151:12:::1;45140:8;;:23;;;;;;;;;;;;;;;;;;45053:118:::0;;:::o;44433:62::-;44471:24;44433:62;:::o;20712:149::-;20796:18;20809:4;20796:12;:18::i;:::-;17887:16;17898:4;17887:10;:16::i;:::-;20827:26:::1;20839:4;20845:7;20827:11;:26::i;:::-;20712:149:::0;;;:::o;33972:151::-;34061:7;34088:11;:18;34100:5;34088:18;;;;;;;;;;;;;;;:27;34107:7;34088:27;;;;;;;;;;;;;;;;34081:34;;33972:151;;;;:::o;44532:28::-;;;;;;;;;;;;;:::o;44364:62::-;44402:24;44364:62;:::o;8823:157::-;8908:4;8947:25;8932:40;;;:11;:40;;;;8925:47;;8823:157;;;:::o;15204:98::-;15257:7;15284:10;15277:17;;15204:98;:::o;40294:380::-;40447:1;40430:19;;:5;:19;;;;40422:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40528:1;40509:21;;:7;:21;;;;40501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40612:6;40582:11;:18;40594:5;40582:18;;;;;;;;;;;;;;;:27;40601:7;40582:27;;;;;;;;;;;;;;;:36;;;;40650:7;40634:32;;40643:5;40634:32;;;40659:6;40634:32;;;;;;:::i;:::-;;;;;;;;40294:380;;;:::o;40965:453::-;41100:24;41127:25;41137:5;41144:7;41127:9;:25::i;:::-;41100:52;;41187:17;41167:16;:37;41163:248;;41249:6;41229:16;:26;;41221:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41333:51;41342:5;41349:7;41377:6;41358:16;:25;41333:8;:51::i;:::-;41163:248;41089:329;40965:453;;;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;37575:671::-;37722:1;37706:18;;:4;:18;;;;37698:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37799:1;37785:16;;:2;:16;;;;37777:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37854:38;37875:4;37881:2;37885:6;37854:20;:38::i;:::-;37905:19;37927:9;:15;37937:4;37927:15;;;;;;;;;;;;;;;;37905:37;;37976:6;37961:11;:21;;37953:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;38093:6;38079:11;:20;38061:9;:15;38071:4;38061:15;;;;;;;;;;;;;;;:38;;;;38138:6;38121:9;:13;38131:2;38121:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;38177:2;38162:26;;38171:4;38162:26;;;38181:6;38162:26;;;;;;:::i;:::-;;;;;;;;38201:37;38221:4;38227:2;38231:6;38201:19;:37::i;:::-;37687:559;37575:671;;;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;18742:105::-;18809:30;18820:4;18826:12;:10;:12::i;:::-;18809:10;:30::i;:::-;18742:105;:::o;23013:238::-;23097:22;23105:4;23111:7;23097;:22::i;:::-;23092:152;;23168:4;23136:6;:12;23143:4;23136:12;;;;;;;;;;;:20;;:29;23157:7;23136:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23219:12;:10;:12::i;:::-;23192:40;;23210:7;23192:40;;23204:4;23192:40;;;;;;;;;;23092:152;23013:238;;:::o;23431:239::-;23515:22;23523:4;23529:7;23515;:22::i;:::-;23511:152;;;23586:5;23554:6;:12;23561:4;23554:12;;;;;;;;;;;:20;;:29;23575:7;23554:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23638:12;:10;:12::i;:::-;23611:40;;23629:7;23611:40;;23623:4;23611:40;;;;;;;;;;23511:152;23431:239;;:::o;26205:120::-;25214:16;:14;:16::i;:::-;26274:5:::1;26264:7;;:15;;;;;;;;;;;;;;;;;;26295:22;26304:12;:10;:12::i;:::-;26295:22;;;;;;:::i;:::-;;;;;;;;26205:120::o:0;38533:399::-;38636:1;38617:21;;:7;:21;;;;38609:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38687:49;38716:1;38720:7;38729:6;38687:20;:49::i;:::-;38765:6;38749:12;;:22;;;;;;;:::i;:::-;;;;;;;;38804:6;38782:9;:18;38792:7;38782:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;38847:7;38826:37;;38843:1;38826:37;;;38856:6;38826:37;;;;;;:::i;:::-;;;;;;;;38876:48;38904:1;38908:7;38917:6;38876:19;:48::i;:::-;38533:399;;:::o;39265:591::-;39368:1;39349:21;;:7;:21;;;;39341:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39421:49;39442:7;39459:1;39463:6;39421:20;:49::i;:::-;39483:22;39508:9;:18;39518:7;39508:18;;;;;;;;;;;;;;;;39483:43;;39563:6;39545:14;:24;;39537:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39682:6;39665:14;:23;39644:9;:18;39654:7;39644:18;;;;;;;;;;;;;;;:44;;;;39726:6;39710:12;;:22;;;;;;;:::i;:::-;;;;;;;;39776:1;39750:37;;39759:7;39750:37;;;39780:6;39750:37;;;;;;:::i;:::-;;;;;;;;39800:48;39820:7;39837:1;39841:6;39800:19;:48::i;:::-;39330:526;39265:591;;:::o;25946:118::-;24955:19;:17;:19::i;:::-;26016:4:::1;26006:7;;:14;;;;;;;;;;;;;;;;;;26036:20;26043:12;:10;:12::i;:::-;26036:20;;;;;;:::i;:::-;;;;;;;;25946:118::o:0;46261:201::-;24955:19;:17;:19::i;:::-;46410:44:::1;46437:4;46443:2;46447:6;46410:26;:44::i;:::-;46261:201:::0;;;:::o;42747:124::-;;;;:::o;19137:505::-;19226:22;19234:4;19240:7;19226;:22::i;:::-;19221:414;;19414:41;19442:7;19414:41;;19452:2;19414:19;:41::i;:::-;19528:38;19556:4;19548:13;;19563:2;19528:19;:38::i;:::-;19319:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19265:358;;;;;;;;;;;:::i;:::-;;;;;;;;19221:414;19137:505;;:::o;25694:108::-;25761:8;:6;:8::i;:::-;25753:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;25694:108::o;25509:::-;25580:8;:6;:8::i;:::-;25579:9;25571:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25509:108::o;42018:125::-;;;;:::o;10718:451::-;10793:13;10819:19;10864:1;10855:6;10851:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;10841:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10819:47;;10877:15;:6;10884:1;10877:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;10903;:6;10910:1;10903:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;10934:9;10959:1;10950:6;10946:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;10934:26;;10929:135;10966:1;10962;:5;10929:135;;;11001:12;11022:3;11014:5;:11;11001:25;;;;;;;:::i;:::-;;;;;10989:6;10996:1;10989:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;11051:1;11041:11;;;;;10969:3;;;;:::i;:::-;;;10929:135;;;;11091:1;11082:5;:10;11074:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11154:6;11140:21;;;10718:451;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;152:133;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;291:139;;;;:::o;436:137::-;481:5;519:6;506:20;497:29;;535:32;561:5;535:32;:::i;:::-;436:137;;;;:::o;579:139::-;625:5;663:6;650:20;641:29;;679:33;706:5;679:33;:::i;:::-;579:139;;;;:::o;724:329::-;783:6;832:2;820:9;811:7;807:23;803:32;800:119;;;838:79;;:::i;:::-;800:119;958:1;983:53;1028:7;1019:6;1008:9;1004:22;983:53;:::i;:::-;973:63;;929:117;724:329;;;;:::o;1059:474::-;1127:6;1135;1184:2;1172:9;1163:7;1159:23;1155:32;1152:119;;;1190:79;;:::i;:::-;1152:119;1310:1;1335:53;1380:7;1371:6;1360:9;1356:22;1335:53;:::i;:::-;1325:63;;1281:117;1437:2;1463:53;1508:7;1499:6;1488:9;1484:22;1463:53;:::i;:::-;1453:63;;1408:118;1059:474;;;;;:::o;1539:619::-;1616:6;1624;1632;1681:2;1669:9;1660:7;1656:23;1652:32;1649:119;;;1687:79;;:::i;:::-;1649:119;1807:1;1832:53;1877:7;1868:6;1857:9;1853:22;1832:53;:::i;:::-;1822:63;;1778:117;1934:2;1960:53;2005:7;1996:6;1985:9;1981:22;1960:53;:::i;:::-;1950:63;;1905:118;2062:2;2088:53;2133:7;2124:6;2113:9;2109:22;2088:53;:::i;:::-;2078:63;;2033:118;1539:619;;;;;:::o;2164:474::-;2232:6;2240;2289:2;2277:9;2268:7;2264:23;2260:32;2257:119;;;2295:79;;:::i;:::-;2257:119;2415:1;2440:53;2485:7;2476:6;2465:9;2461:22;2440:53;:::i;:::-;2430:63;;2386:117;2542:2;2568:53;2613:7;2604:6;2593:9;2589:22;2568:53;:::i;:::-;2558:63;;2513:118;2164:474;;;;;:::o;2644:323::-;2700:6;2749:2;2737:9;2728:7;2724:23;2720:32;2717:119;;;2755:79;;:::i;:::-;2717:119;2875:1;2900:50;2942:7;2933:6;2922:9;2918:22;2900:50;:::i;:::-;2890:60;;2846:114;2644:323;;;;:::o;2973:329::-;3032:6;3081:2;3069:9;3060:7;3056:23;3052:32;3049:119;;;3087:79;;:::i;:::-;3049:119;3207:1;3232:53;3277:7;3268:6;3257:9;3253:22;3232:53;:::i;:::-;3222:63;;3178:117;2973:329;;;;:::o;3308:474::-;3376:6;3384;3433:2;3421:9;3412:7;3408:23;3404:32;3401:119;;;3439:79;;:::i;:::-;3401:119;3559:1;3584:53;3629:7;3620:6;3609:9;3605:22;3584:53;:::i;:::-;3574:63;;3530:117;3686:2;3712:53;3757:7;3748:6;3737:9;3733:22;3712:53;:::i;:::-;3702:63;;3657:118;3308:474;;;;;:::o;3788:327::-;3846:6;3895:2;3883:9;3874:7;3870:23;3866:32;3863:119;;;3901:79;;:::i;:::-;3863:119;4021:1;4046:52;4090:7;4081:6;4070:9;4066:22;4046:52;:::i;:::-;4036:62;;3992:116;3788:327;;;;:::o;4121:329::-;4180:6;4229:2;4217:9;4208:7;4204:23;4200:32;4197:119;;;4235:79;;:::i;:::-;4197:119;4355:1;4380:53;4425:7;4416:6;4405:9;4401:22;4380:53;:::i;:::-;4370:63;;4326:117;4121:329;;;;:::o;4456:118::-;4543:24;4561:5;4543:24;:::i;:::-;4538:3;4531:37;4456:118;;:::o;4580:109::-;4661:21;4676:5;4661:21;:::i;:::-;4656:3;4649:34;4580:109;;:::o;4695:118::-;4782:24;4800:5;4782:24;:::i;:::-;4777:3;4770:37;4695:118;;:::o;4819:364::-;4907:3;4935:39;4968:5;4935:39;:::i;:::-;4990:71;5054:6;5049:3;4990:71;:::i;:::-;4983:78;;5070:52;5115:6;5110:3;5103:4;5096:5;5092:16;5070:52;:::i;:::-;5147:29;5169:6;5147:29;:::i;:::-;5142:3;5138:39;5131:46;;4911:272;4819:364;;;;:::o;5189:377::-;5295:3;5323:39;5356:5;5323:39;:::i;:::-;5378:89;5460:6;5455:3;5378:89;:::i;:::-;5371:96;;5476:52;5521:6;5516:3;5509:4;5502:5;5498:16;5476:52;:::i;:::-;5553:6;5548:3;5544:16;5537:23;;5299:267;5189:377;;;;:::o;5572:366::-;5714:3;5735:67;5799:2;5794:3;5735:67;:::i;:::-;5728:74;;5811:93;5900:3;5811:93;:::i;:::-;5929:2;5924:3;5920:12;5913:19;;5572:366;;;:::o;5944:::-;6086:3;6107:67;6171:2;6166:3;6107:67;:::i;:::-;6100:74;;6183:93;6272:3;6183:93;:::i;:::-;6301:2;6296:3;6292:12;6285:19;;5944:366;;;:::o;6316:::-;6458:3;6479:67;6543:2;6538:3;6479:67;:::i;:::-;6472:74;;6555:93;6644:3;6555:93;:::i;:::-;6673:2;6668:3;6664:12;6657:19;;6316:366;;;:::o;6688:::-;6830:3;6851:67;6915:2;6910:3;6851:67;:::i;:::-;6844:74;;6927:93;7016:3;6927:93;:::i;:::-;7045:2;7040:3;7036:12;7029:19;;6688:366;;;:::o;7060:::-;7202:3;7223:67;7287:2;7282:3;7223:67;:::i;:::-;7216:74;;7299:93;7388:3;7299:93;:::i;:::-;7417:2;7412:3;7408:12;7401:19;;7060:366;;;:::o;7432:::-;7574:3;7595:67;7659:2;7654:3;7595:67;:::i;:::-;7588:74;;7671:93;7760:3;7671:93;:::i;:::-;7789:2;7784:3;7780:12;7773:19;;7432:366;;;:::o;7804:::-;7946:3;7967:67;8031:2;8026:3;7967:67;:::i;:::-;7960:74;;8043:93;8132:3;8043:93;:::i;:::-;8161:2;8156:3;8152:12;8145:19;;7804:366;;;:::o;8176:::-;8318:3;8339:67;8403:2;8398:3;8339:67;:::i;:::-;8332:74;;8415:93;8504:3;8415:93;:::i;:::-;8533:2;8528:3;8524:12;8517:19;;8176:366;;;:::o;8548:::-;8690:3;8711:67;8775:2;8770:3;8711:67;:::i;:::-;8704:74;;8787:93;8876:3;8787:93;:::i;:::-;8905:2;8900:3;8896:12;8889:19;;8548:366;;;:::o;8920:::-;9062:3;9083:67;9147:2;9142:3;9083:67;:::i;:::-;9076:74;;9159:93;9248:3;9159:93;:::i;:::-;9277:2;9272:3;9268:12;9261:19;;8920:366;;;:::o;9292:::-;9434:3;9455:67;9519:2;9514:3;9455:67;:::i;:::-;9448:74;;9531:93;9620:3;9531:93;:::i;:::-;9649:2;9644:3;9640:12;9633:19;;9292:366;;;:::o;9664:402::-;9824:3;9845:85;9927:2;9922:3;9845:85;:::i;:::-;9838:92;;9939:93;10028:3;9939:93;:::i;:::-;10057:2;10052:3;10048:12;10041:19;;9664:402;;;:::o;10072:366::-;10214:3;10235:67;10299:2;10294:3;10235:67;:::i;:::-;10228:74;;10311:93;10400:3;10311:93;:::i;:::-;10429:2;10424:3;10420:12;10413:19;;10072:366;;;:::o;10444:402::-;10604:3;10625:85;10707:2;10702:3;10625:85;:::i;:::-;10618:92;;10719:93;10808:3;10719:93;:::i;:::-;10837:2;10832:3;10828:12;10821:19;;10444:402;;;:::o;10852:366::-;10994:3;11015:67;11079:2;11074:3;11015:67;:::i;:::-;11008:74;;11091:93;11180:3;11091:93;:::i;:::-;11209:2;11204:3;11200:12;11193:19;;10852:366;;;:::o;11224:::-;11366:3;11387:67;11451:2;11446:3;11387:67;:::i;:::-;11380:74;;11463:93;11552:3;11463:93;:::i;:::-;11581:2;11576:3;11572:12;11565:19;;11224:366;;;:::o;11596:118::-;11683:24;11701:5;11683:24;:::i;:::-;11678:3;11671:37;11596:118;;:::o;11720:112::-;11803:22;11819:5;11803:22;:::i;:::-;11798:3;11791:35;11720:112;;:::o;11838:967::-;12220:3;12242:148;12386:3;12242:148;:::i;:::-;12235:155;;12407:95;12498:3;12489:6;12407:95;:::i;:::-;12400:102;;12519:148;12663:3;12519:148;:::i;:::-;12512:155;;12684:95;12775:3;12766:6;12684:95;:::i;:::-;12677:102;;12796:3;12789:10;;11838:967;;;;;:::o;12811:222::-;12904:4;12942:2;12931:9;12927:18;12919:26;;12955:71;13023:1;13012:9;13008:17;12999:6;12955:71;:::i;:::-;12811:222;;;;:::o;13039:210::-;13126:4;13164:2;13153:9;13149:18;13141:26;;13177:65;13239:1;13228:9;13224:17;13215:6;13177:65;:::i;:::-;13039:210;;;;:::o;13255:222::-;13348:4;13386:2;13375:9;13371:18;13363:26;;13399:71;13467:1;13456:9;13452:17;13443:6;13399:71;:::i;:::-;13255:222;;;;:::o;13483:313::-;13596:4;13634:2;13623:9;13619:18;13611:26;;13683:9;13677:4;13673:20;13669:1;13658:9;13654:17;13647:47;13711:78;13784:4;13775:6;13711:78;:::i;:::-;13703:86;;13483:313;;;;:::o;13802:419::-;13968:4;14006:2;13995:9;13991:18;13983:26;;14055:9;14049:4;14045:20;14041:1;14030:9;14026:17;14019:47;14083:131;14209:4;14083:131;:::i;:::-;14075:139;;13802:419;;;:::o;14227:::-;14393:4;14431:2;14420:9;14416:18;14408:26;;14480:9;14474:4;14470:20;14466:1;14455:9;14451:17;14444:47;14508:131;14634:4;14508:131;:::i;:::-;14500:139;;14227:419;;;:::o;14652:::-;14818:4;14856:2;14845:9;14841:18;14833:26;;14905:9;14899:4;14895:20;14891:1;14880:9;14876:17;14869:47;14933:131;15059:4;14933:131;:::i;:::-;14925:139;;14652:419;;;:::o;15077:::-;15243:4;15281:2;15270:9;15266:18;15258:26;;15330:9;15324:4;15320:20;15316:1;15305:9;15301:17;15294:47;15358:131;15484:4;15358:131;:::i;:::-;15350:139;;15077:419;;;:::o;15502:::-;15668:4;15706:2;15695:9;15691:18;15683:26;;15755:9;15749:4;15745:20;15741:1;15730:9;15726:17;15719:47;15783:131;15909:4;15783:131;:::i;:::-;15775:139;;15502:419;;;:::o;15927:::-;16093:4;16131:2;16120:9;16116:18;16108:26;;16180:9;16174:4;16170:20;16166:1;16155:9;16151:17;16144:47;16208:131;16334:4;16208:131;:::i;:::-;16200:139;;15927:419;;;:::o;16352:::-;16518:4;16556:2;16545:9;16541:18;16533:26;;16605:9;16599:4;16595:20;16591:1;16580:9;16576:17;16569:47;16633:131;16759:4;16633:131;:::i;:::-;16625:139;;16352:419;;;:::o;16777:::-;16943:4;16981:2;16970:9;16966:18;16958:26;;17030:9;17024:4;17020:20;17016:1;17005:9;17001:17;16994:47;17058:131;17184:4;17058:131;:::i;:::-;17050:139;;16777:419;;;:::o;17202:::-;17368:4;17406:2;17395:9;17391:18;17383:26;;17455:9;17449:4;17445:20;17441:1;17430:9;17426:17;17419:47;17483:131;17609:4;17483:131;:::i;:::-;17475:139;;17202:419;;;:::o;17627:::-;17793:4;17831:2;17820:9;17816:18;17808:26;;17880:9;17874:4;17870:20;17866:1;17855:9;17851:17;17844:47;17908:131;18034:4;17908:131;:::i;:::-;17900:139;;17627:419;;;:::o;18052:::-;18218:4;18256:2;18245:9;18241:18;18233:26;;18305:9;18299:4;18295:20;18291:1;18280:9;18276:17;18269:47;18333:131;18459:4;18333:131;:::i;:::-;18325:139;;18052:419;;;:::o;18477:::-;18643:4;18681:2;18670:9;18666:18;18658:26;;18730:9;18724:4;18720:20;18716:1;18705:9;18701:17;18694:47;18758:131;18884:4;18758:131;:::i;:::-;18750:139;;18477:419;;;:::o;18902:::-;19068:4;19106:2;19095:9;19091:18;19083:26;;19155:9;19149:4;19145:20;19141:1;19130:9;19126:17;19119:47;19183:131;19309:4;19183:131;:::i;:::-;19175:139;;18902:419;;;:::o;19327:::-;19493:4;19531:2;19520:9;19516:18;19508:26;;19580:9;19574:4;19570:20;19566:1;19555:9;19551:17;19544:47;19608:131;19734:4;19608:131;:::i;:::-;19600:139;;19327:419;;;:::o;19752:222::-;19845:4;19883:2;19872:9;19868:18;19860:26;;19896:71;19964:1;19953:9;19949:17;19940:6;19896:71;:::i;:::-;19752:222;;;;:::o;19980:214::-;20069:4;20107:2;20096:9;20092:18;20084:26;;20120:67;20184:1;20173:9;20169:17;20160:6;20120:67;:::i;:::-;19980:214;;;;:::o;20281:99::-;20333:6;20367:5;20361:12;20351:22;;20281:99;;;:::o;20386:169::-;20470:11;20504:6;20499:3;20492:19;20544:4;20539:3;20535:14;20520:29;;20386:169;;;;:::o;20561:148::-;20663:11;20700:3;20685:18;;20561:148;;;;:::o;20715:305::-;20755:3;20774:20;20792:1;20774:20;:::i;:::-;20769:25;;20808:20;20826:1;20808:20;:::i;:::-;20803:25;;20962:1;20894:66;20890:74;20887:1;20884:81;20881:107;;;20968:18;;:::i;:::-;20881:107;21012:1;21009;21005:9;20998:16;;20715:305;;;;:::o;21026:185::-;21066:1;21083:20;21101:1;21083:20;:::i;:::-;21078:25;;21117:20;21135:1;21117:20;:::i;:::-;21112:25;;21156:1;21146:35;;21161:18;;:::i;:::-;21146:35;21203:1;21200;21196:9;21191:14;;21026:185;;;;:::o;21217:348::-;21257:7;21280:20;21298:1;21280:20;:::i;:::-;21275:25;;21314:20;21332:1;21314:20;:::i;:::-;21309:25;;21502:1;21434:66;21430:74;21427:1;21424:81;21419:1;21412:9;21405:17;21401:105;21398:131;;;21509:18;;:::i;:::-;21398:131;21557:1;21554;21550:9;21539:20;;21217:348;;;;:::o;21571:191::-;21611:4;21631:20;21649:1;21631:20;:::i;:::-;21626:25;;21665:20;21683:1;21665:20;:::i;:::-;21660:25;;21704:1;21701;21698:8;21695:34;;;21709:18;;:::i;:::-;21695:34;21754:1;21751;21747:9;21739:17;;21571:191;;;;:::o;21768:96::-;21805:7;21834:24;21852:5;21834:24;:::i;:::-;21823:35;;21768:96;;;:::o;21870:90::-;21904:7;21947:5;21940:13;21933:21;21922:32;;21870:90;;;:::o;21966:77::-;22003:7;22032:5;22021:16;;21966:77;;;:::o;22049:149::-;22085:7;22125:66;22118:5;22114:78;22103:89;;22049:149;;;:::o;22204:126::-;22241:7;22281:42;22274:5;22270:54;22259:65;;22204:126;;;:::o;22336:77::-;22373:7;22402:5;22391:16;;22336:77;;;:::o;22419:86::-;22454:7;22494:4;22487:5;22483:16;22472:27;;22419:86;;;:::o;22511:307::-;22579:1;22589:113;22603:6;22600:1;22597:13;22589:113;;;22688:1;22683:3;22679:11;22673:18;22669:1;22664:3;22660:11;22653:39;22625:2;22622:1;22618:10;22613:15;;22589:113;;;22720:6;22717:1;22714:13;22711:101;;;22800:1;22791:6;22786:3;22782:16;22775:27;22711:101;22560:258;22511:307;;;:::o;22824:171::-;22863:3;22886:24;22904:5;22886:24;:::i;:::-;22877:33;;22932:4;22925:5;22922:15;22919:41;;;22940:18;;:::i;:::-;22919:41;22987:1;22980:5;22976:13;22969:20;;22824:171;;;:::o;23001:320::-;23045:6;23082:1;23076:4;23072:12;23062:22;;23129:1;23123:4;23119:12;23150:18;23140:81;;23206:4;23198:6;23194:17;23184:27;;23140:81;23268:2;23260:6;23257:14;23237:18;23234:38;23231:84;;;23287:18;;:::i;:::-;23231:84;23052:269;23001:320;;;:::o;23327:180::-;23375:77;23372:1;23365:88;23472:4;23469:1;23462:15;23496:4;23493:1;23486:15;23513:180;23561:77;23558:1;23551:88;23658:4;23655:1;23648:15;23682:4;23679:1;23672:15;23699:180;23747:77;23744:1;23737:88;23844:4;23841:1;23834:15;23868:4;23865:1;23858:15;23885:180;23933:77;23930:1;23923:88;24030:4;24027:1;24020:15;24054:4;24051:1;24044:15;24071:180;24119:77;24116:1;24109:88;24216:4;24213:1;24206:15;24240:4;24237:1;24230:15;24380:117;24489:1;24486;24479:12;24503:102;24544:6;24595:2;24591:7;24586:2;24579:5;24575:14;24571:28;24561:38;;24503:102;;;:::o;24611:182::-;24751:34;24747:1;24739:6;24735:14;24728:58;24611:182;:::o;24799:222::-;24939:34;24935:1;24927:6;24923:14;24916:58;25008:5;25003:2;24995:6;24991:15;24984:30;24799:222;:::o;25027:170::-;25167:22;25163:1;25155:6;25151:14;25144:46;25027:170;:::o;25203:221::-;25343:34;25339:1;25331:6;25327:14;25320:58;25412:4;25407:2;25399:6;25395:15;25388:29;25203:221;:::o;25430:::-;25570:34;25566:1;25558:6;25554:14;25547:58;25639:4;25634:2;25626:6;25622:15;25615:29;25430:221;:::o;25657:179::-;25797:31;25793:1;25785:6;25781:14;25774:55;25657:179;:::o;25842:225::-;25982:34;25978:1;25970:6;25966:14;25959:58;26051:8;26046:2;26038:6;26034:15;26027:33;25842:225;:::o;26073:166::-;26213:18;26209:1;26201:6;26197:14;26190:42;26073:166;:::o;26245:220::-;26385:34;26381:1;26373:6;26369:14;26362:58;26454:3;26449:2;26441:6;26437:15;26430:28;26245:220;:::o;26471:224::-;26611:34;26607:1;26599:6;26595:14;26588:58;26680:7;26675:2;26667:6;26663:15;26656:32;26471:224;:::o;26701:223::-;26841:34;26837:1;26829:6;26825:14;26818:58;26910:6;26905:2;26897:6;26893:15;26886:31;26701:223;:::o;26930:173::-;27070:25;27066:1;27058:6;27054:14;27047:49;26930:173;:::o;27109:224::-;27249:34;27245:1;27237:6;27233:14;27226:58;27318:7;27313:2;27305:6;27301:15;27294:32;27109:224;:::o;27339:167::-;27479:19;27475:1;27467:6;27463:14;27456:43;27339:167;:::o;27512:234::-;27652:34;27648:1;27640:6;27636:14;27629:58;27721:17;27716:2;27708:6;27704:15;27697:42;27512:234;:::o;27752:181::-;27892:33;27888:1;27880:6;27876:14;27869:57;27752:181;:::o;27939:122::-;28012:24;28030:5;28012:24;:::i;:::-;28005:5;28002:35;27992:63;;28051:1;28048;28041:12;27992:63;27939:122;:::o;28067:116::-;28137:21;28152:5;28137:21;:::i;:::-;28130:5;28127:32;28117:60;;28173:1;28170;28163:12;28117:60;28067:116;:::o;28189:122::-;28262:24;28280:5;28262:24;:::i;:::-;28255:5;28252:35;28242:63;;28301:1;28298;28291:12;28242:63;28189:122;:::o;28317:120::-;28389:23;28406:5;28389:23;:::i;:::-;28382:5;28379:34;28369:62;;28427:1;28424;28417:12;28369:62;28317:120;:::o;28443:122::-;28516:24;28534:5;28516:24;:::i;:::-;28509:5;28506:35;28496:63;;28555:1;28552;28545:12;28496:63;28443:122;:::o

Swarm Source

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