ETH Price: $2,286.61 (-5.50%)
Gas: 1.08 Gwei

Token

BLOBjeXv2 (BLOBX)
 

Overview

Max Total Supply

176 BLOBX

Holders

43

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 BLOBX
0x7ebe5dc1faef7d3c90761de04be429cd0f36b594
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:
BLOBjeXv2

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-04
*/

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol

// SPDX-License-Identifier: MIT

// ________  ___       ________  ________        ___  _______      ___    ___      ________  ________           _______  _________  ___  ___     
//|\   __  \|\  \     |\   __  \|\   __  \      |\  \|\  ___ \    |\  \  /  /|    |\   __  \|\   ___  \        |\  ___ \|\___   ___\\  \|\  \    
//\ \  \|\ /\ \  \    \ \  \|\  \ \  \|\ /_     \ \  \ \   __/|   \ \  \/  / /    \ \  \|\  \ \  \\ \  \       \ \   __/\|___ \  \_\ \  \\\  \   
// \ \   __  \ \  \    \ \  \\\  \ \   __  \  __ \ \  \ \  \_|/__  \ \    / /      \ \  \\\  \ \  \\ \  \       \ \  \_|/__  \ \  \ \ \   __  \  
//  \ \  \|\  \ \  \____\ \  \\\  \ \  \|\  \|\  \\_\  \ \  \_|\ \  /     \/        \ \  \\\  \ \  \\ \  \       \ \  \_|\ \  \ \  \ \ \  \ \  \ 
//   \ \_______\ \_______\ \_______\ \_______\ \________\ \_______\/  /\   \         \ \_______\ \__\\ \__\       \ \_______\  \ \__\ \ \__\ \__\
 //   \|_______|\|_______|\|_______|\|_______|\|________|\|_______/__/ /\ __\         \|_______|\|__| \|__|        \|_______|   \|__|  \|__|\|__|
 //                                                               |__|/ \|__|       
//BLOBJEX on ETHERUM v2 ENHANCED CONTRACT by TheUndeadInc & ZombieBits


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

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


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// 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: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/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 v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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 v4.4.1 (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 `IERC721.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 v4.4.1 (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`, 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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

// 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/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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 virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

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

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

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

// File: contracts/BLOBjeXv2.sol

pragma solidity ^0.8.6;


// ________  ___       ________  ________        ___  _______      ___    ___      ________  ________           _______  _________  ___  ___     
//|\   __  \|\  \     |\   __  \|\   __  \      |\  \|\  ___ \    |\  \  /  /|    |\   __  \|\   ___  \        |\  ___ \|\___   ___\\  \|\  \    
//\ \  \|\ /\ \  \    \ \  \|\  \ \  \|\ /_     \ \  \ \   __/|   \ \  \/  / /    \ \  \|\  \ \  \\ \  \       \ \   __/\|___ \  \_\ \  \\\  \   
// \ \   __  \ \  \    \ \  \\\  \ \   __  \  __ \ \  \ \  \_|/__  \ \    / /      \ \  \\\  \ \  \\ \  \       \ \  \_|/__  \ \  \ \ \   __  \  
//  \ \  \|\  \ \  \____\ \  \\\  \ \  \|\  \|\  \\_\  \ \  \_|\ \  /     \/        \ \  \\\  \ \  \\ \  \       \ \  \_|\ \  \ \  \ \ \  \ \  \ 
//   \ \_______\ \_______\ \_______\ \_______\ \________\ \_______\/  /\   \         \ \_______\ \__\\ \__\       \ \_______\  \ \__\ \ \__\ \__\
 //   \|_______|\|_______|\|_______|\|_______|\|________|\|_______/__/ /\ __\         \|_______|\|__| \|__|        \|_______|   \|__|  \|__|\|__|
 //                                                               |__|/ \|__|       
//BLOBJEX on ETHERUM v2 ENHANCED CONTRACT by TheUndeadInc & ZombieBits








library OpenSeaGasFreeListing {
    /**
    @notice Returns whether the operator is an OpenSea proxy for the owner, thus
    allowing it to list without the token owner paying gas.
    @dev ERC{721,1155}.isApprovedForAll should be overriden to also check if
    this function returns true.
     */
    function isApprovedForAll(address owner, address operator) internal view returns (bool) {
        ProxyRegistry registry;
        assembly {
            switch chainid()
            case 1 {
                // mainnet
                registry := 0xa5409ec958c83c3f309868babaca7c86dcb077c1
            }
            case 4 {
                // rinkeby
                registry := 0xf57b2c51ded3a29e6891aba85459d600256cf317
            }
        }

        return address(registry) != address(0) && (address(registry.proxies(owner)) == operator);
    }
}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}


