ETH Price: $3,279.69 (-1.52%)

Token

Crypto Hearts (CH)
 

Overview

Max Total Supply

2,500 CH

Holders

417

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 CH
0x09E61F79948179C72E743E30b6fCF9ebb36A4BfE
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:
CryptoHearts

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-17
*/

// File: @openzeppelin/contracts/utils/Context.sol
// SPDX-License-Identifier: MIT

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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

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 functionCall(target, data, "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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason 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 {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;

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

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

// File: erc721a/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;








error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File: contracts/CH.sol


pragma solidity ^0.8.4;




contract CryptoHearts is ERC721A, Ownable{

    using Strings for uint256;

    bytes32 public merkleRoot;

    string public uriPrefix = "";
    string public uriSuffix = ".json";
    string public hiddenMetadataUri;

//Create mint setters and price 

    uint256 public cost = 0.025 ether;
    uint256 public freeSupply = 250;
    uint256 public maxSupply = 2500;
    uint256 public maxMintAmountPerTx = 5;
    uint256 public maxFreeMint = 2;
    uint256 public mintLimit = 25;

//Create Setters for status

    bool public paused = true;
    bool public revealed = false;

//Create constructor contract name and symbol

  constructor() ERC721A("Crypto Hearts", "CH") {
    setHiddenMetadataUri("ipfs://QmQRoRAy1WUM4eY9ENcbtaRrDCqh4uaH1pPwzSsf4derUv/hiddengif.json");
  }

//Mint compliance

  modifier mintCompliance(uint256 quantity) {
    require(totalSupply() + quantity <= maxSupply, "Max supply exceeded!");
    require(tx.origin == msg.sender,"Contracts forbidden from minting!");
    require(numberMinted(msg.sender) + quantity <= mintLimit,"Mint limit exceeded!");
    _;
  }
//Set minting functions

  function freeMint(uint256 quantity) public payable mintCompliance(quantity) {
    require(!paused, "The contract is paused!");
    require(totalSupply() + quantity <= freeSupply,"Not enough free supply!");
    require(numberMinted(msg.sender) + quantity <= maxFreeMint,"Free mint limit exceeded!");
        _safeMint(msg.sender, quantity);
    }

  function devMint(uint256 quantity) external onlyOwner {
    require(totalSupply() + quantity <= maxSupply, "Max supply exceeded!");
        _safeMint(msg.sender, quantity);
    }

  function mint(uint256 quantity) public payable mintCompliance(quantity) {
    require(quantity > 0 && quantity <= maxMintAmountPerTx, "Invalid mint amount!");
    require(!paused, "The contract is paused!");
    require(msg.value >= cost * quantity, "Insufficient funds!");
        _safeMint(msg.sender, quantity);
  
  }
//View wallet owners tokens

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }
///Hidden metadata unless revealed

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : "";

  }


/////Esential Functions


  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }
  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }
  function setMintLimit(uint256 _mintLimit) public onlyOwner {
    mintLimit = _mintLimit;
  }
  function setMaxFreeMint(uint256 _maxFreeMint) public onlyOwner {
    maxFreeMint = _maxFreeMint;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }
  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }
  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
    merkleRoot = _merkleRoot;
  }

