ETH Price: $2,956.76 (-0.00%)

Token

veCARV (veCARV)

Overview

Max Total Supply

51,693,904.55710369431090189 veCARV

Holders

9,552

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
30.8 veCARV

Value
$0.00
0x38D6189DE48464a168Eb50D52b681a44EA1F7D69
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
veCarvToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, GNU LGPLv3 license
/**
 *Submitted for verification at Arbiscan.io on 2024-10-09
*/

// Sources flattened with hardhat v2.22.6 https://hardhat.org

// SPDX-License-Identifier: GPL-3.0 AND MIT

// File @openzeppelin/contracts/access/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol)

pragma solidity ^0.8.20;

/**
 * @dev External interface of AccessControl declared to support ERC165 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, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]

// Original license: 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;
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

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


// File @openzeppelin/contracts/utils/introspection/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)

pragma solidity ^0.8.20;

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


// File @openzeppelin/contracts/access/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)

pragma solidity ^0.8.20;



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


// File @openzeppelin/contracts/interfaces/[email protected]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        emit Transfer(from, to, value);
    }

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error AddressInsufficientBalance(address account);

    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedInnerCall();

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        if (address(this).balance < amount) {
            revert AddressInsufficientBalance(address(this));
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert FailedInnerCall();
        }
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason or custom error, it is bubbled
     * up by this function (like regular Solidity function calls). However, if
     * the call reverted with no returned reason, this function reverts with a
     * {FailedInnerCall} error.
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
     * unsuccessful call.
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            // only check if target is a contract if the call was successful and the return data is empty
            // otherwise we already know that it was a contract
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
     * revert reason or with a default {FailedInnerCall} error.
     */
    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    /**
     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
     */
    function _revert(bytes memory returndata) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert FailedInnerCall();
        }
    }
}


// File @openzeppelin/contracts/utils/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Multicall.sol)

pragma solidity ^0.8.20;


/**
 * @dev Provides a function to batch together multiple calls in a single external call.
 *
 * Consider any assumption about calldata validation performed by the sender may be violated if it's not especially
 * careful about sending transactions invoking {multicall}. For example, a relay address that filters function
 * selectors won't filter calls nested within a {multicall} operation.
 *
 * NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}).
 * If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data`
 * to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of
 * {_msgSender} are not propagated to subcalls.
 */
abstract contract Multicall is Context {
    /**
     * @dev Receives and executes a batch of function calls on this contract.
     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall
     */
    function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {
        bytes memory context = msg.sender == _msgSender()
            ? new bytes(0)
            : msg.data[msg.data.length - _contextSuffixLength():];

        results = new bytes[](data.length);
        for (uint256 i = 0; i < data.length; i++) {
            results[i] = Address.functionDelegateCall(address(this), bytes.concat(data[i], context));
        }
        return results;
    }
}


// File contracts/interfaces/IveCarv.sol

// Original license: SPDX_License_Identifier: GPL-3.0
pragma solidity 0.8.20;

interface IveCarv {

    /**
     * @notice This struct represents information about a Withdraw by the user.
     *
     * `withdrawer`: address of who initiates this Withdraw.
     * `canceledOrClaimed`: Has this Withdraw been canceled or claimed?
     * `amount`: The amount of Withdraw initiated by the user.
     * `timestamp`: The time this Withdraw was initiated.
     */
    struct WithdrawInfo {
        address withdrawer;
        bool canceledOrClaimed;
        uint256 amount;
        uint256 claimAmount;
        uint256 endAt;
    }

    event Deposit(address depositor, address receiver, uint256 amount);

    event Withdraw(uint64 indexed id, address withdrawer, uint256 amount, uint256 duration);

    event CancelWithdraw(uint64 indexed id);

    event Claim(uint64 id, uint256 amount);

    /**
     * @notice convert CARV to veCARV by locking CARV in this contract and minting veCARV to msg.sender.
     * @notice CARV can be converted to veCARV with 1:1 ratio through deposit.
     * @notice veCARV stands for voting-escrow CARV, is a non-transferable token. veCARV is mainly used for:
     * @notice 1. CARV Protocol governance.
     * @notice 2. Incentive to bootstrap incentive layer, e.g., data owners, providers, consumers.
     * @notice 3. Used for governance voting in P2E system 'Infinite Play'.
     * @notice 4. Used in P2E systems to delegate voting rights to escrow pool owners and receive pool rewards.
     * @notice 5. Incentivizes node operators who secure and support the network.
     *
     * @dev Emits `Deposit`.
     *
     * @param amount: amount of CARV to be deposited
     * @param receiver: receiver of veCARV Token
     */
    function deposit(uint256 amount, address receiver) external;

    /**
     * @notice convert veCARV to CARV, veCARV conversion to CARV requires an unlocking period.
     * @notice The withdraw rate varies for different unlocking periods,
     * @notice with longer unlocking periods resulting in higher withdraw rates, reaching up to 100%.
     * @notice Users are required to pay a network channel fee of 1 CARV each time they initiate a Withdraw.
     *
     * @dev Emits `Withdraw`.
     *
     * @param amount: amount of veCARV to be withdrawn
     */
    function withdraw(uint256 amount, uint256 duration) external;

    /**
     * @notice Cancel the Withdraw by withdrawID.
     * @notice It can be canceled before the user claims.
     * @notice After the operation, the locking veCARV is returned to msg.sender.
     *
     * @dev Emits `CancelWithdraw`.
     *
     * @param withdrawID: The withdrawID that the user needs to cancel
     */
    function cancelWithdraw(uint64 withdrawID) external;

    /**
     * @notice Return the CARV corresponding to the specified withdrawID to the user.
     * @notice The relationship between the user’s Locking Duration and claimable ratio is as follows:
     *    ----------------------------------------------------
     *    |   Locking Duration (Days)   |    Claims (CARV)   |
     *    |            15               |        25%         |
     *    |            90               |        60%         |
     *    |           150               |       100%         |
     *    ----------------------------------------------------
     * @notice after that, Burn the locking veCARV corresponding to the specified withdrawID
     * @notice If the Locking Duration is less than 150 days, the remaining CARV will be:
     * @notice 1. 50% enter the CARV foundation to maintain network operation.
     * @notice 2. 50% will be burned, which makes CARV deflationary.
     *
     * @dev Emits `Claim`.
     *
     * @param withdrawID: The withdrawID that the user needs to claim CARV
     */
    function claim(uint64 withdrawID) external;
}


// File contracts/veCarvToken.sol

// Original license: SPDX_License_Identifier: GPL-3.0
pragma solidity 0.8.20;