contract BLOBjeXv2 is ERC721, Ownable, ReentrancyGuard {
    using Counters for Counters.Counter;

    uint256 public MAX_TEAM_RESERVES = 10;
    //allows for 10 tokens to be minted for giveaways etc
    uint256 public constant MAX_TOKENS = 3333;
    uint256 public MAX_PRESALE_TOKENS_PER_ADDRESS = 1;
    uint256 public PRESALE_TOKEN_PRICE = 0.00 ether;
    uint256 public TOKEN_PRICE = 0.0033 ether;
    uint256 public MAX_MINTS_PER_TX = 10;

    bool public preSale = false;
    bool public publicSale = false;

    string private baseURI = "";
    Counters.Counter private _nextTokenId;

        // whitelist merkle root
    bytes32 public merkleroot;

    mapping (address => uint) public presaleNumMinted;

    constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
  }

    function presaleMint(uint256 quantity, bytes32[] calldata PresaleMerkleProof) external payable nonReentrant {
        require(preSale, "pre sale is not live");
        require(totalSupply() + quantity <= MAX_TOKENS, "minting this many would exceed supply");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(PresaleMerkleProof, merkleroot, leaf), "Invalid proof.");
        _checkPreMintRequirements(quantity);
        _minter(msg.sender, quantity);
    }

    function _checkPreMintRequirements(uint256 quantity) internal {
        require(quantity > 0 && quantity <= MAX_PRESALE_TOKENS_PER_ADDRESS, "invalid quantity: zero or greater than mint allowance");
        require(msg.value == PRESALE_TOKEN_PRICE * quantity, "wrong amount of ether sent");
        presaleNumMinted[msg.sender] = presaleNumMinted[msg.sender] + quantity;
        require(presaleNumMinted[msg.sender] <= MAX_PRESALE_TOKENS_PER_ADDRESS, "Cannot mint more than 1 per address in this phase");
    }

    function mint(uint256 quantity) external payable nonReentrant {
        require(publicSale, "public sale is not live");
        require(totalSupply() + quantity <= MAX_TOKENS, "invalid quantity: would exceed max supply");
        _checkMintRequirements(quantity);
        _minter(msg.sender, quantity);
    }

    function _checkMintRequirements(uint256 quantity) internal {
        require(quantity > 0 && quantity <= MAX_MINTS_PER_TX, "invalid quantity: zero or greater than mint allowance");
        require(msg.value == TOKEN_PRICE * quantity, "wrong amount of ether sent");
    }

    function teamReservesMint(uint256 quantity) public onlyOwner {
        require(quantity <= MAX_TEAM_RESERVES, "Can't reserve more than set amount" );
        MAX_TEAM_RESERVES -= quantity;
        require(totalSupply() + quantity <= MAX_TOKENS, "invalid quantity: would exceed max supply");
        _minter(msg.sender, quantity);
    }

    function togglePublicSale() public onlyOwner {
        publicSale = !publicSale;
    }

    function togglePreSale() public onlyOwner {
        preSale = !preSale;
    }

    function totalSupply() public view returns (uint256) {
        return _nextTokenId.current();
    }

    function _minter(address addr, uint256 quantity) internal {
        for (uint i = 0; i < quantity; i++) {
            uint mintIndex = _nextTokenId.current();
            _safeMint(addr, mintIndex);
            _nextTokenId.increment();
        }
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        Address.sendValue(payable(owner()), balance);
    }

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

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

    function setMerkleRoot(bytes32 newMerkle) public onlyOwner {
    merkleroot = newMerkle;
    }

    function setMAX_MINTS_PER_TX(uint256 _MAX_MINTS_PER_TX) public onlyOwner() {
    MAX_MINTS_PER_TX = _MAX_MINTS_PER_TX;
    }

    function setMAX_PRESALE_TOKENS_PER_ADDRESS(uint256 _MAX_PRESALE_TOKENS_PER_ADDRESS) public onlyOwner() {
    MAX_PRESALE_TOKENS_PER_ADDRESS = _MAX_PRESALE_TOKENS_PER_ADDRESS;
    }

    function setPRESALE_TOKEN_PRICE(uint256 _PRESALE_TOKEN_PRICE) public onlyOwner() {
    PRESALE_TOKEN_PRICE = _PRESALE_TOKEN_PRICE;
    }

    function setTOKEN_PRICE(uint256 _TOKEN_PRICE) public onlyOwner() {
    TOKEN_PRICE = _TOKEN_PRICE;
    }

    function isApprovedForAll(address owner, address operator) public view override returns (bool) {
        return OpenSeaGasFreeListing.isApprovedForAll(owner, operator) || super.isApprovedForAll(owner, operator);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[],"name":"MAX_MINTS_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_TOKENS_PER_ADDRESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TEAM_RESERVES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_TOKEN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"PresaleMerkleProof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleNumMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_MINTS_PER_TX","type":"uint256"}],"name":"setMAX_MINTS_PER_TX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_PRESALE_TOKENS_PER_ADDRESS","type":"uint256"}],"name":"setMAX_PRESALE_TOKENS_PER_ADDRESS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkle","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PRESALE_TOKEN_PRICE","type":"uint256"}],"name":"setPRESALE_TOKEN_PRICE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TOKEN_PRICE","type":"uint256"}],"name":"setTOKEN_PRICE","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":"quantity","type":"uint256"}],"name":"teamReservesMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600a600881905560016009556000808255660bb9551fc24000600b55600c91909155600d805461ffff1916905560a0604081905260808290526200004791600e9190620001ab565b503480156200005557600080fd5b5060405162002ac438038062002ac4833981016040819052620000789162000308565b82518390839062000091906000906020850190620001ab565b508051620000a7906001906020840190620001ab565b505050620000c4620000be620000dd60201b60201c565b620000e1565b6001600755620000d48162000133565b505050620003ec565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620001925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001a790600e906020840190620001ab565b5050565b828054620001b99062000399565b90600052602060002090601f016020900481019282620001dd576000855562000228565b82601f10620001f857805160ff191683800117855562000228565b8280016001018555821562000228579182015b82811115620002285782518255916020019190600101906200020b565b50620002369291506200023a565b5090565b5b808211156200023657600081556001016200023b565b600082601f8301126200026357600080fd5b81516001600160401b0380821115620002805762000280620003d6565b604051601f8301601f19908116603f01168101908282118183101715620002ab57620002ab620003d6565b81604052838152602092508683858801011115620002c857600080fd5b600091505b83821015620002ec5785820183015181830184015290820190620002cd565b83821115620002fe5760008385830101525b9695505050505050565b6000806000606084860312156200031e57600080fd5b83516001600160401b03808211156200033657600080fd5b620003448783880162000251565b945060208601519150808211156200035b57600080fd5b620003698783880162000251565b935060408601519150808211156200038057600080fd5b506200038f8682870162000251565b9150509250925092565b600181811c90821680620003ae57607f821691505b60208210811415620003d057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6126c880620003fc6000396000f3fe6080604052600436106102305760003560e01c806382e42f1e1161012e578063c6a91b42116100ab578063e3e1e8ef1161006f578063e3e1e8ef1461062d578063e78213c014610640578063e985e9c514610660578063f2fde38b14610680578063f47c84c5146106a057600080fd5b8063c6a91b42146105b7578063c87b56dd146105cd578063ca3cb522146105ed578063d2d8cb6714610602578063e222c7f91461061857600080fd5b8063a22cb465116100f2578063a22cb46514610535578063b46a676814610555578063b6c7ecf51461056b578063b88d4fde14610581578063c1c4f5cb146105a157600080fd5b806382e42f1e146104ac5780638da5cb5b146104c257806395d89b41146104e0578063a0712d68146104f5578063a1e79f8a1461050857600080fd5b806342842e0e116101bc57806364be52871161018057806364be5287146104175780636ce743861461043757806370a0823114610457578063715018a6146104775780637cb647591461048c57600080fd5b806342842e0e1461037d5780634f4342e21461039d57806355f804b3146103bd5780635a7adf7f146103dd5780636352211e146103f757600080fd5b8063128ddfa311610203578063128ddfa3146102e657806318160ddd1461030657806323b872dd1461032957806333bc1c5c146103495780633ccfd60b1461036857600080fd5b806301ffc9a71461023557806306fdde031461026a578063081812fc1461028c578063095ea7b3146102c4575b600080fd5b34801561024157600080fd5b506102556102503660046121d7565b6106b6565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f610708565b604051610261919061238e565b34801561029857600080fd5b506102ac6102a73660046121be565b61079a565b6040516001600160a01b039091168152602001610261565b3480156102d057600080fd5b506102e46102df366004612192565b610834565b005b3480156102f257600080fd5b506102e46103013660046121be565b61094a565b34801561031257600080fd5b5061031b610979565b604051908152602001610261565b34801561033557600080fd5b506102e461034436600461209e565b610989565b34801561035557600080fd5b50600d5461025590610100900460ff1681565b34801561037457600080fd5b506102e46109ba565b34801561038957600080fd5b506102e461039836600461209e565b610a03565b3480156103a957600080fd5b506102e46103b83660046121be565b610a1e565b3480156103c957600080fd5b506102e46103d836600461222e565b610a4d565b3480156103e957600080fd5b50600d546102559060ff1681565b34801561040357600080fd5b506102ac6104123660046121be565b610a8e565b34801561042357600080fd5b506102e46104323660046121be565b610b05565b34801561044357600080fd5b506102e46104523660046121be565b610b34565b34801561046357600080fd5b5061031b610472366004612048565b610b63565b34801561048357600080fd5b506102e4610bea565b34801561049857600080fd5b506102e46104a73660046121be565b610c20565b3480156104b857600080fd5b5061031b60095481565b3480156104ce57600080fd5b506006546001600160a01b03166102ac565b3480156104ec57600080fd5b5061027f610c4f565b6102e46105033660046121be565b610c5e565b34801561051457600080fd5b5061031b610523366004612048565b60116020526000908152604090205481565b34801561054157600080fd5b506102e461055036600461215f565b610d5c565b34801561056157600080fd5b5061031b600a5481565b34801561057757600080fd5b5061031b60105481565b34801561058d57600080fd5b506102e461059c3660046120df565b610d67565b3480156105ad57600080fd5b5061031b60085481565b3480156105c357600080fd5b5061031b600c5481565b3480156105d957600080fd5b5061027f6105e83660046121be565b610d9f565b3480156105f957600080fd5b506102e4610e7a565b34801561060e57600080fd5b5061031b600b5481565b34801561062457600080fd5b506102e4610eb8565b6102e461063b366004612277565b610eff565b34801561064c57600080fd5b506102e461065b3660046121be565b6110e7565b34801561066c57600080fd5b5061025561067b366004612065565b6111c4565b34801561068c57600080fd5b506102e461069b366004612048565b611204565b3480156106ac57600080fd5b5061031b610d0581565b60006001600160e01b031982166380ac58cd60e01b14806106e757506001600160e01b03198216635b5e139f60e01b145b8061070257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610717906125a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610743906125a5565b80156107905780601f1061076557610100808354040283529160200191610790565b820191906000526020600020905b81548152906001019060200180831161077357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108185760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061083f82610a8e565b9050806001600160a01b0316836001600160a01b031614156108ad5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161080f565b336001600160a01b03821614806108c957506108c981336111c4565b61093b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161080f565b610945838361129c565b505050565b6006546001600160a01b031633146109745760405162461bcd60e51b815260040161080f9061243c565b600955565b6000610984600f5490565b905090565b610993338261130a565b6109af5760405162461bcd60e51b815260040161080f90612471565b6109458383836113e1565b6006546001600160a01b031633146109e45760405162461bcd60e51b815260040161080f9061243c565b47610a006109fa6006546001600160a01b031690565b82611581565b50565b61094583838360405180602001604052806000815250610d67565b6006546001600160a01b03163314610a485760405162461bcd60e51b815260040161080f9061243c565b600c55565b6006546001600160a01b03163314610a775760405162461bcd60e51b815260040161080f9061243c565b8051610a8a90600e906020840190611f39565b5050565b6000818152600260205260408120546001600160a01b0316806107025760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161080f565b6006546001600160a01b03163314610b2f5760405162461bcd60e51b815260040161080f9061243c565b600b55565b6006546001600160a01b03163314610b5e5760405162461bcd60e51b815260040161080f9061243c565b600a55565b60006001600160a01b038216610bce5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161080f565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610c145760405162461bcd60e51b815260040161080f9061243c565b610c1e600061169a565b565b6006546001600160a01b03163314610c4a5760405162461bcd60e51b815260040161080f9061243c565b601055565b606060018054610717906125a5565b60026007541415610cb15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161080f565b6002600755600d54610100900460ff16610d0d5760405162461bcd60e51b815260206004820152601760248201527f7075626c69632073616c65206973206e6f74206c697665000000000000000000604482015260640161080f565b610d0581610d19610979565b610d239190612517565b1115610d415760405162461bcd60e51b815260040161080f906123f3565b610d4a816116ec565b610d543382611776565b506001600755565b610a8a3383836117b9565b610d71338361130a565b610d8d5760405162461bcd60e51b815260040161080f90612471565b610d9984848484611888565b50505050565b6000818152600260205260409020546060906001600160a01b0316610e1e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161080f565b6000610e286118bb565b90506000815111610e485760405180602001604052806000815250610e73565b80610e52846118ca565b604051602001610e63929190612322565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314610ea45760405162461bcd60e51b815260040161080f9061243c565b600d805460ff19811660ff90911615179055565b6006546001600160a01b03163314610ee25760405162461bcd60e51b815260040161080f9061243c565b600d805461ff001981166101009182900460ff1615909102179055565b60026007541415610f525760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161080f565b6002600755600d5460ff16610fa05760405162461bcd60e51b81526020600482015260146024820152737072652073616c65206973206e6f74206c69766560601b604482015260640161080f565b610d0583610fac610979565b610fb69190612517565b11156110125760405162461bcd60e51b815260206004820152602560248201527f6d696e74696e672074686973206d616e7920776f756c642065786365656420736044820152647570706c7960d81b606482015260840161080f565b6040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061108c8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060105491508490506119c8565b6110c95760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b604482015260640161080f565b6110d2846119de565b6110dc3385611776565b505060016007555050565b6006546001600160a01b031633146111115760405162461bcd60e51b815260040161080f9061243c565b60085481111561116e5760405162461bcd60e51b815260206004820152602260248201527f43616e27742072657365727665206d6f7265207468616e2073657420616d6f756044820152611b9d60f21b606482015260840161080f565b80600860008282546111809190612562565b90915550610d05905081611192610979565b61119c9190612517565b11156111ba5760405162461bcd60e51b815260040161080f906123f3565b610a003382611776565b60006111d08383611b00565b80610e7357506001600160a01b0380841660009081526005602090815260408083209386168352929052205460ff16610e73565b6006546001600160a01b0316331461122e5760405162461bcd60e51b815260040161080f9061243c565b6001600160a01b0381166112935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080f565b610a008161169a565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112d182610a8e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166113835760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161080f565b600061138e83610a8e565b9050806001600160a01b0316846001600160a01b031614806113c95750836001600160a01b03166113be8461079a565b6001600160a01b0316145b806113d957506113d981856111c4565b949350505050565b826001600160a01b03166113f482610a8e565b6001600160a01b03161461145c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161080f565b6001600160a01b0382166114be5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161080f565b6114c960008261129c565b6001600160a01b03831660009081526003602052604081208054600192906114f2908490612562565b90915550506001600160a01b0382166000908152600360205260408120805460019290611520908490612517565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b804710156115d15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161080f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461161e576040519150601f19603f3d011682016040523d82523d6000602084013e611623565b606091505b50509050806109455760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161080f565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000811180156116fe5750600c548111155b61171a5760405162461bcd60e51b815260040161080f906124c2565b80600b546117289190612543565b3414610a005760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720616d6f756e74206f662065746865722073656e74000000000000604482015260640161080f565b60005b8181101561094557600061178c600f5490565b90506117988482611bf1565b6117a6600f80546001019055565b50806117b1816125e0565b915050611779565b816001600160a01b0316836001600160a01b0316141561181b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161080f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118938484846113e1565b61189f84848484611c0b565b610d995760405162461bcd60e51b815260040161080f906123a1565b6060600e8054610717906125a5565b6060816118ee5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119185780611902816125e0565b91506119119050600a8361252f565b91506118f2565b60008167ffffffffffffffff81111561193357611933612651565b6040519080825280601f01601f19166020018201604052801561195d576020820181803683370190505b5090505b84156113d957611972600183612562565b915061197f600a866125fb565b61198a906030612517565b60f81b81838151811061199f5761199f61263b565b60200101906001600160f81b031916908160001a9053506119c1600a8661252f565b9450611961565b6000826119d58584611d18565b14949350505050565b6000811180156119f057506009548111155b611a0c5760405162461bcd60e51b815260040161080f906124c2565b80600a54611a1a9190612543565b3414611a685760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720616d6f756e74206f662065746865722073656e74000000000000604482015260640161080f565b33600090815260116020526040902054611a83908290612517565b3360009081526011602052604090208190556009541015610a005760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74206d696e74206d6f7265207468616e203120706572206164647260448201527065737320696e207468697320706861736560781b606482015260840161080f565b6000804660018114611b195760048114611b3557611b4d565b73a5409ec958c83c3f309868babaca7c86dcb077c19150611b4d565b73f57b2c51ded3a29e6891aba85459d600256cf31791505b506001600160a01b038116158015906113d9575060405163c455279160e01b81526001600160a01b038581166004830152808516919083169063c45527919060240160206040518083038186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf9190612211565b6001600160a01b031614949350505050565b610a8a828260405180602001604052806000815250611dc4565b60006001600160a01b0384163b15611d0d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c4f903390899088908890600401612351565b602060405180830381600087803b158015611c6957600080fd5b505af1925050508015611c99575060408051601f3d908101601f19168201909252611c96918101906121f4565b60015b611cf3573d808015611cc7576040519150601f19603f3d011682016040523d82523d6000602084013e611ccc565b606091505b508051611ceb5760405162461bcd60e51b815260040161080f906123a1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113d9565b506001949350505050565b600081815b8451811015611dbc576000858281518110611d3a57611d3a61263b565b60200260200101519050808311611d7c576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611da9565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611db4816125e0565b915050611d1d565b509392505050565b611dce8383611df7565b611ddb6000848484611c0b565b6109455760405162461bcd60e51b815260040161080f906123a1565b6001600160a01b038216611e4d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161080f565b6000818152600260205260409020546001600160a01b031615611eb25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161080f565b6001600160a01b0382166000908152600360205260408120805460019290611edb908490612517565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f45906125a5565b90600052602060002090601f016020900481019282611f675760008555611fad565b82601f10611f8057805160ff1916838001178555611fad565b82800160010185558215611fad579182015b82811115611fad578251825591602001919060010190611f92565b50611fb9929150611fbd565b5090565b5b80821115611fb95760008155600101611fbe565b600067ffffffffffffffff80841115611fed57611fed612651565b604051601f8501601f19908116603f0116810190828211818310171561201557612015612651565b8160405280935085815286868601111561202e57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561205a57600080fd5b8135610e7381612667565b6000806040838503121561207857600080fd5b823561208381612667565b9150602083013561209381612667565b809150509250929050565b6000806000606084860312156120b357600080fd5b83356120be81612667565b925060208401356120ce81612667565b929592945050506040919091013590565b600080600080608085870312156120f557600080fd5b843561210081612667565b9350602085013561211081612667565b925060408501359150606085013567ffffffffffffffff81111561213357600080fd5b8501601f8101871361214457600080fd5b61215387823560208401611fd2565b91505092959194509250565b6000806040838503121561217257600080fd5b823561217d81612667565b91506020830135801515811461209357600080fd5b600080604083850312156121a557600080fd5b82356121b081612667565b946020939093013593505050565b6000602082840312156121d057600080fd5b5035919050565b6000602082840312156121e957600080fd5b8135610e738161267c565b60006020828403121561220657600080fd5b8151610e738161267c565b60006020828403121561222357600080fd5b8151610e7381612667565b60006020828403121561224057600080fd5b813567ffffffffffffffff81111561225757600080fd5b8201601f8101841361226857600080fd5b6113d984823560208401611fd2565b60008060006040848603121561228c57600080fd5b83359250602084013567ffffffffffffffff808211156122ab57600080fd5b818601915086601f8301126122bf57600080fd5b8135818111156122ce57600080fd5b8760208260051b85010111156122e357600080fd5b6020830194508093505050509250925092565b6000815180845261230e816020860160208601612579565b601f01601f19169290920160200192915050565b60008351612334818460208801612579565b835190830190612348818360208801612579565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612384908301846122f6565b9695505050505050565b602081526000610e7360208301846122f6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526029908201527f696e76616c6964207175616e746974793a20776f756c6420657863656564206d604082015268617820737570706c7960b81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526035908201527f696e76616c6964207175616e746974793a207a65726f206f722067726561746560408201527472207468616e206d696e7420616c6c6f77616e636560581b606082015260800190565b6000821982111561252a5761252a61260f565b500190565b60008261253e5761253e612625565b500490565b600081600019048311821515161561255d5761255d61260f565b500290565b6000828210156125745761257461260f565b500390565b60005b8381101561259457818101518382015260200161257c565b83811115610d995750506000910152565b600181811c908216806125b957607f821691505b602082108114156125da57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125f4576125f461260f565b5060010190565b60008261260a5761260a612625565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a0057600080fd5b6001600160e01b031981168114610a0057600080fdfea2646970667358221220d662ab4e6717285d886ea979450cb4d3d9eb6c946a0584cadfadc1134e6d193764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009424c4f426a6558763200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005424c4f42580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d503347716d424835595038734c3532644c4773354170636f64674a7542514e464b746d365968754e757133322f00000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c806382e42f1e1161012e578063c6a91b42116100ab578063e3e1e8ef1161006f578063e3e1e8ef1461062d578063e78213c014610640578063e985e9c514610660578063f2fde38b14610680578063f47c84c5146106a057600080fd5b8063c6a91b42146105b7578063c87b56dd146105cd578063ca3cb522146105ed578063d2d8cb6714610602578063e222c7f91461061857600080fd5b8063a22cb465116100f2578063a22cb46514610535578063b46a676814610555578063b6c7ecf51461056b578063b88d4fde14610581578063c1c4f5cb146105a157600080fd5b806382e42f1e146104ac5780638da5cb5b146104c257806395d89b41146104e0578063a0712d68146104f5578063a1e79f8a1461050857600080fd5b806342842e0e116101bc57806364be52871161018057806364be5287146104175780636ce743861461043757806370a0823114610457578063715018a6146104775780637cb647591461048c57600080fd5b806342842e0e1461037d5780634f4342e21461039d57806355f804b3146103bd5780635a7adf7f146103dd5780636352211e146103f757600080fd5b8063128ddfa311610203578063128ddfa3146102e657806318160ddd1461030657806323b872dd1461032957806333bc1c5c146103495780633ccfd60b1461036857600080fd5b806301ffc9a71461023557806306fdde031461026a578063081812fc1461028c578063095ea7b3146102c4575b600080fd5b34801561024157600080fd5b506102556102503660046121d7565b6106b6565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f610708565b604051610261919061238e565b34801561029857600080fd5b506102ac6102a73660046121be565b61079a565b6040516001600160a01b039091168152602001610261565b3480156102d057600080fd5b506102e46102df366004612192565b610834565b005b3480156102f257600080fd5b506102e46103013660046121be565b61094a565b34801561031257600080fd5b5061031b610979565b604051908152602001610261565b34801561033557600080fd5b506102e461034436600461209e565b610989565b34801561035557600080fd5b50600d5461025590610100900460ff1681565b34801561037457600080fd5b506102e46109ba565b34801561038957600080fd5b506102e461039836600461209e565b610a03565b3480156103a957600080fd5b506102e46103b83660046121be565b610a1e565b3480156103c957600080fd5b506102e46103d836600461222e565b610a4d565b3480156103e957600080fd5b50600d546102559060ff1681565b34801561040357600080fd5b506102ac6104123660046121be565b610a8e565b34801561042357600080fd5b506102e46104323660046121be565b610b05565b34801561044357600080fd5b506102e46104523660046121be565b610b34565b34801561046357600080fd5b5061031b610472366004612048565b610b63565b34801561048357600080fd5b506102e4610bea565b34801561049857600080fd5b506102e46104a73660046121be565b610c20565b3480156104b857600080fd5b5061031b60095481565b3480156104ce57600080fd5b506006546001600160a01b03166102ac565b3480156104ec57600080fd5b5061027f610c4f565b6102e46105033660046121be565b610c5e565b34801561051457600080fd5b5061031b610523366004612048565b60116020526000908152604090205481565b34801561054157600080fd5b506102e461055036600461215f565b610d5c565b34801561056157600080fd5b5061031b600a5481565b34801561057757600080fd5b5061031b60105481565b34801561058d57600080fd5b506102e461059c3660046120df565b610d67565b3480156105ad57600080fd5b5061031b60085481565b3480156105c357600080fd5b5061031b600c5481565b3480156105d957600080fd5b5061027f6105e83660046121be565b610d9f565b3480156105f957600080fd5b506102e4610e7a565b34801561060e57600080fd5b5061031b600b5481565b34801561062457600080fd5b506102e4610eb8565b6102e461063b366004612277565b610eff565b34801561064c57600080fd5b506102e461065b3660046121be565b6110e7565b34801561066c57600080fd5b5061025561067b366004612065565b6111c4565b34801561068c57600080fd5b506102e461069b366004612048565b611204565b3480156106ac57600080fd5b5061031b610d0581565b60006001600160e01b031982166380ac58cd60e01b14806106e757506001600160e01b03198216635b5e139f60e01b145b8061070257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610717906125a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610743906125a5565b80156107905780601f1061076557610100808354040283529160200191610790565b820191906000526020600020905b81548152906001019060200180831161077357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108185760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061083f82610a8e565b9050806001600160a01b0316836001600160a01b031614156108ad5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161080f565b336001600160a01b03821614806108c957506108c981336111c4565b61093b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161080f565b610945838361129c565b505050565b6006546001600160a01b031633146109745760405162461bcd60e51b815260040161080f9061243c565b600955565b6000610984600f5490565b905090565b610993338261130a565b6109af5760405162461bcd60e51b815260040161080f90612471565b6109458383836113e1565b6006546001600160a01b031633146109e45760405162461bcd60e51b815260040161080f9061243c565b47610a006109fa6006546001600160a01b031690565b82611581565b50565b61094583838360405180602001604052806000815250610d67565b6006546001600160a01b03163314610a485760405162461bcd60e51b815260040161080f9061243c565b600c55565b6006546001600160a01b03163314610a775760405162461bcd60e51b815260040161080f9061243c565b8051610a8a90600e906020840190611f39565b5050565b6000818152600260205260408120546001600160a01b0316806107025760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161080f565b6006546001600160a01b03163314610b2f5760405162461bcd60e51b815260040161080f9061243c565b600b55565b6006546001600160a01b03163314610b5e5760405162461bcd60e51b815260040161080f9061243c565b600a55565b60006001600160a01b038216610bce5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161080f565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610c145760405162461bcd60e51b815260040161080f9061243c565b610c1e600061169a565b565b6006546001600160a01b03163314610c4a5760405162461bcd60e51b815260040161080f9061243c565b601055565b606060018054610717906125a5565b60026007541415610cb15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161080f565b6002600755600d54610100900460ff16610d0d5760405162461bcd60e51b815260206004820152601760248201527f7075626c69632073616c65206973206e6f74206c697665000000000000000000604482015260640161080f565b610d0581610d19610979565b610d239190612517565b1115610d415760405162461bcd60e51b815260040161080f906123f3565b610d4a816116ec565b610d543382611776565b506001600755565b610a8a3383836117b9565b610d71338361130a565b610d8d5760405162461bcd60e51b815260040161080f90612471565b610d9984848484611888565b50505050565b6000818152600260205260409020546060906001600160a01b0316610e1e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161080f565b6000610e286118bb565b90506000815111610e485760405180602001604052806000815250610e73565b80610e52846118ca565b604051602001610e63929190612322565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314610ea45760405162461bcd60e51b815260040161080f9061243c565b600d805460ff19811660ff90911615179055565b6006546001600160a01b03163314610ee25760405162461bcd60e51b815260040161080f9061243c565b600d805461ff001981166101009182900460ff1615909102179055565b60026007541415610f525760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161080f565b6002600755600d5460ff16610fa05760405162461bcd60e51b81526020600482015260146024820152737072652073616c65206973206e6f74206c69766560601b604482015260640161080f565b610d0583610fac610979565b610fb69190612517565b11156110125760405162461bcd60e51b815260206004820152602560248201527f6d696e74696e672074686973206d616e7920776f756c642065786365656420736044820152647570706c7960d81b606482015260840161080f565b6040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061108c8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060105491508490506119c8565b6110c95760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b604482015260640161080f565b6110d2846119de565b6110dc3385611776565b505060016007555050565b6006546001600160a01b031633146111115760405162461bcd60e51b815260040161080f9061243c565b60085481111561116e5760405162461bcd60e51b815260206004820152602260248201527f43616e27742072657365727665206d6f7265207468616e2073657420616d6f756044820152611b9d60f21b606482015260840161080f565b80600860008282546111809190612562565b90915550610d05905081611192610979565b61119c9190612517565b11156111ba5760405162461bcd60e51b815260040161080f906123f3565b610a003382611776565b60006111d08383611b00565b80610e7357506001600160a01b0380841660009081526005602090815260408083209386168352929052205460ff16610e73565b6006546001600160a01b0316331461122e5760405162461bcd60e51b815260040161080f9061243c565b6001600160a01b0381166112935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080f565b610a008161169a565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112d182610a8e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166113835760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161080f565b600061138e83610a8e565b9050806001600160a01b0316846001600160a01b031614806113c95750836001600160a01b03166113be8461079a565b6001600160a01b0316145b806113d957506113d981856111c4565b949350505050565b826001600160a01b03166113f482610a8e565b6001600160a01b03161461145c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161080f565b6001600160a01b0382166114be5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161080f565b6114c960008261129c565b6001600160a01b03831660009081526003602052604081208054600192906114f2908490612562565b90915550506001600160a01b0382166000908152600360205260408120805460019290611520908490612517565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b804710156115d15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161080f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461161e576040519150601f19603f3d011682016040523d82523d6000602084013e611623565b606091505b50509050806109455760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161080f565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000811180156116fe5750600c548111155b61171a5760405162461bcd60e51b815260040161080f906124c2565b80600b546117289190612543565b3414610a005760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720616d6f756e74206f662065746865722073656e74000000000000604482015260640161080f565b60005b8181101561094557600061178c600f5490565b90506117988482611bf1565b6117a6600f80546001019055565b50806117b1816125e0565b915050611779565b816001600160a01b0316836001600160a01b0316141561181b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161080f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118938484846113e1565b61189f84848484611c0b565b610d995760405162461bcd60e51b815260040161080f906123a1565b6060600e8054610717906125a5565b6060816118ee5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119185780611902816125e0565b91506119119050600a8361252f565b91506118f2565b60008167ffffffffffffffff81111561193357611933612651565b6040519080825280601f01601f19166020018201604052801561195d576020820181803683370190505b5090505b84156113d957611972600183612562565b915061197f600a866125fb565b61198a906030612517565b60f81b81838151811061199f5761199f61263b565b60200101906001600160f81b031916908160001a9053506119c1600a8661252f565b9450611961565b6000826119d58584611d18565b14949350505050565b6000811180156119f057506009548111155b611a0c5760405162461bcd60e51b815260040161080f906124c2565b80600a54611a1a9190612543565b3414611a685760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720616d6f756e74206f662065746865722073656e74000000000000604482015260640161080f565b33600090815260116020526040902054611a83908290612517565b3360009081526011602052604090208190556009541015610a005760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74206d696e74206d6f7265207468616e203120706572206164647260448201527065737320696e207468697320706861736560781b606482015260840161080f565b6000804660018114611b195760048114611b3557611b4d565b73a5409ec958c83c3f309868babaca7c86dcb077c19150611b4d565b73f57b2c51ded3a29e6891aba85459d600256cf31791505b506001600160a01b038116158015906113d9575060405163c455279160e01b81526001600160a01b038581166004830152808516919083169063c45527919060240160206040518083038186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf9190612211565b6001600160a01b031614949350505050565b610a8a828260405180602001604052806000815250611dc4565b60006001600160a01b0384163b15611d0d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c4f903390899088908890600401612351565b602060405180830381600087803b158015611c6957600080fd5b505af1925050508015611c99575060408051601f3d908101601f19168201909252611c96918101906121f4565b60015b611cf3573d808015611cc7576040519150601f19603f3d011682016040523d82523d6000602084013e611ccc565b606091505b508051611ceb5760405162461bcd60e51b815260040161080f906123a1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113d9565b506001949350505050565b600081815b8451811015611dbc576000858281518110611d3a57611d3a61263b565b60200260200101519050808311611d7c576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611da9565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611db4816125e0565b915050611d1d565b509392505050565b611dce8383611df7565b611ddb6000848484611c0b565b6109455760405162461bcd60e51b815260040161080f906123a1565b6001600160a01b038216611e4d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161080f565b6000818152600260205260409020546001600160a01b031615611eb25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161080f565b6001600160a01b0382166000908152600360205260408120805460019290611edb908490612517565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f45906125a5565b90600052602060002090601f016020900481019282611f675760008555611fad565b82601f10611f8057805160ff1916838001178555611fad565b82800160010185558215611fad579182015b82811115611fad578251825591602001919060010190611f92565b50611fb9929150611fbd565b5090565b5b80821115611fb95760008155600101611fbe565b600067ffffffffffffffff80841115611fed57611fed612651565b604051601f8501601f19908116603f0116810190828211818310171561201557612015612651565b8160405280935085815286868601111561202e57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561205a57600080fd5b8135610e7381612667565b6000806040838503121561207857600080fd5b823561208381612667565b9150602083013561209381612667565b809150509250929050565b6000806000606084860312156120b357600080fd5b83356120be81612667565b925060208401356120ce81612667565b929592945050506040919091013590565b600080600080608085870312156120f557600080fd5b843561210081612667565b9350602085013561211081612667565b925060408501359150606085013567ffffffffffffffff81111561213357600080fd5b8501601f8101871361214457600080fd5b61215387823560208401611fd2565b91505092959194509250565b6000806040838503121561217257600080fd5b823561217d81612667565b91506020830135801515811461209357600080fd5b600080604083850312156121a557600080fd5b82356121b081612667565b946020939093013593505050565b6000602082840312156121d057600080fd5b5035919050565b6000602082840312156121e957600080fd5b8135610e738161267c565b60006020828403121561220657600080fd5b8151610e738161267c565b60006020828403121561222357600080fd5b8151610e7381612667565b60006020828403121561224057600080fd5b813567ffffffffffffffff81111561225757600080fd5b8201601f8101841361226857600080fd5b6113d984823560208401611fd2565b60008060006040848603121561228c57600080fd5b83359250602084013567ffffffffffffffff808211156122ab57600080fd5b818601915086601f8301126122bf57600080fd5b8135818111156122ce57600080fd5b8760208260051b85010111156122e357600080fd5b6020830194508093505050509250925092565b6000815180845261230e816020860160208601612579565b601f01601f19169290920160200192915050565b60008351612334818460208801612579565b835190830190612348818360208801612579565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612384908301846122f6565b9695505050505050565b602081526000610e7360208301846122f6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526029908201527f696e76616c6964207175616e746974793a20776f756c6420657863656564206d604082015268617820737570706c7960b81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526035908201527f696e76616c6964207175616e746974793a207a65726f206f722067726561746560408201527472207468616e206d696e7420616c6c6f77616e636560581b606082015260800190565b6000821982111561252a5761252a61260f565b500190565b60008261253e5761253e612625565b500490565b600081600019048311821515161561255d5761255d61260f565b500290565b6000828210156125745761257461260f565b500390565b60005b8381101561259457818101518382015260200161257c565b83811115610d995750506000910152565b600181811c908216806125b957607f821691505b602082108114156125da57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125f4576125f461260f565b5060010190565b60008261260a5761260a612625565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a0057600080fd5b6001600160e01b031981168114610a0057600080fdfea2646970667358221220d662ab4e6717285d886ea979450cb4d3d9eb6c946a0584cadfadc1134e6d193764736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009424c4f426a6558763200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005424c4f42580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d503347716d424835595038734c3532644c4773354170636f64674a7542514e464b746d365968754e757133322f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): BLOBjeXv2