//Withdraw functions

  function withdraw() public onlyOwner {
    // This will pay Dev 5% of the initial sale.
    // =============================================================================
    (bool hs, ) = payable(0x0268231782Ed17a6588F193D2498C3A4f3fe5e69).call{value: address    (this).balance * 5 / 100}("");
    require(hs);
    // =============================================================================
    // This will transfer the remaining contract balance to the owner.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }

//Virtual memory string returned

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freeSupply","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":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeMint","type":"uint256"}],"name":"setMaxFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":[{"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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040819052600060808190526200001b91600a9162000201565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a91600b9162000201565b506658d15e17628000600d5560fa600e556109c4600f556005601055600260115560196012556013805461ffff191660011790553480156200008b57600080fd5b506040518060400160405280600d81526020016c43727970746f2048656172747360981b81525060405180604001604052806002815260200161086960f31b8152508160029080519060200190620000e592919062000201565b508051620000fb90600390602084019062000201565b505060008055506200010d3362000137565b620001316040518060800160405280604481526020016200282b6044913962000189565b620002e4565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6008546001600160a01b03163314620001e85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001fd90600c90602084019062000201565b5050565b8280546200020f90620002a7565b90600052602060002090601f0160209004810192826200023357600085556200027e565b82601f106200024e57805160ff19168380011785556200027e565b828001600101855582156200027e579182015b828111156200027e57825182559160200191906001019062000261565b506200028c92915062000290565b5090565b5b808211156200028c576000815560010162000291565b600181811c90821680620002bc57607f821691505b60208210811415620002de57634e487b7160e01b600052602260045260246000fd5b50919050565b61253780620002f46000396000f3fe6080604052600436106102725760003560e01c806370a082311161014f578063a0712d68116100c1578063c87b56dd1161007a578063c87b56dd146106fb578063d5abeb011461071b578063dc33e68114610731578063e0a8085314610751578063e985e9c514610771578063f2fde38b146107ba57600080fd5b8063a0712d681461065d578063a22cb46514610670578063a45ba8e714610690578063a591252d146106a5578063b071401b146106bb578063b88d4fde146106db57600080fd5b80637ec4a659116101135780637ec4a659146105be5780638da5cb5b146105de57806394354fd0146105fc57806395d89b4114610612578063996517cf146106275780639e6a1d7d1461063d57600080fd5b806370a0823114610536578063715018a614610556578063742a4c9b1461056b5780637c928fe91461058b5780637cb647591461059e57600080fd5b8063375a069a116101e85780634fdd43cb116101ac5780634fdd43cb1461049357806351830227146104b35780635503a0e8146104d25780635c975abb146104e757806362b99ad4146105015780636352211e1461051657600080fd5b8063375a069a146103f15780633ccfd60b1461041157806342842e0e14610426578063438b63001461044657806344a0d68a1461047357600080fd5b806316ba10e01161023a57806316ba10e01461034c57806316c38b3c1461036c57806318160ddd1461038c57806323b872dd146103a557806324a6ab0c146103c55780632eb4a7ab146103db57600080fd5b806301ffc9a71461027757806306fdde03146102ac578063081812fc146102ce578063095ea7b31461030657806313faede614610328575b600080fd5b34801561028357600080fd5b5061029761029236600461210d565b6107da565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c161082c565b6040516102a391906122fa565b3480156102da57600080fd5b506102ee6102e93660046120f5565b6108be565b6040516001600160a01b0390911681526020016102a3565b34801561031257600080fd5b506103266103213660046120b2565b610902565b005b34801561033457600080fd5b5061033e600d5481565b6040519081526020016102a3565b34801561035857600080fd5b50610326610367366004612145565b610990565b34801561037857600080fd5b506103266103873660046120db565b6109da565b34801561039857600080fd5b506001546000540361033e565b3480156103b157600080fd5b506103266103c0366004611fd5565b610a17565b3480156103d157600080fd5b5061033e600e5481565b3480156103e757600080fd5b5061033e60095481565b3480156103fd57600080fd5b5061032661040c3660046120f5565b610a22565b34801561041d57600080fd5b50610326610a92565b34801561043257600080fd5b50610326610441366004611fd5565b610baa565b34801561045257600080fd5b50610466610461366004611f89565b610bc5565b6040516102a391906122b6565b34801561047f57600080fd5b5061032661048e3660046120f5565b610cc2565b34801561049f57600080fd5b506103266104ae366004612145565b610cf1565b3480156104bf57600080fd5b5060135461029790610100900460ff1681565b3480156104de57600080fd5b506102c1610d2e565b3480156104f357600080fd5b506013546102979060ff1681565b34801561050d57600080fd5b506102c1610dbc565b34801561052257600080fd5b506102ee6105313660046120f5565b610dc9565b34801561054257600080fd5b5061033e610551366004611f89565b610ddb565b34801561056257600080fd5b50610326610e2a565b34801561057757600080fd5b506103266105863660046120f5565b610e60565b6103266105993660046120f5565b610e8f565b3480156105aa57600080fd5b506103266105b93660046120f5565b611069565b3480156105ca57600080fd5b506103266105d9366004612145565b611098565b3480156105ea57600080fd5b506008546001600160a01b03166102ee565b34801561060857600080fd5b5061033e60105481565b34801561061e57600080fd5b506102c16110d5565b34801561063357600080fd5b5061033e60125481565b34801561064957600080fd5b506103266106583660046120f5565b6110e4565b61032661066b3660046120f5565b611113565b34801561067c57600080fd5b5061032661068b366004612089565b6112bd565b34801561069c57600080fd5b506102c1611353565b3480156106b157600080fd5b5061033e60115481565b3480156106c757600080fd5b506103266106d63660046120f5565b611360565b3480156106e757600080fd5b506103266106f6366004612010565b61138f565b34801561070757600080fd5b506102c16107163660046120f5565b6113e0565b34801561072757600080fd5b5061033e600f5481565b34801561073d57600080fd5b5061033e61074c366004611f89565b61154f565b34801561075d57600080fd5b5061032661076c3660046120db565b61157e565b34801561077d57600080fd5b5061029761078c366004611fa3565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156107c657600080fd5b506103266107d5366004611f89565b6115c2565b60006001600160e01b031982166380ac58cd60e01b148061080b57506001600160e01b03198216635b5e139f60e01b145b8061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461083b9061243f565b80601f01602080910402602001604051908101604052809291908181526020018280546108679061243f565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b60006108c98261165a565b6108e6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061090d82610dc9565b9050806001600160a01b0316836001600160a01b031614156109425760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906109625750610960813361078c565b155b15610980576040516367d9dca160e11b815260040160405180910390fd5b61098b838383611685565b505050565b6008546001600160a01b031633146109c35760405162461bcd60e51b81526004016109ba9061234e565b60405180910390fd5b80516109d690600b906020840190611e4e565b5050565b6008546001600160a01b03163314610a045760405162461bcd60e51b81526004016109ba9061234e565b6013805460ff1916911515919091179055565b61098b8383836116e1565b6008546001600160a01b03163314610a4c5760405162461bcd60e51b81526004016109ba9061234e565b600f5481610a5d6001546000540390565b610a6791906123b1565b1115610a855760405162461bcd60e51b81526004016109ba90612383565b610a8f33826118d1565b50565b6008546001600160a01b03163314610abc5760405162461bcd60e51b81526004016109ba9061234e565b6000730268231782ed17a6588f193d2498c3a4f3fe5e696064610ae04760056123dd565b610aea91906123c9565b604051600081818185875af1925050503d8060008114610b26576040519150601f19603f3d011682016040523d82523d6000602084013e610b2b565b606091505b5050905080610b3957600080fd5b6000610b4d6008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610b97576040519150601f19603f3d011682016040523d82523d6000602084013e610b9c565b606091505b50509050806109d657600080fd5b61098b8383836040518060200160405280600081525061138f565b60606000610bd283610ddb565b905060008167ffffffffffffffff811115610bfd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c26578160200160208202803683370190505b509050600160005b8381108015610c3f5750600f548211155b15610cb8576000610c4f83610dc9565b9050866001600160a01b0316816001600160a01b03161415610ca55782848381518110610c8c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610ca18161247a565b9250505b82610caf8161247a565b93505050610c2e565b5090949350505050565b6008546001600160a01b03163314610cec5760405162461bcd60e51b81526004016109ba9061234e565b600d55565b6008546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016109ba9061234e565b80516109d690600c906020840190611e4e565b600b8054610d3b9061243f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061243f565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b505050505081565b600a8054610d3b9061243f565b6000610dd4826118eb565b5192915050565b60006001600160a01b038216610e04576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610e545760405162461bcd60e51b81526004016109ba9061234e565b610e5e6000611a07565b565b6008546001600160a01b03163314610e8a5760405162461bcd60e51b81526004016109ba9061234e565b601155565b80600f5481610ea16001546000540390565b610eab91906123b1565b1115610ec95760405162461bcd60e51b81526004016109ba90612383565b323314610ee85760405162461bcd60e51b81526004016109ba9061230d565b60125481610ef53361154f565b610eff91906123b1565b1115610f445760405162461bcd60e51b81526020600482015260146024820152734d696e74206c696d69742065786365656465642160601b60448201526064016109ba565b60135460ff1615610f915760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109ba565b600e5482610fa26001546000540390565b610fac91906123b1565b1115610ffa5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768206672656520737570706c792100000000000000000060448201526064016109ba565b601154826110073361154f565b61101191906123b1565b111561105f5760405162461bcd60e51b815260206004820152601960248201527f46726565206d696e74206c696d6974206578636565646564210000000000000060448201526064016109ba565b6109d633836118d1565b6008546001600160a01b031633146110935760405162461bcd60e51b81526004016109ba9061234e565b600955565b6008546001600160a01b031633146110c25760405162461bcd60e51b81526004016109ba9061234e565b80516109d690600a906020840190611e4e565b60606003805461083b9061243f565b6008546001600160a01b0316331461110e5760405162461bcd60e51b81526004016109ba9061234e565b601255565b80600f54816111256001546000540390565b61112f91906123b1565b111561114d5760405162461bcd60e51b81526004016109ba90612383565b32331461116c5760405162461bcd60e51b81526004016109ba9061230d565b601254816111793361154f565b61118391906123b1565b11156111c85760405162461bcd60e51b81526020600482015260146024820152734d696e74206c696d69742065786365656465642160601b60448201526064016109ba565b6000821180156111da57506010548211155b61121d5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b60448201526064016109ba565b60135460ff161561126a5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109ba565b81600d5461127891906123dd565b34101561105f5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109ba565b6001600160a01b0382163314156112e75760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600c8054610d3b9061243f565b6008546001600160a01b0316331461138a5760405162461bcd60e51b81526004016109ba9061234e565b601055565b61139a8484846116e1565b6001600160a01b0383163b151580156113bc57506113ba84848484611a59565b155b156113da576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606113eb8261165a565b61144f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109ba565b601354610100900460ff166114f057600c805461146b9061243f565b80601f01602080910402602001604051908101604052809291908181526020018280546114979061243f565b80156114e45780601f106114b9576101008083540402835291602001916114e4565b820191906000526020600020905b8154815290600101906020018083116114c757829003601f168201915b50505050509050919050565b60006114fa611b51565b9050600081511161151a5760405180602001604052806000815250611548565b8061152484611b60565b600b604051602001611538939291906121b7565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815260056020526040812054600160401b900467ffffffffffffffff16610826565b6008546001600160a01b031633146115a85760405162461bcd60e51b81526004016109ba9061234e565b601380549115156101000261ff0019909216919091179055565b6008546001600160a01b031633146115ec5760405162461bcd60e51b81526004016109ba9061234e565b6001600160a01b0381166116515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ba565b610a8f81611a07565b6000805482108015610826575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006116ec826118eb565b9050836001600160a01b031681600001516001600160a01b0316146117235760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806117415750611741853361078c565b8061175c575033611751846108be565b6001600160a01b0316145b90508061177c57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166117a357604051633a954ecd60e21b815260040160405180910390fd5b6117af60008487611685565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611885576000548214611885578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b6109d6828260405180602001604052806000815250611c7a565b6040805160608101825260008082526020820181905291810191909152816000548110156119ee57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906119ec5780516001600160a01b031615611982579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156119e7579392505050565b611982565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a8e903390899088908890600401612279565b602060405180830381600087803b158015611aa857600080fd5b505af1925050508015611ad8575060408051601f3d908101601f19168201909252611ad591810190612129565b60015b611b33573d808015611b06576040519150601f19603f3d011682016040523d82523d6000602084013e611b0b565b606091505b508051611b2b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461083b9061243f565b606081611b845750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bae5780611b988161247a565b9150611ba79050600a836123c9565b9150611b88565b60008167ffffffffffffffff811115611bd757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c01576020820181803683370190505b5090505b8415611b4957611c166001836123fc565b9150611c23600a86612495565b611c2e9060306123b1565b60f81b818381518110611c5157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c73600a866123c9565b9450611c05565b61098b83838360016000546001600160a01b038516611cab57604051622e076360e81b815260040160405180910390fd5b83611cc95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611d7657506001600160a01b0387163b15155b15611dff575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611dc76000888480600101955088611a59565b611de4576040516368d2bf6b60e11b815260040160405180910390fd5b80821415611d7c578260005414611dfa57600080fd5b611e45565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611e00575b506000556118ca565b828054611e5a9061243f565b90600052602060002090601f016020900481019282611e7c5760008555611ec2565b82601f10611e9557805160ff1916838001178555611ec2565b82800160010185558215611ec2579182015b82811115611ec2578251825591602001919060010190611ea7565b50611ece929150611ed2565b5090565b5b80821115611ece5760008155600101611ed3565b600067ffffffffffffffff80841115611f0257611f026124d5565b604051601f8501601f19908116603f01168101908282118183101715611f2a57611f2a6124d5565b81604052809350858152868686011115611f4357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611f7457600080fd5b919050565b80358015158114611f7457600080fd5b600060208284031215611f9a578081fd5b61154882611f5d565b60008060408385031215611fb5578081fd5b611fbe83611f5d565b9150611fcc60208401611f5d565b90509250929050565b600080600060608486031215611fe9578081fd5b611ff284611f5d565b925061200060208501611f5d565b9150604084013590509250925092565b60008060008060808587031215612025578081fd5b61202e85611f5d565b935061203c60208601611f5d565b925060408501359150606085013567ffffffffffffffff81111561205e578182fd5b8501601f8101871361206e578182fd5b61207d87823560208401611ee7565b91505092959194509250565b6000806040838503121561209b578182fd5b6120a483611f5d565b9150611fcc60208401611f79565b600080604083850312156120c4578182fd5b6120cd83611f5d565b946020939093013593505050565b6000602082840312156120ec578081fd5b61154882611f79565b600060208284031215612106578081fd5b5035919050565b60006020828403121561211e578081fd5b8135611548816124eb565b60006020828403121561213a578081fd5b8151611548816124eb565b600060208284031215612156578081fd5b813567ffffffffffffffff81111561216c578182fd5b8201601f8101841361217c578182fd5b611b4984823560208401611ee7565b600081518084526121a3816020860160208601612413565b601f01601f19169290920160200192915050565b6000845160206121ca8285838a01612413565b8551918401916121dd8184848a01612413565b85549201918390600181811c90808316806121f957607f831692505b85831081141561221757634e487b7160e01b88526022600452602488fd5b80801561222b576001811461223c57612268565b60ff19851688528388019550612268565b60008b815260209020895b858110156122605781548a820152908401908801612247565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ac9083018461218b565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156122ee578351835292840192918401916001016122d2565b50909695505050505050565b602081526000611548602083018461218b565b60208082526021908201527f436f6e74726163747320666f7262696464656e2066726f6d206d696e74696e676040820152602160f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b600082198211156123c4576123c46124a9565b500190565b6000826123d8576123d86124bf565b500490565b60008160001904831182151516156123f7576123f76124a9565b500290565b60008282101561240e5761240e6124a9565b500390565b60005b8381101561242e578181015183820152602001612416565b838111156113da5750506000910152565b600181811c9082168061245357607f821691505b6020821081141561247457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561248e5761248e6124a9565b5060010190565b6000826124a4576124a46124bf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a8f57600080fdfea2646970667358221220a6ad1c23f1412ed19cf5dd1de8edebc97792d9c87363333892555e9164d0b1d564736f6c63430008040033697066733a2f2f516d51526f5241793157554d34655939454e6362746152724443716834756148317050777a5373663464657255762f68696464656e6769662e6a736f6e

Deployed Bytecode

0x6080604052600436106102725760003560e01c806370a082311161014f578063a0712d68116100c1578063c87b56dd1161007a578063c87b56dd146106fb578063d5abeb011461071b578063dc33e68114610731578063e0a8085314610751578063e985e9c514610771578063f2fde38b146107ba57600080fd5b8063a0712d681461065d578063a22cb46514610670578063a45ba8e714610690578063a591252d146106a5578063b071401b146106bb578063b88d4fde146106db57600080fd5b80637ec4a659116101135780637ec4a659146105be5780638da5cb5b146105de57806394354fd0146105fc57806395d89b4114610612578063996517cf146106275780639e6a1d7d1461063d57600080fd5b806370a0823114610536578063715018a614610556578063742a4c9b1461056b5780637c928fe91461058b5780637cb647591461059e57600080fd5b8063375a069a116101e85780634fdd43cb116101ac5780634fdd43cb1461049357806351830227146104b35780635503a0e8146104d25780635c975abb146104e757806362b99ad4146105015780636352211e1461051657600080fd5b8063375a069a146103f15780633ccfd60b1461041157806342842e0e14610426578063438b63001461044657806344a0d68a1461047357600080fd5b806316ba10e01161023a57806316ba10e01461034c57806316c38b3c1461036c57806318160ddd1461038c57806323b872dd146103a557806324a6ab0c146103c55780632eb4a7ab146103db57600080fd5b806301ffc9a71461027757806306fdde03146102ac578063081812fc146102ce578063095ea7b31461030657806313faede614610328575b600080fd5b34801561028357600080fd5b5061029761029236600461210d565b6107da565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c161082c565b6040516102a391906122fa565b3480156102da57600080fd5b506102ee6102e93660046120f5565b6108be565b6040516001600160a01b0390911681526020016102a3565b34801561031257600080fd5b506103266103213660046120b2565b610902565b005b34801561033457600080fd5b5061033e600d5481565b6040519081526020016102a3565b34801561035857600080fd5b50610326610367366004612145565b610990565b34801561037857600080fd5b506103266103873660046120db565b6109da565b34801561039857600080fd5b506001546000540361033e565b3480156103b157600080fd5b506103266103c0366004611fd5565b610a17565b3480156103d157600080fd5b5061033e600e5481565b3480156103e757600080fd5b5061033e60095481565b3480156103fd57600080fd5b5061032661040c3660046120f5565b610a22565b34801561041d57600080fd5b50610326610a92565b34801561043257600080fd5b50610326610441366004611fd5565b610baa565b34801561045257600080fd5b50610466610461366004611f89565b610bc5565b6040516102a391906122b6565b34801561047f57600080fd5b5061032661048e3660046120f5565b610cc2565b34801561049f57600080fd5b506103266104ae366004612145565b610cf1565b3480156104bf57600080fd5b5060135461029790610100900460ff1681565b3480156104de57600080fd5b506102c1610d2e565b3480156104f357600080fd5b506013546102979060ff1681565b34801561050d57600080fd5b506102c1610dbc565b34801561052257600080fd5b506102ee6105313660046120f5565b610dc9565b34801561054257600080fd5b5061033e610551366004611f89565b610ddb565b34801561056257600080fd5b50610326610e2a565b34801561057757600080fd5b506103266105863660046120f5565b610e60565b6103266105993660046120f5565b610e8f565b3480156105aa57600080fd5b506103266105b93660046120f5565b611069565b3480156105ca57600080fd5b506103266105d9366004612145565b611098565b3480156105ea57600080fd5b506008546001600160a01b03166102ee565b34801561060857600080fd5b5061033e60105481565b34801561061e57600080fd5b506102c16110d5565b34801561063357600080fd5b5061033e60125481565b34801561064957600080fd5b506103266106583660046120f5565b6110e4565b61032661066b3660046120f5565b611113565b34801561067c57600080fd5b5061032661068b366004612089565b6112bd565b34801561069c57600080fd5b506102c1611353565b3480156106b157600080fd5b5061033e60115481565b3480156106c757600080fd5b506103266106d63660046120f5565b611360565b3480156106e757600080fd5b506103266106f6366004612010565b61138f565b34801561070757600080fd5b506102c16107163660046120f5565b6113e0565b34801561072757600080fd5b5061033e600f5481565b34801561073d57600080fd5b5061033e61074c366004611f89565b61154f565b34801561075d57600080fd5b5061032661076c3660046120db565b61157e565b34801561077d57600080fd5b5061029761078c366004611fa3565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156107c657600080fd5b506103266107d5366004611f89565b6115c2565b60006001600160e01b031982166380ac58cd60e01b148061080b57506001600160e01b03198216635b5e139f60e01b145b8061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461083b9061243f565b80601f01602080910402602001604051908101604052809291908181526020018280546108679061243f565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b60006108c98261165a565b6108e6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061090d82610dc9565b9050806001600160a01b0316836001600160a01b031614156109425760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906109625750610960813361078c565b155b15610980576040516367d9dca160e11b815260040160405180910390fd5b61098b838383611685565b505050565b6008546001600160a01b031633146109c35760405162461bcd60e51b81526004016109ba9061234e565b60405180910390fd5b80516109d690600b906020840190611e4e565b5050565b6008546001600160a01b03163314610a045760405162461bcd60e51b81526004016109ba9061234e565b6013805460ff1916911515919091179055565b61098b8383836116e1565b6008546001600160a01b03163314610a4c5760405162461bcd60e51b81526004016109ba9061234e565b600f5481610a5d6001546000540390565b610a6791906123b1565b1115610a855760405162461bcd60e51b81526004016109ba90612383565b610a8f33826118d1565b50565b6008546001600160a01b03163314610abc5760405162461bcd60e51b81526004016109ba9061234e565b6000730268231782ed17a6588f193d2498c3a4f3fe5e696064610ae04760056123dd565b610aea91906123c9565b604051600081818185875af1925050503d8060008114610b26576040519150601f19603f3d011682016040523d82523d6000602084013e610b2b565b606091505b5050905080610b3957600080fd5b6000610b4d6008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610b97576040519150601f19603f3d011682016040523d82523d6000602084013e610b9c565b606091505b50509050806109d657600080fd5b61098b8383836040518060200160405280600081525061138f565b60606000610bd283610ddb565b905060008167ffffffffffffffff811115610bfd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c26578160200160208202803683370190505b509050600160005b8381108015610c3f5750600f548211155b15610cb8576000610c4f83610dc9565b9050866001600160a01b0316816001600160a01b03161415610ca55782848381518110610c8c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610ca18161247a565b9250505b82610caf8161247a565b93505050610c2e565b5090949350505050565b6008546001600160a01b03163314610cec5760405162461bcd60e51b81526004016109ba9061234e565b600d55565b6008546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016109ba9061234e565b80516109d690600c906020840190611e4e565b600b8054610d3b9061243f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061243f565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b505050505081565b600a8054610d3b9061243f565b6000610dd4826118eb565b5192915050565b60006001600160a01b038216610e04576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610e545760405162461bcd60e51b81526004016109ba9061234e565b610e5e6000611a07565b565b6008546001600160a01b03163314610e8a5760405162461bcd60e51b81526004016109ba9061234e565b601155565b80600f5481610ea16001546000540390565b610eab91906123b1565b1115610ec95760405162461bcd60e51b81526004016109ba90612383565b323314610ee85760405162461bcd60e51b81526004016109ba9061230d565b60125481610ef53361154f565b610eff91906123b1565b1115610f445760405162461bcd60e51b81526020600482015260146024820152734d696e74206c696d69742065786365656465642160601b60448201526064016109ba565b60135460ff1615610f915760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109ba565b600e5482610fa26001546000540390565b610fac91906123b1565b1115610ffa5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768206672656520737570706c792100000000000000000060448201526064016109ba565b601154826110073361154f565b61101191906123b1565b111561105f5760405162461bcd60e51b815260206004820152601960248201527f46726565206d696e74206c696d6974206578636565646564210000000000000060448201526064016109ba565b6109d633836118d1565b6008546001600160a01b031633146110935760405162461bcd60e51b81526004016109ba9061234e565b600955565b6008546001600160a01b031633146110c25760405162461bcd60e51b81526004016109ba9061234e565b80516109d690600a906020840190611e4e565b60606003805461083b9061243f565b6008546001600160a01b0316331461110e5760405162461bcd60e51b81526004016109ba9061234e565b601255565b80600f54816111256001546000540390565b61112f91906123b1565b111561114d5760405162461bcd60e51b81526004016109ba90612383565b32331461116c5760405162461bcd60e51b81526004016109ba9061230d565b601254816111793361154f565b61118391906123b1565b11156111c85760405162461bcd60e51b81526020600482015260146024820152734d696e74206c696d69742065786365656465642160601b60448201526064016109ba565b6000821180156111da57506010548211155b61121d5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b60448201526064016109ba565b60135460ff161561126a5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109ba565b81600d5461127891906123dd565b34101561105f5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109ba565b6001600160a01b0382163314156112e75760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600c8054610d3b9061243f565b6008546001600160a01b0316331461138a5760405162461bcd60e51b81526004016109ba9061234e565b601055565b61139a8484846116e1565b6001600160a01b0383163b151580156113bc57506113ba84848484611a59565b155b156113da576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606113eb8261165a565b61144f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109ba565b601354610100900460ff166114f057600c805461146b9061243f565b80601f01602080910402602001604051908101604052809291908181526020018280546114979061243f565b80156114e45780601f106114b9576101008083540402835291602001916114e4565b820191906000526020600020905b8154815290600101906020018083116114c757829003601f168201915b50505050509050919050565b60006114fa611b51565b9050600081511161151a5760405180602001604052806000815250611548565b8061152484611b60565b600b604051602001611538939291906121b7565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815260056020526040812054600160401b900467ffffffffffffffff16610826565b6008546001600160a01b031633146115a85760405162461bcd60e51b81526004016109ba9061234e565b601380549115156101000261ff0019909216919091179055565b6008546001600160a01b031633146115ec5760405162461bcd60e51b81526004016109ba9061234e565b6001600160a01b0381166116515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ba565b610a8f81611a07565b6000805482108015610826575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006116ec826118eb565b9050836001600160a01b031681600001516001600160a01b0316146117235760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806117415750611741853361078c565b8061175c575033611751846108be565b6001600160a01b0316145b90508061177c57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166117a357604051633a954ecd60e21b815260040160405180910390fd5b6117af60008487611685565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611885576000548214611885578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b6109d6828260405180602001604052806000815250611c7a565b6040805160608101825260008082526020820181905291810191909152816000548110156119ee57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906119ec5780516001600160a01b031615611982579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156119e7579392505050565b611982565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a8e903390899088908890600401612279565b602060405180830381600087803b158015611aa857600080fd5b505af1925050508015611ad8575060408051601f3d908101601f19168201909252611ad591810190612129565b60015b611b33573d808015611b06576040519150601f19603f3d011682016040523d82523d6000602084013e611b0b565b606091505b508051611b2b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461083b9061243f565b606081611b845750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bae5780611b988161247a565b9150611ba79050600a836123c9565b9150611b88565b60008167ffffffffffffffff811115611bd757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c01576020820181803683370190505b5090505b8415611b4957611c166001836123fc565b9150611c23600a86612495565b611c2e9060306123b1565b60f81b818381518110611c5157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c73600a866123c9565b9450611c05565b61098b83838360016000546001600160a01b038516611cab57604051622e076360e81b815260040160405180910390fd5b83611cc95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611d7657506001600160a01b0387163b15155b15611dff575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611dc76000888480600101955088611a59565b611de4576040516368d2bf6b60e11b815260040160405180910390fd5b80821415611d7c578260005414611dfa57600080fd5b611e45565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611e00575b506000556118ca565b828054611e5a9061243f565b90600052602060002090601f016020900481019282611e7c5760008555611ec2565b82601f10611e9557805160ff1916838001178555611ec2565b82800160010185558215611ec2579182015b82811115611ec2578251825591602001919060010190611ea7565b50611ece929150611ed2565b5090565b5b80821115611ece5760008155600101611ed3565b600067ffffffffffffffff80841115611f0257611f026124d5565b604051601f8501601f19908116603f01168101908282118183101715611f2a57611f2a6124d5565b81604052809350858152868686011115611f4357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611f7457600080fd5b919050565b80358015158114611f7457600080fd5b600060208284031215611f9a578081fd5b61154882611f5d565b60008060408385031215611fb5578081fd5b611fbe83611f5d565b9150611fcc60208401611f5d565b90509250929050565b600080600060608486031215611fe9578081fd5b611ff284611f5d565b925061200060208501611f5d565b9150604084013590509250925092565b60008060008060808587031215612025578081fd5b61202e85611f5d565b935061203c60208601611f5d565b925060408501359150606085013567ffffffffffffffff81111561205e578182fd5b8501601f8101871361206e578182fd5b61207d87823560208401611ee7565b91505092959194509250565b6000806040838503121561209b578182fd5b6120a483611f5d565b9150611fcc60208401611f79565b600080604083850312156120c4578182fd5b6120cd83611f5d565b946020939093013593505050565b6000602082840312156120ec578081fd5b61154882611f79565b600060208284031215612106578081fd5b5035919050565b60006020828403121561211e578081fd5b8135611548816124eb565b60006020828403121561213a578081fd5b8151611548816124eb565b600060208284031215612156578081fd5b813567ffffffffffffffff81111561216c578182fd5b8201601f8101841361217c578182fd5b611b4984823560208401611ee7565b600081518084526121a3816020860160208601612413565b601f01601f19169290920160200192915050565b6000845160206121ca8285838a01612413565b8551918401916121dd8184848a01612413565b85549201918390600181811c90808316806121f957607f831692505b85831081141561221757634e487b7160e01b88526022600452602488fd5b80801561222b576001811461223c57612268565b60ff19851688528388019550612268565b60008b815260209020895b858110156122605781548a820152908401908801612247565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ac9083018461218b565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156122ee578351835292840192918401916001016122d2565b50909695505050505050565b602081526000611548602083018461218b565b60208082526021908201527f436f6e74726163747320666f7262696464656e2066726f6d206d696e74696e676040820152602160f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b600082198211156123c4576123c46124a9565b500190565b6000826123d8576123d86124bf565b500490565b60008160001904831182151516156123f7576123f76124a9565b500290565b60008282101561240e5761240e6124a9565b500390565b60005b8381101561242e578181015183820152602001612416565b838111156113da5750506000910152565b600181811c9082168061245357607f821691505b6020821081141561247457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561248e5761248e6124a9565b5060010190565b6000826124a4576124a46124bf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a8f57600080fdfea2646970667358221220a6ad1c23f1412ed19cf5dd1de8edebc97792d9c87363333892555e9164d0b1d564736f6c63430008040033

Deployed Bytecode Sourcemap

44850:5420:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27041:305;;;;;;;;;;-1:-1:-1;27041:305:0;;;;;:::i;:::-;;:::i;:::-;;;8159:14:1;;8152:22;8134:41;;8122:2;8107:18;27041:305:0;;;;;;;;30154:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31657:204::-;;;;;;;;;;-1:-1:-1;31657:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6817:32:1;;;6799:51;;6787:2;6772:18;31657:204:0;6754:102:1;31220:371:0;;;;;;;;;;-1:-1:-1;31220:371:0;;;;;:::i;:::-;;:::i;:::-;;45119:33;;;;;;;;;;;;;;;;;;;8332:25:1;;;8320:2;8305:18;45119:33:0;8287:76:1;48979:100:0;;;;;;;;;;-1:-1:-1;48979:100:0;;;;;:::i;:::-;;:::i;49083:77::-;;;;;;;;;;-1:-1:-1;49083:77:0;;;;;:::i;:::-;;:::i;26290:303::-;;;;;;;;;;-1:-1:-1;26544:12:0;;26334:7;26528:13;:28;26290:303;;32522:170;;;;;;;;;;-1:-1:-1;32522:170:0;;;;;:::i;:::-;;:::i;45159:31::-;;;;;;;;;;;;;;;;44934:25;;;;;;;;;;;;;;;;46360:181;;;;;;;;;;-1:-1:-1;46360:181:0;;;;;:::i;:::-;;:::i;49294:827::-;;;;;;;;;;;;;:::i;32763:185::-;;;;;;;;;;-1:-1:-1;32763:185:0;;;;;:::i;:::-;;:::i;46909:635::-;;;;;;;;;;-1:-1:-1;46909:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48319:74::-;;;;;;;;;;-1:-1:-1;48319:74:0;;;;;:::i;:::-;;:::i;48737:132::-;;;;;;;;;;-1:-1:-1;48737:132:0;;;;;:::i;:::-;;:::i;45417:28::-;;;;;;;;;;-1:-1:-1;45417:28:0;;;;;;;;;;;45003:33;;;;;;;;;;;;;:::i;45385:25::-;;;;;;;;;;-1:-1:-1;45385:25:0;;;;;;;;44968:28;;;;;;;;;;;;;:::i;29962:125::-;;;;;;;;;;-1:-1:-1;29962:125:0;;;;;:::i;:::-;;:::i;27410:206::-;;;;;;;;;;-1:-1:-1;27410:206:0;;;;;:::i;:::-;;:::i;2637:103::-;;;;;;;;;;;;;:::i;48629:102::-;;;;;;;;;;-1:-1:-1;48629:102:0;;;;;:::i;:::-;;:::i;46004:350::-;;;;;;:::i;:::-;;:::i;49166:98::-;;;;;;;;;;-1:-1:-1;49166:98:0;;;;;:::i;:::-;;:::i;48875:100::-;;;;;;;;;;-1:-1:-1;48875:100:0;;;;;:::i;:::-;;:::i;1986:87::-;;;;;;;;;;-1:-1:-1;2059:6:0;;-1:-1:-1;;;;;2059:6:0;1986:87;;45235:37;;;;;;;;;;;;;;;;30323:104;;;;;;;;;;;;;:::i;45316:29::-;;;;;;;;;;;;;;;;48531:94;;;;;;;;;;-1:-1:-1;48531:94:0;;;;;:::i;:::-;;:::i;46547:327::-;;;;;;:::i;:::-;;:::i;31933:287::-;;;;;;;;;;-1:-1:-1;31933:287:0;;;;;:::i;:::-;;:::i;45043:31::-;;;;;;;;;;;;;:::i;45279:30::-;;;;;;;;;;;;;;;;48397:130;;;;;;;;;;-1:-1:-1;48397:130:0;;;;;:::i;:::-;;:::i;33019:369::-;;;;;;;;;;-1:-1:-1;33019:369:0;;;;;:::i;:::-;;:::i;47586:496::-;;;;;;;;;;-1:-1:-1;47586:496:0;;;;;:::i;:::-;;:::i;45197:31::-;;;;;;;;;;;;;;;;48119:107;;;;;;;;;;-1:-1:-1;48119:107:0;;;;;:::i;:::-;;:::i;48232:81::-;;;;;;;;;;-1:-1:-1;48232:81:0;;;;;:::i;:::-;;:::i;32291:164::-;;;;;;;;;;-1:-1:-1;32291:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32412:25:0;;;32388:4;32412:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32291:164;2895:201;;;;;;;;;;-1:-1:-1;2895:201:0;;;;;:::i;:::-;;:::i;27041:305::-;27143:4;-1:-1:-1;;;;;;27180:40:0;;-1:-1:-1;;;27180:40:0;;:105;;-1:-1:-1;;;;;;;27237:48:0;;-1:-1:-1;;;27237:48:0;27180:105;:158;;;-1:-1:-1;;;;;;;;;;14902:40:0;;;27302:36;27160:178;27041:305;-1:-1:-1;;27041:305:0:o;30154:100::-;30208:13;30241:5;30234:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30154:100;:::o;31657:204::-;31725:7;31750:16;31758:7;31750;:16::i;:::-;31745:64;;31775:34;;-1:-1:-1;;;31775:34:0;;;;;;;;;;;31745:64;-1:-1:-1;31829:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31829:24:0;;31657:204::o;31220:371::-;31293:13;31309:24;31325:7;31309:15;:24::i;:::-;31293:40;;31354:5;-1:-1:-1;;;;;31348:11:0;:2;-1:-1:-1;;;;;31348:11:0;;31344:48;;;31368:24;;-1:-1:-1;;;31368:24:0;;;;;;;;;;;31344:48;790:10;-1:-1:-1;;;;;31409:21:0;;;;;;:63;;-1:-1:-1;31435:37:0;31452:5;790:10;32291:164;:::i;31435:37::-;31434:38;31409:63;31405:138;;;31496:35;;-1:-1:-1;;;31496:35:0;;;;;;;;;;;31405:138;31555:28;31564:2;31568:7;31577:5;31555:8;:28::i;:::-;31220:371;;;:::o;48979:100::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;;;;;;;;;49051:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48979:100:::0;:::o;49083:77::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;49139:6:::1;:15:::0;;-1:-1:-1;;49139:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49083:77::o;32522:170::-;32656:28;32666:4;32672:2;32676:7;32656:9;:28::i;46360:181::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;46457:9:::1;;46445:8;46429:13;26544:12:::0;;26334:7;26528:13;:28;;26290:303;46429:13:::1;:24;;;;:::i;:::-;:37;;46421:70;;;;-1:-1:-1::0;;;46421:70:0::1;;;;;;;:::i;:::-;46502:31;46512:10;46524:8;46502:9;:31::i;:::-;46360:181:::0;:::o;49294:827::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;49475:7:::1;49496:42;49584:3;49552:29;:25;49580:1;49552:29;:::i;:::-;:35;;;;:::i;:::-;49488:104;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49474:118;;;49607:2;49599:11;;;::::0;::::1;;49943:7;49964;2059:6:::0;;-1:-1:-1;;;;;2059:6:0;;1986:87;49964:7:::1;-1:-1:-1::0;;;;;49956:21:0::1;49985;49956:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49942:69;;;50026:2;50018:11;;;::::0;::::1;32763:185:::0;32901:39;32918:4;32924:2;32928:7;32901:39;;;;;;;;;;;;:16;:39::i;46909:635::-;46984:16;47012:23;47038:17;47048:6;47038:9;:17::i;:::-;47012:43;;47062:30;47109:15;47095:30;;;;;;-1:-1:-1;;;47095:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47095:30:0;-1:-1:-1;47062:63:0;-1:-1:-1;47157:1:0;47132:22;47201:309;47226:15;47208;:33;:64;;;;;47263:9;;47245:14;:27;;47208:64;47201:309;;;47283:25;47311:23;47319:14;47311:7;:23::i;:::-;47283:51;;47370:6;-1:-1:-1;;;;;47349:27:0;:17;-1:-1:-1;;;;;47349:27:0;;47345:131;;;47422:14;47389:13;47403:15;47389:30;;;;;;-1:-1:-1;;;47389:30:0;;;;;;;;;;;;;;;;;;:47;47449:17;;;;:::i;:::-;;;;47345:131;47486:16;;;;:::i;:::-;;;;47201:309;;;;-1:-1:-1;47525:13:0;;46909:635;-1:-1:-1;;;;46909:635:0:o;48319:74::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48375:4:::1;:12:::0;48319:74::o;48737:132::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48825:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;45003:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44968:28::-;;;;;;;:::i;29962:125::-;30026:7;30053:21;30066:7;30053:12;:21::i;:::-;:26;;29962:125;-1:-1:-1;;29962:125:0:o;27410:206::-;27474:7;-1:-1:-1;;;;;27498:19:0;;27494:60;;27526:28;;-1:-1:-1;;;27526:28:0;;;;;;;;;;;27494:60;-1:-1:-1;;;;;;27580:19:0;;;;;:12;:19;;;;;:27;;;;27410:206::o;2637:103::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;2702:30:::1;2729:1;2702:18;:30::i;:::-;2637:103::o:0;48629:102::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48699:11:::1;:26:::0;48629:102::o;46004:350::-;46070:8;45763:9;;45751:8;45735:13;26544:12;;26334:7;26528:13;:28;;26290:303;45735:13;:24;;;;:::i;:::-;:37;;45727:70;;;;-1:-1:-1;;;45727:70:0;;;;;;;:::i;:::-;45812:9;45825:10;45812:23;45804:68;;;;-1:-1:-1;;;45804:68:0;;;;;;;:::i;:::-;45926:9;;45914:8;45887:24;45900:10;45887:12;:24::i;:::-;:35;;;;:::i;:::-;:48;;45879:80;;;;-1:-1:-1;;;45879:80:0;;10304:2:1;45879:80:0;;;10286:21:1;10343:2;10323:18;;;10316:30;-1:-1:-1;;;10362:18:1;;;10355:50;10422:18;;45879:80:0;10276:170:1;45879:80:0;46096:6:::1;::::0;::::1;;46095:7;46087:43;;;::::0;-1:-1:-1;;;46087:43:0;;11368:2:1;46087:43:0::1;::::0;::::1;11350:21:1::0;11407:2;11387:18;;;11380:30;-1:-1:-1;;;11426:18:1;;;11419:53;11489:18;;46087:43:0::1;11340:173:1::0;46087:43:0::1;46173:10;;46161:8;46145:13;26544:12:::0;;26334:7;26528:13;:28;;26290:303;46145:13:::1;:24;;;;:::i;:::-;:38;;46137:73;;;::::0;-1:-1:-1;;;46137:73:0;;9952:2:1;46137:73:0::1;::::0;::::1;9934:21:1::0;9991:2;9971:18;;;9964:30;10030:25;10010:18;;;10003:53;10073:18;;46137:73:0::1;9924:173:1::0;46137:73:0::1;46264:11;;46252:8;46225:24;46238:10;46225:12;:24::i;:::-;:35;;;;:::i;:::-;:50;;46217:87;;;::::0;-1:-1:-1;;;46217:87:0;;10653:2:1;46217:87:0::1;::::0;::::1;10635:21:1::0;10692:2;10672:18;;;10665:30;10731:27;10711:18;;;10704:55;10776:18;;46217:87:0::1;10625:175:1::0;46217:87:0::1;46315:31;46325:10;46337:8;46315:9;:31::i;49166:98::-:0;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;49234:10:::1;:24:::0;49166:98::o;48875:100::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48947:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;30323:104::-:0;30379:13;30412:7;30405:14;;;;;:::i;48531:94::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48597:9:::1;:22:::0;48531:94::o;46547:327::-;46609:8;45763:9;;45751:8;45735:13;26544:12;;26334:7;26528:13;:28;;26290:303;45735:13;:24;;;;:::i;:::-;:37;;45727:70;;;;-1:-1:-1;;;45727:70:0;;;;;;;:::i;:::-;45812:9;45825:10;45812:23;45804:68;;;;-1:-1:-1;;;45804:68:0;;;;;;;:::i;:::-;45926:9;;45914:8;45887:24;45900:10;45887:12;:24::i;:::-;:35;;;;:::i;:::-;:48;;45879:80;;;;-1:-1:-1;;;45879:80:0;;10304:2:1;45879:80:0;;;10286:21:1;10343:2;10323:18;;;10316:30;-1:-1:-1;;;10362:18:1;;;10355:50;10422:18;;45879:80:0;10276:170:1;45879:80:0;46645:1:::1;46634:8;:12;:46;;;;;46662:18;;46650:8;:30;;46634:46;46626:79;;;::::0;-1:-1:-1;;;46626:79:0;;9603:2:1;46626:79:0::1;::::0;::::1;9585:21:1::0;9642:2;9622:18;;;9615:30;-1:-1:-1;;;9661:18:1;;;9654:50;9721:18;;46626:79:0::1;9575:170:1::0;46626:79:0::1;46721:6;::::0;::::1;;46720:7;46712:43;;;::::0;-1:-1:-1;;;46712:43:0;;11368:2:1;46712:43:0::1;::::0;::::1;11350:21:1::0;11407:2;11387:18;;;11380:30;-1:-1:-1;;;11426:18:1;;;11419:53;11489:18;;46712:43:0::1;11340:173:1::0;46712:43:0::1;46790:8;46783:4;;:15;;;;:::i;:::-;46770:9;:28;;46762:60;;;::::0;-1:-1:-1;;;46762:60:0;;12485:2:1;46762:60:0::1;::::0;::::1;12467:21:1::0;12524:2;12504:18;;;12497:30;-1:-1:-1;;;12543:18:1;;;12536:49;12602:18;;46762:60:0::1;12457:169:1::0;31933:287:0;-1:-1:-1;;;;;32032:24:0;;790:10;32032:24;32028:54;;;32065:17;;-1:-1:-1;;;32065:17:0;;;;;;;;;;;32028:54;790:10;32095:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;32095:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;32095:53:0;;;;;;;;;;32164:48;;8134:41:1;;;32095:42:0;;790:10;32164:48;;8107:18:1;32164:48:0;;;;;;;31933:287;;:::o;45043:31::-;;;;;;;:::i;48397:130::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48481:18:::1;:40:::0;48397:130::o;33019:369::-;33186:28;33196:4;33202:2;33206:7;33186:9;:28::i;:::-;-1:-1:-1;;;;;33229:13:0;;4982:19;:23;;33229:76;;;;;33249:56;33280:4;33286:2;33290:7;33299:5;33249:30;:56::i;:::-;33248:57;33229:76;33225:156;;;33329:40;;-1:-1:-1;;;33329:40:0;;;;;;;;;;;33225:156;33019:369;;;;:::o;47586:496::-;47685:13;47726:17;47734:8;47726:7;:17::i;:::-;47710:98;;;;-1:-1:-1;;;47710:98:0;;11720:2:1;47710:98:0;;;11702:21:1;11759:2;11739:18;;;11732:30;11798:34;11778:18;;;11771:62;-1:-1:-1;;;11849:18:1;;;11842:45;11904:19;;47710:98:0;11692:237:1;47710:98:0;47821:8;;;;;;;47817:64;;47856:17;47849:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47586:496;;;:::o;47817:64::-;47889:28;47920:10;:8;:10::i;:::-;47889:41;;47975:1;47950:14;47944:28;:32;:130;;;;;;;;;;;;;;;;;48012:14;48028:19;:8;:17;:19::i;:::-;48049:9;47995:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47944:130;47937:137;47586:496;-1:-1:-1;;;47586:496:0:o;48119:107::-;-1:-1:-1;;;;;27794:19:0;;48177:7;27794:19;;;:12;:19;;;;;:32;-1:-1:-1;;;27794:32:0;;;;48200:20;27698:137;48232:81;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48290:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;48290:17:0;;::::1;::::0;;;::::1;::::0;;48232:81::o;2895:201::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2984:22:0;::::1;2976:73;;;::::0;-1:-1:-1;;;2976:73:0;;9196:2:1;2976:73:0::1;::::0;::::1;9178:21:1::0;9235:2;9215:18;;;9208:30;9274:34;9254:18;;;9247:62;-1:-1:-1;;;9325:18:1;;;9318:36;9371:19;;2976:73:0::1;9168:228:1::0;2976:73:0::1;3060:28;3079:8;3060:18;:28::i;33643:174::-:0;33700:4;33764:13;;33754:7;:23;33724:85;;;;-1:-1:-1;;33782:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;33782:27:0;;;;33781:28;;33643:174::o;41800:196::-;41915:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;41915:29:0;-1:-1:-1;;;;;41915:29:0;;;;;;;;;41960:28;;41915:24;;41960:28;;;;;;;41800:196;;;:::o;36743:2130::-;36858:35;36896:21;36909:7;36896:12;:21::i;:::-;36858:59;;36956:4;-1:-1:-1;;;;;36934:26:0;:13;:18;;;-1:-1:-1;;;;;36934:26:0;;36930:67;;36969:28;;-1:-1:-1;;;36969:28:0;;;;;;;;;;;36930:67;37010:22;790:10;-1:-1:-1;;;;;37036:20:0;;;;:73;;-1:-1:-1;37073:36:0;37090:4;790:10;32291:164;:::i;37073:36::-;37036:126;;;-1:-1:-1;790:10:0;37126:20;37138:7;37126:11;:20::i;:::-;-1:-1:-1;;;;;37126:36:0;;37036:126;37010:153;;37181:17;37176:66;;37207:35;;-1:-1:-1;;;37207:35:0;;;;;;;;;;;37176:66;-1:-1:-1;;;;;37257:16:0;;37253:52;;37282:23;;-1:-1:-1;;;37282:23:0;;;;;;;;;;;37253:52;37426:35;37443:1;37447:7;37456:4;37426:8;:35::i;:::-;-1:-1:-1;;;;;37757:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;37757:31:0;;;;;;;-1:-1:-1;;37757:31:0;;;;;;;37803:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;37803:29:0;;;;;;;;;;;37883:20;;;:11;:20;;;;;;37918:18;;-1:-1:-1;;;;;;37951:49:0;;;;-1:-1:-1;;;37984:15:0;37951:49;;;;;;;;;;38274:11;;38334:24;;;;;38377:13;;37883:20;;38334:24;;38377:13;38373:384;;38587:13;;38572:11;:28;38568:174;;38625:20;;38694:28;;;;38668:54;;-1:-1:-1;;;38668:54:0;-1:-1:-1;;;;;;38668:54:0;;;-1:-1:-1;;;;;38625:20:0;;38668:54;;;;38568:174;36743:2130;;;38804:7;38800:2;-1:-1:-1;;;;;38785:27:0;38794:4;-1:-1:-1;;;;;38785:27:0;;;;;;;;;;;38823:42;36743:2130;;;;;:::o;33825:104::-;33894:27;33904:2;33908:8;33894:27;;;;;;;;;;;;:9;:27::i;28791:1109::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;28902:7:0;28985:13;;28978:4;:20;28947:886;;;29019:31;29053:17;;;:11;:17;;;;;;;;;29019:51;;;;;;;;;-1:-1:-1;;;;;29019:51:0;;;;-1:-1:-1;;;29019:51:0;;;;;;;;;;;-1:-1:-1;;;29019:51:0;;;;;;;;;;;;;;29089:729;;29139:14;;-1:-1:-1;;;;;29139:28:0;;29135:101;;29203:9;28791:1109;-1:-1:-1;;;28791:1109:0:o;29135:101::-;-1:-1:-1;;;29578:6:0;29623:17;;;;:11;:17;;;;;;;;;29611:29;;;;;;;;;-1:-1:-1;;;;;29611:29:0;;;;;-1:-1:-1;;;29611:29:0;;;;;;;;;;;-1:-1:-1;;;29611:29:0;;;;;;;;;;;;;29671:28;29667:109;;29739:9;28791:1109;-1:-1:-1;;;28791:1109:0:o;29667:109::-;29538:261;;;28947:886;;29861:31;;-1:-1:-1;;;29861:31:0;;;;;;;;;;;3256:191;3349:6;;;-1:-1:-1;;;;;3366:17:0;;;-1:-1:-1;;;;;;3366:17:0;;;;;;;3399:40;;3349:6;;;3366:17;3349:6;;3399:40;;3330:16;;3399:40;3256:191;;:::o;42488:667::-;42672:72;;-1:-1:-1;;;42672:72:0;;42651:4;;-1:-1:-1;;;;;42672:36:0;;;;;:72;;790:10;;42723:4;;42729:7;;42738:5;;42672:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42672:72:0;;;;;;;;-1:-1:-1;;42672:72:0;;;;;;;;;;;;:::i;:::-;;;42668:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42906:13:0;;42902:235;;42952:40;;-1:-1:-1;;;42952:40:0;;;;;;;;;;;42902:235;43095:6;43089:13;43080:6;43076:2;43072:15;43065:38;42668:480;-1:-1:-1;;;;;;42791:55:0;-1:-1:-1;;;42791:55:0;;-1:-1:-1;42668:480:0;42488:667;;;;;;:::o;50163:104::-;50223:13;50252:9;50245:16;;;;;:::i;21012:723::-;21068:13;21289:10;21285:53;;-1:-1:-1;;21316:10:0;;;;;;;;;;;;-1:-1:-1;;;21316:10:0;;;;;21012:723::o;21285:53::-;21363:5;21348:12;21404:78;21411:9;;21404:78;;21437:8;;;;:::i;:::-;;-1:-1:-1;21460:10:0;;-1:-1:-1;21468:2:0;21460:10;;:::i;:::-;;;21404:78;;;21492:19;21524:6;21514:17;;;;;;-1:-1:-1;;;21514:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21514:17:0;;21492:39;;21542:154;21549:10;;21542:154;;21576:11;21586:1;21576:11;;:::i;:::-;;-1:-1:-1;21645:10:0;21653:2;21645:5;:10;:::i;:::-;21632:24;;:2;:24;:::i;:::-;21619:39;;21602:6;21609;21602:14;;;;;;-1:-1:-1;;;21602:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;21602:56:0;;;;;;;;-1:-1:-1;21673:11:0;21682:2;21673:11;;:::i;:::-;;;21542:154;;34292:163;34415:32;34421:2;34425:8;34435:5;34442:4;34853:20;34876:13;-1:-1:-1;;;;;34904:16:0;;34900:48;;34929:19;;-1:-1:-1;;;34929:19:0;;;;;;;;;;;34900:48;34963:13;34959:44;;34985:18;;-1:-1:-1;;;34985:18:0;;;;;;;;;;;34959:44;-1:-1:-1;;;;;35354:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;35413:49:0;;35354:44;;;;;;;;35413:49;;;-1:-1:-1;;;;;35354:44:0;;;;;;35413:49;;;;;;;;;;;;;;;;35479:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;35529:66:0;;;;-1:-1:-1;;;35579:15:0;35529:66;;;;;;;;;;35479:25;35676:23;;;35720:4;:23;;;;-1:-1:-1;;;;;;35728:13:0;;4982:19;:23;;35728:15;35716:641;;;35764:314;35795:38;;35820:12;;-1:-1:-1;;;;;35795:38:0;;;35812:1;;35795:38;;35812:1;;35795:38;35861:69;35900:1;35904:2;35908:14;;;;;;35924:5;35861:30;:69::i;:::-;35856:174;;35966:40;;-1:-1:-1;;;35966:40:0;;;;;;;;;;;35856:174;36073:3;36057:12;:19;;35764:314;;36159:12;36142:13;;:29;36138:43;;36173:8;;;36138:43;35716:641;;;36222:120;36253:40;;36278:14;;;;;-1:-1:-1;;;;;36253:40:0;;;36270:1;;36253:40;;36270:1;;36253:40;36337:3;36321:12;:19;;36222:120;;35716:641;-1:-1:-1;36371:13:0;:28;36421:60;33019:369;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;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:2;;;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:2;;;532:1;529;522:12;491:2;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;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:196;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:2;;;1126:6;1118;1111:22;1073:2;1154:29;1173:9;1154:29;:::i;1194:270::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:29;1391:9;1372:29;:::i;:::-;1362:39;;1420:38;1454:2;1443:9;1439:18;1420:38;:::i;:::-;1410:48;;1281:183;;;;;:::o;1469:338::-;1546:6;1554;1562;1615:2;1603:9;1594:7;1590:23;1586:32;1583:2;;;1636:6;1628;1621:22;1583:2;1664:29;1683:9;1664:29;:::i;:::-;1654:39;;1712:38;1746:2;1735:9;1731:18;1712:38;:::i;:::-;1702:48;;1797:2;1786:9;1782:18;1769:32;1759:42;;1573:234;;;;;:::o;1812:696::-;1907:6;1915;1923;1931;1984:3;1972:9;1963:7;1959:23;1955:33;1952:2;;;2006:6;1998;1991:22;1952:2;2034:29;2053:9;2034:29;:::i;:::-;2024:39;;2082:38;2116:2;2105:9;2101:18;2082:38;:::i;:::-;2072:48;;2167:2;2156:9;2152:18;2139:32;2129:42;;2222:2;2211:9;2207:18;2194:32;2249:18;2241:6;2238:30;2235:2;;;2286:6;2278;2271:22;2235:2;2314:22;;2367:4;2359:13;;2355:27;-1:-1:-1;2345:2:1;;2401:6;2393;2386:22;2345:2;2429:73;2494:7;2489:2;2476:16;2471:2;2467;2463:11;2429:73;:::i;:::-;2419:83;;;1942:566;;;;;;;:::o;2513:264::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2688:29;2707:9;2688:29;:::i;:::-;2678:39;;2736:35;2767:2;2756:9;2752:18;2736:35;:::i;2782:264::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:29;2979:9;2960:29;:::i;:::-;2950:39;3036:2;3021:18;;;;3008:32;;-1:-1:-1;;;2869:177:1:o;3051:190::-;3107:6;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3209:26;3225:9;3209:26;:::i;3246:190::-;3305:6;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3379:6;3371;3364:22;3326:2;-1:-1:-1;3407:23:1;;3316:120;-1:-1:-1;3316:120:1:o;3441:255::-;3499:6;3552:2;3540:9;3531:7;3527:23;3523:32;3520:2;;;3573:6;3565;3558:22;3520:2;3617:9;3604:23;3636:30;3660:5;3636:30;:::i;3701:259::-;3770:6;3823:2;3811:9;3802:7;3798:23;3794:32;3791:2;;;3844:6;3836;3829:22;3791:2;3881:9;3875:16;3900:30;3924:5;3900:30;:::i;3965:480::-;4034:6;4087:2;4075:9;4066:7;4062:23;4058:32;4055:2;;;4108:6;4100;4093:22;4055:2;4153:9;4140:23;4186:18;4178:6;4175:30;4172:2;;;4223:6;4215;4208:22;4172:2;4251:22;;4304:4;4296:13;;4292:27;-1:-1:-1;4282:2:1;;4338:6;4330;4323:22;4282:2;4366:73;4431:7;4426:2;4413:16;4408:2;4404;4400:11;4366:73;:::i;4645:257::-;4686:3;4724:5;4718:12;4751:6;4746:3;4739:19;4767:63;4823:6;4816:4;4811:3;4807:14;4800:4;4793:5;4789:16;4767:63;:::i;:::-;4884:2;4863:15;-1:-1:-1;;4859:29:1;4850:39;;;;4891:4;4846:50;;4694:208;-1:-1:-1;;4694:208:1:o;4907:1531::-;5131:3;5169:6;5163:13;5195:4;5208:51;5252:6;5247:3;5242:2;5234:6;5230:15;5208:51;:::i;:::-;5322:13;;5281:16;;;;5344:55;5322:13;5281:16;5366:15;;;5344:55;:::i;:::-;5490:13;;5421:20;;;5461:3;;5550:1;5572:18;;;;5625;;;;5652:2;;5730:4;5720:8;5716:19;5704:31;;5652:2;5793;5783:8;5780:16;5760:18;5757:40;5754:2;;;-1:-1:-1;;;5820:33:1;;5876:4;5873:1;5866:15;5906:4;5827:3;5894:17;5754:2;5937:18;5964:110;;;;6088:1;6083:330;;;;5930:483;;5964:110;-1:-1:-1;;5999:24:1;;5985:39;;6044:20;;;;-1:-1:-1;5964:110:1;;6083:330;12860:4;12879:17;;;12929:4;12913:21;;6178:3;6194:169;6208:8;6205:1;6202:15;6194:169;;;6290:14;;6275:13;;;6268:37;6333:16;;;;6225:10;;6194:169;;;6198:3;;6394:8;6387:5;6383:20;6376:27;;5930:483;-1:-1:-1;6429:3:1;;5139:1299;-1:-1:-1;;;;;;;;;;;5139:1299:1:o;6861:488::-;-1:-1:-1;;;;;7130:15:1;;;7112:34;;7182:15;;7177:2;7162:18;;7155:43;7229:2;7214:18;;7207:34;;;7277:3;7272:2;7257:18;;7250:31;;;7055:4;;7298:45;;7323:19;;7315:6;7298:45;:::i;:::-;7290:53;7064:285;-1:-1:-1;;;;;;7064:285:1:o;7354:635::-;7525:2;7577:21;;;7647:13;;7550:18;;;7669:22;;;7496:4;;7525:2;7748:15;;;;7722:2;7707:18;;;7496:4;7794:169;7808:6;7805:1;7802:13;7794:169;;;7869:13;;7857:26;;7938:15;;;;7903:12;;;;7830:1;7823:9;7794:169;;;-1:-1:-1;7980:3:1;;7505:484;-1:-1:-1;;;;;;7505:484:1:o;8368:219::-;8517:2;8506:9;8499:21;8480:4;8537:44;8577:2;8566:9;8562:18;8554:6;8537:44;:::i;8592:397::-;8794:2;8776:21;;;8833:2;8813:18;;;8806:30;8872:34;8867:2;8852:18;;8845:62;-1:-1:-1;;;8938:2:1;8923:18;;8916:31;8979:3;8964:19;;8766:223::o;10805:356::-;11007:2;10989:21;;;11026:18;;;11019:30;11085:34;11080:2;11065:18;;11058:62;11152:2;11137:18;;10979:182::o;11934:344::-;12136:2;12118:21;;;12175:2;12155:18;;;12148:30;-1:-1:-1;;;12209:2:1;12194:18;;12187:50;12269:2;12254:18;;12108:170::o;12945:128::-;12985:3;13016:1;13012:6;13009:1;13006:13;13003:2;;;13022:18;;:::i;:::-;-1:-1:-1;13058:9:1;;12993:80::o;13078:120::-;13118:1;13144;13134:2;;13149:18;;:::i;:::-;-1:-1:-1;13183:9:1;;13124:74::o;13203:168::-;13243:7;13309:1;13305;13301:6;13297:14;13294:1;13291:21;13286:1;13279:9;13272:17;13268:45;13265:2;;;13316:18;;:::i;:::-;-1:-1:-1;13356:9:1;;13255:116::o;13376:125::-;13416:4;13444:1;13441;13438:8;13435:2;;;13449:18;;:::i;:::-;-1:-1:-1;13486:9:1;;13425:76::o;13506:258::-;13578:1;13588:113;13602:6;13599:1;13596:13;13588:113;;;13678:11;;;13672:18;13659:11;;;13652:39;13624:2;13617:10;13588:113;;;13719:6;13716:1;13713:13;13710:2;;;-1:-1:-1;;13754:1:1;13736:16;;13729:27;13559:205::o;13769:380::-;13848:1;13844:12;;;;13891;;;13912:2;;13966:4;13958:6;13954:17;13944:27;;13912:2;14019;14011:6;14008:14;13988:18;13985:38;13982:2;;;14065:10;14060:3;14056:20;14053:1;14046:31;14100:4;14097:1;14090:15;14128:4;14125:1;14118:15;13982:2;;13824:325;;;:::o;14154:135::-;14193:3;-1:-1:-1;;14214:17:1;;14211:2;;;14234:18;;:::i;:::-;-1:-1:-1;14281:1:1;14270:13;;14201:88::o;14294:112::-;14326:1;14352;14342:2;;14357:18;;:::i;:::-;-1:-1:-1;14391:9:1;;14332:74::o;14411:127::-;14472:10;14467:3;14463:20;14460:1;14453:31;14503:4;14500:1;14493:15;14527:4;14524:1;14517:15;14543:127;14604:10;14599:3;14595:20;14592:1;14585:31;14635:4;14632:1;14625:15;14659:4;14656:1;14649:15;14675:127;14736:10;14731:3;14727:20;14724:1;14717:31;14767:4;14764:1;14757:15;14791:4;14788:1;14781:15;14807:131;-1:-1:-1;;;;;;14881:32:1;;14871:43;;14861:2;;14928:1;14925;14918:12

Swarm Source

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