ETH Price: $3,111.42 (-0.54%)
 

Overview

Max Total Supply

233,700,000 DAG

Holders

2,580 (0.00%)

Transfers

-
472 ( 82.95%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

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

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
HyperBridgeTokenWrapper

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion, MIT license
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";

/**
 * @title HyperBridgeTokenWrapper
 * @author Stardust Collective<[email protected]>
 */
contract HyperBridgeTokenWrapper is ERC20, Pausable, AccessControl {
    bytes32 public constant BRIDGE_ADMIN = keccak256("BRIDGE_ADMIN");
    bytes32 public constant BRIDGE_OPERATOR = keccak256("BRIDGE_OPERATOR");

    uint256 public authorizedSupply;
    uint8 private immutable _decimals;

    error HyperBridgeTokenWrapperInvalidAuthorizedSupply(
        uint256 value,
        uint256 authorizedSupply
    );

    error HyperBridgeTokenWrapperExceededAmount(
        uint256 value,
        uint256 authorizedSupply
    );

    event HyperBridgeTokenWrapperSupplyUpdate(
        address indexed operator,
        uint256 prevSupply,
        uint256 nextSupply
    );

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) ERC20(name_, symbol_) {
        _decimals = decimals_;

        _setRoleAdmin(BRIDGE_ADMIN, BRIDGE_ADMIN);
        _setRoleAdmin(BRIDGE_OPERATOR, BRIDGE_ADMIN);
        _grantRole(BRIDGE_ADMIN, _msgSender());
    }

    /**
     * @notice Returns the number of decimals used for token amounts
     * @return The number of decimals
     */
    function decimals() public view override returns (uint8) {
        return _decimals;
    }

    function allowedToMintValue(uint256 value) internal view {
        if (totalSupply() + value > authorizedSupply) {
            revert HyperBridgeTokenWrapperExceededAmount(
                value,
                authorizedSupply
            );
        }
    }

    /**
     * @notice Increases the authorized supply by the specified value
     * @param value The amount to increase the authorized supply by
     * @dev Only callable by BRIDGE_ADMIN role
     */
    function increaseAuthorizedSupply(
        uint256 value
    ) external onlyRole(BRIDGE_ADMIN) {
        authorizedSupply += value;
        emit HyperBridgeTokenWrapperSupplyUpdate(
            _msgSender(),
            authorizedSupply - value,
            authorizedSupply
        );
    }

    /**
     * @notice Decreases the authorized supply by the specified value
     * @param value The amount to decrease the authorized supply by
     * @dev Only callable by BRIDGE_ADMIN role
     * @dev Reverts if value exceeds current authorized supply
     */
    function decreaseAuthorizedSupply(
        uint256 value
    ) external onlyRole(BRIDGE_ADMIN) {
        if (value > authorizedSupply) {
            revert HyperBridgeTokenWrapperInvalidAuthorizedSupply(
                value,
                authorizedSupply
            );
        }
        authorizedSupply -= value;
        emit HyperBridgeTokenWrapperSupplyUpdate(
            _msgSender(),
            authorizedSupply + value,
            authorizedSupply
        );
    }

    /**
     * @notice Pauses all token transfers and minting
     * @dev Only callable by BRIDGE_ADMIN role
     */
    function pause() external onlyRole(BRIDGE_ADMIN) {
        _pause();
    }

    /**
     * @notice Unpauses token transfers and minting
     * @dev Only callable by BRIDGE_ADMIN role
     */
    function unpause() external onlyRole(BRIDGE_ADMIN) {
        _unpause();
    }

    /**
     * @notice Mints new tokens to the caller's address
     * @param value The amount of tokens to mint
     * @dev Only callable by BRIDGE_OPERATOR role when contract is not paused
     * @dev Reverts if minting would exceed authorized supply
     */
    function mint(
        uint256 value
    ) public whenNotPaused onlyRole(BRIDGE_OPERATOR) {
        allowedToMintValue(value);
        _mint(_msgSender(), value);
    }

    /**
     * @notice Burns tokens from the caller's address
     * @param value The amount of tokens to burn
     * @dev Only callable by BRIDGE_OPERATOR role when contract is not paused
     */
    function burn(
        uint256 value
    ) public whenNotPaused onlyRole(BRIDGE_OPERATOR) {
        _burn(_msgSender(), value);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)

pragma solidity ^0.8.20;

import {IAccessControl} from "./IAccessControl.sol";
import {Context} from "../utils/Context.sol";
import {ERC165} from "../utils/introspection/ERC165.sol";

/**
 * @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:
 *
 * ```solidity
 * 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}:
 *
 * ```solidity
 * 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. We recommend using {AccessControlDefaultAdminRules}
 * to enforce additional security measures for this role.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address account => bool) hasRole;
        bytes32 adminRole;
    }

    mapping(bytes32 role => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with an {AccessControlUnauthorizedAccount} error including the required role.
     */
    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 returns (bool) {
        return _roles[role].hasRole[account];
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
     * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
     * is missing `role`.
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert AccessControlUnauthorizedAccount(account, role);
        }
    }

    /**
     * @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 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 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 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 `callerConfirmation`.
     *
     * May emit a {RoleRevoked} event.
     */
    function renounceRole(bytes32 role, address callerConfirmation) public virtual {
        if (callerConfirmation != _msgSender()) {
            revert AccessControlBadConfirmation();
        }

        _revokeRole(role, callerConfirmation);
    }

    /**
     * @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 Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleGranted} event.
     */
    function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
        if (!hasRole(role, account)) {
            _roles[role].hasRole[account] = true;
            emit RoleGranted(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleRevoked} event.
     */
    function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
        if (hasRole(role, account)) {
            _roles[role].hasRole[account] = false;
            emit RoleRevoked(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol)

pragma solidity ^0.8.20;

/**
 * @dev External interface of AccessControl declared to support ERC-165 detection.
 */
interface IAccessControl {
    /**
     * @dev The `account` is missing a role.
     */
    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);

    /**
     * @dev The caller of a function is not the expected one.
     *
     * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
     */
    error AccessControlBadConfirmation();

    /**
     * @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.
     */
    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. This account bears the admin role (for the granted role).
     * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
     */
    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 `callerConfirmation`.
     */
    function renounceRole(bytes32 role, address callerConfirmation) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.2.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC-20
 * applications.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

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

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

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

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

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

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

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

pragma solidity ^0.8.20;

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

/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.20;

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

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)

pragma solidity ^0.8.20;

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

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC-165 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);
 * }
 * ```
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * 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[ERC 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);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @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 {
    bool private _paused;

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

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

    /**
     * @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 {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

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

Settings
{
  "evmVersion": "paris",
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"authorizedSupply","type":"uint256"}],"name":"HyperBridgeTokenWrapperExceededAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"authorizedSupply","type":"uint256"}],"name":"HyperBridgeTokenWrapperInvalidAuthorizedSupply","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"prevSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextSupply","type":"uint256"}],"name":"HyperBridgeTokenWrapperSupplyUpdate","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":"BRIDGE_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_OPERATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authorizedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"decreaseAuthorizedSupply","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"value","type":"uint256"}],"name":"increaseAuthorizedSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","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":"callerConfirmation","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":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051612627380380612627833981810160405281019061003291906104e6565b828281600390816100439190610792565b5080600490816100539190610792565b5050506000600560006101000a81548160ff0219169083151502179055508060ff1660808160ff16815250506100af7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d98061014560201b60201c565b6100ff7fa9496b64bff33d3a70bc826f77b838eb1270ba0aae19ef8877274177f0971ed17f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d961014560201b60201c565b61013c7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d96101316101a760201b60201c565b6101af60201b60201c565b50505050610864565b6000610156836102ad60201b60201c565b90508160066000858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b600033905090565b60006101c183836102cd60201b60201c565b6102a25760016006600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061023f6101a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506102a7565b600090505b92915050565b600060066000838152602001908152602001600020600101549050919050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61039f82610356565b810181811067ffffffffffffffff821117156103be576103bd610367565b5b80604052505050565b60006103d1610338565b90506103dd8282610396565b919050565b600067ffffffffffffffff8211156103fd576103fc610367565b5b61040682610356565b9050602081019050919050565b60005b83811015610431578082015181840152602081019050610416565b60008484015250505050565b600061045061044b846103e2565b6103c7565b90508281526020810184848401111561046c5761046b610351565b5b610477848285610413565b509392505050565b600082601f8301126104945761049361034c565b5b81516104a484826020860161043d565b91505092915050565b600060ff82169050919050565b6104c3816104ad565b81146104ce57600080fd5b50565b6000815190506104e0816104ba565b92915050565b6000806000606084860312156104ff576104fe610342565b5b600084015167ffffffffffffffff81111561051d5761051c610347565b5b6105298682870161047f565b935050602084015167ffffffffffffffff81111561054a57610549610347565b5b6105568682870161047f565b9250506040610567868287016104d1565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c357607f821691505b6020821081036105d6576105d561057c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261063e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610601565b6106488683610601565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061068f61068a61068584610660565b61066a565b610660565b9050919050565b6000819050919050565b6106a983610674565b6106bd6106b582610696565b84845461060e565b825550505050565b600090565b6106d26106c5565b6106dd8184846106a0565b505050565b5b81811015610701576106f66000826106ca565b6001810190506106e3565b5050565b601f82111561074657610717816105dc565b610720846105f1565b8101602085101561072f578190505b61074361073b856105f1565b8301826106e2565b50505b505050565b600082821c905092915050565b60006107696000198460080261074b565b1980831691505092915050565b60006107828383610758565b9150826002028217905092915050565b61079b82610571565b67ffffffffffffffff8111156107b4576107b3610367565b5b6107be82546105ab565b6107c9828285610705565b600060209050601f8311600181146107fc57600084156107ea578287015190505b6107f48582610776565b86555061085c565b601f19841661080a866105dc565b60005b828110156108325784890151825560018201915060208501945060208101905061080d565b8683101561084f578489015161084b601f891682610758565b8355505b6001600288020188555050505b505050505050565b608051611da861087f60003960006106d10152611da86000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806342966c68116100de578063a0712d6811610097578063b9cf724e11610071578063b9cf724e14610475578063d547741f14610491578063dd62ed3e146104ad578063e58c96d4146104dd5761018e565b8063a0712d681461040b578063a217fddf14610427578063a9059cbb146104455761018e565b806342966c68146103495780635c975abb1461036557806370a08231146103835780638456cb59146103b357806391d14854146103bd57806395d89b41146103ed5761018e565b806323b872dd1161014b578063313ce56711610125578063313ce567146102e757806336568abe146103055780633bbf32ab146103215780633f4ba83a1461033f5761018e565b806323b872dd1461026b578063248a9ca31461029b5780632f2ff15d146102cb5761018e565b806301ffc9a71461019357806303b14d0f146101c357806306fdde03146101e1578063095ea7b3146101ff57806318160ddd1461022f578063189aff3a1461024d575b600080fd5b6101ad60048036038101906101a891906117c4565b6104f9565b6040516101ba919061180c565b60405180910390f35b6101cb610573565b6040516101d89190611840565b60405180910390f35b6101e9610597565b6040516101f691906118eb565b60405180910390f35b610219600480360381019061021491906119a1565b610629565b604051610226919061180c565b60405180910390f35b61023761064c565b60405161024491906119f0565b60405180910390f35b610255610656565b60405161026291906119f0565b60405180910390f35b61028560048036038101906102809190611a0b565b61065c565b604051610292919061180c565b60405180910390f35b6102b560048036038101906102b09190611a8a565b61068b565b6040516102c29190611840565b60405180910390f35b6102e560048036038101906102e09190611ab7565b6106ab565b005b6102ef6106cd565b6040516102fc9190611b13565b60405180910390f35b61031f600480360381019061031a9190611ab7565b6106f5565b005b610329610770565b6040516103369190611840565b60405180910390f35b610347610794565b005b610363600480360381019061035e9190611b2e565b6107c9565b005b61036d610810565b60405161037a919061180c565b60405180910390f35b61039d60048036038101906103989190611b5b565b610827565b6040516103aa91906119f0565b60405180910390f35b6103bb61086f565b005b6103d760048036038101906103d29190611ab7565b6108a4565b6040516103e4919061180c565b60405180910390f35b6103f561090f565b60405161040291906118eb565b60405180910390f35b61042560048036038101906104209190611b2e565b6109a1565b005b61042f6109f1565b60405161043c9190611840565b60405180910390f35b61045f600480360381019061045a91906119a1565b6109f8565b60405161046c919061180c565b60405180910390f35b61048f600480360381019061048a9190611b2e565b610a1b565b005b6104ab60048036038101906104a69190611ab7565b610ac8565b005b6104c760048036038101906104c29190611b88565b610aea565b6040516104d491906119f0565b60405180910390f35b6104f760048036038101906104f29190611b2e565b610b71565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056c575061056b82610c69565b5b9050919050565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d981565b6060600380546105a690611bf7565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290611bf7565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b600080610634610cd3565b9050610641818585610cdb565b600191505092915050565b6000600254905090565b60075481565b600080610667610cd3565b9050610674858285610ced565b61067f858585610d82565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b6106b48261068b565b6106bd81610e76565b6106c78383610e8a565b50505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6106fd610cd3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610761576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076b8282610f7c565b505050565b7fa9496b64bff33d3a70bc826f77b838eb1270ba0aae19ef8877274177f0971ed181565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d96107be81610e76565b6107c661106f565b50565b6107d16110d2565b7fa9496b64bff33d3a70bc826f77b838eb1270ba0aae19ef8877274177f0971ed16107fb81610e76565b61080c610806610cd3565b83611113565b5050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d961089981610e76565b6108a1611195565b50565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461091e90611bf7565b80601f016020809104026020016040519081016040528092919081815260200182805461094a90611bf7565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b5050505050905090565b6109a96110d2565b7fa9496b64bff33d3a70bc826f77b838eb1270ba0aae19ef8877274177f0971ed16109d381610e76565b6109dc826111f8565b6109ed6109e7610cd3565b83611258565b5050565b6000801b81565b600080610a03610cd3565b9050610a10818585610d82565b600191505092915050565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d9610a4581610e76565b8160076000828254610a579190611c57565b92505081905550610a66610cd3565b73ffffffffffffffffffffffffffffffffffffffff167fa2bf894b10ceed20ab3413b8d6bbb673c79bfbd6ec5360fc0717cc20e1fa752983600754610aab9190611c8b565b600754604051610abc929190611cbf565b60405180910390a25050565b610ad18261068b565b610ada81610e76565b610ae48383610f7c565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d9610b9b81610e76565b600754821115610be657816007546040517fb0cc2c11000000000000000000000000000000000000000000000000000000008152600401610bdd929190611cbf565b60405180910390fd5b8160076000828254610bf89190611c8b565b92505081905550610c07610cd3565b73ffffffffffffffffffffffffffffffffffffffff167fa2bf894b10ceed20ab3413b8d6bbb673c79bfbd6ec5360fc0717cc20e1fa752983600754610c4c9190611c57565b600754604051610c5d929190611cbf565b60405180910390a25050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b610ce883838360016112da565b505050565b6000610cf98484610aea565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610d7c5781811015610d6c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610d6393929190611cf7565b60405180910390fd5b610d7b848484840360006112da565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610df45760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610deb9190611d2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e665760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e5d9190611d2e565b60405180910390fd5b610e718383836114b1565b505050565b610e8781610e82610cd3565b6116d6565b50565b6000610e9683836108a4565b610f715760016006600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f0e610cd3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610f76565b600090505b92915050565b6000610f8883836108a4565b156110645760006006600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611001610cd3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611069565b600090505b92915050565b611077611727565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110bb610cd3565b6040516110c89190611d2e565b60405180910390a1565b6110da610810565b15611111576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111855760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161117c9190611d2e565b60405180910390fd5b611191826000836114b1565b5050565b61119d6110d2565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111e1610cd3565b6040516111ee9190611d2e565b60405180910390a1565b6007548161120461064c565b61120e9190611c57565b111561125557806007546040517ffb0cd33c00000000000000000000000000000000000000000000000000000000815260040161124c929190611cbf565b60405180910390fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ca5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016112c19190611d2e565b60405180910390fd5b6112d6600083836114b1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361134c5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016113439190611d2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113be5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016113b59190611d2e565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156114ab578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516114a291906119f0565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115035780600260008282546114f79190611c57565b925050819055506115d6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561158f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161158693929190611cf7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361161f578060026000828254039250508190555061166c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116c991906119f0565b60405180910390a3505050565b6116e082826108a4565b6117235780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161171a929190611d49565b60405180910390fd5b5050565b61172f610810565b611765576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117a18161176c565b81146117ac57600080fd5b50565b6000813590506117be81611798565b92915050565b6000602082840312156117da576117d9611767565b5b60006117e8848285016117af565b91505092915050565b60008115159050919050565b611806816117f1565b82525050565b600060208201905061182160008301846117fd565b92915050565b6000819050919050565b61183a81611827565b82525050565b60006020820190506118556000830184611831565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561189557808201518184015260208101905061187a565b60008484015250505050565b6000601f19601f8301169050919050565b60006118bd8261185b565b6118c78185611866565b93506118d7818560208601611877565b6118e0816118a1565b840191505092915050565b6000602082019050818103600083015261190581846118b2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119388261190d565b9050919050565b6119488161192d565b811461195357600080fd5b50565b6000813590506119658161193f565b92915050565b6000819050919050565b61197e8161196b565b811461198957600080fd5b50565b60008135905061199b81611975565b92915050565b600080604083850312156119b8576119b7611767565b5b60006119c685828601611956565b92505060206119d78582860161198c565b9150509250929050565b6119ea8161196b565b82525050565b6000602082019050611a0560008301846119e1565b92915050565b600080600060608486031215611a2457611a23611767565b5b6000611a3286828701611956565b9350506020611a4386828701611956565b9250506040611a548682870161198c565b9150509250925092565b611a6781611827565b8114611a7257600080fd5b50565b600081359050611a8481611a5e565b92915050565b600060208284031215611aa057611a9f611767565b5b6000611aae84828501611a75565b91505092915050565b60008060408385031215611ace57611acd611767565b5b6000611adc85828601611a75565b9250506020611aed85828601611956565b9150509250929050565b600060ff82169050919050565b611b0d81611af7565b82525050565b6000602082019050611b286000830184611b04565b92915050565b600060208284031215611b4457611b43611767565b5b6000611b528482850161198c565b91505092915050565b600060208284031215611b7157611b70611767565b5b6000611b7f84828501611956565b91505092915050565b60008060408385031215611b9f57611b9e611767565b5b6000611bad85828601611956565b9250506020611bbe85828601611956565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c0f57607f821691505b602082108103611c2257611c21611bc8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c628261196b565b9150611c6d8361196b565b9250828201905080821115611c8557611c84611c28565b5b92915050565b6000611c968261196b565b9150611ca18361196b565b9250828203905081811115611cb957611cb8611c28565b5b92915050565b6000604082019050611cd460008301856119e1565b611ce160208301846119e1565b9392505050565b611cf18161192d565b82525050565b6000606082019050611d0c6000830186611ce8565b611d1960208301856119e1565b611d2660408301846119e1565b949350505050565b6000602082019050611d436000830184611ce8565b92915050565b6000604082019050611d5e6000830185611ce8565b611d6b6020830184611831565b939250505056fea2646970667358221220e11eff97b2e59582adc9b245f0bbd15975bac2edd9a219ca9b9f5a6a350a9e8864736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d436f6e7374656c6c6174696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034441470000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806342966c68116100de578063a0712d6811610097578063b9cf724e11610071578063b9cf724e14610475578063d547741f14610491578063dd62ed3e146104ad578063e58c96d4146104dd5761018e565b8063a0712d681461040b578063a217fddf14610427578063a9059cbb146104455761018e565b806342966c68146103495780635c975abb1461036557806370a08231146103835780638456cb59146103b357806391d14854146103bd57806395d89b41146103ed5761018e565b806323b872dd1161014b578063313ce56711610125578063313ce567146102e757806336568abe146103055780633bbf32ab146103215780633f4ba83a1461033f5761018e565b806323b872dd1461026b578063248a9ca31461029b5780632f2ff15d146102cb5761018e565b806301ffc9a71461019357806303b14d0f146101c357806306fdde03146101e1578063095ea7b3146101ff57806318160ddd1461022f578063189aff3a1461024d575b600080fd5b6101ad60048036038101906101a891906117c4565b6104f9565b6040516101ba919061180c565b60405180910390f35b6101cb610573565b6040516101d89190611840565b60405180910390f35b6101e9610597565b6040516101f691906118eb565b60405180910390f35b610219600480360381019061021491906119a1565b610629565b604051610226919061180c565b60405180910390f35b61023761064c565b60405161024491906119f0565b60405180910390f35b610255610656565b60405161026291906119f0565b60405180910390f35b61028560048036038101906102809190611a0b565b61065c565b604051610292919061180c565b60405180910390f35b6102b560048036038101906102b09190611a8a565b61068b565b6040516102c29190611840565b60405180910390f35b6102e560048036038101906102e09190611ab7565b6106ab565b005b6102ef6106cd565b6040516102fc9190611b13565b60405180910390f35b61031f600480360381019061031a9190611ab7565b6106f5565b005b610329610770565b6040516103369190611840565b60405180910390f35b610347610794565b005b610363600480360381019061035e9190611b2e565b6107c9565b005b61036d610810565b60405161037a919061180c565b60405180910390f35b61039d60048036038101906103989190611b5b565b610827565b6040516103aa91906119f0565b60405180910390f35b6103bb61086f565b005b6103d760048036038101906103d29190611ab7565b6108a4565b6040516103e4919061180c565b60405180910390f35b6103f561090f565b60405161040291906118eb565b60405180910390f35b61042560048036038101906104209190611b2e565b6109a1565b005b61042f6109f1565b60405161043c9190611840565b60405180910390f35b61045f600480360381019061045a91906119a1565b6109f8565b60405161046c919061180c565b60405180910390f35b61048f600480360381019061048a9190611b2e565b610a1b565b005b6104ab60048036038101906104a69190611ab7565b610ac8565b005b6104c760048036038101906104c29190611b88565b610aea565b6040516104d491906119f0565b60405180910390f35b6104f760048036038101906104f29190611b2e565b610b71565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056c575061056b82610c69565b5b9050919050565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d981565b6060600380546105a690611bf7565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290611bf7565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b600080610634610cd3565b9050610641818585610cdb565b600191505092915050565b6000600254905090565b60075481565b600080610667610cd3565b9050610674858285610ced565b61067f858585610d82565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b6106b48261068b565b6106bd81610e76565b6106c78383610e8a565b50505050565b60007f0000000000000000000000000000000000000000000000000000000000000008905090565b6106fd610cd3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610761576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076b8282610f7c565b505050565b7fa9496b64bff33d3a70bc826f77b838eb1270ba0aae19ef8877274177f0971ed181565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d96107be81610e76565b6107c661106f565b50565b6107d16110d2565b7fa9496b64bff33d3a70bc826f77b838eb1270ba0aae19ef8877274177f0971ed16107fb81610e76565b61080c610806610cd3565b83611113565b5050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d961089981610e76565b6108a1611195565b50565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461091e90611bf7565b80601f016020809104026020016040519081016040528092919081815260200182805461094a90611bf7565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b5050505050905090565b6109a96110d2565b7fa9496b64bff33d3a70bc826f77b838eb1270ba0aae19ef8877274177f0971ed16109d381610e76565b6109dc826111f8565b6109ed6109e7610cd3565b83611258565b5050565b6000801b81565b600080610a03610cd3565b9050610a10818585610d82565b600191505092915050565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d9610a4581610e76565b8160076000828254610a579190611c57565b92505081905550610a66610cd3565b73ffffffffffffffffffffffffffffffffffffffff167fa2bf894b10ceed20ab3413b8d6bbb673c79bfbd6ec5360fc0717cc20e1fa752983600754610aab9190611c8b565b600754604051610abc929190611cbf565b60405180910390a25050565b610ad18261068b565b610ada81610e76565b610ae48383610f7c565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f7d61affb77d4847fb7ed1aa1837313fe7cff9524de0388714b3afb2334f1c8d9610b9b81610e76565b600754821115610be657816007546040517fb0cc2c11000000000000000000000000000000000000000000000000000000008152600401610bdd929190611cbf565b60405180910390fd5b8160076000828254610bf89190611c8b565b92505081905550610c07610cd3565b73ffffffffffffffffffffffffffffffffffffffff167fa2bf894b10ceed20ab3413b8d6bbb673c79bfbd6ec5360fc0717cc20e1fa752983600754610c4c9190611c57565b600754604051610c5d929190611cbf565b60405180910390a25050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b610ce883838360016112da565b505050565b6000610cf98484610aea565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610d7c5781811015610d6c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610d6393929190611cf7565b60405180910390fd5b610d7b848484840360006112da565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610df45760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610deb9190611d2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e665760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e5d9190611d2e565b60405180910390fd5b610e718383836114b1565b505050565b610e8781610e82610cd3565b6116d6565b50565b6000610e9683836108a4565b610f715760016006600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f0e610cd3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610f76565b600090505b92915050565b6000610f8883836108a4565b156110645760006006600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611001610cd3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611069565b600090505b92915050565b611077611727565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110bb610cd3565b6040516110c89190611d2e565b60405180910390a1565b6110da610810565b15611111576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111855760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161117c9190611d2e565b60405180910390fd5b611191826000836114b1565b5050565b61119d6110d2565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111e1610cd3565b6040516111ee9190611d2e565b60405180910390a1565b6007548161120461064c565b61120e9190611c57565b111561125557806007546040517ffb0cd33c00000000000000000000000000000000000000000000000000000000815260040161124c929190611cbf565b60405180910390fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ca5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016112c19190611d2e565b60405180910390fd5b6112d6600083836114b1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361134c5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016113439190611d2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113be5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016113b59190611d2e565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156114ab578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516114a291906119f0565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115035780600260008282546114f79190611c57565b925050819055506115d6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561158f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161158693929190611cf7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361161f578060026000828254039250508190555061166c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116c991906119f0565b60405180910390a3505050565b6116e082826108a4565b6117235780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161171a929190611d49565b60405180910390fd5b5050565b61172f610810565b611765576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117a18161176c565b81146117ac57600080fd5b50565b6000813590506117be81611798565b92915050565b6000602082840312156117da576117d9611767565b5b60006117e8848285016117af565b91505092915050565b60008115159050919050565b611806816117f1565b82525050565b600060208201905061182160008301846117fd565b92915050565b6000819050919050565b61183a81611827565b82525050565b60006020820190506118556000830184611831565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561189557808201518184015260208101905061187a565b60008484015250505050565b6000601f19601f8301169050919050565b60006118bd8261185b565b6118c78185611866565b93506118d7818560208601611877565b6118e0816118a1565b840191505092915050565b6000602082019050818103600083015261190581846118b2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119388261190d565b9050919050565b6119488161192d565b811461195357600080fd5b50565b6000813590506119658161193f565b92915050565b6000819050919050565b61197e8161196b565b811461198957600080fd5b50565b60008135905061199b81611975565b92915050565b600080604083850312156119b8576119b7611767565b5b60006119c685828601611956565b92505060206119d78582860161198c565b9150509250929050565b6119ea8161196b565b82525050565b6000602082019050611a0560008301846119e1565b92915050565b600080600060608486031215611a2457611a23611767565b5b6000611a3286828701611956565b9350506020611a4386828701611956565b9250506040611a548682870161198c565b9150509250925092565b611a6781611827565b8114611a7257600080fd5b50565b600081359050611a8481611a5e565b92915050565b600060208284031215611aa057611a9f611767565b5b6000611aae84828501611a75565b91505092915050565b60008060408385031215611ace57611acd611767565b5b6000611adc85828601611a75565b9250506020611aed85828601611956565b9150509250929050565b600060ff82169050919050565b611b0d81611af7565b82525050565b6000602082019050611b286000830184611b04565b92915050565b600060208284031215611b4457611b43611767565b5b6000611b528482850161198c565b91505092915050565b600060208284031215611b7157611b70611767565b5b6000611b7f84828501611956565b91505092915050565b60008060408385031215611b9f57611b9e611767565b5b6000611bad85828601611956565b9250506020611bbe85828601611956565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c0f57607f821691505b602082108103611c2257611c21611bc8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c628261196b565b9150611c6d8361196b565b9250828201905080821115611c8557611c84611c28565b5b92915050565b6000611c968261196b565b9150611ca18361196b565b9250828203905081811115611cb957611cb8611c28565b5b92915050565b6000604082019050611cd460008301856119e1565b611ce160208301846119e1565b9392505050565b611cf18161192d565b82525050565b6000606082019050611d0c6000830186611ce8565b611d1960208301856119e1565b611d2660408301846119e1565b949350505050565b6000602082019050611d436000830184611ce8565b92915050565b6000604082019050611d5e6000830185611ce8565b611d6b6020830184611831565b939250505056fea2646970667358221220e11eff97b2e59582adc9b245f0bbd15975bac2edd9a219ca9b9f5a6a350a9e8864736f6c634300081c0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d436f6e7374656c6c6174696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034441470000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Constellation
Arg [1] : symbol_ (string): DAG
Arg [2] : decimals_ (uint8): 8

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 436f6e7374656c6c6174696f6e00000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4441470000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

379:3893:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2565:202:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;452:64:10;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1779:89:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2849:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;599:31:10;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4776:244:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3810:120:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4226:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1501:90:10;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5328:245:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;522:70:10;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3421:78;;;:::i;:::-;;4137:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1850:84:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3004:116:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3226:74:10;;;:::i;:::-;;2854:136:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1981:93:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3766:168:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2187:49:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3315:178:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2063:291:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4642:138:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3551:140:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2624:479:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2565:202:0;2650:4;2688:32;2673:47;;;:11;:47;;;;:87;;;;2724:36;2748:11;2724:23;:36::i;:::-;2673:87;2666:94;;2565:202;;;:::o;452:64:10:-;491:25;452:64;:::o;1779:89:3:-;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;4087:13;4103:12;:10;:12::i;:::-;4087:28;;4125:31;4134:5;4141:7;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;:::o;2849:97::-;2901:7;2927:12;;2920:19;;2849:97;:::o;599:31:10:-;;;;:::o;4776:244:3:-;4863:4;4879:15;4897:12;:10;:12::i;:::-;4879:30;;4919:37;4935:4;4941:7;4950:5;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;5009:4;5002:11;;;4776:244;;;;;:::o;3810:120:0:-;3875:7;3901:6;:12;3908:4;3901:12;;;;;;;;;;;:22;;;3894:29;;3810:120;;;:::o;4226:136::-;4300:18;4313:4;4300:12;:18::i;:::-;2464:16;2475:4;2464:10;:16::i;:::-;4330:25:::1;4341:4;4347:7;4330:10;:25::i;:::-;;4226:136:::0;;;:::o;1501:90:10:-;1551:5;1575:9;1568:16;;1501:90;:::o;5328:245:0:-;5443:12;:10;:12::i;:::-;5421:34;;:18;:34;;;5417:102;;5478:30;;;;;;;;;;;;;;5417:102;5529:37;5541:4;5547:18;5529:11;:37::i;:::-;;5328:245;;:::o;522:70:10:-;564:28;522:70;:::o;3421:78::-;491:25;2464:16:0;2475:4;2464:10;:16::i;:::-;3482:10:10::1;:8;:10::i;:::-;3421:78:::0;:::o;4137:133::-;1474:19:7;:17;:19::i;:::-;564:28:10::1;2464:16:0;2475:4;2464:10;:16::i;:::-;4237:26:10::2;4243:12;:10;:12::i;:::-;4257:5;4237;:26::i;:::-;1503:1:7::1;4137:133:10::0;:::o;1850:84:7:-;1897:4;1920:7;;;;;;;;;;;1913:14;;1850:84;:::o;3004:116:3:-;3069:7;3095:9;:18;3105:7;3095:18;;;;;;;;;;;;;;;;3088:25;;3004:116;;;:::o;3226:74:10:-;491:25;2464:16:0;2475:4;2464:10;:16::i;:::-;3285:8:10::1;:6;:8::i;:::-;3226:74:::0;:::o;2854:136:0:-;2931:4;2954:6;:12;2961:4;2954:12;;;;;;;;;;;:20;;:29;2975:7;2954:29;;;;;;;;;;;;;;;;;;;;;;;;;2947:36;;2854:136;;;;:::o;1981:93:3:-;2028:13;2060:7;2053:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1981:93;:::o;3766:168:10:-;1474:19:7;:17;:19::i;:::-;564:28:10::1;2464:16:0;2475:4;2464:10;:16::i;:::-;3866:25:10::2;3885:5;3866:18;:25::i;:::-;3901:26;3907:12;:10;:12::i;:::-;3921:5;3901;:26::i;:::-;1503:1:7::1;3766:168:10::0;:::o;2187:49:0:-;2232:4;2187:49;;;:::o;3315:178:3:-;3384:4;3400:13;3416:12;:10;:12::i;:::-;3400:28;;3438:27;3448:5;3455:2;3459:5;3438:9;:27::i;:::-;3482:4;3475:11;;;3315:178;;;;:::o;2063:291:10:-;491:25;2464:16:0;2475:4;2464:10;:16::i;:::-;2188:5:10::1;2168:16;;:25;;;;;;;:::i;:::-;;;;;;;;2257:12;:10;:12::i;:::-;2208:139;;;2302:5;2283:16;;:24;;;;:::i;:::-;2321:16;;2208:139;;;;;;;:::i;:::-;;;;;;;;2063:291:::0;;:::o;4642:138:0:-;4717:18;4730:4;4717:12;:18::i;:::-;2464:16;2475:4;2464:10;:16::i;:::-;4747:26:::1;4759:4;4765:7;4747:11;:26::i;:::-;;4642:138:::0;;;:::o;3551:140:3:-;3631:7;3657:11;:18;3669:5;3657:18;;;;;;;;;;;;;;;:27;3676:7;3657:27;;;;;;;;;;;;;;;;3650:34;;3551:140;;;;:::o;2624:479:10:-;491:25;2464:16:0;2475:4;2464:10;:16::i;:::-;2741::10::1;;2733:5;:24;2729:179;;;2844:5;2867:16;;2780:117;;;;;;;;;;;;:::i;:::-;;;;;;;;2729:179;2937:5;2917:16;;:25;;;;;;;:::i;:::-;;;;;;;;3006:12;:10;:12::i;:::-;2957:139;;;3051:5;3032:16;;:24;;;;:::i;:::-;3070:16;;2957:139;;;;;;;:::i;:::-;;;;;;;;2624:479:::0;;:::o;763:146:8:-;839:4;877:25;862:40;;;:11;:40;;;;855:47;;763:146;;;:::o;656:96:6:-;709:7;735:10;728:17;;656:96;:::o;8726:128:3:-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;10415:476::-;10514:24;10541:25;10551:5;10558:7;10541:9;:25::i;:::-;10514:52;;10599:17;10580:16;:36;10576:309;;;10655:5;10636:16;:24;10632:130;;;10714:7;10723:16;10741:5;10687:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10632:130;10803:57;10812:5;10819:7;10847:5;10828:16;:24;10854:5;10803:8;:57::i;:::-;10576:309;10504:387;10415:476;;;:::o;5393:300::-;5492:1;5476:18;;:4;:18;;;5472:86;;5544:1;5517:30;;;;;;;;;;;:::i;:::-;;;;;;;;5472:86;5585:1;5571:16;;:2;:16;;;5567:86;;5639:1;5610:32;;;;;;;;;;;:::i;:::-;;;;;;;;5567:86;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;:::-;5393:300;;;:::o;3199:103:0:-;3265:30;3276:4;3282:12;:10;:12::i;:::-;3265:10;:30::i;:::-;3199:103;:::o;6179:316::-;6256:4;6277:22;6285:4;6291:7;6277;:22::i;:::-;6272:217;;6347:4;6315:6;:12;6322:4;6315:12;;;;;;;;;;;:20;;:29;6336:7;6315:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;6397:12;:10;:12::i;:::-;6370:40;;6388:7;6370:40;;6382:4;6370:40;;;;;;;;;;6431:4;6424:11;;;;6272:217;6473:5;6466:12;;6179:316;;;;;:::o;6730:317::-;6808:4;6828:22;6836:4;6842:7;6828;:22::i;:::-;6824:217;;;6898:5;6866:6;:12;6873:4;6866:12;;;;;;;;;;;:20;;:29;6887:7;6866:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;6949:12;:10;:12::i;:::-;6922:40;;6940:7;6922:40;;6934:4;6922:40;;;;;;;;;;6983:4;6976:11;;;;6824:217;7025:5;7018:12;;6730:317;;;;;:::o;2710:117:7:-;1721:16;:14;:16::i;:::-;2778:5:::1;2768:7;;:15;;;;;;;;;;;;;;;;;;2798:22;2807:12;:10;:12::i;:::-;2798:22;;;;;;:::i;:::-;;;;;;;;2710:117::o:0;2002:128::-;2067:8;:6;:8::i;:::-;2063:61;;;2098:15;;;;;;;;;;;;;;2063:61;2002:128::o;7984:206:3:-;8073:1;8054:21;;:7;:21;;;8050:89;;8125:1;8098:30;;;;;;;;;;;:::i;:::-;;;;;;;;8050:89;8148:35;8156:7;8173:1;8177:5;8148:7;:35::i;:::-;7984:206;;:::o;2463:115:7:-;1474:19;:17;:19::i;:::-;2532:4:::1;2522:7;;:14;;;;;;;;;;;;;;;;;;2551:20;2558:12;:10;:12::i;:::-;2551:20;;;;;;:::i;:::-;;;;;;;;2463:115::o:0;1597:259:10:-;1692:16;;1684:5;1668:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:40;1664:186;;;1786:5;1809:16;;1731:108;;;;;;;;;;;;:::i;:::-;;;;;;;;1664:186;1597:259;:::o;7458:208:3:-;7547:1;7528:21;;:7;:21;;;7524:91;;7601:1;7572:32;;;;;;;;;;;:::i;:::-;;;;;;;;7524:91;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;:::-;7458:208;;:::o;9701:432::-;9830:1;9813:19;;:5;:19;;;9809:89;;9884:1;9855:32;;;;;;;;;;;:::i;:::-;;;;;;;;9809:89;9930:1;9911:21;;:7;:21;;;9907:90;;9983:1;9955:31;;;;;;;;;;;:::i;:::-;;;;;;;;9907:90;10036:5;10006:11;:18;10018:5;10006:18;;;;;;;;;;;;;;;:27;10025:7;10006:27;;;;;;;;;;;;;;;:35;;;;10055:9;10051:76;;;10101:7;10085:31;;10094:5;10085:31;;;10110:5;10085:31;;;;;;:::i;:::-;;;;;;;;10051:76;9701:432;;;;:::o;6008:1107::-;6113:1;6097:18;;:4;:18;;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;;;;;6093:540;;;6285:19;6307:9;:15;6317:4;6307:15;;;;;;;;;;;;;;;;6285:37;;6354:5;6340:11;:19;6336:115;;;6411:4;6417:11;6430:5;6386:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6336:115;6603:5;6589:11;:19;6571:9;:15;6581:4;6571:15;;;;;;;;;;;;;;;:37;;;;6271:362;6093:540;6661:1;6647:16;;:2;:16;;;6643:425;;6826:5;6810:12;;:21;;;;;;;;;;;6643:425;;;7038:5;7021:9;:13;7031:2;7021:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6643:425;7098:2;7083:25;;7092:4;7083:25;;;7102:5;7083:25;;;;;;:::i;:::-;;;;;;;;6008:1107;;;:::o;3432:197:0:-;3520:22;3528:4;3534:7;3520;:22::i;:::-;3515:108;;3598:7;3607:4;3565:47;;;;;;;;;;;;:::i;:::-;;;;;;;;3515:108;3432:197;;:::o;2202:126:7:-;2265:8;:6;:8::i;:::-;2260:62;;2296:15;;;;;;;;;;;;;;2260:62;2202:126::o;88:117:11:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:248::-;2315:1;2325:113;2339:6;2336:1;2333:13;2325:113;;;2424:1;2419:3;2415:11;2409:18;2405:1;2400:3;2396:11;2389:39;2361:2;2358:1;2354:10;2349:15;;2325:113;;;2472:1;2463:6;2458:3;2454:16;2447:27;2295:186;2233:248;;;:::o;2487:102::-;2528:6;2579:2;2575:7;2570:2;2563:5;2559:14;2555:28;2545:38;;2487:102;;;:::o;2595:377::-;2683:3;2711:39;2744:5;2711:39;:::i;:::-;2766:71;2830:6;2825:3;2766:71;:::i;:::-;2759:78;;2846:65;2904:6;2899:3;2892:4;2885:5;2881:16;2846:65;:::i;:::-;2936:29;2958:6;2936:29;:::i;:::-;2931:3;2927:39;2920:46;;2687:285;2595:377;;;;:::o;2978:313::-;3091:4;3129:2;3118:9;3114:18;3106:26;;3178:9;3172:4;3168:20;3164:1;3153:9;3149:17;3142:47;3206:78;3279:4;3270:6;3206:78;:::i;:::-;3198:86;;2978:313;;;;:::o;3297:126::-;3334:7;3374:42;3367:5;3363:54;3352:65;;3297:126;;;:::o;3429:96::-;3466:7;3495:24;3513:5;3495:24;:::i;:::-;3484:35;;3429:96;;;:::o;3531:122::-;3604:24;3622:5;3604:24;:::i;:::-;3597:5;3594:35;3584:63;;3643:1;3640;3633:12;3584:63;3531:122;:::o;3659:139::-;3705:5;3743:6;3730:20;3721:29;;3759:33;3786:5;3759:33;:::i;:::-;3659:139;;;;:::o;3804:77::-;3841:7;3870:5;3859:16;;3804:77;;;:::o;3887:122::-;3960:24;3978:5;3960:24;:::i;:::-;3953:5;3950:35;3940:63;;3999:1;3996;3989:12;3940:63;3887:122;:::o;4015:139::-;4061:5;4099:6;4086:20;4077:29;;4115:33;4142:5;4115:33;:::i;:::-;4015:139;;;;:::o;4160:474::-;4228:6;4236;4285:2;4273:9;4264:7;4260:23;4256:32;4253:119;;;4291:79;;:::i;:::-;4253:119;4411:1;4436:53;4481:7;4472:6;4461:9;4457:22;4436:53;:::i;:::-;4426:63;;4382:117;4538:2;4564:53;4609:7;4600:6;4589:9;4585:22;4564:53;:::i;:::-;4554:63;;4509:118;4160:474;;;;;:::o;4640:118::-;4727:24;4745:5;4727:24;:::i;:::-;4722:3;4715:37;4640:118;;:::o;4764:222::-;4857:4;4895:2;4884:9;4880:18;4872:26;;4908:71;4976:1;4965:9;4961:17;4952:6;4908:71;:::i;:::-;4764:222;;;;:::o;4992:619::-;5069:6;5077;5085;5134:2;5122:9;5113:7;5109:23;5105:32;5102:119;;;5140:79;;:::i;:::-;5102:119;5260:1;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5231:117;5387:2;5413:53;5458:7;5449:6;5438:9;5434:22;5413:53;:::i;:::-;5403:63;;5358:118;5515:2;5541:53;5586:7;5577:6;5566:9;5562:22;5541:53;:::i;:::-;5531:63;;5486:118;4992:619;;;;;:::o;5617:122::-;5690:24;5708:5;5690:24;:::i;:::-;5683:5;5680:35;5670:63;;5729:1;5726;5719:12;5670:63;5617:122;:::o;5745:139::-;5791:5;5829:6;5816:20;5807:29;;5845:33;5872:5;5845:33;:::i;:::-;5745:139;;;;:::o;5890:329::-;5949:6;5998:2;5986:9;5977:7;5973:23;5969:32;5966:119;;;6004:79;;:::i;:::-;5966:119;6124:1;6149:53;6194:7;6185:6;6174:9;6170:22;6149:53;:::i;:::-;6139:63;;6095:117;5890:329;;;;:::o;6225:474::-;6293:6;6301;6350:2;6338:9;6329:7;6325:23;6321:32;6318:119;;;6356:79;;:::i;:::-;6318:119;6476:1;6501:53;6546:7;6537:6;6526:9;6522:22;6501:53;:::i;:::-;6491:63;;6447:117;6603:2;6629:53;6674:7;6665:6;6654:9;6650:22;6629:53;:::i;:::-;6619:63;;6574:118;6225:474;;;;;:::o;6705:86::-;6740:7;6780:4;6773:5;6769:16;6758:27;;6705:86;;;:::o;6797:112::-;6880:22;6896:5;6880:22;:::i;:::-;6875:3;6868:35;6797:112;;:::o;6915:214::-;7004:4;7042:2;7031:9;7027:18;7019:26;;7055:67;7119:1;7108:9;7104:17;7095:6;7055:67;:::i;:::-;6915:214;;;;:::o;7135:329::-;7194:6;7243:2;7231:9;7222:7;7218:23;7214:32;7211:119;;;7249:79;;:::i;:::-;7211:119;7369:1;7394:53;7439:7;7430:6;7419:9;7415:22;7394:53;:::i;:::-;7384:63;;7340:117;7135:329;;;;:::o;7470:::-;7529:6;7578:2;7566:9;7557:7;7553:23;7549:32;7546:119;;;7584:79;;:::i;:::-;7546:119;7704:1;7729:53;7774:7;7765:6;7754:9;7750:22;7729:53;:::i;:::-;7719:63;;7675:117;7470:329;;;;:::o;7805:474::-;7873:6;7881;7930:2;7918:9;7909:7;7905:23;7901:32;7898:119;;;7936:79;;:::i;:::-;7898:119;8056:1;8081:53;8126:7;8117:6;8106:9;8102:22;8081:53;:::i;:::-;8071:63;;8027:117;8183:2;8209:53;8254:7;8245:6;8234:9;8230:22;8209:53;:::i;:::-;8199:63;;8154:118;7805:474;;;;;:::o;8285:180::-;8333:77;8330:1;8323:88;8430:4;8427:1;8420:15;8454:4;8451:1;8444:15;8471:320;8515:6;8552:1;8546:4;8542:12;8532:22;;8599:1;8593:4;8589:12;8620:18;8610:81;;8676:4;8668:6;8664:17;8654:27;;8610:81;8738:2;8730:6;8727:14;8707:18;8704:38;8701:84;;8757:18;;:::i;:::-;8701:84;8522:269;8471:320;;;:::o;8797:180::-;8845:77;8842:1;8835:88;8942:4;8939:1;8932:15;8966:4;8963:1;8956:15;8983:191;9023:3;9042:20;9060:1;9042:20;:::i;:::-;9037:25;;9076:20;9094:1;9076:20;:::i;:::-;9071:25;;9119:1;9116;9112:9;9105:16;;9140:3;9137:1;9134:10;9131:36;;;9147:18;;:::i;:::-;9131:36;8983:191;;;;:::o;9180:194::-;9220:4;9240:20;9258:1;9240:20;:::i;:::-;9235:25;;9274:20;9292:1;9274:20;:::i;:::-;9269:25;;9318:1;9315;9311:9;9303:17;;9342:1;9336:4;9333:11;9330:37;;;9347:18;;:::i;:::-;9330:37;9180:194;;;;:::o;9380:332::-;9501:4;9539:2;9528:9;9524:18;9516:26;;9552:71;9620:1;9609:9;9605:17;9596:6;9552:71;:::i;:::-;9633:72;9701:2;9690:9;9686:18;9677:6;9633:72;:::i;:::-;9380:332;;;;;:::o;9718:118::-;9805:24;9823:5;9805:24;:::i;:::-;9800:3;9793:37;9718:118;;:::o;9842:442::-;9991:4;10029:2;10018:9;10014:18;10006:26;;10042:71;10110:1;10099:9;10095:17;10086:6;10042:71;:::i;:::-;10123:72;10191:2;10180:9;10176:18;10167:6;10123:72;:::i;:::-;10205;10273:2;10262:9;10258:18;10249:6;10205:72;:::i;:::-;9842:442;;;;;;:::o;10290:222::-;10383:4;10421:2;10410:9;10406:18;10398:26;;10434:71;10502:1;10491:9;10487:17;10478:6;10434:71;:::i;:::-;10290:222;;;;:::o;10518:332::-;10639:4;10677:2;10666:9;10662:18;10654:26;;10690:71;10758:1;10747:9;10743:17;10734:6;10690:71;:::i;:::-;10771:72;10839:2;10828:9;10824:18;10815:6;10771:72;:::i;:::-;10518:332;;;;;:::o

Swarm Source

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