Arg [1] : _symbol (string): BLOBX
Arg [2] : _initBaseURI (string): ipfs://QmP3GqmBH5YP8sL52dLGs5ApcodgJuBQNFKtm6YhuNuq32/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 424c4f426a655876320000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 424c4f4258000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d503347716d424835595038734c3532644c477335417063
Arg [9] : 6f64674a7542514e464b746d365968754e757133322f00000000000000000000


Deployed Bytecode Sourcemap

46078:4736:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31358:305;;;;;;;;;;-1:-1:-1;31358:305:0;;;;;:::i;:::-;;:::i;:::-;;;7897:14:1;;7890:22;7872:41;;7860:2;7845:18;31358:305:0;;;;;;;;32303:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33862:221::-;;;;;;;;;;-1:-1:-1;33862:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7195:32:1;;;7177:51;;7165:2;7150:18;33862:221:0;7031:203:1;33385:411:0;;;;;;;;;;-1:-1:-1;33385:411:0;;;;;:::i;:::-;;:::i;:::-;;50140:182;;;;;;;;;;-1:-1:-1;50140:182:0;;;;;:::i;:::-;;:::i;49163:101::-;;;;;;;;;;;;;:::i;:::-;;;8070:25:1;;;8058:2;8043:18;49163:101:0;7924:177:1;34612:339:0;;;;;;;;;;-1:-1:-1;34612:339:0;;;;;:::i;:::-;;:::i;46572:30::-;;;;;;;;;;-1:-1:-1;46572:30:0;;;;;;;;;;;49538:152;;;;;;;;;;;;;:::i;35022:185::-;;;;;;;;;;-1:-1:-1;35022:185:0;;;;;:::i;:::-;;:::i;50006:126::-;;;;;;;;;;-1:-1:-1;50006:126:0;;;;;:::i;:::-;;:::i;49806:88::-;;;;;;;;;;-1:-1:-1;49806:88:0;;;;;:::i;:::-;;:::i;46538:27::-;;;;;;;;;;-1:-1:-1;46538:27:0;;;;;;;;31997:239;;;;;;;;;;-1:-1:-1;31997:239:0;;;;;:::i;:::-;;:::i;50476:106::-;;;;;;;;;;-1:-1:-1;50476:106:0;;;;;:::i;:::-;;:::i;50330:138::-;;;;;;;;;;-1:-1:-1;50330:138:0;;;;;:::i;:::-;;:::i;31727:208::-;;;;;;;;;;-1:-1:-1;31727:208:0;;;;;:::i;:::-;;:::i;12346:103::-;;;;;;;;;;;;;:::i;49902:96::-;;;;;;;;;;-1:-1:-1;49902:96:0;;;;;:::i;:::-;;:::i;46335:49::-;;;;;;;;;;;;;;;;11695:87;;;;;;;;;;-1:-1:-1;11768:6:0;;-1:-1:-1;;;;;11768:6:0;11695:87;;32472:104;;;;;;;;;;;;;:::i;48030:313::-;;;;;;:::i;:::-;;:::i;46759:49::-;;;;;;;;;;-1:-1:-1;46759:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;34155:155;;;;;;;;;;-1:-1:-1;34155:155:0;;;;;:::i;:::-;;:::i;46391:47::-;;;;;;;;;;;;;;;;46725:25;;;;;;;;;;;;;;;;35278:328;;;;;;;;;;-1:-1:-1;35278:328:0;;;;;:::i;:::-;;:::i;46184:37::-;;;;;;;;;;;;;;;;46493:36;;;;;;;;;;;;;;;;32647:334;;;;;;;;;;-1:-1:-1;32647:334:0;;;;;:::i;:::-;;:::i;49076:79::-;;;;;;;;;;;;;:::i;46445:41::-;;;;;;;;;;;;;;;;48980:88;;;;;;;;;;;;;:::i;46989:511::-;;;;;;:::i;:::-;;:::i;48632:340::-;;;;;;;;;;-1:-1:-1;48632:340:0;;;;;:::i;:::-;;:::i;50590:219::-;;;;;;;;;;-1:-1:-1;50590:219:0;;;;;:::i;:::-;;:::i;12604:201::-;;;;;;;;;;-1:-1:-1;12604:201:0;;;;;:::i;:::-;;:::i;46287:41::-;;;;;;;;;;;;46324:4;46287:41;;31358:305;31460:4;-1:-1:-1;;;;;;31497:40:0;;-1:-1:-1;;;31497:40:0;;:105;;-1:-1:-1;;;;;;;31554:48:0;;-1:-1:-1;;;31554:48:0;31497:105;:158;;;-1:-1:-1;;;;;;;;;;24236:40:0;;;31619:36;31477:178;31358:305;-1:-1:-1;;31358:305:0:o;32303:100::-;32357:13;32390:5;32383:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32303:100;:::o;33862:221::-;33938:7;37205:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37205:16:0;33958:73;;;;-1:-1:-1;;;33958:73:0;;15211:2:1;33958:73:0;;;15193:21:1;15250:2;15230:18;;;15223:30;15289:34;15269:18;;;15262:62;-1:-1:-1;;;15340:18:1;;;15333:42;15392:19;;33958:73:0;;;;;;;;;-1:-1:-1;34051:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;34051:24:0;;33862:221::o;33385:411::-;33466:13;33482:23;33497:7;33482:14;:23::i;:::-;33466:39;;33530:5;-1:-1:-1;;;;;33524:11:0;:2;-1:-1:-1;;;;;33524:11:0;;;33516:57;;;;-1:-1:-1;;;33516:57:0;;17217:2:1;33516:57:0;;;17199:21:1;17256:2;17236:18;;;17229:30;17295:34;17275:18;;;17268:62;-1:-1:-1;;;17346:18:1;;;17339:31;17387:19;;33516:57:0;17015:397:1;33516:57:0;10499:10;-1:-1:-1;;;;;33608:21:0;;;;:62;;-1:-1:-1;33633:37:0;33650:5;10499:10;50590:219;:::i;33633:37::-;33586:168;;;;-1:-1:-1;;;33586:168:0;;12791:2:1;33586:168:0;;;12773:21:1;12830:2;12810:18;;;12803:30;12869:34;12849:18;;;12842:62;12940:26;12920:18;;;12913:54;12984:19;;33586:168:0;12589:420:1;33586:168:0;33767:21;33776:2;33780:7;33767:8;:21::i;:::-;33455:341;33385:411;;:::o;50140:182::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;50250:30:::1;:64:::0;50140:182::o;49163:101::-;49207:7;49234:22;:12;7115:14;;7023:114;49234:22;49227:29;;49163:101;:::o;34612:339::-;34807:41;10499:10;34840:7;34807:18;:41::i;:::-;34799:103;;;;-1:-1:-1;;;34799:103:0;;;;;;;:::i;:::-;34915:28;34925:4;34931:2;34935:7;34915:9;:28::i;49538:152::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;49606:21:::1;49638:44;49664:7;11768:6:::0;;-1:-1:-1;;;;;11768:6:0;;11695:87;49664:7:::1;49674;49638:17;:44::i;:::-;49577:113;49538:152::o:0;35022:185::-;35160:39;35177:4;35183:2;35187:7;35160:39;;;;;;;;;;;;:16;:39::i;50006:126::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;50088:16:::1;:36:::0;50006:126::o;49806:88::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;49873:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49806:88:::0;:::o;31997:239::-;32069:7;32105:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32105:16:0;32140:19;32132:73;;;;-1:-1:-1;;;32132:73:0;;13627:2:1;32132:73:0;;;13609:21:1;13666:2;13646:18;;;13639:30;13705:34;13685:18;;;13678:62;-1:-1:-1;;;13756:18:1;;;13749:39;13805:19;;32132:73:0;13425:405:1;50476:106:0;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;50548:11:::1;:26:::0;50476:106::o;50330:138::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;50418:19:::1;:42:::0;50330:138::o;31727:208::-;31799:7;-1:-1:-1;;;;;31827:19:0;;31819:74;;;;-1:-1:-1;;;31819:74:0;;13216:2:1;31819:74:0;;;13198:21:1;13255:2;13235:18;;;13228:30;13294:34;13274:18;;;13267:62;-1:-1:-1;;;13345:18:1;;;13338:40;13395:19;;31819:74:0;13014:406:1;31819:74:0;-1:-1:-1;;;;;;31911:16:0;;;;;:9;:16;;;;;;;31727:208::o;12346:103::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;12411:30:::1;12438:1;12411:18;:30::i;:::-;12346:103::o:0;49902:96::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;49968:10:::1;:22:::0;49902:96::o;32472:104::-;32528:13;32561:7;32554:14;;;;;:::i;48030:313::-;5204:1;5802:7;;:19;;5794:63;;;;-1:-1:-1;;;5794:63:0;;18380:2:1;5794:63:0;;;18362:21:1;18419:2;18399:18;;;18392:30;18458:33;18438:18;;;18431:61;18509:18;;5794:63:0;18178:355:1;5794:63:0;5204:1;5935:7;:18;48111:10:::1;::::0;::::1;::::0;::::1;;;48103:46;;;::::0;-1:-1:-1;;;48103:46:0;;8532:2:1;48103:46:0::1;::::0;::::1;8514:21:1::0;8571:2;8551:18;;;8544:30;8610:25;8590:18;;;8583:53;8653:18;;48103:46:0::1;8330:347:1::0;48103:46:0::1;46324:4;48184:8;48168:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;48160:92;;;;-1:-1:-1::0;;;48160:92:0::1;;;;;;;:::i;:::-;48263:32;48286:8;48263:22;:32::i;:::-;48306:29;48314:10;48326:8;48306:7;:29::i;:::-;-1:-1:-1::0;5160:1:0;6114:7;:22;48030:313::o;34155:155::-;34250:52;10499:10;34283:8;34293;34250:18;:52::i;35278:328::-;35453:41;10499:10;35486:7;35453:18;:41::i;:::-;35445:103;;;;-1:-1:-1;;;35445:103:0;;;;;;;:::i;:::-;35559:39;35573:4;35579:2;35583:7;35592:5;35559:13;:39::i;:::-;35278:328;;;;:::o;32647:334::-;37181:4;37205:16;;;:7;:16;;;;;;32720:13;;-1:-1:-1;;;;;37205:16:0;32746:76;;;;-1:-1:-1;;;32746:76:0;;16801:2:1;32746:76:0;;;16783:21:1;16840:2;16820:18;;;16813:30;16879:34;16859:18;;;16852:62;-1:-1:-1;;;16930:18:1;;;16923:45;16985:19;;32746:76:0;16599:411:1;32746:76:0;32835:21;32859:10;:8;:10::i;:::-;32835:34;;32911:1;32893:7;32887:21;:25;:86;;;;;;;;;;;;;;;;;32939:7;32948:18;:7;:16;:18::i;:::-;32922:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32887:86;32880:93;32647:334;-1:-1:-1;;;32647:334:0:o;49076:79::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;49140:7:::1;::::0;;-1:-1:-1;;49129:18:0;::::1;49140:7;::::0;;::::1;49139:8;49129:18;::::0;;49076:79::o;48980:88::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;49050:10:::1;::::0;;-1:-1:-1;;49036:24:0;::::1;49050:10;::::0;;;::::1;;;49049:11;49036:24:::0;;::::1;;::::0;;48980:88::o;46989:511::-;5204:1;5802:7;;:19;;5794:63;;;;-1:-1:-1;;;5794:63:0;;18380:2:1;5794:63:0;;;18362:21:1;18419:2;18399:18;;;18392:30;18458:33;18438:18;;;18431:61;18509:18;;5794:63:0;18178:355:1;5794:63:0;5204:1;5935:7;:18;47116:7:::1;::::0;::::1;;47108:40;;;::::0;-1:-1:-1;;;47108:40:0;;11253:2:1;47108:40:0::1;::::0;::::1;11235:21:1::0;11292:2;11272:18;;;11265:30;-1:-1:-1;;;11311:18:1;;;11304:50;11371:18;;47108:40:0::1;11051:344:1::0;47108:40:0::1;46324:4;47183:8;47167:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;47159:88;;;::::0;-1:-1:-1;;;47159:88:0;;15985:2:1;47159:88:0::1;::::0;::::1;15967:21:1::0;16024:2;16004:18;;;15997:30;16063:34;16043:18;;;16036:62;-1:-1:-1;;;16114:18:1;;;16107:35;16159:19;;47159:88:0::1;15783:401:1::0;47159:88:0::1;47283:28;::::0;-1:-1:-1;;47300:10:0::1;6009:2:1::0;6005:15;6001:53;47283:28:0::1;::::0;::::1;5989:66:1::0;47258:12:0::1;::::0;6071::1;;47283:28:0::1;;;;;;;;;;;;47273:39;;;;;;47258:54;;47331:56;47350:18;;47331:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;47370:10:0::1;::::0;;-1:-1:-1;47382:4:0;;-1:-1:-1;47331:18:0::1;:56::i;:::-;47323:83;;;::::0;-1:-1:-1;;;47323:83:0;;18037:2:1;47323:83:0::1;::::0;::::1;18019:21:1::0;18076:2;18056:18;;;18049:30;-1:-1:-1;;;18095:18:1;;;18088:44;18149:18;;47323:83:0::1;17835:338:1::0;47323:83:0::1;47417:35;47443:8;47417:25;:35::i;:::-;47463:29;47471:10;47483:8;47463:7;:29::i;:::-;-1:-1:-1::0;;5160:1:0;6114:7;:22;-1:-1:-1;;46989:511:0:o;48632:340::-;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;48724:17:::1;;48712:8;:29;;48704:77;;;::::0;-1:-1:-1;;;48704:77:0;;14808:2:1;48704:77:0::1;::::0;::::1;14790:21:1::0;14847:2;14827:18;;;14820:30;14886:34;14866:18;;;14859:62;-1:-1:-1;;;14937:18:1;;;14930:32;14979:19;;48704:77:0::1;14606:398:1::0;48704:77:0::1;48813:8;48792:17;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;46324:4:0::1;::::0;-1:-1:-1;48856:8:0;48840:13:::1;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;48832:92;;;;-1:-1:-1::0;;;48832:92:0::1;;;;;;;:::i;:::-;48935:29;48943:10;48955:8;48935:7;:29::i;50590:219::-:0;50679:4;50703:55;50742:5;50749:8;50703:38;:55::i;:::-;:98;;;-1:-1:-1;;;;;;34502:25:0;;;34478:4;34502:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;50762:39;34381:164;12604:201;11768:6;;-1:-1:-1;;;;;11768:6:0;10499:10;11915:23;11907:68;;;;-1:-1:-1;;;11907:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12693:22:0;::::1;12685:73;;;::::0;-1:-1:-1;;;12685:73:0;;9303:2:1;12685:73:0::1;::::0;::::1;9285:21:1::0;9342:2;9322:18;;;9315:30;9381:34;9361:18;;;9354:62;-1:-1:-1;;;9432:18:1;;;9425:36;9478:19;;12685:73:0::1;9101:402:1::0;12685:73:0::1;12769:28;12788:8;12769:18;:28::i;41098:174::-:0;41173:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;41173:29:0;-1:-1:-1;;;;;41173:29:0;;;;;;;;:24;;41227:23;41173:24;41227:14;:23::i;:::-;-1:-1:-1;;;;;41218:46:0;;;;;;;;;;;41098:174;;:::o;37410:348::-;37503:4;37205:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37205:16:0;37520:73;;;;-1:-1:-1;;;37520:73:0;;11960:2:1;37520:73:0;;;11942:21:1;11999:2;11979:18;;;11972:30;12038:34;12018:18;;;12011:62;-1:-1:-1;;;12089:18:1;;;12082:42;12141:19;;37520:73:0;11758:408:1;37520:73:0;37604:13;37620:23;37635:7;37620:14;:23::i;:::-;37604:39;;37673:5;-1:-1:-1;;;;;37662:16:0;:7;-1:-1:-1;;;;;37662:16:0;;:51;;;;37706:7;-1:-1:-1;;;;;37682:31:0;:20;37694:7;37682:11;:20::i;:::-;-1:-1:-1;;;;;37682:31:0;;37662:51;:87;;;;37717:32;37734:5;37741:7;37717:16;:32::i;:::-;37654:96;37410:348;-1:-1:-1;;;;37410:348:0:o;40402:578::-;40561:4;-1:-1:-1;;;;;40534:31:0;:23;40549:7;40534:14;:23::i;:::-;-1:-1:-1;;;;;40534:31:0;;40526:85;;;;-1:-1:-1;;;40526:85:0;;16391:2:1;40526:85:0;;;16373:21:1;16430:2;16410:18;;;16403:30;16469:34;16449:18;;;16442:62;-1:-1:-1;;;16520:18:1;;;16513:39;16569:19;;40526:85:0;16189:405:1;40526:85:0;-1:-1:-1;;;;;40630:16:0;;40622:65;;;;-1:-1:-1;;;40622:65:0;;10067:2:1;40622:65:0;;;10049:21:1;10106:2;10086:18;;;10079:30;10145:34;10125:18;;;10118:62;-1:-1:-1;;;10196:18:1;;;10189:34;10240:19;;40622:65:0;9865:400:1;40622:65:0;40804:29;40821:1;40825:7;40804:8;:29::i;:::-;-1:-1:-1;;;;;40846:15:0;;;;;;:9;:15;;;;;:20;;40865:1;;40846:15;:20;;40865:1;;40846:20;:::i;:::-;;;;-1:-1:-1;;;;;;;40877:13:0;;;;;;:9;:13;;;;;:18;;40894:1;;40877:13;:18;;40894:1;;40877:18;:::i;:::-;;;;-1:-1:-1;;40906:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;40906:21:0;-1:-1:-1;;;;;40906:21:0;;;;;;;;;40945:27;;40906:16;;40945:27;;;;;;;40402:578;;;:::o;15305:317::-;15420:6;15395:21;:31;;15387:73;;;;-1:-1:-1;;;15387:73:0;;11602:2:1;15387:73:0;;;11584:21:1;11641:2;11621:18;;;11614:30;11680:31;11660:18;;;11653:59;11729:18;;15387:73:0;11400:353:1;15387:73:0;15474:12;15492:9;-1:-1:-1;;;;;15492:14:0;15514:6;15492:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15473:52;;;15544:7;15536:78;;;;-1:-1:-1;;;15536:78:0;;10826:2:1;15536:78:0;;;10808:21:1;10865:2;10845:18;;;10838:30;10904:34;10884:18;;;10877:62;10975:28;10955:18;;;10948:56;11021:19;;15536:78:0;10624:422:1;12965:191:0;13058:6;;;-1:-1:-1;;;;;13075:17:0;;;-1:-1:-1;;;;;;13075:17:0;;;;;;;13108:40;;13058:6;;;13075:17;13058:6;;13108:40;;13039:16;;13108:40;13028:128;12965:191;:::o;48351:273::-;48440:1;48429:8;:12;:44;;;;;48457:16;;48445:8;:28;;48429:44;48421:110;;;;-1:-1:-1;;;48421:110:0;;;;;;;:::i;:::-;48577:8;48563:11;;:22;;;;:::i;:::-;48550:9;:35;48542:74;;;;-1:-1:-1;;;48542:74:0;;18740:2:1;48542:74:0;;;18722:21:1;18779:2;18759:18;;;18752:30;18818:28;18798:18;;;18791:56;18864:18;;48542:74:0;18538:350:1;49272:258:0;49346:6;49341:182;49362:8;49358:1;:12;49341:182;;;49392:14;49409:22;:12;7115:14;;7023:114;49409:22;49392:39;;49446:26;49456:4;49462:9;49446;:26::i;:::-;49487:24;:12;7234:19;;7252:1;7234:19;;;7145:127;49487:24;-1:-1:-1;49372:3:0;;;;:::i;:::-;;;;49341:182;;41414:315;41569:8;-1:-1:-1;;;;;41560:17:0;:5;-1:-1:-1;;;;;41560:17:0;;;41552:55;;;;-1:-1:-1;;;41552:55:0;;10472:2:1;41552:55:0;;;10454:21:1;10511:2;10491:18;;;10484:30;10550:27;10530:18;;;10523:55;10595:18;;41552:55:0;10270:349:1;41552:55:0;-1:-1:-1;;;;;41618:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;41618:46:0;;;;;;;;;;41680:41;;7872::1;;;41680::0;;7845:18:1;41680:41:0;;;;;;;41414:315;;;:::o;36488:::-;36645:28;36655:4;36661:2;36665:7;36645:9;:28::i;:::-;36692:48;36715:4;36721:2;36725:7;36734:5;36692:22;:48::i;:::-;36684:111;;;;-1:-1:-1;;;36684:111:0;;;;;;;:::i;49698:100::-;49750:13;49783:7;49776:14;;;;;:::i;7981:723::-;8037:13;8258:10;8254:53;;-1:-1:-1;;8285:10:0;;;;;;;;;;;;-1:-1:-1;;;8285:10:0;;;;;7981:723::o;8254:53::-;8332:5;8317:12;8373:78;8380:9;;8373:78;;8406:8;;;;:::i;:::-;;-1:-1:-1;8429:10:0;;-1:-1:-1;8437:2:0;8429:10;;:::i;:::-;;;8373:78;;;8461:19;8493:6;8483:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8483:17:0;;8461:39;;8511:154;8518:10;;8511:154;;8545:11;8555:1;8545:11;;:::i;:::-;;-1:-1:-1;8614:10:0;8622:2;8614:5;:10;:::i;:::-;8601:24;;:2;:24;:::i;:::-;8588:39;;8571:6;8578;8571:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8571:56:0;;;;;;;;-1:-1:-1;8642:11:0;8651:2;8642:11;;:::i;:::-;;;8511:154;;2132:190;2257:4;2310;2281:25;2294:5;2301:4;2281:12;:25::i;:::-;:33;;2132:190;-1:-1:-1;;;;2132:190:0:o;47508:514::-;47600:1;47589:8;:12;:58;;;;;47617:30;;47605:8;:42;;47589:58;47581:124;;;;-1:-1:-1;;;47581:124:0;;;;;;;:::i;:::-;47759:8;47737:19;;:30;;;;:::i;:::-;47724:9;:43;47716:82;;;;-1:-1:-1;;;47716:82:0;;18740:2:1;47716:82:0;;;18722:21:1;18779:2;18759:18;;;18752:30;18818:28;18798:18;;;18791:56;18864:18;;47716:82:0;18538:350:1;47716:82:0;47857:10;47840:28;;;;:16;:28;;;;;;:39;;47871:8;;47840:39;:::i;:::-;47826:10;47809:28;;;;:16;:28;;;;;:70;;;47930:30;;-1:-1:-1;47898:62:0;47890:124;;;;-1:-1:-1;;;47890:124:0;;12373:2:1;47890:124:0;;;12355:21:1;12412:2;12392:18;;;12385:30;12451:34;12431:18;;;12424:62;-1:-1:-1;;;12502:18:1;;;12495:47;12559:19;;47890:124:0;12171:413:1;45375:565:0;45457:4;45474:22;45538:9;45566:1;45561:123;;;;45703:1;45698:123;;;;45531:290;;45561:123;45627:42;45615:54;;45561:123;;45698;45764:42;45752:54;;45531:290;-1:-1:-1;;;;;;45851:31:0;;;;;;:81;;-1:-1:-1;45895:23:0;;-1:-1:-1;;;45895:23:0;;-1:-1:-1;;;;;7195:32:1;;;45895:23:0;;;7177:51:1;45887:44:0;;;;45895:16;;;;;;7150:18:1;;45895:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45887:44:0;;;45375:565;-1:-1:-1;;;;45375:565:0:o;38100:110::-;38176:26;38186:2;38190:7;38176:26;;;;;;;;;;;;:9;:26::i;42294:799::-;42449:4;-1:-1:-1;;;;;42470:13:0;;14306:20;14354:8;42466:620;;42506:72;;-1:-1:-1;;;42506:72:0;;-1:-1:-1;;;;;42506:36:0;;;;;:72;;10499:10;;42557:4;;42563:7;;42572:5;;42506:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42506:72:0;;;;;;;;-1:-1:-1;;42506:72:0;;;;;;;;;;;;:::i;:::-;;;42502:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42748:13:0;;42744:272;;42791:60;;-1:-1:-1;;;42791:60:0;;;;;;;:::i;42744:272::-;42966:6;42960:13;42951:6;42947:2;42943:15;42936:38;42502:529;-1:-1:-1;;;;;;42629:51:0;-1:-1:-1;;;42629:51:0;;-1:-1:-1;42622:58:0;;42466:620;-1:-1:-1;43070:4:0;42294:799;;;;;;:::o;2684:701::-;2767:7;2810:4;2767:7;2825:523;2849:5;:12;2845:1;:16;2825:523;;;2883:20;2906:5;2912:1;2906:8;;;;;;;;:::i;:::-;;;;;;;2883:31;;2949:12;2933;:28;2929:408;;3086:44;;;;;;6251:19:1;;;6286:12;;;6279:28;;;6323:12;;3086:44:0;;;;;;;;;;;;3076:55;;;;;;3061:70;;2929:408;;;3276:44;;;;;;6251:19:1;;;6286:12;;;6279:28;;;6323:12;;3276:44:0;;;;;;;;;;;;3266:55;;;;;;3251:70;;2929:408;-1:-1:-1;2863:3:0;;;;:::i;:::-;;;;2825:523;;;-1:-1:-1;3365:12:0;2684:701;-1:-1:-1;;;2684:701:0:o;38437:321::-;38567:18;38573:2;38577:7;38567:5;:18::i;:::-;38618:54;38649:1;38653:2;38657:7;38666:5;38618:22;:54::i;:::-;38596:154;;;;-1:-1:-1;;;38596:154:0;;;;;;;:::i;39094:382::-;-1:-1:-1;;;;;39174:16:0;;39166:61;;;;-1:-1:-1;;;39166:61:0;;14447:2:1;39166:61:0;;;14429:21:1;;;14466:18;;;14459:30;14525:34;14505:18;;;14498:62;14577:18;;39166:61:0;14245:356:1;39166:61:0;37181:4;37205:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37205:16:0;:30;39238:58;;;;-1:-1:-1;;;39238:58:0;;9710:2:1;39238:58:0;;;9692:21:1;9749:2;9729:18;;;9722:30;9788;9768:18;;;9761:58;9836:18;;39238:58:0;9508:352:1;39238:58:0;-1:-1:-1;;;;;39367:13:0;;;;;;:9;:13;;;;;:18;;39384:1;;39367:13;:18;;39384:1;;39367:18;:::i;:::-;;;;-1:-1:-1;;39396:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;39396:21:0;-1:-1:-1;;;;;39396:21:0;;;;;;;;39435:33;;39396:16;;;39435:33;;39396:16;;39435:33;39094:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:247::-;709:6;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;817:9;804:23;836:31;861:5;836:31;:::i;902:388::-;970:6;978;1031:2;1019:9;1010:7;1006:23;1002:32;999:52;;;1047:1;1044;1037:12;999:52;1086:9;1073:23;1105:31;1130:5;1105:31;:::i;:::-;1155:5;-1:-1:-1;1212:2:1;1197:18;;1184:32;1225:33;1184:32;1225:33;:::i;:::-;1277:7;1267:17;;;902:388;;;;;:::o;1295:456::-;1372:6;1380;1388;1441:2;1429:9;1420:7;1416:23;1412:32;1409:52;;;1457:1;1454;1447:12;1409:52;1496:9;1483:23;1515:31;1540:5;1515:31;:::i;:::-;1565:5;-1:-1:-1;1622:2:1;1607:18;;1594:32;1635:33;1594:32;1635:33;:::i;:::-;1295:456;;1687:7;;-1:-1:-1;;;1741:2:1;1726:18;;;;1713:32;;1295:456::o;1756:794::-;1851:6;1859;1867;1875;1928:3;1916:9;1907:7;1903:23;1899:33;1896:53;;;1945:1;1942;1935:12;1896:53;1984:9;1971:23;2003:31;2028:5;2003:31;:::i;:::-;2053:5;-1:-1:-1;2110:2:1;2095:18;;2082:32;2123:33;2082:32;2123:33;:::i;:::-;2175:7;-1:-1:-1;2229:2:1;2214:18;;2201:32;;-1:-1:-1;2284:2:1;2269:18;;2256:32;2311:18;2300:30;;2297:50;;;2343:1;2340;2333:12;2297:50;2366:22;;2419:4;2411:13;;2407:27;-1:-1:-1;2397:55:1;;2448:1;2445;2438:12;2397:55;2471:73;2536:7;2531:2;2518:16;2513:2;2509;2505:11;2471:73;:::i;:::-;2461:83;;;1756:794;;;;;;;:::o;2555:416::-;2620:6;2628;2681:2;2669:9;2660:7;2656:23;2652:32;2649:52;;;2697:1;2694;2687:12;2649:52;2736:9;2723:23;2755:31;2780:5;2755:31;:::i;:::-;2805:5;-1:-1:-1;2862:2:1;2847:18;;2834:32;2904:15;;2897:23;2885:36;;2875:64;;2935:1;2932;2925:12;2976:315;3044:6;3052;3105:2;3093:9;3084:7;3080:23;3076:32;3073:52;;;3121:1;3118;3111:12;3073:52;3160:9;3147:23;3179:31;3204:5;3179:31;:::i;:::-;3229:5;3281:2;3266:18;;;;3253:32;;-1:-1:-1;;;2976:315:1:o;3296:180::-;3355:6;3408:2;3396:9;3387:7;3383:23;3379:32;3376:52;;;3424:1;3421;3414:12;3376:52;-1:-1:-1;3447:23:1;;3296:180;-1:-1:-1;3296:180:1:o;3481:245::-;3539:6;3592:2;3580:9;3571:7;3567:23;3563:32;3560:52;;;3608:1;3605;3598:12;3560:52;3647:9;3634:23;3666:30;3690:5;3666:30;:::i;3731:249::-;3800:6;3853:2;3841:9;3832:7;3828:23;3824:32;3821:52;;;3869:1;3866;3859:12;3821:52;3901:9;3895:16;3920:30;3944:5;3920:30;:::i;3985:280::-;4084:6;4137:2;4125:9;4116:7;4112:23;4108:32;4105:52;;;4153:1;4150;4143:12;4105:52;4185:9;4179:16;4204:31;4229:5;4204:31;:::i;4270:450::-;4339:6;4392:2;4380:9;4371:7;4367:23;4363:32;4360:52;;;4408:1;4405;4398:12;4360:52;4448:9;4435:23;4481:18;4473:6;4470:30;4467:50;;;4513:1;4510;4503:12;4467:50;4536:22;;4589:4;4581:13;;4577:27;-1:-1:-1;4567:55:1;;4618:1;4615;4608:12;4567:55;4641:73;4706:7;4701:2;4688:16;4683:2;4679;4675:11;4641:73;:::i;4910:683::-;5005:6;5013;5021;5074:2;5062:9;5053:7;5049:23;5045:32;5042:52;;;5090:1;5087;5080:12;5042:52;5126:9;5113:23;5103:33;;5187:2;5176:9;5172:18;5159:32;5210:18;5251:2;5243:6;5240:14;5237:34;;;5267:1;5264;5257:12;5237:34;5305:6;5294:9;5290:22;5280:32;;5350:7;5343:4;5339:2;5335:13;5331:27;5321:55;;5372:1;5369;5362:12;5321:55;5412:2;5399:16;5438:2;5430:6;5427:14;5424:34;;;5454:1;5451;5444:12;5424:34;5507:7;5502:2;5492:6;5489:1;5485:14;5481:2;5477:23;5473:32;5470:45;5467:65;;;5528:1;5525;5518:12;5467:65;5559:2;5555;5551:11;5541:21;;5581:6;5571:16;;;;;4910:683;;;;;:::o;5598:257::-;5639:3;5677:5;5671:12;5704:6;5699:3;5692:19;5720:63;5776:6;5769:4;5764:3;5760:14;5753:4;5746:5;5742:16;5720:63;:::i;:::-;5837:2;5816:15;-1:-1:-1;;5812:29:1;5803:39;;;;5844:4;5799:50;;5598:257;-1:-1:-1;;5598:257:1:o;6346:470::-;6525:3;6563:6;6557:13;6579:53;6625:6;6620:3;6613:4;6605:6;6601:17;6579:53;:::i;:::-;6695:13;;6654:16;;;;6717:57;6695:13;6654:16;6751:4;6739:17;;6717:57;:::i;:::-;6790:20;;6346:470;-1:-1:-1;;;;6346:470:1:o;7239:488::-;-1:-1:-1;;;;;7508:15:1;;;7490:34;;7560:15;;7555:2;7540:18;;7533:43;7607:2;7592:18;;7585:34;;;7655:3;7650:2;7635:18;;7628:31;;;7433:4;;7676:45;;7701:19;;7693:6;7676:45;:::i;:::-;7668:53;7239:488;-1:-1:-1;;;;;;7239:488:1:o;8106:219::-;8255:2;8244:9;8237:21;8218:4;8275:44;8315:2;8304:9;8300:18;8292:6;8275:44;:::i;8682:414::-;8884:2;8866:21;;;8923:2;8903:18;;;8896:30;8962:34;8957:2;8942:18;;8935:62;-1:-1:-1;;;9028:2:1;9013:18;;9006:48;9086:3;9071:19;;8682:414::o;13835:405::-;14037:2;14019:21;;;14076:2;14056:18;;;14049:30;14115:34;14110:2;14095:18;;14088:62;-1:-1:-1;;;14181:2:1;14166:18;;14159:39;14230:3;14215:19;;13835:405::o;15422:356::-;15624:2;15606:21;;;15643:18;;;15636:30;15702:34;15697:2;15682:18;;15675:62;15769:2;15754:18;;15422:356::o;17417:413::-;17619:2;17601:21;;;17658:2;17638:18;;;17631:30;17697:34;17692:2;17677:18;;17670:62;-1:-1:-1;;;17763:2:1;17748:18;;17741:47;17820:3;17805:19;;17417:413::o;18893:417::-;19095:2;19077:21;;;19134:2;19114:18;;;19107:30;19173:34;19168:2;19153:18;;19146:62;-1:-1:-1;;;19239:2:1;19224:18;;19217:51;19300:3;19285:19;;18893:417::o;19497:128::-;19537:3;19568:1;19564:6;19561:1;19558:13;19555:39;;;19574:18;;:::i;:::-;-1:-1:-1;19610:9:1;;19497:128::o;19630:120::-;19670:1;19696;19686:35;;19701:18;;:::i;:::-;-1:-1:-1;19735:9:1;;19630:120::o;19755:168::-;19795:7;19861:1;19857;19853:6;19849:14;19846:1;19843:21;19838:1;19831:9;19824:17;19820:45;19817:71;;;19868:18;;:::i;:::-;-1:-1:-1;19908:9:1;;19755:168::o;19928:125::-;19968:4;19996:1;19993;19990:8;19987:34;;;20001:18;;:::i;:::-;-1:-1:-1;20038:9:1;;19928:125::o;20058:258::-;20130:1;20140:113;20154:6;20151:1;20148:13;20140:113;;;20230:11;;;20224:18;20211:11;;;20204:39;20176:2;20169:10;20140:113;;;20271:6;20268:1;20265:13;20262:48;;;-1:-1:-1;;20306:1:1;20288:16;;20281:27;20058:258::o;20321:380::-;20400:1;20396:12;;;;20443;;;20464:61;;20518:4;20510:6;20506:17;20496:27;;20464:61;20571:2;20563:6;20560:14;20540:18;20537:38;20534:161;;;20617:10;20612:3;20608:20;20605:1;20598:31;20652:4;20649:1;20642:15;20680:4;20677:1;20670:15;20534:161;;20321:380;;;:::o;20706:135::-;20745:3;-1:-1:-1;;20766:17:1;;20763:43;;;20786:18;;:::i;:::-;-1:-1:-1;20833:1:1;20822:13;;20706:135::o;20846:112::-;20878:1;20904;20894:35;;20909:18;;:::i;:::-;-1:-1:-1;20943:9:1;;20846:112::o;20963:127::-;21024:10;21019:3;21015:20;21012:1;21005:31;21055:4;21052:1;21045:15;21079:4;21076:1;21069:15;21095:127;21156:10;21151:3;21147:20;21144:1;21137:31;21187:4;21184:1;21177:15;21211:4;21208:1;21201:15;21227:127;21288:10;21283:3;21279:20;21276:1;21269:31;21319:4;21316:1;21309:15;21343:4;21340:1;21333:15;21359:127;21420:10;21415:3;21411:20;21408:1;21401:31;21451:4;21448:1;21441:15;21475:4;21472:1;21465:15;21491:131;-1:-1:-1;;;;;21566:31:1;;21556:42;;21546:70;;21612:1;21609;21602:12;21627:131;-1:-1:-1;;;;;;21701:32:1;;21691:43;;21681:71;;21748:1;21745;21738:12

Swarm Source

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