contract veCarvToken is AccessControl, ERC20, Multicall, IveCarv {
    bytes32 public constant DEPOSITOR_ROLE = keccak256("DEPOSITOR_ROLE");
    bytes32 public constant TRANSFER_ROLE = keccak256("TRANSFER_ROLE");
    bytes32 public constant TRANSFER_FROM_ROLE = keccak256("TRANSFER_FROM_ROLE");
    uint256 constant ONE = 1e18;
    uint256 constant CLAIM_RULE_PRECISION = 10000;

    uint64 public withdrawIndex;
    address public immutable carvToken;
    address public treasury;
    mapping(uint64 => WithdrawInfo) public withdrawInfos;
    mapping(uint256 => uint32) public claimRules;

    constructor(
        string memory name, string memory symbol, address carvToken_
    ) ERC20(name, symbol) {
        carvToken = carvToken_;
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);

        claimRules[150 days] = 10000;
        claimRules[90 days] = 6000;
        claimRules[15 days] = 2500;
    }

    function deposit(uint256 amount, address receiver) external onlyRole(DEPOSITOR_ROLE) {
        _mint(receiver, amount);
        IERC20(carvToken).transferFrom(msg.sender, address(this), amount);
        emit Deposit(msg.sender, receiver, amount);
    }

    function withdraw(uint256 amount, uint256 duration) external {
        // A ONE CARV fee will be charged when claiming
        require(amount > ONE, "Must more than 1 veCARV");
        require(claimRules[duration] > 0, "Invalid duration");
        _transfer(msg.sender, address(this), amount);

        uint256 claimAmount = claimRules[duration] * (amount - ONE) / CLAIM_RULE_PRECISION;
        withdrawIndex++;
        withdrawInfos[withdrawIndex] = WithdrawInfo(msg.sender, false, amount, claimAmount, block.timestamp + duration);

        emit Withdraw(withdrawIndex, msg.sender, amount, duration);
    }

    function cancelWithdraw(uint64 withdrawID) external {
        WithdrawInfo storage info = withdrawInfos[withdrawID];

        require(info.withdrawer == msg.sender, "Wrong withdrawer");
        require(!info.canceledOrClaimed, "Already canceled or claimed");

        info.canceledOrClaimed = true;
        _transfer(address(this), msg.sender, info.amount);

        emit CancelWithdraw(withdrawID);
    }

    function claim(uint64 withdrawID) external {
        WithdrawInfo storage info = withdrawInfos[withdrawID];

        require(info.withdrawer == msg.sender, "Wrong withdrawer");
        require(!info.canceledOrClaimed, "Already canceled or claimed");
        require(info.endAt <= block.timestamp, "Locking");

        info.canceledOrClaimed = true;
        _burn(address(this), info.amount);
        IERC20(carvToken).transfer(msg.sender, info.claimAmount);
        IERC20(carvToken).transfer(treasury, info.amount - info.claimAmount);

        emit Claim(withdrawID, info.claimAmount);
    }

    function setTreasuryAddress(address treasury_) external onlyRole(DEFAULT_ADMIN_ROLE) {
        treasury = treasury_;
    }

    function setClaimRules(uint256 duration, uint32 ratio) external onlyRole(DEFAULT_ADMIN_ROLE) {
        claimRules[duration] = ratio;
    }

    function transfer(address to, uint256 value) public onlyRole(TRANSFER_ROLE) override returns (bool) {
        return super.transfer(to, value);
    }

    function transferFrom(address from, address to, uint256 value) public onlyRole(TRANSFER_FROM_ROLE) override returns (bool) {
        return super.transferFrom(from, to, value);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"carvToken_","type":"address"}],"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":"target","type":"address"}],"name":"AddressEmptyCode","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":"FailedInnerCall","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":"uint64","name":"id","type":"uint64"}],"name":"CancelWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"id","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","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":true,"internalType":"uint64","name":"id","type":"uint64"},{"indexed":false,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSITOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRANSFER_FROM_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRANSFER_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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"withdrawID","type":"uint64"}],"name":"cancelWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"carvToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"withdrawID","type":"uint64"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimRules","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","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":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"duration","type":"uint256"},{"internalType":"uint32","name":"ratio","type":"uint32"}],"name":"setClaimRules","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasury_","type":"address"}],"name":"setTreasuryAddress","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":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawIndex","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"withdrawInfos","outputs":[{"internalType":"address","name":"withdrawer","type":"address"},{"internalType":"bool","name":"canceledOrClaimed","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"claimAmount","type":"uint256"},{"internalType":"uint256","name":"endAt","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b5060405162001f9f38038062001f9f833981016040819052620000349162000284565b82826004620000448382620003a0565b506005620000538282620003a0565b5050506001600160a01b0381166080526200007060003362000110565b5050600860205250507f22c52cea52c43ef574edb6a054e3d3b992950fad30168601eab353097fee4bc7805463ffffffff19908116612710179091557f73ed51d9a9ae97efc03e2e9403323ea0baee0445620c27462d3b489d9656f377805482166117701790556213c6806000527fe86554181415d0ec5b7164504d87757baa11a52fbcd0b33b0c18284f5d2c408280549091166109c41790556200046c565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16620001b5576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200016c3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620001b9565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001e757600080fd5b81516001600160401b0380821115620002045762000204620001bf565b604051601f8301601f19908116603f011681019082821181831017156200022f576200022f620001bf565b816040528381526020925086838588010111156200024c57600080fd5b600091505b8382101562000270578582018301518183018401529082019062000251565b600093810190920192909252949350505050565b6000806000606084860312156200029a57600080fd5b83516001600160401b0380821115620002b257600080fd5b620002c087838801620001d5565b94506020860151915080821115620002d757600080fd5b50620002e686828701620001d5565b604086015190935090506001600160a01b03811681146200030657600080fd5b809150509250925092565b600181811c908216806200032657607f821691505b6020821081036200034757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039b57600081815260208120601f850160051c81016020861015620003765750805b601f850160051c820191505b81811015620003975782815560010162000382565b5050505b505050565b81516001600160401b03811115620003bc57620003bc620001bf565b620003d481620003cd845462000311565b846200034d565b602080601f8311600181146200040c5760008415620003f35750858301515b600019600386901b1c1916600185901b17855562000397565b600085815260208120601f198616915b828110156200043d578886015182559484019460019091019084016200041c565b50858210156200045c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611b026200049d60003960008181610570015281816109eb01528181610c630152610cdb0152611b026000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636605bfda1161010f578063a9059cbb116100a2578063d547741f11610071578063d547741f1461051f578063dd62ed3e14610532578063e17ec7261461056b578063f8e7de701461059257600080fd5b8063a9059cbb146104c6578063aab8ab0c146104d9578063ac9650d8146104ec578063c17cbd921461050c57600080fd5b806391d14854116100de57806391d148541461047c57806395d89b411461048f578063a217fddf14610497578063a3b0b5a31461049f57600080fd5b80636605bfda146103f25780636e553f651461040557806370a082311461041857806373df8e981461044157600080fd5b8063248a9ca31161018757806336568abe1161015657806336568abe1461037357806341552a3514610386578063441a3e70146103ad57806361d027b3146103c057600080fd5b8063248a9ca3146102b15780632f2ff15d146102d4578063313ce567146102e957806335b12a95146102f857600080fd5b80630e5ef41a116101c35780630e5ef41a1461023a57806318160ddd14610265578063206b60f91461027757806323b872dd1461029e57600080fd5b806301ffc9a7146101ea57806306fdde0314610212578063095ea7b314610227575b600080fd5b6101fd6101f836600461160d565b6105a5565b60405190151581526020015b60405180910390f35b61021a6105dc565b6040516102099190611687565b6101fd6102353660046116b6565b61066e565b60065461024d906001600160401b031681565b6040516001600160401b039091168152602001610209565b6003545b604051908152602001610209565b6102697f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c81565b6101fd6102ac3660046116e0565b610686565b6102696102bf36600461171c565b60009081526020819052604090206001015490565b6102e76102e2366004611735565b6106c6565b005b60405160128152602001610209565b610341610306366004611761565b60076020526000908152604090208054600182015460028301546003909301546001600160a01b03831693600160a01b90930460ff16929085565b604080516001600160a01b0390961686529315156020860152928401919091526060830152608082015260a001610209565b6102e7610381366004611735565b6106f1565b6102697f57c667b450e8d8927c7fd0bcd78314c9e78a0a7301f5e9ad8b562f48e273a0c981565b6102e76103bb36600461178a565b610729565b6006546103da90600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610209565b6102e76104003660046117ac565b610958565b6102e7610413366004611735565b610995565b6102696104263660046117ac565b6001600160a01b031660009081526001602052604090205490565b61046761044f36600461171c565b60086020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610209565b6101fd61048a366004611735565b610aaf565b61021a610ad8565b610269600081565b6102697f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a981565b6101fd6104d43660046116b6565b610ae7565b6102e76104e7366004611761565b610b25565b6104ff6104fa3660046117c7565b610dee565b604051610209919061183b565b6102e761051a36600461189d565b610ee0565b6102e761052d366004611735565b610f14565b6102696105403660046118d6565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6103da7f000000000000000000000000000000000000000000000000000000000000000081565b6102e76105a0366004611761565b610f39565b60006001600160e01b03198216637965db0b60e01b14806105d657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600480546105eb90611900565b80601f016020809104026020016040519081016040528092919081815260200182805461061790611900565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b60003361067c818585611051565b5060019392505050565b60007f57c667b450e8d8927c7fd0bcd78314c9e78a0a7301f5e9ad8b562f48e273a0c96106b28161105e565b6106bd85858561106b565b95945050505050565b6000828152602081905260409020600101546106e18161105e565b6106eb8383611091565b50505050565b6001600160a01b038116331461071a5760405163334bd91960e11b815260040160405180910390fd5b6107248282611123565b505050565b670de0b6b3a764000082116107855760405162461bcd60e51b815260206004820152601760248201527f4d757374206d6f7265207468616e20312076654341525600000000000000000060448201526064015b60405180910390fd5b60008181526008602052604090205463ffffffff166107d95760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b604482015260640161077c565b6107e433308461118e565b60006127106107fb670de0b6b3a764000085611950565b60008481526008602052604090205461081a919063ffffffff16611963565b610824919061197a565b600680549192506001600160401b039091169060006108428361199c565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550506040518060a00160405280336001600160a01b0316815260200160001515815260200184815260200182815260200183426108a291906119c2565b9052600680546001600160401b0390811660009081526007602090815260409182902085518154878401511515600160a01b026001600160a81b03199091166001600160a01b039092169190911717815585830151600182015560608087015160028301556080909601516003909101559254815133815293840188905290830186905216917f1d7b95cb608751bc6718009a76582b8205568cfa1f0dd76b226139f147622f69910160405180910390a2505050565b60006109638161105e565b50600680546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b7f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a96109bf8161105e565b6109c982846111ed565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6091906119d5565b50604080513381526001600160a01b03841660208201529081018490527f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629060600160405180910390a1505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600580546105eb90611900565b60007f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c610b138161105e565b610b1d8484611227565b949350505050565b6001600160401b038116600090815260076020526040902080546001600160a01b03163314610b895760405162461bcd60e51b815260206004820152601060248201526f2bb937b733903bb4ba34323930bbb2b960811b604482015260640161077c565b8054600160a01b900460ff1615610be25760405162461bcd60e51b815260206004820152601b60248201527f416c72656164792063616e63656c6564206f7220636c61696d65640000000000604482015260640161077c565b4281600301541115610c205760405162461bcd60e51b81526020600482015260076024820152664c6f636b696e6760c81b604482015260640161077c565b805460ff60a01b1916600160a01b1781556001810154610c41903090611235565b600281015460405163a9059cbb60e01b815233600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd891906119d5565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb600660089054906101000a90046001600160a01b031683600201548460010154610d329190611950565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da191906119d5565b506002810154604080516001600160401b038516815260208101929092527f510ada69766eb09ecc22467bed89f0906d613f878ebd7db99d5e014389bdbfa1910160405180910390a15050565b604080516000815260208101909152606090826001600160401b03811115610e1857610e186119f7565b604051908082528060200260200182016040528015610e4b57816020015b6060815260200190600190039081610e365790505b50915060005b83811015610ed857610ea830868684818110610e6f57610e6f611a0d565b9050602002810190610e819190611a23565b85604051602001610e9493929190611a70565b60405160208183030381529060405261126b565b838281518110610eba57610eba611a0d565b60200260200101819052508080610ed090611a97565b915050610e51565b505092915050565b6000610eeb8161105e565b50600091825260086020526040909120805463ffffffff191663ffffffff909216919091179055565b600082815260208190526040902060010154610f2f8161105e565b6106eb8383611123565b6001600160401b038116600090815260076020526040902080546001600160a01b03163314610f9d5760405162461bcd60e51b815260206004820152601060248201526f2bb937b733903bb4ba34323930bbb2b960811b604482015260640161077c565b8054600160a01b900460ff1615610ff65760405162461bcd60e51b815260206004820152601b60248201527f416c72656164792063616e63656c6564206f7220636c61696d65640000000000604482015260640161077c565b805460ff60a01b1916600160a01b1781556001810154611019903090339061118e565b6040516001600160401b038316907fe5a03057ebf92ddcf4327df6d60c174be73d7faa6cc22d8002bd729c9bf08a3890600090a25050565b61072483838360016112d8565b61106881336113ad565b50565b6000336110798582856113e6565b61108485858561118e565b60019150505b9392505050565b600061109d8383610aaf565b61111b576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556110d33390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105d6565b5060006105d6565b600061112f8383610aaf565b1561111b576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105d6565b6001600160a01b0383166111b857604051634b637e8f60e11b81526000600482015260240161077c565b6001600160a01b0382166111e25760405163ec442f0560e01b81526000600482015260240161077c565b61072483838361145e565b6001600160a01b0382166112175760405163ec442f0560e01b81526000600482015260240161077c565b6112236000838361145e565b5050565b60003361067c81858561118e565b6001600160a01b03821661125f57604051634b637e8f60e11b81526000600482015260240161077c565b6112238260008361145e565b6060600080846001600160a01b0316846040516112889190611ab0565b600060405180830381855af49150503d80600081146112c3576040519150601f19603f3d011682016040523d82523d6000602084013e6112c8565b606091505b50915091506106bd858383611588565b6001600160a01b0384166113025760405163e602df0560e01b81526000600482015260240161077c565b6001600160a01b03831661132c57604051634a1406b160e11b81526000600482015260240161077c565b6001600160a01b03808516600090815260026020908152604080832093871683529290522082905580156106eb57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161139f91815260200190565b60405180910390a350505050565b6113b78282610aaf565b6112235760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161077c565b6001600160a01b0383811660009081526002602090815260408083209386168352929052205460001981146106eb578181101561144f57604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161077c565b6106eb848484840360006112d8565b6001600160a01b03831661148957806003600082825461147e91906119c2565b909155506114fb9050565b6001600160a01b038316600090815260016020526040902054818110156114dc5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161077c565b6001600160a01b03841660009081526001602052604090209082900390555b6001600160a01b03821661151757600380548290039055611536565b6001600160a01b03821660009081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157b91815260200190565b60405180910390a3505050565b60608261159d57611598826115e4565b61108a565b81511580156115b457506001600160a01b0384163b155b156115dd57604051639996b31560e01b81526001600160a01b038516600482015260240161077c565b508061108a565b8051156115f45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006020828403121561161f57600080fd5b81356001600160e01b03198116811461108a57600080fd5b60005b8381101561165257818101518382015260200161163a565b50506000910152565b60008151808452611673816020860160208601611637565b601f01601f19169290920160200192915050565b60208152600061108a602083018461165b565b80356001600160a01b03811681146116b157600080fd5b919050565b600080604083850312156116c957600080fd5b6116d28361169a565b946020939093013593505050565b6000806000606084860312156116f557600080fd5b6116fe8461169a565b925061170c6020850161169a565b9150604084013590509250925092565b60006020828403121561172e57600080fd5b5035919050565b6000806040838503121561174857600080fd5b823591506117586020840161169a565b90509250929050565b60006020828403121561177357600080fd5b81356001600160401b038116811461108a57600080fd5b6000806040838503121561179d57600080fd5b50508035926020909101359150565b6000602082840312156117be57600080fd5b61108a8261169a565b600080602083850312156117da57600080fd5b82356001600160401b03808211156117f157600080fd5b818501915085601f83011261180557600080fd5b81358181111561181457600080fd5b8660208260051b850101111561182957600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561189057603f1988860301845261187e85835161165b565b94509285019290850190600101611862565b5092979650505050505050565b600080604083850312156118b057600080fd5b82359150602083013563ffffffff811681146118cb57600080fd5b809150509250929050565b600080604083850312156118e957600080fd5b6118f28361169a565b91506117586020840161169a565b600181811c9082168061191457607f821691505b60208210810361193457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105d6576105d661193a565b80820281158282048414176105d6576105d661193a565b60008261199757634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b038083168181036119b8576119b861193a565b6001019392505050565b808201808211156105d6576105d661193a565b6000602082840312156119e757600080fd5b8151801515811461108a57600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a3a57600080fd5b8301803591506001600160401b03821115611a5457600080fd5b602001915036819003821315611a6957600080fd5b9250929050565b828482376000838201600081528351611a8d818360208801611637565b0195945050505050565b600060018201611aa957611aa961193a565b5060010190565b60008251611ac2818460208701611637565b919091019291505056fea2646970667358221220ba4d5fa0573f42206c36e15636a7ddd614d2d64885dfbc6fc6729374e342387d64736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c08cd26474722ce93f4d0c34d16201461c10aa8c0000000000000000000000000000000000000000000000000000000000000006766543415256000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067665434152560000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80636605bfda1161010f578063a9059cbb116100a2578063d547741f11610071578063d547741f1461051f578063dd62ed3e14610532578063e17ec7261461056b578063f8e7de701461059257600080fd5b8063a9059cbb146104c6578063aab8ab0c146104d9578063ac9650d8146104ec578063c17cbd921461050c57600080fd5b806391d14854116100de57806391d148541461047c57806395d89b411461048f578063a217fddf14610497578063a3b0b5a31461049f57600080fd5b80636605bfda146103f25780636e553f651461040557806370a082311461041857806373df8e981461044157600080fd5b8063248a9ca31161018757806336568abe1161015657806336568abe1461037357806341552a3514610386578063441a3e70146103ad57806361d027b3146103c057600080fd5b8063248a9ca3146102b15780632f2ff15d146102d4578063313ce567146102e957806335b12a95146102f857600080fd5b80630e5ef41a116101c35780630e5ef41a1461023a57806318160ddd14610265578063206b60f91461027757806323b872dd1461029e57600080fd5b806301ffc9a7146101ea57806306fdde0314610212578063095ea7b314610227575b600080fd5b6101fd6101f836600461160d565b6105a5565b60405190151581526020015b60405180910390f35b61021a6105dc565b6040516102099190611687565b6101fd6102353660046116b6565b61066e565b60065461024d906001600160401b031681565b6040516001600160401b039091168152602001610209565b6003545b604051908152602001610209565b6102697f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c81565b6101fd6102ac3660046116e0565b610686565b6102696102bf36600461171c565b60009081526020819052604090206001015490565b6102e76102e2366004611735565b6106c6565b005b60405160128152602001610209565b610341610306366004611761565b60076020526000908152604090208054600182015460028301546003909301546001600160a01b03831693600160a01b90930460ff16929085565b604080516001600160a01b0390961686529315156020860152928401919091526060830152608082015260a001610209565b6102e7610381366004611735565b6106f1565b6102697f57c667b450e8d8927c7fd0bcd78314c9e78a0a7301f5e9ad8b562f48e273a0c981565b6102e76103bb36600461178a565b610729565b6006546103da90600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610209565b6102e76104003660046117ac565b610958565b6102e7610413366004611735565b610995565b6102696104263660046117ac565b6001600160a01b031660009081526001602052604090205490565b61046761044f36600461171c565b60086020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610209565b6101fd61048a366004611735565b610aaf565b61021a610ad8565b610269600081565b6102697f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a981565b6101fd6104d43660046116b6565b610ae7565b6102e76104e7366004611761565b610b25565b6104ff6104fa3660046117c7565b610dee565b604051610209919061183b565b6102e761051a36600461189d565b610ee0565b6102e761052d366004611735565b610f14565b6102696105403660046118d6565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6103da7f000000000000000000000000c08cd26474722ce93f4d0c34d16201461c10aa8c81565b6102e76105a0366004611761565b610f39565b60006001600160e01b03198216637965db0b60e01b14806105d657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600480546105eb90611900565b80601f016020809104026020016040519081016040528092919081815260200182805461061790611900565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b60003361067c818585611051565b5060019392505050565b60007f57c667b450e8d8927c7fd0bcd78314c9e78a0a7301f5e9ad8b562f48e273a0c96106b28161105e565b6106bd85858561106b565b95945050505050565b6000828152602081905260409020600101546106e18161105e565b6106eb8383611091565b50505050565b6001600160a01b038116331461071a5760405163334bd91960e11b815260040160405180910390fd5b6107248282611123565b505050565b670de0b6b3a764000082116107855760405162461bcd60e51b815260206004820152601760248201527f4d757374206d6f7265207468616e20312076654341525600000000000000000060448201526064015b60405180910390fd5b60008181526008602052604090205463ffffffff166107d95760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b604482015260640161077c565b6107e433308461118e565b60006127106107fb670de0b6b3a764000085611950565b60008481526008602052604090205461081a919063ffffffff16611963565b610824919061197a565b600680549192506001600160401b039091169060006108428361199c565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550506040518060a00160405280336001600160a01b0316815260200160001515815260200184815260200182815260200183426108a291906119c2565b9052600680546001600160401b0390811660009081526007602090815260409182902085518154878401511515600160a01b026001600160a81b03199091166001600160a01b039092169190911717815585830151600182015560608087015160028301556080909601516003909101559254815133815293840188905290830186905216917f1d7b95cb608751bc6718009a76582b8205568cfa1f0dd76b226139f147622f69910160405180910390a2505050565b60006109638161105e565b50600680546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b7f8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a96109bf8161105e565b6109c982846111ed565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f000000000000000000000000c08cd26474722ce93f4d0c34d16201461c10aa8c6001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6091906119d5565b50604080513381526001600160a01b03841660208201529081018490527f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629060600160405180910390a1505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600580546105eb90611900565b60007f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c610b138161105e565b610b1d8484611227565b949350505050565b6001600160401b038116600090815260076020526040902080546001600160a01b03163314610b895760405162461bcd60e51b815260206004820152601060248201526f2bb937b733903bb4ba34323930bbb2b960811b604482015260640161077c565b8054600160a01b900460ff1615610be25760405162461bcd60e51b815260206004820152601b60248201527f416c72656164792063616e63656c6564206f7220636c61696d65640000000000604482015260640161077c565b4281600301541115610c205760405162461bcd60e51b81526020600482015260076024820152664c6f636b696e6760c81b604482015260640161077c565b805460ff60a01b1916600160a01b1781556001810154610c41903090611235565b600281015460405163a9059cbb60e01b815233600482015260248101919091527f000000000000000000000000c08cd26474722ce93f4d0c34d16201461c10aa8c6001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd891906119d5565b507f000000000000000000000000c08cd26474722ce93f4d0c34d16201461c10aa8c6001600160a01b031663a9059cbb600660089054906101000a90046001600160a01b031683600201548460010154610d329190611950565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da191906119d5565b506002810154604080516001600160401b038516815260208101929092527f510ada69766eb09ecc22467bed89f0906d613f878ebd7db99d5e014389bdbfa1910160405180910390a15050565b604080516000815260208101909152606090826001600160401b03811115610e1857610e186119f7565b604051908082528060200260200182016040528015610e4b57816020015b6060815260200190600190039081610e365790505b50915060005b83811015610ed857610ea830868684818110610e6f57610e6f611a0d565b9050602002810190610e819190611a23565b85604051602001610e9493929190611a70565b60405160208183030381529060405261126b565b838281518110610eba57610eba611a0d565b60200260200101819052508080610ed090611a97565b915050610e51565b505092915050565b6000610eeb8161105e565b50600091825260086020526040909120805463ffffffff191663ffffffff909216919091179055565b600082815260208190526040902060010154610f2f8161105e565b6106eb8383611123565b6001600160401b038116600090815260076020526040902080546001600160a01b03163314610f9d5760405162461bcd60e51b815260206004820152601060248201526f2bb937b733903bb4ba34323930bbb2b960811b604482015260640161077c565b8054600160a01b900460ff1615610ff65760405162461bcd60e51b815260206004820152601b60248201527f416c72656164792063616e63656c6564206f7220636c61696d65640000000000604482015260640161077c565b805460ff60a01b1916600160a01b1781556001810154611019903090339061118e565b6040516001600160401b038316907fe5a03057ebf92ddcf4327df6d60c174be73d7faa6cc22d8002bd729c9bf08a3890600090a25050565b61072483838360016112d8565b61106881336113ad565b50565b6000336110798582856113e6565b61108485858561118e565b60019150505b9392505050565b600061109d8383610aaf565b61111b576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556110d33390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105d6565b5060006105d6565b600061112f8383610aaf565b1561111b576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105d6565b6001600160a01b0383166111b857604051634b637e8f60e11b81526000600482015260240161077c565b6001600160a01b0382166111e25760405163ec442f0560e01b81526000600482015260240161077c565b61072483838361145e565b6001600160a01b0382166112175760405163ec442f0560e01b81526000600482015260240161077c565b6112236000838361145e565b5050565b60003361067c81858561118e565b6001600160a01b03821661125f57604051634b637e8f60e11b81526000600482015260240161077c565b6112238260008361145e565b6060600080846001600160a01b0316846040516112889190611ab0565b600060405180830381855af49150503d80600081146112c3576040519150601f19603f3d011682016040523d82523d6000602084013e6112c8565b606091505b50915091506106bd858383611588565b6001600160a01b0384166113025760405163e602df0560e01b81526000600482015260240161077c565b6001600160a01b03831661132c57604051634a1406b160e11b81526000600482015260240161077c565b6001600160a01b03808516600090815260026020908152604080832093871683529290522082905580156106eb57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161139f91815260200190565b60405180910390a350505050565b6113b78282610aaf565b6112235760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161077c565b6001600160a01b0383811660009081526002602090815260408083209386168352929052205460001981146106eb578181101561144f57604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161077c565b6106eb848484840360006112d8565b6001600160a01b03831661148957806003600082825461147e91906119c2565b909155506114fb9050565b6001600160a01b038316600090815260016020526040902054818110156114dc5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161077c565b6001600160a01b03841660009081526001602052604090209082900390555b6001600160a01b03821661151757600380548290039055611536565b6001600160a01b03821660009081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157b91815260200190565b60405180910390a3505050565b60608261159d57611598826115e4565b61108a565b81511580156115b457506001600160a01b0384163b155b156115dd57604051639996b31560e01b81526001600160a01b038516600482015260240161077c565b508061108a565b8051156115f45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006020828403121561161f57600080fd5b81356001600160e01b03198116811461108a57600080fd5b60005b8381101561165257818101518382015260200161163a565b50506000910152565b60008151808452611673816020860160208601611637565b601f01601f19169290920160200192915050565b60208152600061108a602083018461165b565b80356001600160a01b03811681146116b157600080fd5b919050565b600080604083850312156116c957600080fd5b6116d28361169a565b946020939093013593505050565b6000806000606084860312156116f557600080fd5b6116fe8461169a565b925061170c6020850161169a565b9150604084013590509250925092565b60006020828403121561172e57600080fd5b5035919050565b6000806040838503121561174857600080fd5b823591506117586020840161169a565b90509250929050565b60006020828403121561177357600080fd5b81356001600160401b038116811461108a57600080fd5b6000806040838503121561179d57600080fd5b50508035926020909101359150565b6000602082840312156117be57600080fd5b61108a8261169a565b600080602083850312156117da57600080fd5b82356001600160401b03808211156117f157600080fd5b818501915085601f83011261180557600080fd5b81358181111561181457600080fd5b8660208260051b850101111561182957600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561189057603f1988860301845261187e85835161165b565b94509285019290850190600101611862565b5092979650505050505050565b600080604083850312156118b057600080fd5b82359150602083013563ffffffff811681146118cb57600080fd5b809150509250929050565b600080604083850312156118e957600080fd5b6118f28361169a565b91506117586020840161169a565b600181811c9082168061191457607f821691505b60208210810361193457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105d6576105d661193a565b80820281158282048414176105d6576105d661193a565b60008261199757634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b038083168181036119b8576119b861193a565b6001019392505050565b808201808211156105d6576105d661193a565b6000602082840312156119e757600080fd5b8151801515811461108a57600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a3a57600080fd5b8301803591506001600160401b03821115611a5457600080fd5b602001915036819003821315611a6957600080fd5b9250929050565b828482376000838201600081528351611a8d818360208801611637565b0195945050505050565b600060018201611aa957611aa961193a565b5060010190565b60008251611ac2818460208701611637565b919091019291505056fea2646970667358221220ba4d5fa0573f42206c36e15636a7ddd614d2d64885dfbc6fc6729374e342387d64736f6c63430008140033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c08cd26474722ce93f4d0c34d16201461c10aa8c0000000000000000000000000000000000000000000000000000000000000006766543415256000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067665434152560000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): veCARV
Arg [1] : symbol (string): veCARV
Arg [2] : carvToken_ (address): 0xc08Cd26474722cE93F4D0c34D16201461c10AA8C

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000c08cd26474722ce93f4d0c34d16201461c10aa8c
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 7665434152560000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 7665434152560000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

47984:3487:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9175:204;;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;9175:204:0;;;;;;;;26306:91;;;:::i;:::-;;;;;;;:::i;28599:190::-;;;;;;:::i;:::-;;:::i;48375:27::-;;;;;-1:-1:-1;;;;;48375:27:0;;;;;;-1:-1:-1;;;;;1852:31:1;;;1834:50;;1822:2;1807:18;48375:27:0;1690:200:1;27408:99:0;27487:12;;27408:99;;;2041:25:1;;;2029:2;2014:18;27408:99:0;1895:177:1;48131:66:0;;48171:26;48131:66;;51284:184;;;;;;:::i;:::-;;:::i;10455:122::-;;;;;;:::i;:::-;10520:7;10547:12;;;;;;;;;;:22;;;;10455:122;10887:138;;;;;;:::i;:::-;;:::i;:::-;;27259:84;;;27333:2;3178:36:1;;3166:2;3151:18;27259:84:0;3036:184:1;48480:52:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48480:52:0;;;-1:-1:-1;;;48480:52:0;;;;;;;;;;;;;-1:-1:-1;;;;;3785:32:1;;;3767:51;;3861:14;;3854:22;3849:2;3834:18;;3827:50;3893:18;;;3886:34;;;;3951:2;3936:18;;3929:34;3994:3;3979:19;;3972:35;3754:3;3739:19;48480:52:0;3514:499:1;12024:251:0;;;;;;:::i;:::-;;:::i;48204:76::-;;48249:31;48204:76;;49183:618;;;;;;:::i;:::-;;:::i;48450:23::-;;;;;-1:-1:-1;;;48450:23:0;;-1:-1:-1;;;;;48450:23:0;;;;;;-1:-1:-1;;;;;4435:32:1;;;4417:51;;4405:2;4390:18;48450:23:0;4271:203:1;50845:124:0;;;;;;:::i;:::-;;:::i;48919:256::-;;;;;;:::i;:::-;;:::i;27570:118::-;;;;;;:::i;:::-;-1:-1:-1;;;;;27662:18:0;27635:7;27662:18;;;:9;:18;;;;;;;27570:118;48539:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5288:10:1;5276:23;;;5258:42;;5246:2;5231:18;48539:44:0;5114:192:1;9471:138:0;;;;;;:::i;:::-;;:::i;26516:95::-;;;:::i;8783:49::-;;8828:4;8783:49;;48056:68;;48097:27;48056:68;;51125:151;;;;;;:::i;:::-;;:::i;50232:605::-;;;;;;:::i;:::-;;:::i;43374:494::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50977:140::-;;;;;;:::i;:::-;;:::i;11318:::-;;;;;;:::i;:::-;;:::i;28138:142::-;;;;;;:::i;:::-;-1:-1:-1;;;;;28245:18:0;;;28218:7;28245:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28138:142;48409:34;;;;;49809:415;;;;;;:::i;:::-;;:::i;9175:204::-;9260:4;-1:-1:-1;;;;;;9284:47:0;;-1:-1:-1;;;9284:47:0;;:87;;-1:-1:-1;;;;;;;;;;6556:40:0;;;9335:36;9277:94;9175:204;-1:-1:-1;;9175:204:0:o;26306:91::-;26351:13;26384:5;26377:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26306:91;:::o;28599:190::-;28672:4;4389:10;28728:31;4389:10;28744:7;28753:5;28728:8;:31::i;:::-;-1:-1:-1;28777:4:0;;28599:190;-1:-1:-1;;;28599:190:0:o;51284:184::-;51401:4;48249:31;9067:16;9078:4;9067:10;:16::i;:::-;51425:35:::1;51444:4;51450:2;51454:5;51425:18;:35::i;:::-;51418:42:::0;51284:184;-1:-1:-1;;;;;51284:184:0:o;10887:138::-;10520:7;10547:12;;;;;;;;;;:22;;;9067:16;9078:4;9067:10;:16::i;:::-;10992:25:::1;11003:4;11009:7;10992:10;:25::i;:::-;;10887:138:::0;;;:::o;12024:251::-;-1:-1:-1;;;;;12118:34:0;;4389:10;12118:34;12114:104;;12176:30;;-1:-1:-1;;;12176:30:0;;;;;;;;;;;12114:104;12230:37;12242:4;12248:18;12230:11;:37::i;:::-;;12024:251;;:::o;49183:618::-;48310:4;49320:6;:12;49312:48;;;;-1:-1:-1;;;49312:48:0;;7949:2:1;49312:48:0;;;7931:21:1;7988:2;7968:18;;;7961:30;8027:25;8007:18;;;8000:53;8070:18;;49312:48:0;;;;;;;;;49402:1;49379:20;;;:10;:20;;;;;;;;49371:53;;;;-1:-1:-1;;;49371:53:0;;8301:2:1;49371:53:0;;;8283:21:1;8340:2;8320:18;;;8313:30;-1:-1:-1;;;8359:18:1;;;8352:46;8415:18;;49371:53:0;8099:340:1;49371:53:0;49435:44;49445:10;49465:4;49472:6;49435:9;:44::i;:::-;49492:19;48361:5;49538:12;48310:4;49538:6;:12;:::i;:::-;49514:20;;;;:10;:20;;;;;;:37;;;:20;;:37;:::i;:::-;:60;;;;:::i;:::-;49585:13;:15;;49492:82;;-1:-1:-1;;;;;;49585:15:0;;;;:13;:15;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;49585:15:0;;;;;-1:-1:-1;;;;;49585:15:0;;;;;;;49642:80;;;;;;;;49655:10;-1:-1:-1;;;;;49642:80:0;;;;;49667:5;49642:80;;;;;;49674:6;49642:80;;;;49682:11;49642:80;;;;49713:8;49695:15;:26;;;;:::i;:::-;49642:80;;49625:13;;;-1:-1:-1;;;;;49625:13:0;;;49611:28;;;;:13;:28;;;;;;;;;:111;;;;;;;;;;-1:-1:-1;;;49611:111:0;-1:-1:-1;;;;;;49611:111:0;;;-1:-1:-1;;;;;49611:111:0;;;;;;;;;;;;;;-1:-1:-1;49611:111:0;;;;;;;;;;;;;;;;;;;;;;49749:13;;49740:53;;49764:10;9650:51:1;;9717:18;;;9710:34;;;9760:18;;;9753:34;;;49749:13:0;;49740:53;;9623:18:1;49740:53:0;;;;;;;49244:557;49183:618;;:::o;50845:124::-;8828:4;9067:16;8828:4;9067:10;:16::i;:::-;-1:-1:-1;50941:8:0::1;:20:::0;;-1:-1:-1;;;;;50941:20:0;;::::1;-1:-1:-1::0;;;50941:20:0::1;-1:-1:-1::0;;;;;;50941:20:0;;::::1;::::0;;;::::1;::::0;;50845:124::o;48919:256::-;48097:27;9067:16;9078:4;9067:10;:16::i;:::-;49015:23:::1;49021:8;49031:6;49015:5;:23::i;:::-;49049:65;::::0;-1:-1:-1;;;49049:65:0;;49080:10:::1;49049:65;::::0;::::1;10038:34:1::0;49100:4:0::1;10088:18:1::0;;;10081:43;10140:18;;;10133:34;;;49056:9:0::1;-1:-1:-1::0;;;;;49049:30:0::1;::::0;::::1;::::0;9973:18:1;;49049:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;49130:37:0::1;::::0;;49138:10:::1;10038:34:1::0;;-1:-1:-1;;;;;10108:15:1;;10103:2;10088:18;;10081:43;10140:18;;;10133:34;;;49130:37:0::1;::::0;9988:2:1;9973:18;49130:37:0::1;;;;;;;48919:256:::0;;;:::o;9471:138::-;9548:4;9572:12;;;;;;;;;;;-1:-1:-1;;;;;9572:29:0;;;;;;;;;;;;;;;9471:138::o;26516:95::-;26563:13;26596:7;26589:14;;;;;:::i;51125:151::-;51219:4;48171:26;9067:16;9078:4;9067:10;:16::i;:::-;51243:25:::1;51258:2;51262:5;51243:14;:25::i;:::-;51236:32:::0;51125:151;-1:-1:-1;;;;51125:151:0:o;50232:605::-;-1:-1:-1;;;;;50314:25:0;;50286;50314;;;:13;:25;;;;;50360:15;;-1:-1:-1;;;;;50360:15:0;50379:10;50360:29;50352:58;;;;-1:-1:-1;;;50352:58:0;;10662:2:1;50352:58:0;;;10644:21:1;10701:2;10681:18;;;10674:30;-1:-1:-1;;;10720:18:1;;;10713:46;10776:18;;50352:58:0;10460:340:1;50352:58:0;50430:22;;-1:-1:-1;;;50430:22:0;;;;50429:23;50421:63;;;;-1:-1:-1;;;50421:63:0;;11007:2:1;50421:63:0;;;10989:21:1;11046:2;11026:18;;;11019:30;11085:29;11065:18;;;11058:57;11132:18;;50421:63:0;10805:351:1;50421:63:0;50517:15;50503:4;:10;;;:29;;50495:49;;;;-1:-1:-1;;;50495:49:0;;11363:2:1;50495:49:0;;;11345:21:1;11402:1;11382:18;;;11375:29;-1:-1:-1;;;11420:18:1;;;11413:37;11467:18;;50495:49:0;11161:330:1;50495:49:0;50557:29;;-1:-1:-1;;;;50557:29:0;-1:-1:-1;;;50557:29:0;;;50582:4;50618:11;;;50597:33;;50611:4;;50597:5;:33::i;:::-;50680:16;;;;50641:56;;-1:-1:-1;;;50641:56:0;;50668:10;50641:56;;;11670:51:1;11737:18;;;11730:34;;;;50648:9:0;-1:-1:-1;;;;;50641:26:0;;;;11643:18:1;;50641:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50715:9;-1:-1:-1;;;;;50708:26:0;;50735:8;;;;;;;;;-1:-1:-1;;;;;50735:8:0;50759:4;:16;;;50745:4;:11;;;:30;;;;:::i;:::-;50708:68;;-1:-1:-1;;;;;;50708:68:0;;;;;;;-1:-1:-1;;;;;11688:32:1;;;50708:68:0;;;11670:51:1;11737:18;;;11730:34;11643:18;;50708:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;50812:16:0;;;;50794:35;;;-1:-1:-1;;;;;11965:31:1;;11947:50;;12028:2;12013:18;;12006:34;;;;50794:35:0;;11920:18:1;50794:35:0;;;;;;;50275:562;50232:605;:::o;43374:494::-;43542:12;;;43477:20;43542:12;;;;;;;;43442:22;;43656:4;-1:-1:-1;;;;;43644:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43634:34;;43684:9;43679:157;43699:15;;;43679:157;;;43749:75;43786:4;43806;;43811:1;43806:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;43815;43793:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43749:28;:75::i;:::-;43736:7;43744:1;43736:10;;;;;;;;:::i;:::-;;;;;;:88;;;;43716:3;;;;;:::i;:::-;;;;43679:157;;;;43846:14;43374:494;;;;:::o;50977:140::-;8828:4;9067:16;8828:4;9067:10;:16::i;:::-;-1:-1:-1;51081:20:0::1;::::0;;;:10:::1;:20;::::0;;;;;:28;;-1:-1:-1;;51081:28:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;50977:140::o;11318:::-;10520:7;10547:12;;;;;;;;;;:22;;;9067:16;9078:4;9067:10;:16::i;:::-;11424:26:::1;11436:4;11442:7;11424:11;:26::i;49809:415::-:0;-1:-1:-1;;;;;49900:25:0;;49872;49900;;;:13;:25;;;;;49946:15;;-1:-1:-1;;;;;49946:15:0;49965:10;49946:29;49938:58;;;;-1:-1:-1;;;49938:58:0;;10662:2:1;49938:58:0;;;10644:21:1;10701:2;10681:18;;;10674:30;-1:-1:-1;;;10720:18:1;;;10713:46;10776:18;;49938:58:0;10460:340:1;49938:58:0;50016:22;;-1:-1:-1;;;50016:22:0;;;;50015:23;50007:63;;;;-1:-1:-1;;;50007:63:0;;11007:2:1;50007:63:0;;;10989:21:1;11046:2;11026:18;;;11019:30;11085:29;11065:18;;;11058:57;11132:18;;50007:63:0;10805:351:1;50007:63:0;50083:29;;-1:-1:-1;;;;50083:29:0;-1:-1:-1;;;50083:29:0;;;50108:4;50160:11;;;50123:49;;50141:4;;50148:10;;50123:9;:49::i;:::-;50190:26;;-1:-1:-1;;;;;50190:26:0;;;;;;;;49861:363;49809:415;:::o;33426:130::-;33511:37;33520:5;33527:7;33536:5;33543:4;33511:8;:37::i;9824:105::-;9891:30;9902:4;4389:10;9891;:30::i;:::-;9824:105;:::o;29367:249::-;29454:4;4389:10;29512:37;29528:4;4389:10;29543:5;29512:15;:37::i;:::-;29560:26;29570:4;29576:2;29580:5;29560:9;:26::i;:::-;29604:4;29597:11;;;29367:249;;;;;;:::o;12901:324::-;12978:4;13000:22;13008:4;13014:7;13000;:22::i;:::-;12995:223;;13039:6;:12;;;;;;;;;;;-1:-1:-1;;;;;13039:29:0;;;;;;;;;:36;;-1:-1:-1;;13039:36:0;13071:4;13039:36;;;13122:12;4389:10;;4309:98;13122:12;-1:-1:-1;;;;;13095:40:0;13113:7;-1:-1:-1;;;;;13095:40:0;13107:4;13095:40;;;;;;;;;;-1:-1:-1;13157:4:0;13150:11;;12995:223;-1:-1:-1;13201:5:0;13194:12;;13469:325;13547:4;13568:22;13576:4;13582:7;13568;:22::i;:::-;13564:223;;;13639:5;13607:12;;;;;;;;;;;-1:-1:-1;;;;;13607:29:0;;;;;;;;;;:37;;-1:-1:-1;;13607:37:0;;;13664:40;4389:10;;13607:12;;13664:40;;13639:5;13664:40;-1:-1:-1;13726:4:0;13719:11;;30001:308;-1:-1:-1;;;;;30085:18:0;;30081:88;;30127:30;;-1:-1:-1;;;30127:30:0;;30154:1;30127:30;;;4417:51:1;4390:18;;30127:30:0;4271:203:1;30081:88:0;-1:-1:-1;;;;;30183:16:0;;30179:88;;30223:32;;-1:-1:-1;;;30223:32:0;;30252:1;30223:32;;;4417:51:1;4390:18;;30223:32:0;4271:203:1;30179:88:0;30277:24;30285:4;30291:2;30295:5;30277:7;:24::i;32121:213::-;-1:-1:-1;;;;;32192:21:0;;32188:93;;32237:32;;-1:-1:-1;;;32237:32:0;;32266:1;32237:32;;;4417:51:1;4390:18;;32237:32:0;4271:203:1;32188:93:0;32291:35;32307:1;32311:7;32320:5;32291:7;:35::i;:::-;32121:213;;:::o;27893:182::-;27962:4;4389:10;28018:27;4389:10;28035:2;28039:5;28018:9;:27::i;32662:211::-;-1:-1:-1;;;;;32733:21:0;;32729:91;;32778:30;;-1:-1:-1;;;32778:30:0;;32805:1;32778:30;;;4417:51:1;4390:18;;32778:30:0;4271:203:1;32729:91:0;32830:35;32838:7;32855:1;32859:5;32830:7;:35::i;39925:256::-;40008:12;40034;40048:23;40075:6;-1:-1:-1;;;;;40075:19:0;40095:4;40075:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40033:67;;;;40118:55;40145:6;40153:7;40162:10;40118:26;:55::i;34407:443::-;-1:-1:-1;;;;;34520:19:0;;34516:91;;34563:32;;-1:-1:-1;;;34563:32:0;;34592:1;34563:32;;;4417:51:1;4390:18;;34563:32:0;4271:203:1;34516:91:0;-1:-1:-1;;;;;34621:21:0;;34617:92;;34666:31;;-1:-1:-1;;;34666:31:0;;34694:1;34666:31;;;4417:51:1;4390:18;;34666:31:0;4271:203:1;34617:92:0;-1:-1:-1;;;;;34719:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;34765:78;;;;34816:7;-1:-1:-1;;;;;34800:31:0;34809:5;-1:-1:-1;;;;;34800:31:0;;34825:5;34800:31;;;;2041:25:1;;2029:2;2014:18;;1895:177;34800:31:0;;;;;;;;34407:443;;;;:::o;10065:201::-;10154:22;10162:4;10168:7;10154;:22::i;:::-;10149:110;;10200:47;;-1:-1:-1;;;10200:47:0;;-1:-1:-1;;;;;11688:32:1;;10200:47:0;;;11670:51:1;11737:18;;;11730:34;;;11643:18;;10200:47:0;11496:274:1;35142:487:0;-1:-1:-1;;;;;28245:18:0;;;35242:24;28245:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;35309:37:0;;35305:317;;35386:5;35367:16;:24;35363:132;;;35419:60;;-1:-1:-1;;;35419:60:0;;-1:-1:-1;;;;;9668:32:1;;35419:60:0;;;9650:51:1;9717:18;;;9710:34;;;9760:18;;;9753:34;;;9623:18;;35419:60:0;9448:345:1;35363:132:0;35538:57;35547:5;35554:7;35582:5;35563:16;:24;35589:5;35538:8;:57::i;30633:1135::-;-1:-1:-1;;;;;30723:18:0;;30719:552;;30877:5;30861:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;30719:552:0;;-1:-1:-1;30719:552:0;;-1:-1:-1;;;;;30937:15:0;;30915:19;30937:15;;;:9;:15;;;;;;30971:19;;;30967:117;;;31018:50;;-1:-1:-1;;;31018:50:0;;-1:-1:-1;;;;;9668:32:1;;31018:50:0;;;9650:51:1;9717:18;;;9710:34;;;9760:18;;;9753:34;;;9623:18;;31018:50:0;9448:345:1;30967:117:0;-1:-1:-1;;;;;31207:15:0;;;;;;:9;:15;;;;;31225:19;;;;31207:37;;30719:552;-1:-1:-1;;;;;31287:16:0;;31283:435;;31453:12;:21;;;;;;;31283:435;;;-1:-1:-1;;;;;31669:13:0;;;;;;:9;:13;;;;;:22;;;;;;31283:435;31750:2;-1:-1:-1;;;;;31735:25:0;31744:4;-1:-1:-1;;;;;31735:25:0;;31754:5;31735:25;;;;2041::1;;2029:2;2014:18;;1895:177;31735:25:0;;;;;;;;30633:1135;;;:::o;40454:597::-;40602:12;40632:7;40627:417;;40656:19;40664:10;40656:7;:19::i;:::-;40627:417;;;40884:17;;:22;:49;;;;-1:-1:-1;;;;;;40910:18:0;;;:23;40884:49;40880:121;;;40961:24;;-1:-1:-1;;;40961:24:0;;-1:-1:-1;;;;;4435:32:1;;40961:24:0;;;4417:51:1;4390:18;;40961:24:0;4271:203:1;40880:121:0;-1:-1:-1;41022:10:0;41015:17;;41604:528;41737:17;;:21;41733:392;;41969:10;41963:17;42026:15;42013:10;42009:2;42005:19;41998:44;41733:392;42096:17;;-1:-1:-1;;;42096:17:0;;;;;;;;;;;14:286:1;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:1;721:16;;714:27;497:250::o;752:271::-;794:3;832:5;826:12;859:6;854:3;847:19;875:76;944:6;937:4;932:3;928:14;921:4;914:5;910:16;875:76;:::i;:::-;1005:2;984:15;-1:-1:-1;;980:29:1;971:39;;;;1012:4;967:50;;752:271;-1:-1:-1;;752:271:1:o;1028:220::-;1177:2;1166:9;1159:21;1140:4;1197:45;1238:2;1227:9;1223:18;1215:6;1197:45;:::i;1253:173::-;1321:20;;-1:-1:-1;;;;;1370:31:1;;1360:42;;1350:70;;1416:1;1413;1406:12;1350:70;1253:173;;;:::o;1431:254::-;1499:6;1507;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;1599:29;1618:9;1599:29;:::i;:::-;1589:39;1675:2;1660:18;;;;1647:32;;-1:-1:-1;;;1431:254:1:o;2259:328::-;2336:6;2344;2352;2405:2;2393:9;2384:7;2380:23;2376:32;2373:52;;;2421:1;2418;2411:12;2373:52;2444:29;2463:9;2444:29;:::i;:::-;2434:39;;2492:38;2526:2;2515:9;2511:18;2492:38;:::i;:::-;2482:48;;2577:2;2566:9;2562:18;2549:32;2539:42;;2259:328;;;;;:::o;2592:180::-;2651:6;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;-1:-1:-1;2743:23:1;;2592:180;-1:-1:-1;2592:180:1:o;2777:254::-;2845:6;2853;2906:2;2894:9;2885:7;2881:23;2877:32;2874:52;;;2922:1;2919;2912:12;2874:52;2958:9;2945:23;2935:33;;2987:38;3021:2;3010:9;3006:18;2987:38;:::i;:::-;2977:48;;2777:254;;;;;:::o;3225:284::-;3283:6;3336:2;3324:9;3315:7;3311:23;3307:32;3304:52;;;3352:1;3349;3342:12;3304:52;3391:9;3378:23;-1:-1:-1;;;;;3434:5:1;3430:30;3423:5;3420:41;3410:69;;3475:1;3472;3465:12;4018:248;4086:6;4094;4147:2;4135:9;4126:7;4122:23;4118:32;4115:52;;;4163:1;4160;4153:12;4115:52;-1:-1:-1;;4186:23:1;;;4256:2;4241:18;;;4228:32;;-1:-1:-1;4018:248:1:o;4479:186::-;4538:6;4591:2;4579:9;4570:7;4566:23;4562:32;4559:52;;;4607:1;4604;4597:12;4559:52;4630:29;4649:9;4630:29;:::i;5311:626::-;5408:6;5416;5469:2;5457:9;5448:7;5444:23;5440:32;5437:52;;;5485:1;5482;5475:12;5437:52;5525:9;5512:23;-1:-1:-1;;;;;5595:2:1;5587:6;5584:14;5581:34;;;5611:1;5608;5601:12;5581:34;5649:6;5638:9;5634:22;5624:32;;5694:7;5687:4;5683:2;5679:13;5675:27;5665:55;;5716:1;5713;5706:12;5665:55;5756:2;5743:16;5782:2;5774:6;5771:14;5768:34;;;5798:1;5795;5788:12;5768:34;5851:7;5846:2;5836:6;5833:1;5829:14;5825:2;5821:23;5817:32;5814:45;5811:65;;;5872:1;5869;5862:12;5811:65;5903:2;5895:11;;;;;5925:6;;-1:-1:-1;5311:626:1;;-1:-1:-1;;;;5311:626:1:o;5942:801::-;6102:4;6131:2;6171;6160:9;6156:18;6201:2;6190:9;6183:21;6224:6;6259;6253:13;6290:6;6282;6275:22;6328:2;6317:9;6313:18;6306:25;;6390:2;6380:6;6377:1;6373:14;6362:9;6358:30;6354:39;6340:53;;6428:2;6420:6;6416:15;6449:1;6459:255;6473:6;6470:1;6467:13;6459:255;;;6566:2;6562:7;6550:9;6542:6;6538:22;6534:36;6529:3;6522:49;6594:40;6627:6;6618;6612:13;6594:40;:::i;:::-;6584:50;-1:-1:-1;6692:12:1;;;;6657:15;;;;6495:1;6488:9;6459:255;;;-1:-1:-1;6731:6:1;;5942:801;-1:-1:-1;;;;;;;5942:801:1:o;6748:344::-;6815:6;6823;6876:2;6864:9;6855:7;6851:23;6847:32;6844:52;;;6892:1;6889;6882:12;6844:52;6928:9;6915:23;6905:33;;6988:2;6977:9;6973:18;6960:32;7032:10;7025:5;7021:22;7014:5;7011:33;7001:61;;7058:1;7055;7048:12;7001:61;7081:5;7071:15;;;6748:344;;;;;:::o;7097:260::-;7165:6;7173;7226:2;7214:9;7205:7;7201:23;7197:32;7194:52;;;7242:1;7239;7232:12;7194:52;7265:29;7284:9;7265:29;:::i;:::-;7255:39;;7313:38;7347:2;7336:9;7332:18;7313:38;:::i;7362:380::-;7441:1;7437:12;;;;7484;;;7505:61;;7559:4;7551:6;7547:17;7537:27;;7505:61;7612:2;7604:6;7601:14;7581:18;7578:38;7575:161;;7658:10;7653:3;7649:20;7646:1;7639:31;7693:4;7690:1;7683:15;7721:4;7718:1;7711:15;7575:161;;7362:380;;;:::o;8444:127::-;8505:10;8500:3;8496:20;8493:1;8486:31;8536:4;8533:1;8526:15;8560:4;8557:1;8550:15;8576:128;8643:9;;;8664:11;;;8661:37;;;8678:18;;:::i;8709:168::-;8782:9;;;8813;;8830:15;;;8824:22;;8810:37;8800:71;;8851:18;;:::i;8882:217::-;8922:1;8948;8938:132;;8992:10;8987:3;8983:20;8980:1;8973:31;9027:4;9024:1;9017:15;9055:4;9052:1;9045:15;8938:132;-1:-1:-1;9084:9:1;;8882:217::o;9104:209::-;9142:3;-1:-1:-1;;;;;9223:2:1;9216:5;9212:14;9250:2;9241:7;9238:15;9235:41;;9256:18;;:::i;:::-;9305:1;9292:15;;9104:209;-1:-1:-1;;;9104:209:1:o;9318:125::-;9383:9;;;9404:10;;;9401:36;;;9417:18;;:::i;10178:277::-;10245:6;10298:2;10286:9;10277:7;10273:23;10269:32;10266:52;;;10314:1;10311;10304:12;10266:52;10346:9;10340:16;10399:5;10392:13;10385:21;10378:5;10375:32;10365:60;;10421:1;10418;10411:12;12387:127;12448:10;12443:3;12439:20;12436:1;12429:31;12479:4;12476:1;12469:15;12503:4;12500:1;12493:15;12519:127;12580:10;12575:3;12571:20;12568:1;12561:31;12611:4;12608:1;12601:15;12635:4;12632:1;12625:15;12651:521;12728:4;12734:6;12794:11;12781:25;12888:2;12884:7;12873:8;12857:14;12853:29;12849:43;12829:18;12825:68;12815:96;;12907:1;12904;12897:12;12815:96;12934:33;;12986:20;;;-1:-1:-1;;;;;;13018:30:1;;13015:50;;;13061:1;13058;13051:12;13015:50;13094:4;13082:17;;-1:-1:-1;13125:14:1;13121:27;;;13111:38;;13108:58;;;13162:1;13159;13152:12;13108:58;12651:521;;;;;:::o;13177:440::-;13406:6;13398;13393:3;13380:33;13362:3;13441:6;13436:3;13432:16;13468:1;13464:2;13457:13;13499:6;13493:13;13515:65;13573:6;13569:2;13562:4;13554:6;13550:17;13515:65;:::i;:::-;13596:15;;13177:440;-1:-1:-1;;;;;13177:440:1:o;13622:135::-;13661:3;13682:17;;;13679:43;;13702:18;;:::i;:::-;-1:-1:-1;13749:1:1;13738:13;;13622:135::o;13762:287::-;13891:3;13929:6;13923:13;13945:66;14004:6;13999:3;13992:4;13984:6;13980:17;13945:66;:::i;:::-;14027:16;;;;;13762:287;-1:-1:-1;;13762:287:1:o

Swarm Source

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