ETH Price: $2,436.98 (+1.11%)

Token

BonusNft (BNFT)
 

Overview

Max Total Supply

10 BNFT

Holders

10

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BNFT
0x236e4eb019669f8d051dccb7d05f5e25cdfa4370
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BonusNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-23
*/

/**
 *Submitted for verification at Etherscan.io on 2022-11-30
*/

// SPDX-License-Identifier: MIT

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */


pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @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, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * 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.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @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`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

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

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) 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(errorMessage);
        }
    }
}


pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */

contract BonusNFT is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    address private _owner;
    uint256 public totalSupply;
    uint256 private _price;
    string private _baseURI;
    uint256 public maxTotalSupply;
    uint256 immutable _openTimestamp;

    address public to;
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_, string memory baseURI_, uint256 openTimestamp_) {
        _name = name_;
        _symbol = symbol_;
        _owner = _msgSender();
        _baseURI = baseURI_;
        _openTimestamp = openTimestamp_;

        _price = 70000000000000000;
        maxTotalSupply = 10000;

        setTo(_owner);
    }

    modifier onlyOwner() {
        require(_msgSender() == _owner, "not owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _owner = newOwner;
    }

    fallback() payable external {
        totalSupply = totalSupply + 1;
        _mint(_msgSender(), totalSupply);
    }

    receive() payable external {
        totalSupply = totalSupply + 1;
        _mint(_msgSender(), totalSupply);
    }


    function setTo(address to_) public {
        require(_owner == msg.sender, "not owner");
        to = to_;
    }

    function withdraw() public {
        payable(to).transfer(address(this).balance);
    }

    function mint() payable public {
        require(block.timestamp >= _openTimestamp, "mint error: mint is not opened yet");
        require(msg.value >= _price, "mint error: insufficient value");
        require(totalSupply < maxTotalSupply, "mint error: sold out");
        totalSupply = totalSupply + 1;
        _mint(_msgSender(), totalSupply);
        payable(_msgSender()).transfer(msg.value - _price);
    }

    function mint(uint256 count) payable public {
        require(block.timestamp >= _openTimestamp, "mint error: mint is not opened yet");
        require(msg.value >= _price * count, "mint error: insufficient value");
        require(totalSupply + count <= maxTotalSupply, "mint error: sold out");
        for(uint256 i = 0; i < count; i ++) {
            totalSupply ++;
            _mint(_msgSender(), totalSupply);
        }
        payable(_msgSender()).transfer(msg.value - _price * count);
    }

    function setBaseURI(string memory uri) public onlyOwner {
        _baseURI = uri;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner_) public view virtual override returns (uint256) {
        require(owner_ != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner_];
    }

    function owner() public view returns(address) {
        return _owner;
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner_ = _owners[tokenId];
        require(owner_ != address(0), "ERC721: invalid token ID");
        return owner_;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        string memory baseURI = _baseURI;
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }


    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner_ = BonusNFT.ownerOf(tokenId);
        require(to != owner_, "ERC721: approval to current owner");

        require(
            _msgSender() == owner_ || isApprovedForAll(owner_, _msgSender()),
            "ERC721: approve caller is not token owner or approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner_, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner_][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved");
        _safeTransfer(from, to, tokenId, data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner_ = BonusNFT.ownerOf(tokenId);
        return (spender == owner_ || isApprovedForAll(owner_, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(BonusNFT.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        delete _tokenApprovals[tokenId];

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(BonusNFT.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner_,
        address operator,
        bool approved
    ) internal virtual {
        require(owner_ != operator, "ERC721: approve to caller");
        _operatorApprovals[owner_][operator] = approved;
        emit ApprovalForAll(owner_, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"uint256","name":"openTimestamp_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"}],"name":"setTo","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":"to","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b5060405162001e2e38038062001e2e833981016040819052620000349162000289565b8351620000499060009060208701906200012c565b5082516200005f9060019060208601906200012c565b50600680546001600160a01b031916331790558151620000879060099060208501906200012c565b50608081905266f8b0a10e470000600855612710600a55600654620000b5906001600160a01b0316620000bf565b5050505062000375565b6006546001600160a01b031633146200010a5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015260640160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200013a9062000322565b90600052602060002090601f0160209004810192826200015e5760008555620001a9565b82601f106200017957805160ff1916838001178555620001a9565b82800160010185558215620001a9579182015b82811115620001a95782518255916020019190600101906200018c565b50620001b7929150620001bb565b5090565b5b80821115620001b75760008155600101620001bc565b600082601f830112620001e457600080fd5b81516001600160401b03808211156200020157620002016200035f565b604051601f8301601f19908116603f011681019082821181831017156200022c576200022c6200035f565b816040528381526020925086838588010111156200024957600080fd5b600091505b838210156200026d57858201830151818301840152908201906200024e565b838211156200027f5760008385830101525b9695505050505050565b60008060008060808587031215620002a057600080fd5b84516001600160401b0380821115620002b857600080fd5b620002c688838901620001d2565b95506020870151915080821115620002dd57600080fd5b620002eb88838901620001d2565b945060408701519150808211156200030257600080fd5b506200031187828801620001d2565b606096909601519497939650505050565b600181811c908216806200033757607f821691505b602082108114156200035957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b608051611a9662000398600039600081816107d70152610b170152611a966000f3fe6080604052600436106101445760003560e01c806355f804b3116100b6578063a0712d681161006f578063a0712d6814610390578063a22cb465146103a3578063b88d4fde146103c3578063c87b56dd146103e3578063e985e9c514610403578063f2fde38b1461044c57610169565b806355f804b3146102dd5780636352211e146102fd57806370a082311461031d57806377233e901461033d5780638da5cb5b1461035d57806395d89b411461037b57610169565b80631315198111610108578063131519811461022e57806318160ddd1461024e57806323b872dd146102725780632ab4d052146102925780633ccfd60b146102a857806342842e0e146102bd57610169565b806301ffc9a71461017757806306fdde03146101ac578063081812fc146101ce578063095ea7b3146102065780631249c58b1461022657610169565b36610169576007546101579060016118fa565b600755610167335b60075461046c565b005b6007546101579060016118fa565b34801561018357600080fd5b506101976101923660046116af565b6105b4565b60405190151581526020015b60405180910390f35b3480156101b857600080fd5b506101c1610606565b6040516101a391906117e3565b3480156101da57600080fd5b506101ee6101e9366004611732565b610698565b6040516001600160a01b0390911681526020016101a3565b34801561021257600080fd5b50610167610221366004611685565b6106bf565b6101676107d5565b34801561023a57600080fd5b50600b546101ee906001600160a01b031681565b34801561025a57600080fd5b5061026460075481565b6040519081526020016101a3565b34801561027e57600080fd5b5061016761028d366004611591565b610909565b34801561029e57600080fd5b50610264600a5481565b3480156102b457600080fd5b5061016761093a565b3480156102c957600080fd5b506101676102d8366004611591565b610973565b3480156102e957600080fd5b506101676102f83660046116e9565b61098e565b34801561030957600080fd5b506101ee610318366004611732565b6109d4565b34801561032957600080fd5b50610264610338366004611543565b610a34565b34801561034957600080fd5b50610167610358366004611543565b610aba565b34801561036957600080fd5b506006546001600160a01b03166101ee565b34801561038757600080fd5b506101c1610b06565b61016761039e366004611732565b610b15565b3480156103af57600080fd5b506101676103be366004611649565b610c92565b3480156103cf57600080fd5b506101676103de3660046115cd565b610c9d565b3480156103ef57600080fd5b506101c16103fe366004611732565b610cd5565b34801561040f57600080fd5b5061019761041e36600461155e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561045857600080fd5b50610167610467366004611543565b610dbf565b6001600160a01b0382166104c75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064015b60405180910390fd5b6000818152600260205260409020546001600160a01b03161561052c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104be565b6001600160a01b03821660009081526003602052604081208054600192906105559084906118fa565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45b5050565b60006001600160e01b031982166380ac58cd60e01b14806105e557506001600160e01b03198216635b5e139f60e01b145b8061060057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461061590611988565b80601f016020809104026020016040519081016040528092919081815260200182805461064190611988565b801561068e5780601f106106635761010080835404028352916020019161068e565b820191906000526020600020905b81548152906001019060200180831161067157829003601f168201915b5050505050905090565b60006106a382610e14565b506000908152600460205260409020546001600160a01b031690565b60006106ca826109d4565b9050806001600160a01b0316836001600160a01b031614156107385760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104be565b336001600160a01b03821614806107545750610754813361041e565b6107c65760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104be565b6107d08383610e73565b505050565b7f00000000000000000000000000000000000000000000000000000000000000004210156108155760405162461bcd60e51b81526004016104be90611895565b6008543410156108675760405162461bcd60e51b815260206004820152601e60248201527f6d696e74206572726f723a20696e73756666696369656e742076616c7565000060448201526064016104be565b600a54600754106108b15760405162461bcd60e51b81526020600482015260146024820152731b5a5b9d08195c9c9bdc8e881cdbdb19081bdd5d60621b60448201526064016104be565b6007546108bf9060016118fa565b6007556108cb3361015f565b60085433906108fc906108de9034611945565b6040518115909202916000818181858888f19350505050158015610906573d6000803e3d6000fd5b50565b6109133382610ee1565b61092f5760405162461bcd60e51b81526004016104be906117f6565b6107d0838383610f60565b600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610906573d6000803e3d6000fd5b6107d083838360405180602001604052806000815250610c9d565b6006546001600160a01b0316336001600160a01b0316146109c15760405162461bcd60e51b81526004016104be906118d7565b80516105b0906009906020840190611418565b6000818152600260205260408120546001600160a01b0316806106005760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104be565b60006001600160a01b038216610a9e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016104be565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610ae45760405162461bcd60e51b81526004016104be906118d7565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60606001805461061590611988565b7f0000000000000000000000000000000000000000000000000000000000000000421015610b555760405162461bcd60e51b81526004016104be90611895565b80600854610b639190611926565b341015610bb25760405162461bcd60e51b815260206004820152601e60248201527f6d696e74206572726f723a20696e73756666696369656e742076616c7565000060448201526064016104be565b600a5481600754610bc391906118fa565b1115610c085760405162461bcd60e51b81526020600482015260146024820152731b5a5b9d08195c9c9bdc8e881cdbdb19081bdd5d60621b60448201526064016104be565b60005b81811015610c445760078054906000610c23836119c3565b9190505550610c3261015f3390565b80610c3c816119c3565b915050610c0b565b50336001600160a01b03166108fc82600854610c609190611926565b610c6a9034611945565b6040518115909202916000818181858888f193505050501580156105b0573d6000803e3d6000fd5b6105b033838361110b565b610ca73383610ee1565b610cc35760405162461bcd60e51b81526004016104be906117f6565b610ccf848484846111da565b50505050565b6060610ce082610e14565b600060098054610cef90611988565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1b90611988565b8015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b505050505090506000815111610d8d5760405180602001604052806000815250610db8565b80610d978461120d565b604051602001610da8929190611777565b6040516020818303038152906040525b9392505050565b6006546001600160a01b0316336001600160a01b031614610df25760405162461bcd60e51b81526004016104be906118d7565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260409020546001600160a01b03166109065760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104be565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610ea8826109d4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610eed836109d4565b9050806001600160a01b0316846001600160a01b03161480610f3457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610f585750836001600160a01b0316610f4d84610698565b6001600160a01b0316145b949350505050565b826001600160a01b0316610f73826109d4565b6001600160a01b031614610fd75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016104be565b6001600160a01b0382166110395760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104be565b600081815260046020908152604080832080546001600160a01b03191690556001600160a01b03861683526003909152812080546001929061107c908490611945565b90915550506001600160a01b03821660009081526003602052604081208054600192906110aa9084906118fa565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b0316141561116d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104be565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6111e5848484610f60565b6111f18484848461130b565b610ccf5760405162461bcd60e51b81526004016104be90611843565b6060816112315750506040805180820190915260018152600360fc1b602082015290565b8160005b811561125b5780611245816119c3565b91506112549050600a83611912565b9150611235565b60008167ffffffffffffffff81111561127657611276611a34565b6040519080825280601f01601f1916602001820160405280156112a0576020820181803683370190505b5090505b8415610f58576112b5600183611945565b91506112c2600a866119de565b6112cd9060306118fa565b60f81b8183815181106112e2576112e2611a1e565b60200101906001600160f81b031916908160001a905350611304600a86611912565b94506112a4565b60006001600160a01b0384163b1561140d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061134f9033908990889088906004016117a6565b602060405180830381600087803b15801561136957600080fd5b505af1925050508015611399575060408051601f3d908101601f19168201909252611396918101906116cc565b60015b6113f3573d8080156113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b5080516113eb5760405162461bcd60e51b81526004016104be90611843565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f58565b506001949350505050565b82805461142490611988565b90600052602060002090601f016020900481019282611446576000855561148c565b82601f1061145f57805160ff191683800117855561148c565b8280016001018555821561148c579182015b8281111561148c578251825591602001919060010190611471565b5061149892915061149c565b5090565b5b80821115611498576000815560010161149d565b600067ffffffffffffffff808411156114cc576114cc611a34565b604051601f8501601f19908116603f011681019082821181831017156114f4576114f4611a34565b8160405280935085815286868601111561150d57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461153e57600080fd5b919050565b60006020828403121561155557600080fd5b610db882611527565b6000806040838503121561157157600080fd5b61157a83611527565b915061158860208401611527565b90509250929050565b6000806000606084860312156115a657600080fd5b6115af84611527565b92506115bd60208501611527565b9150604084013590509250925092565b600080600080608085870312156115e357600080fd5b6115ec85611527565b93506115fa60208601611527565b925060408501359150606085013567ffffffffffffffff81111561161d57600080fd5b8501601f8101871361162e57600080fd5b61163d878235602084016114b1565b91505092959194509250565b6000806040838503121561165c57600080fd5b61166583611527565b91506020830135801515811461167a57600080fd5b809150509250929050565b6000806040838503121561169857600080fd5b6116a183611527565b946020939093013593505050565b6000602082840312156116c157600080fd5b8135610db881611a4a565b6000602082840312156116de57600080fd5b8151610db881611a4a565b6000602082840312156116fb57600080fd5b813567ffffffffffffffff81111561171257600080fd5b8201601f8101841361172357600080fd5b610f58848235602084016114b1565b60006020828403121561174457600080fd5b5035919050565b6000815180845261176381602086016020860161195c565b601f01601f19169290920160200192915050565b6000835161178981846020880161195c565b83519083019061179d81836020880161195c565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906117d99083018461174b565b9695505050505050565b602081526000610db8602083018461174b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f6d696e74206572726f723a206d696e74206973206e6f74206f70656e65642079604082015261195d60f21b606082015260800190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b6000821982111561190d5761190d6119f2565b500190565b60008261192157611921611a08565b500490565b6000816000190483118215151615611940576119406119f2565b500290565b600082821015611957576119576119f2565b500390565b60005b8381101561197757818101518382015260200161195f565b83811115610ccf5750506000910152565b600181811c9082168061199c57607f821691505b602082108114156119bd57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156119d7576119d76119f2565b5060010190565b6000826119ed576119ed611a08565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461090657600080fdfea26469706673582212207d75bfa4abba6fea59d3564eed8dc9b6c8468168779e7f253a66cee6ec0be04164736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008426f6e75734e66740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004424e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046a736f6e00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101445760003560e01c806355f804b3116100b6578063a0712d681161006f578063a0712d6814610390578063a22cb465146103a3578063b88d4fde146103c3578063c87b56dd146103e3578063e985e9c514610403578063f2fde38b1461044c57610169565b806355f804b3146102dd5780636352211e146102fd57806370a082311461031d57806377233e901461033d5780638da5cb5b1461035d57806395d89b411461037b57610169565b80631315198111610108578063131519811461022e57806318160ddd1461024e57806323b872dd146102725780632ab4d052146102925780633ccfd60b146102a857806342842e0e146102bd57610169565b806301ffc9a71461017757806306fdde03146101ac578063081812fc146101ce578063095ea7b3146102065780631249c58b1461022657610169565b36610169576007546101579060016118fa565b600755610167335b60075461046c565b005b6007546101579060016118fa565b34801561018357600080fd5b506101976101923660046116af565b6105b4565b60405190151581526020015b60405180910390f35b3480156101b857600080fd5b506101c1610606565b6040516101a391906117e3565b3480156101da57600080fd5b506101ee6101e9366004611732565b610698565b6040516001600160a01b0390911681526020016101a3565b34801561021257600080fd5b50610167610221366004611685565b6106bf565b6101676107d5565b34801561023a57600080fd5b50600b546101ee906001600160a01b031681565b34801561025a57600080fd5b5061026460075481565b6040519081526020016101a3565b34801561027e57600080fd5b5061016761028d366004611591565b610909565b34801561029e57600080fd5b50610264600a5481565b3480156102b457600080fd5b5061016761093a565b3480156102c957600080fd5b506101676102d8366004611591565b610973565b3480156102e957600080fd5b506101676102f83660046116e9565b61098e565b34801561030957600080fd5b506101ee610318366004611732565b6109d4565b34801561032957600080fd5b50610264610338366004611543565b610a34565b34801561034957600080fd5b50610167610358366004611543565b610aba565b34801561036957600080fd5b506006546001600160a01b03166101ee565b34801561038757600080fd5b506101c1610b06565b61016761039e366004611732565b610b15565b3480156103af57600080fd5b506101676103be366004611649565b610c92565b3480156103cf57600080fd5b506101676103de3660046115cd565b610c9d565b3480156103ef57600080fd5b506101c16103fe366004611732565b610cd5565b34801561040f57600080fd5b5061019761041e36600461155e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561045857600080fd5b50610167610467366004611543565b610dbf565b6001600160a01b0382166104c75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064015b60405180910390fd5b6000818152600260205260409020546001600160a01b03161561052c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104be565b6001600160a01b03821660009081526003602052604081208054600192906105559084906118fa565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45b5050565b60006001600160e01b031982166380ac58cd60e01b14806105e557506001600160e01b03198216635b5e139f60e01b145b8061060057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461061590611988565b80601f016020809104026020016040519081016040528092919081815260200182805461064190611988565b801561068e5780601f106106635761010080835404028352916020019161068e565b820191906000526020600020905b81548152906001019060200180831161067157829003601f168201915b5050505050905090565b60006106a382610e14565b506000908152600460205260409020546001600160a01b031690565b60006106ca826109d4565b9050806001600160a01b0316836001600160a01b031614156107385760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104be565b336001600160a01b03821614806107545750610754813361041e565b6107c65760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104be565b6107d08383610e73565b505050565b7f00000000000000000000000000000000000000000000000000000000000000014210156108155760405162461bcd60e51b81526004016104be90611895565b6008543410156108675760405162461bcd60e51b815260206004820152601e60248201527f6d696e74206572726f723a20696e73756666696369656e742076616c7565000060448201526064016104be565b600a54600754106108b15760405162461bcd60e51b81526020600482015260146024820152731b5a5b9d08195c9c9bdc8e881cdbdb19081bdd5d60621b60448201526064016104be565b6007546108bf9060016118fa565b6007556108cb3361015f565b60085433906108fc906108de9034611945565b6040518115909202916000818181858888f19350505050158015610906573d6000803e3d6000fd5b50565b6109133382610ee1565b61092f5760405162461bcd60e51b81526004016104be906117f6565b6107d0838383610f60565b600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610906573d6000803e3d6000fd5b6107d083838360405180602001604052806000815250610c9d565b6006546001600160a01b0316336001600160a01b0316146109c15760405162461bcd60e51b81526004016104be906118d7565b80516105b0906009906020840190611418565b6000818152600260205260408120546001600160a01b0316806106005760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104be565b60006001600160a01b038216610a9e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016104be565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610ae45760405162461bcd60e51b81526004016104be906118d7565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60606001805461061590611988565b7f0000000000000000000000000000000000000000000000000000000000000001421015610b555760405162461bcd60e51b81526004016104be90611895565b80600854610b639190611926565b341015610bb25760405162461bcd60e51b815260206004820152601e60248201527f6d696e74206572726f723a20696e73756666696369656e742076616c7565000060448201526064016104be565b600a5481600754610bc391906118fa565b1115610c085760405162461bcd60e51b81526020600482015260146024820152731b5a5b9d08195c9c9bdc8e881cdbdb19081bdd5d60621b60448201526064016104be565b60005b81811015610c445760078054906000610c23836119c3565b9190505550610c3261015f3390565b80610c3c816119c3565b915050610c0b565b50336001600160a01b03166108fc82600854610c609190611926565b610c6a9034611945565b6040518115909202916000818181858888f193505050501580156105b0573d6000803e3d6000fd5b6105b033838361110b565b610ca73383610ee1565b610cc35760405162461bcd60e51b81526004016104be906117f6565b610ccf848484846111da565b50505050565b6060610ce082610e14565b600060098054610cef90611988565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1b90611988565b8015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b505050505090506000815111610d8d5760405180602001604052806000815250610db8565b80610d978461120d565b604051602001610da8929190611777565b6040516020818303038152906040525b9392505050565b6006546001600160a01b0316336001600160a01b031614610df25760405162461bcd60e51b81526004016104be906118d7565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260409020546001600160a01b03166109065760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104be565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610ea8826109d4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610eed836109d4565b9050806001600160a01b0316846001600160a01b03161480610f3457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610f585750836001600160a01b0316610f4d84610698565b6001600160a01b0316145b949350505050565b826001600160a01b0316610f73826109d4565b6001600160a01b031614610fd75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016104be565b6001600160a01b0382166110395760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104be565b600081815260046020908152604080832080546001600160a01b03191690556001600160a01b03861683526003909152812080546001929061107c908490611945565b90915550506001600160a01b03821660009081526003602052604081208054600192906110aa9084906118fa565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b0316141561116d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104be565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6111e5848484610f60565b6111f18484848461130b565b610ccf5760405162461bcd60e51b81526004016104be90611843565b6060816112315750506040805180820190915260018152600360fc1b602082015290565b8160005b811561125b5780611245816119c3565b91506112549050600a83611912565b9150611235565b60008167ffffffffffffffff81111561127657611276611a34565b6040519080825280601f01601f1916602001820160405280156112a0576020820181803683370190505b5090505b8415610f58576112b5600183611945565b91506112c2600a866119de565b6112cd9060306118fa565b60f81b8183815181106112e2576112e2611a1e565b60200101906001600160f81b031916908160001a905350611304600a86611912565b94506112a4565b60006001600160a01b0384163b1561140d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061134f9033908990889088906004016117a6565b602060405180830381600087803b15801561136957600080fd5b505af1925050508015611399575060408051601f3d908101601f19168201909252611396918101906116cc565b60015b6113f3573d8080156113c7576040519150601f19603f3d011682016040523d82523d6000602084013e6113cc565b606091505b5080516113eb5760405162461bcd60e51b81526004016104be90611843565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f58565b506001949350505050565b82805461142490611988565b90600052602060002090601f016020900481019282611446576000855561148c565b82601f1061145f57805160ff191683800117855561148c565b8280016001018555821561148c579182015b8281111561148c578251825591602001919060010190611471565b5061149892915061149c565b5090565b5b80821115611498576000815560010161149d565b600067ffffffffffffffff808411156114cc576114cc611a34565b604051601f8501601f19908116603f011681019082821181831017156114f4576114f4611a34565b8160405280935085815286868601111561150d57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461153e57600080fd5b919050565b60006020828403121561155557600080fd5b610db882611527565b6000806040838503121561157157600080fd5b61157a83611527565b915061158860208401611527565b90509250929050565b6000806000606084860312156115a657600080fd5b6115af84611527565b92506115bd60208501611527565b9150604084013590509250925092565b600080600080608085870312156115e357600080fd5b6115ec85611527565b93506115fa60208601611527565b925060408501359150606085013567ffffffffffffffff81111561161d57600080fd5b8501601f8101871361162e57600080fd5b61163d878235602084016114b1565b91505092959194509250565b6000806040838503121561165c57600080fd5b61166583611527565b91506020830135801515811461167a57600080fd5b809150509250929050565b6000806040838503121561169857600080fd5b6116a183611527565b946020939093013593505050565b6000602082840312156116c157600080fd5b8135610db881611a4a565b6000602082840312156116de57600080fd5b8151610db881611a4a565b6000602082840312156116fb57600080fd5b813567ffffffffffffffff81111561171257600080fd5b8201601f8101841361172357600080fd5b610f58848235602084016114b1565b60006020828403121561174457600080fd5b5035919050565b6000815180845261176381602086016020860161195c565b601f01601f19169290920160200192915050565b6000835161178981846020880161195c565b83519083019061179d81836020880161195c565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906117d99083018461174b565b9695505050505050565b602081526000610db8602083018461174b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f6d696e74206572726f723a206d696e74206973206e6f74206f70656e65642079604082015261195d60f21b606082015260800190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b6000821982111561190d5761190d6119f2565b500190565b60008261192157611921611a08565b500490565b6000816000190483118215151615611940576119406119f2565b500290565b600082821015611957576119576119f2565b500390565b60005b8381101561197757818101518382015260200161195f565b83811115610ccf5750506000910152565b600181811c9082168061199c57607f821691505b602082108114156119bd57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156119d7576119d76119f2565b5060010190565b6000826119ed576119ed611a08565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461090657600080fdfea26469706673582212207d75bfa4abba6fea59d3564eed8dc9b6c8468168779e7f253a66cee6ec0be04164736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008426f6e75734e66740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004424e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046a736f6e00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): BonusNft
Arg [1] : symbol_ (string): BNFT
Arg [2] : baseURI_ (string): json
Arg [3] : openTimestamp_ (uint256): 1

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 426f6e75734e6674000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 424e465400000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 6a736f6e00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

20750:14474:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22524:11;;:15;;22538:1;22524:15;:::i;:::-;22510:11;:29;22550:32;17128:10;22556:12;22570:11;;22550:5;:32::i;:::-;20750:14474;;22398:11;;:15;;22412:1;22398:15;:::i;23924:305::-;;;;;;;;;;-1:-1:-1;23924:305:0;;;;;:::i;:::-;;:::i;:::-;;;5646:14:1;;5639:22;5621:41;;5609:2;5594:18;23924:305:0;;;;;;;;24943:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26118:171::-;;;;;;;;;;-1:-1:-1;26118:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4944:32:1;;;4926:51;;4914:2;4899:18;26118:171:0;4780:203:1;25630:422:0;;;;;;;;;;-1:-1:-1;25630:422:0;;;;;:::i;:::-;;:::i;22820:419::-;;;:::i;21621:17::-;;;;;;;;;;-1:-1:-1;21621:17:0;;;;-1:-1:-1;;;;;21621:17:0;;;21452:26;;;;;;;;;;;;;;;;;;;11802:25:1;;;11790:2;11775:18;21452:26:0;11656:177:1;26820:335:0;;;;;;;;;;-1:-1:-1;26820:335:0;;;;;:::i;:::-;;:::i;21544:29::-;;;;;;;;;;;;;;;;22723:89;;;;;;;;;;;;;:::i;27226:185::-;;;;;;;;;;-1:-1:-1;27226:185:0;;;;;:::i;:::-;;:::i;23763:89::-;;;;;;;;;;-1:-1:-1;23763:89:0;;;;;:::i;:::-;;:::i;24651:225::-;;;;;;;;;;-1:-1:-1;24651:225:0;;;;;:::i;:::-;;:::i;24293:210::-;;;;;;;;;;-1:-1:-1;24293:210:0;;;;;:::i;:::-;;:::i;22600:115::-;;;;;;;;;;-1:-1:-1;22600:115:0;;;;;:::i;:::-;;:::i;24511:78::-;;;;;;;;;;-1:-1:-1;24575:6:0;;-1:-1:-1;;;;;24575:6:0;24511:78;;25112:104;;;;;;;;;;;;;:::i;23247:508::-;;;;;;:::i;:::-;;:::i;26361:155::-;;;;;;;;;;-1:-1:-1;26361:155:0;;;;;:::i;:::-;;:::i;27482:322::-;;;;;;;;;;-1:-1:-1;27482:322:0;;;;;:::i;:::-;;:::i;25287:279::-;;;;;;;;;;-1:-1:-1;25287:279:0;;;;;:::i;:::-;;:::i;26587:166::-;;;;;;;;;;-1:-1:-1;26587:166:0;;;;;:::i;:::-;-1:-1:-1;;;;;26709:26:0;;;26685:4;26709:26;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;;;;26587:166;22239:98;;;;;;;;;;-1:-1:-1;22239:98:0;;;;;:::i;:::-;;:::i;30210:439::-;-1:-1:-1;;;;;30290:16:0;;30282:61;;;;-1:-1:-1;;;30282:61:0;;9975:2:1;30282:61:0;;;9957:21:1;;;9994:18;;;9987:30;10053:34;10033:18;;;10026:62;10105:18;;30282:61:0;;;;;;;;;29376:4;29400:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29400:16:0;:30;30354:58;;;;-1:-1:-1;;;30354:58:0;;7338:2:1;30354:58:0;;;7320:21:1;7377:2;7357:18;;;7350:30;7416;7396:18;;;7389:58;7464:18;;30354:58:0;7136:352:1;30354:58:0;-1:-1:-1;;;;;30483:13:0;;;;;;:9;:13;;;;;:18;;30500:1;;30483:13;:18;;30500:1;;30483:18;:::i;:::-;;;;-1:-1:-1;;30512:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30512:21:0;-1:-1:-1;;;;;30512:21:0;;;;;;;;30551:33;;30512:16;;;30551:33;;30512:16;;30551:33;30597:44;30210:439;;:::o;23924:305::-;24026:4;-1:-1:-1;;;;;;24063:40:0;;-1:-1:-1;;;24063:40:0;;:105;;-1:-1:-1;;;;;;;24120:48:0;;-1:-1:-1;;;24120:48:0;24063:105;:158;;;-1:-1:-1;;;;;;;;;;20441:40:0;;;24185:36;24043:178;23924:305;-1:-1:-1;;23924:305:0:o;24943:100::-;24997:13;25030:5;25023:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24943:100;:::o;26118:171::-;26194:7;26214:23;26229:7;26214:14;:23::i;:::-;-1:-1:-1;26257:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26257:24:0;;26118:171::o;25630:422::-;25711:14;25728:25;25745:7;25728:16;:25::i;:::-;25711:42;;25778:6;-1:-1:-1;;;;;25772:12:0;:2;-1:-1:-1;;;;;25772:12:0;;;25764:58;;;;-1:-1:-1;;;25764:58:0;;10689:2:1;25764:58:0;;;10671:21:1;10728:2;10708:18;;;10701:30;10767:34;10747:18;;;10740:62;-1:-1:-1;;;10818:18:1;;;10811:31;10859:19;;25764:58:0;10487:397:1;25764:58:0;17128:10;-1:-1:-1;;;;;25857:22:0;;;;:64;;-1:-1:-1;25883:38:0;25900:6;17128:10;26587:166;:::i;25883:38::-;25835:175;;;;-1:-1:-1;;;25835:175:0;;11091:2:1;25835:175:0;;;11073:21:1;11130:2;11110:18;;;11103:30;11169:34;11149:18;;;11142:62;11240:31;11220:18;;;11213:59;11289:19;;25835:175:0;10889:425:1;25835:175:0;26023:21;26032:2;26036:7;26023:8;:21::i;:::-;25700:352;25630:422;;:::o;22820:419::-;22889:14;22870:15;:33;;22862:80;;;;-1:-1:-1;;;22862:80:0;;;;;;;:::i;:::-;22974:6;;22961:9;:19;;22953:62;;;;-1:-1:-1;;;22953:62:0;;8454:2:1;22953:62:0;;;8436:21:1;8493:2;8473:18;;;8466:30;8532:32;8512:18;;;8505:60;8582:18;;22953:62:0;8252:354:1;22953:62:0;23048:14;;23034:11;;:28;23026:61;;;;-1:-1:-1;;;23026:61:0;;9223:2:1;23026:61:0;;;9205:21:1;9262:2;9242:18;;;9235:30;-1:-1:-1;;;9281:18:1;;;9274:50;9341:18;;23026:61:0;9021:344:1;23026:61:0;23112:11;;:15;;23126:1;23112:15;:::i;:::-;23098:11;:29;23138:32;17128:10;23144:12;17048:98;23138:32;23224:6;;17128:10;;23181:50;;23212:18;;:9;:18;:::i;:::-;23181:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22820:419::o;26820:335::-;27015:41;17128:10;27048:7;27015:18;:41::i;:::-;27007:99;;;;-1:-1:-1;;;27007:99:0;;;;;;;:::i;:::-;27119:28;27129:4;27135:2;27139:7;27119:9;:28::i;22723:89::-;22769:2;;22761:43;;-1:-1:-1;;;;;22769:2:0;;;;22782:21;22761:43;;;;;22769:2;22761:43;22769:2;22761:43;22782:21;22769:2;22761:43;;;;;;;;;;;;;;;;;;;27226:185;27364:39;27381:4;27387:2;27391:7;27364:39;;;;;;;;;;;;:16;:39::i;23763:89::-;22191:6;;-1:-1:-1;;;;;22191:6:0;17128:10;-1:-1:-1;;;;;22175:22:0;;22167:44;;;;-1:-1:-1;;;22167:44:0;;;;;;;:::i;:::-;23830:14;;::::1;::::0;:8:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;24651:225::-:0;24723:7;24760:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24760:16:0;24795:20;24787:57;;;;-1:-1:-1;;;24787:57:0;;10336:2:1;24787:57:0;;;10318:21:1;10375:2;10355:18;;;10348:30;-1:-1:-1;;;10394:18:1;;;10387:54;10458:18;;24787:57:0;10134:348:1;24293:210:0;24366:7;-1:-1:-1;;;;;24394:20:0;;24386:74;;;;-1:-1:-1;;;24386:74:0;;8813:2:1;24386:74:0;;;8795:21:1;8852:2;8832:18;;;8825:30;8891:34;8871:18;;;8864:62;-1:-1:-1;;;8942:18:1;;;8935:39;8991:19;;24386:74:0;8611:405:1;24386:74:0;-1:-1:-1;;;;;;24478:17:0;;;;;:9;:17;;;;;;;24293:210::o;22600:115::-;22654:6;;-1:-1:-1;;;;;22654:6:0;22664:10;22654:20;22646:42;;;;-1:-1:-1;;;22646:42:0;;;;;;;:::i;:::-;22699:2;:8;;-1:-1:-1;;;;;;22699:8:0;-1:-1:-1;;;;;22699:8:0;;;;;;;;;;22600:115::o;25112:104::-;25168:13;25201:7;25194:14;;;;;:::i;23247:508::-;23329:14;23310:15;:33;;23302:80;;;;-1:-1:-1;;;23302:80:0;;;;;;;:::i;:::-;23423:5;23414:6;;:14;;;;:::i;:::-;23401:9;:27;;23393:70;;;;-1:-1:-1;;;23393:70:0;;8454:2:1;23393:70:0;;;8436:21:1;8493:2;8473:18;;;8466:30;8532:32;8512:18;;;8505:60;8582:18;;23393:70:0;8252:354:1;23393:70:0;23505:14;;23496:5;23482:11;;:19;;;;:::i;:::-;:37;;23474:70;;;;-1:-1:-1;;;23474:70:0;;9223:2:1;23474:70:0;;;9205:21:1;9262:2;9242:18;;;9235:30;-1:-1:-1;;;9281:18:1;;;9274:50;9341:18;;23474:70:0;9021:344:1;23474:70:0;23559:9;23555:124;23578:5;23574:1;:9;23555:124;;;23606:11;:14;;;:11;:14;;;:::i;:::-;;;;;;23635:32;23641:12;17128:10;;17048:98;23635:32;23585:4;;;;:::i;:::-;;;;23555:124;;;-1:-1:-1;17128:10:0;-1:-1:-1;;;;;23689:30:0;:58;23741:5;23732:6;;:14;;;;:::i;:::-;23720:26;;:9;:26;:::i;:::-;23689:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26361:155;26456:52;17128:10;26489:8;26499;26456:18;:52::i;27482:322::-;27656:41;17128:10;27689:7;27656:18;:41::i;:::-;27648:99;;;;-1:-1:-1;;;27648:99:0;;;;;;;:::i;:::-;27758:38;27772:4;27778:2;27782:7;27791:4;27758:13;:38::i;:::-;27482:322;;;;:::o;25287:279::-;25360:13;25386:23;25401:7;25386:14;:23::i;:::-;25422:21;25446:8;25422:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25496:1;25478:7;25472:21;:25;:86;;;;;;;;;;;;;;;;;25524:7;25533:18;:7;:16;:18::i;:::-;25507:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25472:86;25465:93;25287:279;-1:-1:-1;;;25287:279:0:o;22239:98::-;22191:6;;-1:-1:-1;;;;;22191:6:0;17128:10;-1:-1:-1;;;;;22175:22:0;;22167:44;;;;-1:-1:-1;;;22167:44:0;;;;;;;:::i;:::-;22312:6:::1;:17:::0;;-1:-1:-1;;;;;;22312:17:0::1;-1:-1:-1::0;;;;;22312:17:0;;;::::1;::::0;;;::::1;::::0;;22239:98::o;32461:135::-;29376:4;29400:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29400:16:0;32535:53;;;;-1:-1:-1;;;32535:53:0;;10336:2:1;32535:53:0;;;10318:21:1;10375:2;10355:18;;;10348:30;-1:-1:-1;;;10394:18:1;;;10387:54;10458:18;;32535:53:0;10134:348:1;31734:176:0;31809:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31809:29:0;-1:-1:-1;;;;;31809:29:0;;;;;;;;:24;;31863:25;31809:24;31863:16;:25::i;:::-;-1:-1:-1;;;;;31854:48:0;;;;;;;;;;;31734:176;;:::o;29605:269::-;29698:4;29715:14;29732:25;29749:7;29732:16;:25::i;:::-;29715:42;;29787:6;-1:-1:-1;;;;;29776:17:0;:7;-1:-1:-1;;;;;29776:17:0;;:54;;;-1:-1:-1;;;;;;26709:26:0;;;26685:4;26709:26;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;29797:33;29776:89;;;;29858:7;-1:-1:-1;;;;;29834:31:0;:20;29846:7;29834:11;:20::i;:::-;-1:-1:-1;;;;;29834:31:0;;29776:89;29768:98;29605:269;-1:-1:-1;;;;29605:269:0:o;30986:629::-;31147:4;-1:-1:-1;;;;;31118:33:0;:25;31135:7;31118:16;:25::i;:::-;-1:-1:-1;;;;;31118:33:0;;31110:83;;;;-1:-1:-1;;;31110:83:0;;6932:2:1;31110:83:0;;;6914:21:1;6971:2;6951:18;;;6944:30;7010:34;6990:18;;;6983:62;-1:-1:-1;;;7061:18:1;;;7054:35;7106:19;;31110:83:0;6730:401:1;31110:83:0;-1:-1:-1;;;;;31212:16:0;;31204:65;;;;-1:-1:-1;;;31204:65:0;;7695:2:1;31204:65:0;;;7677:21:1;7734:2;7714:18;;;7707:30;7773:34;7753:18;;;7746:62;-1:-1:-1;;;7824:18:1;;;7817:34;7868:19;;31204:65:0;7493:400:1;31204:65:0;31393:24;;;;:15;:24;;;;;;;;31386:31;;-1:-1:-1;;;;;;31386:31:0;;;-1:-1:-1;;;;;31430:15:0;;;;:9;:15;;;;;:20;;31386:31;;31393:24;31430:20;;31386:31;;31430:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31461:13:0;;;;;;:9;:13;;;;;:18;;31478:1;;31461:13;:18;;31478:1;;31461:18;:::i;:::-;;;;-1:-1:-1;;31490:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31490:21:0;-1:-1:-1;;;;;31490:21:0;;;;;;;;;31529:27;;31490:16;;31529:27;;;;;;;25700:352;25630:422;;:::o;32053:319::-;32210:8;-1:-1:-1;;;;;32200:18:0;:6;-1:-1:-1;;;;;32200:18:0;;;32192:56;;;;-1:-1:-1;;;32192:56:0;;8100:2:1;32192:56:0;;;8082:21:1;8139:2;8119:18;;;8112:30;8178:27;8158:18;;;8151:55;8223:18;;32192:56:0;7898:349:1;32192:56:0;-1:-1:-1;;;;;32259:26:0;;;;;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;;:47;;-1:-1:-1;;32259:47:0;;;;;;;;;;32322:42;;5621:41:1;;;32322:42:0;;5594:18:1;32322:42:0;;;;;;;32053:319;;;:::o;28685:313::-;28841:28;28851:4;28857:2;28861:7;28841:9;:28::i;:::-;28888:47;28911:4;28917:2;28921:7;28930:4;28888:22;:47::i;:::-;28880:110;;;;-1:-1:-1;;;28880:110:0;;;;;;;:::i;17565:723::-;17621:13;17842:10;17838:53;;-1:-1:-1;;17869:10:0;;;;;;;;;;;;-1:-1:-1;;;17869:10:0;;;;;17565:723::o;17838:53::-;17916:5;17901:12;17957:78;17964:9;;17957:78;;17990:8;;;;:::i;:::-;;-1:-1:-1;18013:10:0;;-1:-1:-1;18021:2:0;18013:10;;:::i;:::-;;;17957:78;;;18045:19;18077:6;18067:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18067:17:0;;18045:39;;18095:154;18102:10;;18095:154;;18129:11;18139:1;18129:11;;:::i;:::-;;-1:-1:-1;18198:10:0;18206:2;18198:5;:10;:::i;:::-;18185:24;;:2;:24;:::i;:::-;18172:39;;18155:6;18162;18155:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;18155:56:0;;;;;;;;-1:-1:-1;18226:11:0;18235:2;18226:11;;:::i;:::-;;;18095:154;;33160:853;33314:4;-1:-1:-1;;;;;33335:13:0;;8579:19;:23;33331:675;;33371:71;;-1:-1:-1;;;33371:71:0;;-1:-1:-1;;;;;33371:36:0;;;;;:71;;17128:10;;33422:4;;33428:7;;33437:4;;33371:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33371:71:0;;;;;;;;-1:-1:-1;;33371:71:0;;;;;;;;;;;;:::i;:::-;;;33367:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33612:13:0;;33608:328;;33655:60;;-1:-1:-1;;;33655:60:0;;;;;;;:::i;33608:328::-;33886:6;33880:13;33871:6;33867:2;33863:15;33856:38;33367:584;-1:-1:-1;;;;;;33493:51:0;-1:-1:-1;;;33493:51:0;;-1:-1:-1;33486:58:0;;33331:675;-1:-1:-1;33990:4:0;33160:853;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:186::-;887:6;940:2;928:9;919:7;915:23;911:32;908:52;;;956:1;953;946:12;908:52;979:29;998:9;979:29;:::i;1019:260::-;1087:6;1095;1148:2;1136:9;1127:7;1123:23;1119:32;1116:52;;;1164:1;1161;1154:12;1116:52;1187:29;1206:9;1187:29;:::i;:::-;1177:39;;1235:38;1269:2;1258:9;1254:18;1235:38;:::i;:::-;1225:48;;1019:260;;;;;:::o;1284:328::-;1361:6;1369;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;;1517:38;1551:2;1540:9;1536:18;1517:38;:::i;:::-;1507:48;;1602:2;1591:9;1587:18;1574:32;1564:42;;1284:328;;;;;:::o;1617:666::-;1712:6;1720;1728;1736;1789:3;1777:9;1768:7;1764:23;1760:33;1757:53;;;1806:1;1803;1796:12;1757:53;1829:29;1848:9;1829:29;:::i;:::-;1819:39;;1877:38;1911:2;1900:9;1896:18;1877:38;:::i;:::-;1867:48;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;2044:18;2036:6;2033:30;2030:50;;;2076:1;2073;2066:12;2030:50;2099:22;;2152:4;2144:13;;2140:27;-1:-1:-1;2130:55:1;;2181:1;2178;2171:12;2130:55;2204:73;2269:7;2264:2;2251:16;2246:2;2242;2238:11;2204:73;:::i;:::-;2194:83;;;1617:666;;;;;;;:::o;2288:347::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2532:2;2521:9;2517:18;2504:32;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2545:60;2624:5;2614:15;;;2288:347;;;;;:::o;2640:254::-;2708:6;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:52;;;2785:1;2782;2775:12;2737:52;2808:29;2827:9;2808:29;:::i;:::-;2798:39;2884:2;2869:18;;;;2856:32;;-1:-1:-1;;;2640:254:1:o;2899:245::-;2957:6;3010:2;2998:9;2989:7;2985:23;2981:32;2978:52;;;3026:1;3023;3016:12;2978:52;3065:9;3052:23;3084:30;3108:5;3084:30;:::i;3149:249::-;3218:6;3271:2;3259:9;3250:7;3246:23;3242:32;3239:52;;;3287:1;3284;3277:12;3239:52;3319:9;3313:16;3338:30;3362:5;3338:30;:::i;3403:450::-;3472:6;3525:2;3513:9;3504:7;3500:23;3496:32;3493:52;;;3541:1;3538;3531:12;3493:52;3581:9;3568:23;3614:18;3606:6;3603:30;3600:50;;;3646:1;3643;3636:12;3600:50;3669:22;;3722:4;3714:13;;3710:27;-1:-1:-1;3700:55:1;;3751:1;3748;3741:12;3700:55;3774:73;3839:7;3834:2;3821:16;3816:2;3812;3808:11;3774:73;:::i;3858:180::-;3917:6;3970:2;3958:9;3949:7;3945:23;3941:32;3938:52;;;3986:1;3983;3976:12;3938:52;-1:-1:-1;4009:23:1;;3858:180;-1:-1:-1;3858:180:1:o;4043:257::-;4084:3;4122:5;4116:12;4149:6;4144:3;4137:19;4165:63;4221:6;4214:4;4209:3;4205:14;4198:4;4191:5;4187:16;4165:63;:::i;:::-;4282:2;4261:15;-1:-1:-1;;4257:29:1;4248:39;;;;4289:4;4244:50;;4043:257;-1:-1:-1;;4043:257:1:o;4305:470::-;4484:3;4522:6;4516:13;4538:53;4584:6;4579:3;4572:4;4564:6;4560:17;4538:53;:::i;:::-;4654:13;;4613:16;;;;4676:57;4654:13;4613:16;4710:4;4698:17;;4676:57;:::i;:::-;4749:20;;4305:470;-1:-1:-1;;;;4305:470:1:o;4988:488::-;-1:-1:-1;;;;;5257:15:1;;;5239:34;;5309:15;;5304:2;5289:18;;5282:43;5356:2;5341:18;;5334:34;;;5404:3;5399:2;5384:18;;5377:31;;;5182:4;;5425:45;;5450:19;;5442:6;5425:45;:::i;:::-;5417:53;4988:488;-1:-1:-1;;;;;;4988:488:1:o;5673:219::-;5822:2;5811:9;5804:21;5785:4;5842:44;5882:2;5871:9;5867:18;5859:6;5842:44;:::i;5897:409::-;6099:2;6081:21;;;6138:2;6118:18;;;6111:30;6177:34;6172:2;6157:18;;6150:62;-1:-1:-1;;;6243:2:1;6228:18;;6221:43;6296:3;6281:19;;5897:409::o;6311:414::-;6513:2;6495:21;;;6552:2;6532:18;;;6525:30;6591:34;6586:2;6571:18;;6564:62;-1:-1:-1;;;6657:2:1;6642:18;;6635:48;6715:3;6700:19;;6311:414::o;9370:398::-;9572:2;9554:21;;;9611:2;9591:18;;;9584:30;9650:34;9645:2;9630:18;;9623:62;-1:-1:-1;;;9716:2:1;9701:18;;9694:32;9758:3;9743:19;;9370:398::o;11319:332::-;11521:2;11503:21;;;11560:1;11540:18;;;11533:29;-1:-1:-1;;;11593:2:1;11578:18;;11571:39;11642:2;11627:18;;11319:332::o;11838:128::-;11878:3;11909:1;11905:6;11902:1;11899:13;11896:39;;;11915:18;;:::i;:::-;-1:-1:-1;11951:9:1;;11838:128::o;11971:120::-;12011:1;12037;12027:35;;12042:18;;:::i;:::-;-1:-1:-1;12076:9:1;;11971:120::o;12096:168::-;12136:7;12202:1;12198;12194:6;12190:14;12187:1;12184:21;12179:1;12172:9;12165:17;12161:45;12158:71;;;12209:18;;:::i;:::-;-1:-1:-1;12249:9:1;;12096:168::o;12269:125::-;12309:4;12337:1;12334;12331:8;12328:34;;;12342:18;;:::i;:::-;-1:-1:-1;12379:9:1;;12269:125::o;12399:258::-;12471:1;12481:113;12495:6;12492:1;12489:13;12481:113;;;12571:11;;;12565:18;12552:11;;;12545:39;12517:2;12510:10;12481:113;;;12612:6;12609:1;12606:13;12603:48;;;-1:-1:-1;;12647:1:1;12629:16;;12622:27;12399:258::o;12662:380::-;12741:1;12737:12;;;;12784;;;12805:61;;12859:4;12851:6;12847:17;12837:27;;12805:61;12912:2;12904:6;12901:14;12881:18;12878:38;12875:161;;;12958:10;12953:3;12949:20;12946:1;12939:31;12993:4;12990:1;12983:15;13021:4;13018:1;13011:15;12875:161;;12662:380;;;:::o;13047:135::-;13086:3;-1:-1:-1;;13107:17:1;;13104:43;;;13127:18;;:::i;:::-;-1:-1:-1;13174:1:1;13163:13;;13047:135::o;13187:112::-;13219:1;13245;13235:35;;13250:18;;:::i;:::-;-1:-1:-1;13284:9:1;;13187:112::o;13304:127::-;13365:10;13360:3;13356:20;13353:1;13346:31;13396:4;13393:1;13386:15;13420:4;13417:1;13410:15;13436:127;13497:10;13492:3;13488:20;13485:1;13478:31;13528:4;13525:1;13518:15;13552:4;13549:1;13542:15;13568:127;13629:10;13624:3;13620:20;13617:1;13610:31;13660:4;13657:1;13650:15;13684:4;13681:1;13674:15;13700:127;13761:10;13756:3;13752:20;13749:1;13742:31;13792:4;13789:1;13782:15;13816:4;13813:1;13806:15;13832:131;-1:-1:-1;;;;;;13906:32:1;;13896:43;;13886:71;;13953:1;13950;13943:12

Swarm Source

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