ETH Price: $2,835.75 (-7.14%)
Gas: 10 Gwei

Token

Pixelmind Collector's Pass (PX PASS)
 

Overview

Max Total Supply

237 PX PASS

Holders

234

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
outofbound.eth
Balance
1 PX PASS
0x8a6961e70f15c308b15dd84c9cc319da8fbb6fdd
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:
CollectorsPassG0

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-31
*/

// File: @openzeppelin/contracts/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) {
        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));
            }
        }

        // Check if the computed hash (root) is equal to the provided root
        return computedHash == root;
    }
}

// File: @openzeppelin/contracts/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



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



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



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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/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



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



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



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



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/IERC721Enumerable.sol


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

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/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



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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //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 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: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


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

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

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


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

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: github/tokenly/330ai-contracts/contracts/CollectorPassG0.sol


pragma solidity ^0.8.2;






contract CollectorsPassG0 is ERC721URIStorage, ERC721Enumerable, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    string public baseTokenURI;
    uint256 public immutable maxSupply;
    bytes32 public immutable root;

    constructor(
        string memory baseURI,
        uint256 maxTokens,
        bytes32 merkleroot
    ) ERC721("Pixelmind Collector's Pass", "PX PASS") {
        baseTokenURI = baseURI;
        maxSupply = maxTokens;
        root = merkleroot;
        _tokenIds.increment();
    }

    function setBaseURI(string memory baseURI) external onlyOwner {
        baseTokenURI = baseURI;
    }

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

    function tokenURI(uint256 tokenId) public view virtual override(ERC721, ERC721URIStorage) returns (string memory) {
        return super.tokenURI(tokenId);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    modifier canRedeem(bytes32[] calldata proof) {
        require(_verify(_leaf(msg.sender), proof), "Invalid merkle proof");
        require(ERC721.balanceOf(msg.sender) < 1, "User already has a pass");
        require(totalSupply() < maxSupply, "There are no more passes to redeem");
        _;
    }

    function redeem(bytes32[] calldata proof) external canRedeem(proof) {
        uint256 tokenId = _tokenIds.current();
        _tokenIds.increment();
        _safeMint(msg.sender, tokenId);
    }

    function checkRedeem(bytes32[] calldata proof) external view canRedeem(proof) returns (bool) {
        return true;
    }

    function _leaf(address account) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(account));
    }

    function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns (bool) {
        return MerkleProof.verify(proof, root, leaf);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"uint256","name":"maxTokens","type":"uint256"},{"internalType":"bytes32","name":"merkleroot","type":"bytes32"}],"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"checkRedeem","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040523480156200001157600080fd5b506040516200461a3803806200461a833981810160405281019062000037919062000380565b6040518060400160405280601a81526020017f506978656c6d696e6420436f6c6c6563746f72277320506173730000000000008152506040518060400160405280600781526020017f50582050415353000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000224565b508060019080519060200190620000d492919062000224565b505050620000f7620000eb6200014060201b60201c565b6200014860201b60201c565b82600d90805190602001906200010f92919062000224565b5081608081815250508060a0818152505062000137600c6200020e60201b6200132a1760201c565b505050620005c7565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b8280546200023290620004a4565b90600052602060002090601f016020900481019282620002565760008555620002a2565b82601f106200027157805160ff1916838001178555620002a2565b82800160010185558215620002a2579182015b82811115620002a157825182559160200191906001019062000284565b5b509050620002b19190620002b5565b5090565b5b80821115620002d0576000816000905550600101620002b6565b5090565b6000620002eb620002e58462000424565b620003fb565b9050828152602081018484840111156200030a576200030962000573565b5b620003178482856200046e565b509392505050565b600081519050620003308162000593565b92915050565b600082601f8301126200034e576200034d6200056e565b5b815162000360848260208601620002d4565b91505092915050565b6000815190506200037a81620005ad565b92915050565b6000806000606084860312156200039c576200039b6200057d565b5b600084015167ffffffffffffffff811115620003bd57620003bc62000578565b5b620003cb8682870162000336565b9350506020620003de8682870162000369565b9250506040620003f1868287016200031f565b9150509250925092565b6000620004076200041a565b9050620004158282620004da565b919050565b6000604051905090565b600067ffffffffffffffff8211156200044257620004416200053f565b5b6200044d8262000582565b9050602081019050919050565b6000819050919050565b6000819050919050565b60005b838110156200048e57808201518184015260208101905062000471565b838111156200049e576000848401525b50505050565b60006002820490506001821680620004bd57607f821691505b60208210811415620004d457620004d362000510565b5b50919050565b620004e58262000582565b810181811067ffffffffffffffff821117156200050757620005066200053f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200059e816200045a565b8114620005aa57600080fd5b50565b620005b88162000464565b8114620005c457600080fd5b50565b60805160a0516140186200060260003960008181611210015261151f01526000818161080801528181610aff015261115801526140186000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636352211e116100de578063b88d4fde11610097578063d5abeb0111610071578063d5abeb011461045c578063e985e9c51461047a578063ebf0c717146104aa578063f2fde38b146104c857610173565b8063b88d4fde146103f2578063c87b56dd1461040e578063d547cfb71461043e57610173565b80636352211e1461033057806370a0823114610360578063715018a6146103905780638da5cb5b1461039a57806395d89b41146103b8578063a22cb465146103d657610173565b806323b872dd1161013057806323b872dd146102605780632f745c591461027c57806342842e0e146102ac5780634f6ccce7146102c8578063524c2a04146102f857806355f804b31461031457610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f65780630eb124551461021257806318160ddd14610242575b600080fd5b610192600480360381019061018d9190612c16565b6104e4565b60405161019f91906131c7565b60405180910390f35b6101b06104f6565b6040516101bd91906131fd565b60405180910390f35b6101e060048036038101906101db9190612cb9565b610588565b6040516101ed9190613160565b60405180910390f35b610210600480360381019061020b9190612b89565b61060d565b005b61022c60048036038101906102279190612bc9565b610725565b60405161023991906131c7565b60405180910390f35b61024a61087b565b60405161025791906134df565b60405180910390f35b61027a60048036038101906102759190612a73565b610888565b005b61029660048036038101906102919190612b89565b6108e8565b6040516102a391906134df565b60405180910390f35b6102c660048036038101906102c19190612a73565b61098d565b005b6102e260048036038101906102dd9190612cb9565b6109ad565b6040516102ef91906134df565b60405180910390f35b610312600480360381019061030d9190612bc9565b610a1e565b005b61032e60048036038101906103299190612c70565b610b8f565b005b61034a60048036038101906103459190612cb9565b610c25565b6040516103579190613160565b60405180910390f35b61037a60048036038101906103759190612a06565b610cd7565b60405161038791906134df565b60405180910390f35b610398610d8f565b005b6103a2610e17565b6040516103af9190613160565b60405180910390f35b6103c0610e41565b6040516103cd91906131fd565b60405180910390f35b6103f060048036038101906103eb9190612b49565b610ed3565b005b61040c60048036038101906104079190612ac6565b611054565b005b61042860048036038101906104239190612cb9565b6110b6565b60405161043591906131fd565b60405180910390f35b6104466110c8565b60405161045391906131fd565b60405180910390f35b610464611156565b60405161047191906134df565b60405180910390f35b610494600480360381019061048f9190612a33565b61117a565b6040516104a191906131c7565b60405180910390f35b6104b261120e565b6040516104bf91906131e2565b60405180910390f35b6104e260048036038101906104dd9190612a06565b611232565b005b60006104ef82611340565b9050919050565b6060600080546105059061373f565b80601f01602080910402602001604051908101604052809291908181526020018280546105319061373f565b801561057e5780601f106105535761010080835404028352916020019161057e565b820191906000526020600020905b81548152906001019060200180831161056157829003601f168201915b5050505050905090565b6000610593826113ba565b6105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c99061339f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061061882610c25565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106809061343f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106a8611426565b73ffffffffffffffffffffffffffffffffffffffff1614806106d757506106d6816106d1611426565b61117a565b5b610716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070d906132ff565b60405180910390fd5b610720838361142e565b505050565b6000828261077c610735336114e7565b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611517565b6107bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b2906133df565b60405180910390fd5b60016107c633610cd7565b10610806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fd906134bf565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061082f61087b565b1061086f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108669061349f565b60405180910390fd5b60019250505092915050565b6000600980549050905090565b610899610893611426565b8261154c565b6108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf9061345f565b60405180910390fd5b6108e383838361162a565b505050565b60006108f383610cd7565b8210610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092b9061321f565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6109a883838360405180602001604052806000815250611054565b505050565b60006109b761087b565b82106109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef9061347f565b60405180910390fd5b60098281548110610a0c57610a0b613906565b5b90600052602060002001549050919050565b8181610a73610a2c336114e7565b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611517565b610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906133df565b60405180910390fd5b6001610abd33610cd7565b10610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af4906134bf565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000610b2661087b565b10610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d9061349f565b60405180910390fd5b6000610b72600c611886565b9050610b7e600c61132a565b610b883382611894565b5050505050565b610b97611426565b73ffffffffffffffffffffffffffffffffffffffff16610bb5610e17565b73ffffffffffffffffffffffffffffffffffffffff1614610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c02906133bf565b60405180910390fd5b80600d9080519060200190610c219291906127c4565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc59061333f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f9061331f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d97611426565b73ffffffffffffffffffffffffffffffffffffffff16610db5610e17565b73ffffffffffffffffffffffffffffffffffffffff1614610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e02906133bf565b60405180910390fd5b610e1560006118b2565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e509061373f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c9061373f565b8015610ec95780601f10610e9e57610100808354040283529160200191610ec9565b820191906000526020600020905b815481529060010190602001808311610eac57829003601f168201915b5050505050905090565b610edb611426565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f40906132bf565b60405180910390fd5b8060056000610f56611426565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611003611426565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161104891906131c7565b60405180910390a35050565b61106561105f611426565b8361154c565b6110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b9061345f565b60405180910390fd5b6110b084848484611978565b50505050565b60606110c1826119d4565b9050919050565b600d80546110d59061373f565b80601f01602080910402602001604051908101604052809291908181526020018280546111019061373f565b801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61123a611426565b73ffffffffffffffffffffffffffffffffffffffff16611258610e17565b73ffffffffffffffffffffffffffffffffffffffff16146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a5906133bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113159061325f565b60405180910390fd5b611327816118b2565b50565b6001816000016000828254019250508190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806113b357506113b282611b26565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166114a183610c25565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000816040516020016114fa91906130f5565b604051602081830303815290604052805190602001209050919050565b6000611544827f000000000000000000000000000000000000000000000000000000000000000085611c08565b905092915050565b6000611557826113ba565b611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906132df565b60405180910390fd5b60006115a183610c25565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061161057508373ffffffffffffffffffffffffffffffffffffffff166115f884610588565b73ffffffffffffffffffffffffffffffffffffffff16145b806116215750611620818561117a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661164a82610c25565b73ffffffffffffffffffffffffffffffffffffffff16146116a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611697906133ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117079061329f565b60405180910390fd5b61171b838383611cbe565b61172660008261142e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611776919061364b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117cd91906135c4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b6118ae828260405180602001604052806000815250611cce565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61198384848461162a565b61198f84848484611d29565b6119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061323f565b60405180910390fd5b50505050565b60606119df826113ba565b611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a159061337f565b60405180910390fd5b6000600660008481526020019081526020016000208054611a3e9061373f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6a9061373f565b8015611ab75780601f10611a8c57610100808354040283529160200191611ab7565b820191906000526020600020905b815481529060010190602001808311611a9a57829003601f168201915b505050505090506000611ac8611ec0565b9050600081511415611ade578192505050611b21565b600082511115611b13578082604051602001611afb92919061313c565b60405160208183030381529060405292505050611b21565b611b1c84611f52565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bf157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c015750611c0082611ff9565b5b9050919050565b60008082905060005b8551811015611cb0576000868281518110611c2f57611c2e613906565b5b60200260200101519050808311611c70578281604051602001611c53929190613110565b604051602081830303815290604052805190602001209250611c9c565b8083604051602001611c83929190613110565b6040516020818303038152906040528051906020012092505b508080611ca8906137a2565b915050611c11565b508381149150509392505050565b611cc9838383612063565b505050565b611cd88383612177565b611ce56000848484611d29565b611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b9061323f565b60405180910390fd5b505050565b6000611d4a8473ffffffffffffffffffffffffffffffffffffffff16612345565b15611eb3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d73611426565b8786866040518563ffffffff1660e01b8152600401611d95949392919061317b565b602060405180830381600087803b158015611daf57600080fd5b505af1925050508015611de057506040513d601f19601f82011682018060405250810190611ddd9190612c43565b60015b611e63573d8060008114611e10576040519150601f19603f3d011682016040523d82523d6000602084013e611e15565b606091505b50600081511415611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e529061323f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611eb8565b600190505b949350505050565b6060600d8054611ecf9061373f565b80601f0160208091040260200160405190810160405280929190818152602001828054611efb9061373f565b8015611f485780601f10611f1d57610100808354040283529160200191611f48565b820191906000526020600020905b815481529060010190602001808311611f2b57829003601f168201915b5050505050905090565b6060611f5d826113ba565b611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061341f565b60405180910390fd5b6000611fa6611ec0565b90506000815111611fc65760405180602001604052806000815250611ff1565b80611fd084612358565b604051602001611fe192919061313c565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61206e8383836124b9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b1576120ac816124be565b6120f0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120ef576120ee8382612507565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121335761212e81612674565b612172565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612171576121708282612745565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de9061335f565b60405180910390fd5b6121f0816113ba565b15612230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122279061327f565b60405180910390fd5b61223c60008383611cbe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228c91906135c4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606060008214156123a0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b4565b600082905060005b600082146123d25780806123bb906137a2565b915050600a826123cb919061361a565b91506123a8565b60008167ffffffffffffffff8111156123ee576123ed613935565b5b6040519080825280601f01601f1916602001820160405280156124205781602001600182028036833780820191505090505b5090505b600085146124ad57600182612439919061364b565b9150600a856124489190613819565b603061245491906135c4565b60f81b81838151811061246a57612469613906565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124a6919061361a565b9450612424565b8093505050505b919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161251484610cd7565b61251e919061364b565b9050600060086000848152602001908152602001600020549050818114612603576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612688919061364b565b90506000600a60008481526020019081526020016000205490506000600983815481106126b8576126b7613906565b5b9060005260206000200154905080600983815481106126da576126d9613906565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612729576127286138d7565b5b6001900381819060005260206000200160009055905550505050565b600061275083610cd7565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b8280546127d09061373f565b90600052602060002090601f0160209004810192826127f25760008555612839565b82601f1061280b57805160ff1916838001178555612839565b82800160010185558215612839579182015b8281111561283857825182559160200191906001019061281d565b5b509050612846919061284a565b5090565b5b8082111561286357600081600090555060010161284b565b5090565b600061287a6128758461351f565b6134fa565b90508281526020810184848401111561289657612895613973565b5b6128a18482856136fd565b509392505050565b60006128bc6128b784613550565b6134fa565b9050828152602081018484840111156128d8576128d7613973565b5b6128e38482856136fd565b509392505050565b6000813590506128fa81613f86565b92915050565b60008083601f84011261291657612915613969565b5b8235905067ffffffffffffffff81111561293357612932613964565b5b60208301915083602082028301111561294f5761294e61396e565b5b9250929050565b60008135905061296581613f9d565b92915050565b60008135905061297a81613fb4565b92915050565b60008151905061298f81613fb4565b92915050565b600082601f8301126129aa576129a9613969565b5b81356129ba848260208601612867565b91505092915050565b600082601f8301126129d8576129d7613969565b5b81356129e88482602086016128a9565b91505092915050565b600081359050612a0081613fcb565b92915050565b600060208284031215612a1c57612a1b61397d565b5b6000612a2a848285016128eb565b91505092915050565b60008060408385031215612a4a57612a4961397d565b5b6000612a58858286016128eb565b9250506020612a69858286016128eb565b9150509250929050565b600080600060608486031215612a8c57612a8b61397d565b5b6000612a9a868287016128eb565b9350506020612aab868287016128eb565b9250506040612abc868287016129f1565b9150509250925092565b60008060008060808587031215612ae057612adf61397d565b5b6000612aee878288016128eb565b9450506020612aff878288016128eb565b9350506040612b10878288016129f1565b925050606085013567ffffffffffffffff811115612b3157612b30613978565b5b612b3d87828801612995565b91505092959194509250565b60008060408385031215612b6057612b5f61397d565b5b6000612b6e858286016128eb565b9250506020612b7f85828601612956565b9150509250929050565b60008060408385031215612ba057612b9f61397d565b5b6000612bae858286016128eb565b9250506020612bbf858286016129f1565b9150509250929050565b60008060208385031215612be057612bdf61397d565b5b600083013567ffffffffffffffff811115612bfe57612bfd613978565b5b612c0a85828601612900565b92509250509250929050565b600060208284031215612c2c57612c2b61397d565b5b6000612c3a8482850161296b565b91505092915050565b600060208284031215612c5957612c5861397d565b5b6000612c6784828501612980565b91505092915050565b600060208284031215612c8657612c8561397d565b5b600082013567ffffffffffffffff811115612ca457612ca3613978565b5b612cb0848285016129c3565b91505092915050565b600060208284031215612ccf57612cce61397d565b5b6000612cdd848285016129f1565b91505092915050565b612cef8161367f565b82525050565b612d06612d018261367f565b6137eb565b82525050565b612d1581613691565b82525050565b612d248161369d565b82525050565b612d3b612d368261369d565b6137fd565b82525050565b6000612d4c82613581565b612d568185613597565b9350612d6681856020860161370c565b612d6f81613982565b840191505092915050565b6000612d858261358c565b612d8f81856135a8565b9350612d9f81856020860161370c565b612da881613982565b840191505092915050565b6000612dbe8261358c565b612dc881856135b9565b9350612dd881856020860161370c565b80840191505092915050565b6000612df1602b836135a8565b9150612dfc826139a0565b604082019050919050565b6000612e146032836135a8565b9150612e1f826139ef565b604082019050919050565b6000612e376026836135a8565b9150612e4282613a3e565b604082019050919050565b6000612e5a601c836135a8565b9150612e6582613a8d565b602082019050919050565b6000612e7d6024836135a8565b9150612e8882613ab6565b604082019050919050565b6000612ea06019836135a8565b9150612eab82613b05565b602082019050919050565b6000612ec3602c836135a8565b9150612ece82613b2e565b604082019050919050565b6000612ee66038836135a8565b9150612ef182613b7d565b604082019050919050565b6000612f09602a836135a8565b9150612f1482613bcc565b604082019050919050565b6000612f2c6029836135a8565b9150612f3782613c1b565b604082019050919050565b6000612f4f6020836135a8565b9150612f5a82613c6a565b602082019050919050565b6000612f726031836135a8565b9150612f7d82613c93565b604082019050919050565b6000612f95602c836135a8565b9150612fa082613ce2565b604082019050919050565b6000612fb86020836135a8565b9150612fc382613d31565b602082019050919050565b6000612fdb6014836135a8565b9150612fe682613d5a565b602082019050919050565b6000612ffe6029836135a8565b915061300982613d83565b604082019050919050565b6000613021602f836135a8565b915061302c82613dd2565b604082019050919050565b60006130446021836135a8565b915061304f82613e21565b604082019050919050565b60006130676031836135a8565b915061307282613e70565b604082019050919050565b600061308a602c836135a8565b915061309582613ebf565b604082019050919050565b60006130ad6022836135a8565b91506130b882613f0e565b604082019050919050565b60006130d06017836135a8565b91506130db82613f5d565b602082019050919050565b6130ef816136f3565b82525050565b60006131018284612cf5565b60148201915081905092915050565b600061311c8285612d2a565b60208201915061312c8284612d2a565b6020820191508190509392505050565b60006131488285612db3565b91506131548284612db3565b91508190509392505050565b60006020820190506131756000830184612ce6565b92915050565b60006080820190506131906000830187612ce6565b61319d6020830186612ce6565b6131aa60408301856130e6565b81810360608301526131bc8184612d41565b905095945050505050565b60006020820190506131dc6000830184612d0c565b92915050565b60006020820190506131f76000830184612d1b565b92915050565b600060208201905081810360008301526132178184612d7a565b905092915050565b6000602082019050818103600083015261323881612de4565b9050919050565b6000602082019050818103600083015261325881612e07565b9050919050565b6000602082019050818103600083015261327881612e2a565b9050919050565b6000602082019050818103600083015261329881612e4d565b9050919050565b600060208201905081810360008301526132b881612e70565b9050919050565b600060208201905081810360008301526132d881612e93565b9050919050565b600060208201905081810360008301526132f881612eb6565b9050919050565b6000602082019050818103600083015261331881612ed9565b9050919050565b6000602082019050818103600083015261333881612efc565b9050919050565b6000602082019050818103600083015261335881612f1f565b9050919050565b6000602082019050818103600083015261337881612f42565b9050919050565b6000602082019050818103600083015261339881612f65565b9050919050565b600060208201905081810360008301526133b881612f88565b9050919050565b600060208201905081810360008301526133d881612fab565b9050919050565b600060208201905081810360008301526133f881612fce565b9050919050565b6000602082019050818103600083015261341881612ff1565b9050919050565b6000602082019050818103600083015261343881613014565b9050919050565b6000602082019050818103600083015261345881613037565b9050919050565b600060208201905081810360008301526134788161305a565b9050919050565b600060208201905081810360008301526134988161307d565b9050919050565b600060208201905081810360008301526134b8816130a0565b9050919050565b600060208201905081810360008301526134d8816130c3565b9050919050565b60006020820190506134f460008301846130e6565b92915050565b6000613504613515565b90506135108282613771565b919050565b6000604051905090565b600067ffffffffffffffff82111561353a57613539613935565b5b61354382613982565b9050602081019050919050565b600067ffffffffffffffff82111561356b5761356a613935565b5b61357482613982565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135cf826136f3565b91506135da836136f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561360f5761360e61384a565b5b828201905092915050565b6000613625826136f3565b9150613630836136f3565b9250826136405761363f613879565b5b828204905092915050565b6000613656826136f3565b9150613661836136f3565b9250828210156136745761367361384a565b5b828203905092915050565b600061368a826136d3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561372a57808201518184015260208101905061370f565b83811115613739576000848401525b50505050565b6000600282049050600182168061375757607f821691505b6020821081141561376b5761376a6138a8565b5b50919050565b61377a82613982565b810181811067ffffffffffffffff8211171561379957613798613935565b5b80604052505050565b60006137ad826136f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137e0576137df61384a565b5b600182019050919050565b60006137f682613807565b9050919050565b6000819050919050565b600061381282613993565b9050919050565b6000613824826136f3565b915061382f836136f3565b92508261383f5761383e613879565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c6964206d65726b6c652070726f6f66000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f206d6f72652070617373657320746f207265646560008201527f656d000000000000000000000000000000000000000000000000000000000000602082015250565b7f5573657220616c72656164792068617320612070617373000000000000000000600082015250565b613f8f8161367f565b8114613f9a57600080fd5b50565b613fa681613691565b8114613fb157600080fd5b50565b613fbd816136a7565b8114613fc857600080fd5b50565b613fd4816136f3565b8114613fdf57600080fd5b5056fea26469706673582212208da1b8b43b27d24c6003c195911b32a3c2269d6ba736abcaa4246e2f539177f364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a47acc59b8a0c1dd9b02857990b2d9eaf74f7eb2b0811ab8ea55772fd68a780aa8000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f6261636b656e642e706978656c6d696e642e61692f6170692f76312f6d657461646174612f436f6c6c6563746f72735061737347302f0000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c80636352211e116100de578063b88d4fde11610097578063d5abeb0111610071578063d5abeb011461045c578063e985e9c51461047a578063ebf0c717146104aa578063f2fde38b146104c857610173565b8063b88d4fde146103f2578063c87b56dd1461040e578063d547cfb71461043e57610173565b80636352211e1461033057806370a0823114610360578063715018a6146103905780638da5cb5b1461039a57806395d89b41146103b8578063a22cb465146103d657610173565b806323b872dd1161013057806323b872dd146102605780632f745c591461027c57806342842e0e146102ac5780634f6ccce7146102c8578063524c2a04146102f857806355f804b31461031457610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f65780630eb124551461021257806318160ddd14610242575b600080fd5b610192600480360381019061018d9190612c16565b6104e4565b60405161019f91906131c7565b60405180910390f35b6101b06104f6565b6040516101bd91906131fd565b60405180910390f35b6101e060048036038101906101db9190612cb9565b610588565b6040516101ed9190613160565b60405180910390f35b610210600480360381019061020b9190612b89565b61060d565b005b61022c60048036038101906102279190612bc9565b610725565b60405161023991906131c7565b60405180910390f35b61024a61087b565b60405161025791906134df565b60405180910390f35b61027a60048036038101906102759190612a73565b610888565b005b61029660048036038101906102919190612b89565b6108e8565b6040516102a391906134df565b60405180910390f35b6102c660048036038101906102c19190612a73565b61098d565b005b6102e260048036038101906102dd9190612cb9565b6109ad565b6040516102ef91906134df565b60405180910390f35b610312600480360381019061030d9190612bc9565b610a1e565b005b61032e60048036038101906103299190612c70565b610b8f565b005b61034a60048036038101906103459190612cb9565b610c25565b6040516103579190613160565b60405180910390f35b61037a60048036038101906103759190612a06565b610cd7565b60405161038791906134df565b60405180910390f35b610398610d8f565b005b6103a2610e17565b6040516103af9190613160565b60405180910390f35b6103c0610e41565b6040516103cd91906131fd565b60405180910390f35b6103f060048036038101906103eb9190612b49565b610ed3565b005b61040c60048036038101906104079190612ac6565b611054565b005b61042860048036038101906104239190612cb9565b6110b6565b60405161043591906131fd565b60405180910390f35b6104466110c8565b60405161045391906131fd565b60405180910390f35b610464611156565b60405161047191906134df565b60405180910390f35b610494600480360381019061048f9190612a33565b61117a565b6040516104a191906131c7565b60405180910390f35b6104b261120e565b6040516104bf91906131e2565b60405180910390f35b6104e260048036038101906104dd9190612a06565b611232565b005b60006104ef82611340565b9050919050565b6060600080546105059061373f565b80601f01602080910402602001604051908101604052809291908181526020018280546105319061373f565b801561057e5780601f106105535761010080835404028352916020019161057e565b820191906000526020600020905b81548152906001019060200180831161056157829003601f168201915b5050505050905090565b6000610593826113ba565b6105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c99061339f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061061882610c25565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106809061343f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106a8611426565b73ffffffffffffffffffffffffffffffffffffffff1614806106d757506106d6816106d1611426565b61117a565b5b610716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070d906132ff565b60405180910390fd5b610720838361142e565b505050565b6000828261077c610735336114e7565b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611517565b6107bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b2906133df565b60405180910390fd5b60016107c633610cd7565b10610806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fd906134bf565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000001a461082f61087b565b1061086f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108669061349f565b60405180910390fd5b60019250505092915050565b6000600980549050905090565b610899610893611426565b8261154c565b6108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf9061345f565b60405180910390fd5b6108e383838361162a565b505050565b60006108f383610cd7565b8210610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092b9061321f565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6109a883838360405180602001604052806000815250611054565b505050565b60006109b761087b565b82106109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef9061347f565b60405180910390fd5b60098281548110610a0c57610a0b613906565b5b90600052602060002001549050919050565b8181610a73610a2c336114e7565b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611517565b610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906133df565b60405180910390fd5b6001610abd33610cd7565b10610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af4906134bf565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000001a4610b2661087b565b10610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d9061349f565b60405180910390fd5b6000610b72600c611886565b9050610b7e600c61132a565b610b883382611894565b5050505050565b610b97611426565b73ffffffffffffffffffffffffffffffffffffffff16610bb5610e17565b73ffffffffffffffffffffffffffffffffffffffff1614610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c02906133bf565b60405180910390fd5b80600d9080519060200190610c219291906127c4565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc59061333f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f9061331f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d97611426565b73ffffffffffffffffffffffffffffffffffffffff16610db5610e17565b73ffffffffffffffffffffffffffffffffffffffff1614610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e02906133bf565b60405180910390fd5b610e1560006118b2565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e509061373f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c9061373f565b8015610ec95780601f10610e9e57610100808354040283529160200191610ec9565b820191906000526020600020905b815481529060010190602001808311610eac57829003601f168201915b5050505050905090565b610edb611426565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f40906132bf565b60405180910390fd5b8060056000610f56611426565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611003611426565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161104891906131c7565b60405180910390a35050565b61106561105f611426565b8361154c565b6110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b9061345f565b60405180910390fd5b6110b084848484611978565b50505050565b60606110c1826119d4565b9050919050565b600d80546110d59061373f565b80601f01602080910402602001604051908101604052809291908181526020018280546111019061373f565b801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b505050505081565b7f00000000000000000000000000000000000000000000000000000000000001a481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f7acc59b8a0c1dd9b02857990b2d9eaf74f7eb2b0811ab8ea55772fd68a780aa881565b61123a611426565b73ffffffffffffffffffffffffffffffffffffffff16611258610e17565b73ffffffffffffffffffffffffffffffffffffffff16146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a5906133bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113159061325f565b60405180910390fd5b611327816118b2565b50565b6001816000016000828254019250508190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806113b357506113b282611b26565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166114a183610c25565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000816040516020016114fa91906130f5565b604051602081830303815290604052805190602001209050919050565b6000611544827f7acc59b8a0c1dd9b02857990b2d9eaf74f7eb2b0811ab8ea55772fd68a780aa885611c08565b905092915050565b6000611557826113ba565b611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906132df565b60405180910390fd5b60006115a183610c25565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061161057508373ffffffffffffffffffffffffffffffffffffffff166115f884610588565b73ffffffffffffffffffffffffffffffffffffffff16145b806116215750611620818561117a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661164a82610c25565b73ffffffffffffffffffffffffffffffffffffffff16146116a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611697906133ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117079061329f565b60405180910390fd5b61171b838383611cbe565b61172660008261142e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611776919061364b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117cd91906135c4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b6118ae828260405180602001604052806000815250611cce565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61198384848461162a565b61198f84848484611d29565b6119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061323f565b60405180910390fd5b50505050565b60606119df826113ba565b611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a159061337f565b60405180910390fd5b6000600660008481526020019081526020016000208054611a3e9061373f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6a9061373f565b8015611ab75780601f10611a8c57610100808354040283529160200191611ab7565b820191906000526020600020905b815481529060010190602001808311611a9a57829003601f168201915b505050505090506000611ac8611ec0565b9050600081511415611ade578192505050611b21565b600082511115611b13578082604051602001611afb92919061313c565b60405160208183030381529060405292505050611b21565b611b1c84611f52565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bf157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c015750611c0082611ff9565b5b9050919050565b60008082905060005b8551811015611cb0576000868281518110611c2f57611c2e613906565b5b60200260200101519050808311611c70578281604051602001611c53929190613110565b604051602081830303815290604052805190602001209250611c9c565b8083604051602001611c83929190613110565b6040516020818303038152906040528051906020012092505b508080611ca8906137a2565b915050611c11565b508381149150509392505050565b611cc9838383612063565b505050565b611cd88383612177565b611ce56000848484611d29565b611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b9061323f565b60405180910390fd5b505050565b6000611d4a8473ffffffffffffffffffffffffffffffffffffffff16612345565b15611eb3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d73611426565b8786866040518563ffffffff1660e01b8152600401611d95949392919061317b565b602060405180830381600087803b158015611daf57600080fd5b505af1925050508015611de057506040513d601f19601f82011682018060405250810190611ddd9190612c43565b60015b611e63573d8060008114611e10576040519150601f19603f3d011682016040523d82523d6000602084013e611e15565b606091505b50600081511415611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e529061323f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611eb8565b600190505b949350505050565b6060600d8054611ecf9061373f565b80601f0160208091040260200160405190810160405280929190818152602001828054611efb9061373f565b8015611f485780601f10611f1d57610100808354040283529160200191611f48565b820191906000526020600020905b815481529060010190602001808311611f2b57829003601f168201915b5050505050905090565b6060611f5d826113ba565b611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061341f565b60405180910390fd5b6000611fa6611ec0565b90506000815111611fc65760405180602001604052806000815250611ff1565b80611fd084612358565b604051602001611fe192919061313c565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61206e8383836124b9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b1576120ac816124be565b6120f0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120ef576120ee8382612507565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121335761212e81612674565b612172565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612171576121708282612745565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de9061335f565b60405180910390fd5b6121f0816113ba565b15612230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122279061327f565b60405180910390fd5b61223c60008383611cbe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228c91906135c4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606060008214156123a0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b4565b600082905060005b600082146123d25780806123bb906137a2565b915050600a826123cb919061361a565b91506123a8565b60008167ffffffffffffffff8111156123ee576123ed613935565b5b6040519080825280601f01601f1916602001820160405280156124205781602001600182028036833780820191505090505b5090505b600085146124ad57600182612439919061364b565b9150600a856124489190613819565b603061245491906135c4565b60f81b81838151811061246a57612469613906565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124a6919061361a565b9450612424565b8093505050505b919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161251484610cd7565b61251e919061364b565b9050600060086000848152602001908152602001600020549050818114612603576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612688919061364b565b90506000600a60008481526020019081526020016000205490506000600983815481106126b8576126b7613906565b5b9060005260206000200154905080600983815481106126da576126d9613906565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612729576127286138d7565b5b6001900381819060005260206000200160009055905550505050565b600061275083610cd7565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b8280546127d09061373f565b90600052602060002090601f0160209004810192826127f25760008555612839565b82601f1061280b57805160ff1916838001178555612839565b82800160010185558215612839579182015b8281111561283857825182559160200191906001019061281d565b5b509050612846919061284a565b5090565b5b8082111561286357600081600090555060010161284b565b5090565b600061287a6128758461351f565b6134fa565b90508281526020810184848401111561289657612895613973565b5b6128a18482856136fd565b509392505050565b60006128bc6128b784613550565b6134fa565b9050828152602081018484840111156128d8576128d7613973565b5b6128e38482856136fd565b509392505050565b6000813590506128fa81613f86565b92915050565b60008083601f84011261291657612915613969565b5b8235905067ffffffffffffffff81111561293357612932613964565b5b60208301915083602082028301111561294f5761294e61396e565b5b9250929050565b60008135905061296581613f9d565b92915050565b60008135905061297a81613fb4565b92915050565b60008151905061298f81613fb4565b92915050565b600082601f8301126129aa576129a9613969565b5b81356129ba848260208601612867565b91505092915050565b600082601f8301126129d8576129d7613969565b5b81356129e88482602086016128a9565b91505092915050565b600081359050612a0081613fcb565b92915050565b600060208284031215612a1c57612a1b61397d565b5b6000612a2a848285016128eb565b91505092915050565b60008060408385031215612a4a57612a4961397d565b5b6000612a58858286016128eb565b9250506020612a69858286016128eb565b9150509250929050565b600080600060608486031215612a8c57612a8b61397d565b5b6000612a9a868287016128eb565b9350506020612aab868287016128eb565b9250506040612abc868287016129f1565b9150509250925092565b60008060008060808587031215612ae057612adf61397d565b5b6000612aee878288016128eb565b9450506020612aff878288016128eb565b9350506040612b10878288016129f1565b925050606085013567ffffffffffffffff811115612b3157612b30613978565b5b612b3d87828801612995565b91505092959194509250565b60008060408385031215612b6057612b5f61397d565b5b6000612b6e858286016128eb565b9250506020612b7f85828601612956565b9150509250929050565b60008060408385031215612ba057612b9f61397d565b5b6000612bae858286016128eb565b9250506020612bbf858286016129f1565b9150509250929050565b60008060208385031215612be057612bdf61397d565b5b600083013567ffffffffffffffff811115612bfe57612bfd613978565b5b612c0a85828601612900565b92509250509250929050565b600060208284031215612c2c57612c2b61397d565b5b6000612c3a8482850161296b565b91505092915050565b600060208284031215612c5957612c5861397d565b5b6000612c6784828501612980565b91505092915050565b600060208284031215612c8657612c8561397d565b5b600082013567ffffffffffffffff811115612ca457612ca3613978565b5b612cb0848285016129c3565b91505092915050565b600060208284031215612ccf57612cce61397d565b5b6000612cdd848285016129f1565b91505092915050565b612cef8161367f565b82525050565b612d06612d018261367f565b6137eb565b82525050565b612d1581613691565b82525050565b612d248161369d565b82525050565b612d3b612d368261369d565b6137fd565b82525050565b6000612d4c82613581565b612d568185613597565b9350612d6681856020860161370c565b612d6f81613982565b840191505092915050565b6000612d858261358c565b612d8f81856135a8565b9350612d9f81856020860161370c565b612da881613982565b840191505092915050565b6000612dbe8261358c565b612dc881856135b9565b9350612dd881856020860161370c565b80840191505092915050565b6000612df1602b836135a8565b9150612dfc826139a0565b604082019050919050565b6000612e146032836135a8565b9150612e1f826139ef565b604082019050919050565b6000612e376026836135a8565b9150612e4282613a3e565b604082019050919050565b6000612e5a601c836135a8565b9150612e6582613a8d565b602082019050919050565b6000612e7d6024836135a8565b9150612e8882613ab6565b604082019050919050565b6000612ea06019836135a8565b9150612eab82613b05565b602082019050919050565b6000612ec3602c836135a8565b9150612ece82613b2e565b604082019050919050565b6000612ee66038836135a8565b9150612ef182613b7d565b604082019050919050565b6000612f09602a836135a8565b9150612f1482613bcc565b604082019050919050565b6000612f2c6029836135a8565b9150612f3782613c1b565b604082019050919050565b6000612f4f6020836135a8565b9150612f5a82613c6a565b602082019050919050565b6000612f726031836135a8565b9150612f7d82613c93565b604082019050919050565b6000612f95602c836135a8565b9150612fa082613ce2565b604082019050919050565b6000612fb86020836135a8565b9150612fc382613d31565b602082019050919050565b6000612fdb6014836135a8565b9150612fe682613d5a565b602082019050919050565b6000612ffe6029836135a8565b915061300982613d83565b604082019050919050565b6000613021602f836135a8565b915061302c82613dd2565b604082019050919050565b60006130446021836135a8565b915061304f82613e21565b604082019050919050565b60006130676031836135a8565b915061307282613e70565b604082019050919050565b600061308a602c836135a8565b915061309582613ebf565b604082019050919050565b60006130ad6022836135a8565b91506130b882613f0e565b604082019050919050565b60006130d06017836135a8565b91506130db82613f5d565b602082019050919050565b6130ef816136f3565b82525050565b60006131018284612cf5565b60148201915081905092915050565b600061311c8285612d2a565b60208201915061312c8284612d2a565b6020820191508190509392505050565b60006131488285612db3565b91506131548284612db3565b91508190509392505050565b60006020820190506131756000830184612ce6565b92915050565b60006080820190506131906000830187612ce6565b61319d6020830186612ce6565b6131aa60408301856130e6565b81810360608301526131bc8184612d41565b905095945050505050565b60006020820190506131dc6000830184612d0c565b92915050565b60006020820190506131f76000830184612d1b565b92915050565b600060208201905081810360008301526132178184612d7a565b905092915050565b6000602082019050818103600083015261323881612de4565b9050919050565b6000602082019050818103600083015261325881612e07565b9050919050565b6000602082019050818103600083015261327881612e2a565b9050919050565b6000602082019050818103600083015261329881612e4d565b9050919050565b600060208201905081810360008301526132b881612e70565b9050919050565b600060208201905081810360008301526132d881612e93565b9050919050565b600060208201905081810360008301526132f881612eb6565b9050919050565b6000602082019050818103600083015261331881612ed9565b9050919050565b6000602082019050818103600083015261333881612efc565b9050919050565b6000602082019050818103600083015261335881612f1f565b9050919050565b6000602082019050818103600083015261337881612f42565b9050919050565b6000602082019050818103600083015261339881612f65565b9050919050565b600060208201905081810360008301526133b881612f88565b9050919050565b600060208201905081810360008301526133d881612fab565b9050919050565b600060208201905081810360008301526133f881612fce565b9050919050565b6000602082019050818103600083015261341881612ff1565b9050919050565b6000602082019050818103600083015261343881613014565b9050919050565b6000602082019050818103600083015261345881613037565b9050919050565b600060208201905081810360008301526134788161305a565b9050919050565b600060208201905081810360008301526134988161307d565b9050919050565b600060208201905081810360008301526134b8816130a0565b9050919050565b600060208201905081810360008301526134d8816130c3565b9050919050565b60006020820190506134f460008301846130e6565b92915050565b6000613504613515565b90506135108282613771565b919050565b6000604051905090565b600067ffffffffffffffff82111561353a57613539613935565b5b61354382613982565b9050602081019050919050565b600067ffffffffffffffff82111561356b5761356a613935565b5b61357482613982565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135cf826136f3565b91506135da836136f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561360f5761360e61384a565b5b828201905092915050565b6000613625826136f3565b9150613630836136f3565b9250826136405761363f613879565b5b828204905092915050565b6000613656826136f3565b9150613661836136f3565b9250828210156136745761367361384a565b5b828203905092915050565b600061368a826136d3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561372a57808201518184015260208101905061370f565b83811115613739576000848401525b50505050565b6000600282049050600182168061375757607f821691505b6020821081141561376b5761376a6138a8565b5b50919050565b61377a82613982565b810181811067ffffffffffffffff8211171561379957613798613935565b5b80604052505050565b60006137ad826136f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137e0576137df61384a565b5b600182019050919050565b60006137f682613807565b9050919050565b6000819050919050565b600061381282613993565b9050919050565b6000613824826136f3565b915061382f836136f3565b92508261383f5761383e613879565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c6964206d65726b6c652070726f6f66000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f206d6f72652070617373657320746f207265646560008201527f656d000000000000000000000000000000000000000000000000000000000000602082015250565b7f5573657220616c72656164792068617320612070617373000000000000000000600082015250565b613f8f8161367f565b8114613f9a57600080fd5b50565b613fa681613691565b8114613fb157600080fd5b50565b613fbd816136a7565b8114613fc857600080fd5b50565b613fd4816136f3565b8114613fdf57600080fd5b5056fea26469706673582212208da1b8b43b27d24c6003c195911b32a3c2269d6ba736abcaa4246e2f539177f364736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a47acc59b8a0c1dd9b02857990b2d9eaf74f7eb2b0811ab8ea55772fd68a780aa8000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f6261636b656e642e706978656c6d696e642e61692f6170692f76312f6d657461646174612f436f6c6c6563746f72735061737347302f0000

-----Decoded View---------------
Arg [0] : baseURI (string): https://backend.pixelmind.ai/api/v1/metadata/CollectorsPassG0/
Arg [1] : maxTokens (uint256): 420
Arg [2] : merkleroot (bytes32): 0x7acc59b8a0c1dd9b02857990b2d9eaf74f7eb2b0811ab8ea55772fd68a780aa8

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a4
Arg [2] : 7acc59b8a0c1dd9b02857990b2d9eaf74f7eb2b0811ab8ea55772fd68a780aa8
Arg [3] : 000000000000000000000000000000000000000000000000000000000000003e
Arg [4] : 68747470733a2f2f6261636b656e642e706978656c6d696e642e61692f617069
Arg [5] : 2f76312f6d657461646174612f436f6c6c6563746f72735061737347302f0000


Deployed Bytecode Sourcemap

48479:2432:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49800:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28025:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29584:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29107:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50496:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40854:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30474:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40522:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30884:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41044:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50291:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49051:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27719:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27449:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7642:94;;;:::i;:::-;;6991:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28194:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29877:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31140:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49283:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48642:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48675:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30243:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48716:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7891:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49800:171;49903:4;49927:36;49951:11;49927:23;:36::i;:::-;49920:43;;49800:171;;;:::o;28025:100::-;28079:13;28112:5;28105:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28025:100;:::o;29584:221::-;29660:7;29688:16;29696:7;29688;:16::i;:::-;29680:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29773:15;:24;29789:7;29773:24;;;;;;;;;;;;;;;;;;;;;29766:31;;29584:221;;;:::o;29107:411::-;29188:13;29204:23;29219:7;29204:14;:23::i;:::-;29188:39;;29252:5;29246:11;;:2;:11;;;;29238:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29346:5;29330:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29355:37;29372:5;29379:12;:10;:12::i;:::-;29355:16;:37::i;:::-;29330:62;29308:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29489:21;29498:2;29502:7;29489:8;:21::i;:::-;29177:341;29107:411;;:::o;50496:123::-;50583:4;50567:5;;50043:33;50051:17;50057:10;50051:5;:17::i;:::-;50070:5;;50043:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:33::i;:::-;50035:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50151:1;50120:28;50137:10;50120:16;:28::i;:::-;:32;50112:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50215:9;50199:13;:11;:13::i;:::-;:25;50191:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50607:4:::1;50600:11;;50496:123:::0;;;;;;:::o;40854:113::-;40915:7;40942:10;:17;;;;40935:24;;40854:113;:::o;30474:339::-;30669:41;30688:12;:10;:12::i;:::-;30702:7;30669:18;:41::i;:::-;30661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30777:28;30787:4;30793:2;30797:7;30777:9;:28::i;:::-;30474:339;;;:::o;40522:256::-;40619:7;40655:23;40672:5;40655:16;:23::i;:::-;40647:5;:31;40639:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40744:12;:19;40757:5;40744:19;;;;;;;;;;;;;;;:26;40764:5;40744:26;;;;;;;;;;;;40737:33;;40522:256;;;;:::o;30884:185::-;31022:39;31039:4;31045:2;31049:7;31022:39;;;;;;;;;;;;:16;:39::i;:::-;30884:185;;;:::o;41044:233::-;41119:7;41155:30;:28;:30::i;:::-;41147:5;:38;41139:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41252:10;41263:5;41252:17;;;;;;;;:::i;:::-;;;;;;;;;;41245:24;;41044:233;;;:::o;50291:197::-;50352:5;;50043:33;50051:17;50057:10;50051:5;:17::i;:::-;50070:5;;50043:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:33::i;:::-;50035:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50151:1;50120:28;50137:10;50120:16;:28::i;:::-;:32;50112:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50215:9;50199:13;:11;:13::i;:::-;:25;50191:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50370:15:::1;50388:19;:9;:17;:19::i;:::-;50370:37;;50418:21;:9;:19;:21::i;:::-;50450:30;50460:10;50472:7;50450:9;:30::i;:::-;50359:129;50291:197:::0;;;;:::o;49051:103::-;7222:12;:10;:12::i;:::-;7211:23;;:7;:5;:7::i;:::-;:23;;;7203:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49139:7:::1;49124:12;:22;;;;;;;;;;;;:::i;:::-;;49051:103:::0;:::o;27719:239::-;27791:7;27811:13;27827:7;:16;27835:7;27827:16;;;;;;;;;;;;;;;;;;;;;27811:32;;27879:1;27862:19;;:5;:19;;;;27854:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27945:5;27938:12;;;27719:239;;;:::o;27449:208::-;27521:7;27566:1;27549:19;;:5;:19;;;;27541:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27633:9;:16;27643:5;27633:16;;;;;;;;;;;;;;;;27626:23;;27449:208;;;:::o;7642:94::-;7222:12;:10;:12::i;:::-;7211:23;;:7;:5;:7::i;:::-;:23;;;7203:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7707:21:::1;7725:1;7707:9;:21::i;:::-;7642:94::o:0;6991:87::-;7037:7;7064:6;;;;;;;;;;;7057:13;;6991:87;:::o;28194:104::-;28250:13;28283:7;28276:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28194:104;:::o;29877:295::-;29992:12;:10;:12::i;:::-;29980:24;;:8;:24;;;;29972:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30092:8;30047:18;:32;30066:12;:10;:12::i;:::-;30047:32;;;;;;;;;;;;;;;:42;30080:8;30047:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30145:8;30116:48;;30131:12;:10;:12::i;:::-;30116:48;;;30155:8;30116:48;;;;;;:::i;:::-;;;;;;;;29877:295;;:::o;31140:328::-;31315:41;31334:12;:10;:12::i;:::-;31348:7;31315:18;:41::i;:::-;31307:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31421:39;31435:4;31441:2;31445:7;31454:5;31421:13;:39::i;:::-;31140:328;;;;:::o;49283:163::-;49382:13;49415:23;49430:7;49415:14;:23::i;:::-;49408:30;;49283:163;;;:::o;48642:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48675:34::-;;;:::o;30243:164::-;30340:4;30364:18;:25;30383:5;30364:25;;;;;;;;;;;;;;;:35;30390:8;30364:35;;;;;;;;;;;;;;;;;;;;;;;;;30357:42;;30243:164;;;;:::o;48716:29::-;;;:::o;7891:192::-;7222:12;:10;:12::i;:::-;7211:23;;:7;:5;:7::i;:::-;:23;;;7203:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8000:1:::1;7980:22;;:8;:22;;;;7972:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8056:19;8066:8;8056:9;:19::i;:::-;7891:192:::0;:::o;2613:127::-;2720:1;2702:7;:14;;;:19;;;;;;;;;;;2613:127;:::o;40214:224::-;40316:4;40355:35;40340:50;;;:11;:50;;;;:90;;;;40394:36;40418:11;40394:23;:36::i;:::-;40340:90;40333:97;;40214:224;;;:::o;32978:127::-;33043:4;33095:1;33067:30;;:7;:16;33075:7;33067:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33060:37;;32978:127;;;:::o;5779:98::-;5832:7;5859:10;5852:17;;5779:98;:::o;36960:174::-;37062:2;37035:15;:24;37051:7;37035:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37118:7;37114:2;37080:46;;37089:23;37104:7;37089:14;:23::i;:::-;37080:46;;;;;;;;;;;;36960:174;;:::o;50627:126::-;50682:7;50736;50719:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;50709:36;;;;;;50702:43;;50627:126;;;:::o;50761:147::-;50839:4;50863:37;50882:5;50889:4;50895;50863:18;:37::i;:::-;50856:44;;50761:147;;;;:::o;33272:348::-;33365:4;33390:16;33398:7;33390;:16::i;:::-;33382:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33466:13;33482:23;33497:7;33482:14;:23::i;:::-;33466:39;;33535:5;33524:16;;:7;:16;;;:51;;;;33568:7;33544:31;;:20;33556:7;33544:11;:20::i;:::-;:31;;;33524:51;:87;;;;33579:32;33596:5;33603:7;33579:16;:32::i;:::-;33524:87;33516:96;;;33272:348;;;;:::o;36264:578::-;36423:4;36396:31;;:23;36411:7;36396:14;:23::i;:::-;:31;;;36388:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36506:1;36492:16;;:2;:16;;;;36484:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36562:39;36583:4;36589:2;36593:7;36562:20;:39::i;:::-;36666:29;36683:1;36687:7;36666:8;:29::i;:::-;36727:1;36708:9;:15;36718:4;36708:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36756:1;36739:9;:13;36749:2;36739:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36787:2;36768:7;:16;36776:7;36768:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36826:7;36822:2;36807:27;;36816:4;36807:27;;;;;;;;;;;;36264:578;;;:::o;2491:114::-;2556:7;2583;:14;;;2576:21;;2491:114;;;:::o;33962:110::-;34038:26;34048:2;34052:7;34038:26;;;;;;;;;;;;:9;:26::i;:::-;33962:110;;:::o;8091:173::-;8147:16;8166:6;;;;;;;;;;;8147:25;;8192:8;8183:6;;:17;;;;;;;;;;;;;;;;;;8247:8;8216:40;;8237:8;8216:40;;;;;;;;;;;;8136:128;8091:173;:::o;32350:315::-;32507:28;32517:4;32523:2;32527:7;32507:9;:28::i;:::-;32554:48;32577:4;32583:2;32587:7;32596:5;32554:22;:48::i;:::-;32546:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32350:315;;;;:::o;46873:679::-;46946:13;46980:16;46988:7;46980;:16::i;:::-;46972:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47063:23;47089:10;:19;47100:7;47089:19;;;;;;;;;;;47063:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47119:18;47140:10;:8;:10::i;:::-;47119:31;;47248:1;47232:4;47226:18;:23;47222:72;;;47273:9;47266:16;;;;;;47222:72;47424:1;47404:9;47398:23;:27;47394:108;;;47473:4;47479:9;47456:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47442:48;;;;;;47394:108;47521:23;47536:7;47521:14;:23::i;:::-;47514:30;;;;46873:679;;;;:::o;27080:305::-;27182:4;27234:25;27219:40;;;:11;:40;;;;:105;;;;27291:33;27276:48;;;:11;:48;;;;27219:105;:158;;;;27341:36;27365:11;27341:23;:36::i;:::-;27219:158;27199:178;;27080:305;;;:::o;837:830::-;962:4;979:20;1002:4;979:27;;1024:9;1019:525;1043:5;:12;1039:1;:16;1019:525;;;1077:20;1100:5;1106:1;1100:8;;;;;;;;:::i;:::-;;;;;;;;1077:31;;1145:12;1129;:28;1125:408;;1299:12;1313;1282:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1272:55;;;;;;1257:70;;1125:408;;;1489:12;1503;1472:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1462:55;;;;;;1447:70;;1125:408;1062:482;1057:3;;;;;:::i;:::-;;;;1019:525;;;;1655:4;1639:12;:20;1632:27;;;837:830;;;;;:::o;49454:215::-;49616:45;49643:4;49649:2;49653:7;49616:26;:45::i;:::-;49454:215;;;:::o;34299:321::-;34429:18;34435:2;34439:7;34429:5;:18::i;:::-;34480:54;34511:1;34515:2;34519:7;34528:5;34480:22;:54::i;:::-;34458:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34299:321;;;:::o;37699:799::-;37854:4;37875:15;:2;:13;;;:15::i;:::-;37871:620;;;37927:2;37911:36;;;37948:12;:10;:12::i;:::-;37962:4;37968:7;37977:5;37911:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37907:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38170:1;38153:6;:13;:18;38149:272;;;38196:60;;;;;;;;;;:::i;:::-;;;;;;;;38149:272;38371:6;38365:13;38356:6;38352:2;38348:15;38341:38;37907:529;38044:41;;;38034:51;;;:6;:51;;;;38027:58;;;;;37871:620;38475:4;38468:11;;37699:799;;;;;;;:::o;49162:113::-;49222:13;49255:12;49248:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49162:113;:::o;28369:334::-;28442:13;28476:16;28484:7;28476;:16::i;:::-;28468:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28557:21;28581:10;:8;:10::i;:::-;28557:34;;28633:1;28615:7;28609:21;:25;:86;;;;;;;;;;;;;;;;;28661:7;28670:18;:7;:16;:18::i;:::-;28644:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28609:86;28602:93;;;28369:334;;;:::o;18977:157::-;19062:4;19101:25;19086:40;;;:11;:40;;;;19079:47;;18977:157;;;:::o;41890:589::-;42034:45;42061:4;42067:2;42071:7;42034:26;:45::i;:::-;42112:1;42096:18;;:4;:18;;;42092:187;;;42131:40;42163:7;42131:31;:40::i;:::-;42092:187;;;42201:2;42193:10;;:4;:10;;;42189:90;;42220:47;42253:4;42259:7;42220:32;:47::i;:::-;42189:90;42092:187;42307:1;42293:16;;:2;:16;;;42289:183;;;42326:45;42363:7;42326:36;:45::i;:::-;42289:183;;;42399:4;42393:10;;:2;:10;;;42389:83;;42420:40;42448:2;42452:7;42420:27;:40::i;:::-;42389:83;42289:183;41890:589;;;:::o;34956:382::-;35050:1;35036:16;;:2;:16;;;;35028:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35109:16;35117:7;35109;:16::i;:::-;35108:17;35100:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35171:45;35200:1;35204:2;35208:7;35171:20;:45::i;:::-;35246:1;35229:9;:13;35239:2;35229:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35277:2;35258:7;:16;35266:7;35258:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35322:7;35318:2;35297:33;;35314:1;35297:33;;;;;;;;;;;;34956:382;;:::o;9037:387::-;9097:4;9305:12;9372:7;9360:20;9352:28;;9415:1;9408:4;:8;9401:15;;;9037:387;;;:::o;3395:723::-;3451:13;3681:1;3672:5;:10;3668:53;;;3699:10;;;;;;;;;;;;;;;;;;;;;3668:53;3731:12;3746:5;3731:20;;3762:14;3787:78;3802:1;3794:4;:9;3787:78;;3820:8;;;;;:::i;:::-;;;;3851:2;3843:10;;;;;:::i;:::-;;;3787:78;;;3875:19;3907:6;3897:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:39;;3925:154;3941:1;3932:5;:10;3925:154;;3969:1;3959:11;;;;;:::i;:::-;;;4036:2;4028:5;:10;;;;:::i;:::-;4015:2;:24;;;;:::i;:::-;4002:39;;3985:6;3992;3985:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4065:2;4056:11;;;;;:::i;:::-;;;3925:154;;;4103:6;4089:21;;;;;3395:723;;;;:::o;39070:126::-;;;;:::o;43202:164::-;43306:10;:17;;;;43279:15;:24;43295:7;43279:24;;;;;;;;;;;:44;;;;43334:10;43350:7;43334:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43202:164;:::o;43993:988::-;44259:22;44309:1;44284:22;44301:4;44284:16;:22::i;:::-;:26;;;;:::i;:::-;44259:51;;44321:18;44342:17;:26;44360:7;44342:26;;;;;;;;;;;;44321:47;;44489:14;44475:10;:28;44471:328;;44520:19;44542:12;:18;44555:4;44542:18;;;;;;;;;;;;;;;:34;44561:14;44542:34;;;;;;;;;;;;44520:56;;44626:11;44593:12;:18;44606:4;44593:18;;;;;;;;;;;;;;;:30;44612:10;44593:30;;;;;;;;;;;:44;;;;44743:10;44710:17;:30;44728:11;44710:30;;;;;;;;;;;:43;;;;44505:294;44471:328;44895:17;:26;44913:7;44895:26;;;;;;;;;;;44888:33;;;44939:12;:18;44952:4;44939:18;;;;;;;;;;;;;;;:34;44958:14;44939:34;;;;;;;;;;;44932:41;;;44074:907;;43993:988;;:::o;45276:1079::-;45529:22;45574:1;45554:10;:17;;;;:21;;;;:::i;:::-;45529:46;;45586:18;45607:15;:24;45623:7;45607:24;;;;;;;;;;;;45586:45;;45958:19;45980:10;45991:14;45980:26;;;;;;;;:::i;:::-;;;;;;;;;;45958:48;;46044:11;46019:10;46030;46019:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46155:10;46124:15;:28;46140:11;46124:28;;;;;;;;;;;:41;;;;46296:15;:24;46312:7;46296:24;;;;;;;;;;;46289:31;;;46331:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45347:1008;;;45276:1079;:::o;42780:221::-;42865:14;42882:20;42899:2;42882:16;:20::i;:::-;42865:37;;42940:7;42913:12;:16;42926:2;42913:16;;;;;;;;;;;;;;;:24;42930:6;42913:24;;;;;;;;;;;:34;;;;42987:6;42958:17;:26;42976:7;42958:26;;;;;;;;;;;:35;;;;42854:147;42780:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:157::-;8543:45;8563:24;8581:5;8563:24;:::i;:::-;8543:45;:::i;:::-;8538:3;8531:58;8438:157;;:::o;8601:109::-;8682:21;8697:5;8682:21;:::i;:::-;8677:3;8670:34;8601:109;;:::o;8716:118::-;8803:24;8821:5;8803:24;:::i;:::-;8798:3;8791:37;8716:118;;:::o;8840:157::-;8945:45;8965:24;8983:5;8965:24;:::i;:::-;8945:45;:::i;:::-;8940:3;8933:58;8840:157;;:::o;9003:360::-;9089:3;9117:38;9149:5;9117:38;:::i;:::-;9171:70;9234:6;9229:3;9171:70;:::i;:::-;9164:77;;9250:52;9295:6;9290:3;9283:4;9276:5;9272:16;9250:52;:::i;:::-;9327:29;9349:6;9327:29;:::i;:::-;9322:3;9318:39;9311:46;;9093:270;9003:360;;;;:::o;9369:364::-;9457:3;9485:39;9518:5;9485:39;:::i;:::-;9540:71;9604:6;9599:3;9540:71;:::i;:::-;9533:78;;9620:52;9665:6;9660:3;9653:4;9646:5;9642:16;9620:52;:::i;:::-;9697:29;9719:6;9697:29;:::i;:::-;9692:3;9688:39;9681:46;;9461:272;9369:364;;;;:::o;9739:377::-;9845:3;9873:39;9906:5;9873:39;:::i;:::-;9928:89;10010:6;10005:3;9928:89;:::i;:::-;9921:96;;10026:52;10071:6;10066:3;10059:4;10052:5;10048:16;10026:52;:::i;:::-;10103:6;10098:3;10094:16;10087:23;;9849:267;9739:377;;;;:::o;10122:366::-;10264:3;10285:67;10349:2;10344:3;10285:67;:::i;:::-;10278:74;;10361:93;10450:3;10361:93;:::i;:::-;10479:2;10474:3;10470:12;10463:19;;10122:366;;;:::o;10494:::-;10636:3;10657:67;10721:2;10716:3;10657:67;:::i;:::-;10650:74;;10733:93;10822:3;10733:93;:::i;:::-;10851:2;10846:3;10842:12;10835:19;;10494:366;;;:::o;10866:::-;11008:3;11029:67;11093:2;11088:3;11029:67;:::i;:::-;11022:74;;11105:93;11194:3;11105:93;:::i;:::-;11223:2;11218:3;11214:12;11207:19;;10866:366;;;:::o;11238:::-;11380:3;11401:67;11465:2;11460:3;11401:67;:::i;:::-;11394:74;;11477:93;11566:3;11477:93;:::i;:::-;11595:2;11590:3;11586:12;11579:19;;11238:366;;;:::o;11610:::-;11752:3;11773:67;11837:2;11832:3;11773:67;:::i;:::-;11766:74;;11849:93;11938:3;11849:93;:::i;:::-;11967:2;11962:3;11958:12;11951:19;;11610:366;;;:::o;11982:::-;12124:3;12145:67;12209:2;12204:3;12145:67;:::i;:::-;12138:74;;12221:93;12310:3;12221:93;:::i;:::-;12339:2;12334:3;12330:12;12323:19;;11982:366;;;:::o;12354:::-;12496:3;12517:67;12581:2;12576:3;12517:67;:::i;:::-;12510:74;;12593:93;12682:3;12593:93;:::i;:::-;12711:2;12706:3;12702:12;12695:19;;12354:366;;;:::o;12726:::-;12868:3;12889:67;12953:2;12948:3;12889:67;:::i;:::-;12882:74;;12965:93;13054:3;12965:93;:::i;:::-;13083:2;13078:3;13074:12;13067:19;;12726:366;;;:::o;13098:::-;13240:3;13261:67;13325:2;13320:3;13261:67;:::i;:::-;13254:74;;13337:93;13426:3;13337:93;:::i;:::-;13455:2;13450:3;13446:12;13439:19;;13098:366;;;:::o;13470:::-;13612:3;13633:67;13697:2;13692:3;13633:67;:::i;:::-;13626:74;;13709:93;13798:3;13709:93;:::i;:::-;13827:2;13822:3;13818:12;13811:19;;13470:366;;;:::o;13842:::-;13984:3;14005:67;14069:2;14064:3;14005:67;:::i;:::-;13998:74;;14081:93;14170:3;14081:93;:::i;:::-;14199:2;14194:3;14190:12;14183:19;;13842:366;;;:::o;14214:::-;14356:3;14377:67;14441:2;14436:3;14377:67;:::i;:::-;14370:74;;14453:93;14542:3;14453:93;:::i;:::-;14571:2;14566:3;14562:12;14555:19;;14214:366;;;:::o;14586:::-;14728:3;14749:67;14813:2;14808:3;14749:67;:::i;:::-;14742:74;;14825:93;14914:3;14825:93;:::i;:::-;14943:2;14938:3;14934:12;14927:19;;14586:366;;;:::o;14958:::-;15100:3;15121:67;15185:2;15180:3;15121:67;:::i;:::-;15114:74;;15197:93;15286:3;15197:93;:::i;:::-;15315:2;15310:3;15306:12;15299:19;;14958:366;;;:::o;15330:::-;15472:3;15493:67;15557:2;15552:3;15493:67;:::i;:::-;15486:74;;15569:93;15658:3;15569:93;:::i;:::-;15687:2;15682:3;15678:12;15671:19;;15330:366;;;:::o;15702:::-;15844:3;15865:67;15929:2;15924:3;15865:67;:::i;:::-;15858:74;;15941:93;16030:3;15941:93;:::i;:::-;16059:2;16054:3;16050:12;16043:19;;15702:366;;;:::o;16074:::-;16216:3;16237:67;16301:2;16296:3;16237:67;:::i;:::-;16230:74;;16313:93;16402:3;16313:93;:::i;:::-;16431:2;16426:3;16422:12;16415:19;;16074:366;;;:::o;16446:::-;16588:3;16609:67;16673:2;16668:3;16609:67;:::i;:::-;16602:74;;16685:93;16774:3;16685:93;:::i;:::-;16803:2;16798:3;16794:12;16787:19;;16446:366;;;:::o;16818:::-;16960:3;16981:67;17045:2;17040:3;16981:67;:::i;:::-;16974:74;;17057:93;17146:3;17057:93;:::i;:::-;17175:2;17170:3;17166:12;17159:19;;16818:366;;;:::o;17190:::-;17332:3;17353:67;17417:2;17412:3;17353:67;:::i;:::-;17346:74;;17429:93;17518:3;17429:93;:::i;:::-;17547:2;17542:3;17538:12;17531:19;;17190:366;;;:::o;17562:::-;17704:3;17725:67;17789:2;17784:3;17725:67;:::i;:::-;17718:74;;17801:93;17890:3;17801:93;:::i;:::-;17919:2;17914:3;17910:12;17903:19;;17562:366;;;:::o;17934:::-;18076:3;18097:67;18161:2;18156:3;18097:67;:::i;:::-;18090:74;;18173:93;18262:3;18173:93;:::i;:::-;18291:2;18286:3;18282:12;18275:19;;17934:366;;;:::o;18306:118::-;18393:24;18411:5;18393:24;:::i;:::-;18388:3;18381:37;18306:118;;:::o;18430:256::-;18542:3;18557:75;18628:3;18619:6;18557:75;:::i;:::-;18657:2;18652:3;18648:12;18641:19;;18677:3;18670:10;;18430:256;;;;:::o;18692:397::-;18832:3;18847:75;18918:3;18909:6;18847:75;:::i;:::-;18947:2;18942:3;18938:12;18931:19;;18960:75;19031:3;19022:6;18960:75;:::i;:::-;19060:2;19055:3;19051:12;19044:19;;19080:3;19073:10;;18692:397;;;;;:::o;19095:435::-;19275:3;19297:95;19388:3;19379:6;19297:95;:::i;:::-;19290:102;;19409:95;19500:3;19491:6;19409:95;:::i;:::-;19402:102;;19521:3;19514:10;;19095:435;;;;;:::o;19536:222::-;19629:4;19667:2;19656:9;19652:18;19644:26;;19680:71;19748:1;19737:9;19733:17;19724:6;19680:71;:::i;:::-;19536:222;;;;:::o;19764:640::-;19959:4;19997:3;19986:9;19982:19;19974:27;;20011:71;20079:1;20068:9;20064:17;20055:6;20011:71;:::i;:::-;20092:72;20160:2;20149:9;20145:18;20136:6;20092:72;:::i;:::-;20174;20242:2;20231:9;20227:18;20218:6;20174:72;:::i;:::-;20293:9;20287:4;20283:20;20278:2;20267:9;20263:18;20256:48;20321:76;20392:4;20383:6;20321:76;:::i;:::-;20313:84;;19764:640;;;;;;;:::o;20410:210::-;20497:4;20535:2;20524:9;20520:18;20512:26;;20548:65;20610:1;20599:9;20595:17;20586:6;20548:65;:::i;:::-;20410:210;;;;:::o;20626:222::-;20719:4;20757:2;20746:9;20742:18;20734:26;;20770:71;20838:1;20827:9;20823:17;20814:6;20770:71;:::i;:::-;20626:222;;;;:::o;20854:313::-;20967:4;21005:2;20994:9;20990:18;20982:26;;21054:9;21048:4;21044:20;21040:1;21029:9;21025:17;21018:47;21082:78;21155:4;21146:6;21082:78;:::i;:::-;21074:86;;20854:313;;;;:::o;21173:419::-;21339:4;21377:2;21366:9;21362:18;21354:26;;21426:9;21420:4;21416:20;21412:1;21401:9;21397:17;21390:47;21454:131;21580:4;21454:131;:::i;:::-;21446:139;;21173:419;;;:::o;21598:::-;21764:4;21802:2;21791:9;21787:18;21779:26;;21851:9;21845:4;21841:20;21837:1;21826:9;21822:17;21815:47;21879:131;22005:4;21879:131;:::i;:::-;21871:139;;21598:419;;;:::o;22023:::-;22189:4;22227:2;22216:9;22212:18;22204:26;;22276:9;22270:4;22266:20;22262:1;22251:9;22247:17;22240:47;22304:131;22430:4;22304:131;:::i;:::-;22296:139;;22023:419;;;:::o;22448:::-;22614:4;22652:2;22641:9;22637:18;22629:26;;22701:9;22695:4;22691:20;22687:1;22676:9;22672:17;22665:47;22729:131;22855:4;22729:131;:::i;:::-;22721:139;;22448:419;;;:::o;22873:::-;23039:4;23077:2;23066:9;23062:18;23054:26;;23126:9;23120:4;23116:20;23112:1;23101:9;23097:17;23090:47;23154:131;23280:4;23154:131;:::i;:::-;23146:139;;22873:419;;;:::o;23298:::-;23464:4;23502:2;23491:9;23487:18;23479:26;;23551:9;23545:4;23541:20;23537:1;23526:9;23522:17;23515:47;23579:131;23705:4;23579:131;:::i;:::-;23571:139;;23298:419;;;:::o;23723:::-;23889:4;23927:2;23916:9;23912:18;23904:26;;23976:9;23970:4;23966:20;23962:1;23951:9;23947:17;23940:47;24004:131;24130:4;24004:131;:::i;:::-;23996:139;;23723:419;;;:::o;24148:::-;24314:4;24352:2;24341:9;24337:18;24329:26;;24401:9;24395:4;24391:20;24387:1;24376:9;24372:17;24365:47;24429:131;24555:4;24429:131;:::i;:::-;24421:139;;24148:419;;;:::o;24573:::-;24739:4;24777:2;24766:9;24762:18;24754:26;;24826:9;24820:4;24816:20;24812:1;24801:9;24797:17;24790:47;24854:131;24980:4;24854:131;:::i;:::-;24846:139;;24573:419;;;:::o;24998:::-;25164:4;25202:2;25191:9;25187:18;25179:26;;25251:9;25245:4;25241:20;25237:1;25226:9;25222:17;25215:47;25279:131;25405:4;25279:131;:::i;:::-;25271:139;;24998:419;;;:::o;25423:::-;25589:4;25627:2;25616:9;25612:18;25604:26;;25676:9;25670:4;25666:20;25662:1;25651:9;25647:17;25640:47;25704:131;25830:4;25704:131;:::i;:::-;25696:139;;25423:419;;;:::o;25848:::-;26014:4;26052:2;26041:9;26037:18;26029:26;;26101:9;26095:4;26091:20;26087:1;26076:9;26072:17;26065:47;26129:131;26255:4;26129:131;:::i;:::-;26121:139;;25848:419;;;:::o;26273:::-;26439:4;26477:2;26466:9;26462:18;26454:26;;26526:9;26520:4;26516:20;26512:1;26501:9;26497:17;26490:47;26554:131;26680:4;26554:131;:::i;:::-;26546:139;;26273:419;;;:::o;26698:::-;26864:4;26902:2;26891:9;26887:18;26879:26;;26951:9;26945:4;26941:20;26937:1;26926:9;26922:17;26915:47;26979:131;27105:4;26979:131;:::i;:::-;26971:139;;26698:419;;;:::o;27123:::-;27289:4;27327:2;27316:9;27312:18;27304:26;;27376:9;27370:4;27366:20;27362:1;27351:9;27347:17;27340:47;27404:131;27530:4;27404:131;:::i;:::-;27396:139;;27123:419;;;:::o;27548:::-;27714:4;27752:2;27741:9;27737:18;27729:26;;27801:9;27795:4;27791:20;27787:1;27776:9;27772:17;27765:47;27829:131;27955:4;27829:131;:::i;:::-;27821:139;;27548:419;;;:::o;27973:::-;28139:4;28177:2;28166:9;28162:18;28154:26;;28226:9;28220:4;28216:20;28212:1;28201:9;28197:17;28190:47;28254:131;28380:4;28254:131;:::i;:::-;28246:139;;27973:419;;;:::o;28398:::-;28564:4;28602:2;28591:9;28587:18;28579:26;;28651:9;28645:4;28641:20;28637:1;28626:9;28622:17;28615:47;28679:131;28805:4;28679:131;:::i;:::-;28671:139;;28398:419;;;:::o;28823:::-;28989:4;29027:2;29016:9;29012:18;29004:26;;29076:9;29070:4;29066:20;29062:1;29051:9;29047:17;29040:47;29104:131;29230:4;29104:131;:::i;:::-;29096:139;;28823:419;;;:::o;29248:::-;29414:4;29452:2;29441:9;29437:18;29429:26;;29501:9;29495:4;29491:20;29487:1;29476:9;29472:17;29465:47;29529:131;29655:4;29529:131;:::i;:::-;29521:139;;29248:419;;;:::o;29673:::-;29839:4;29877:2;29866:9;29862:18;29854:26;;29926:9;29920:4;29916:20;29912:1;29901:9;29897:17;29890:47;29954:131;30080:4;29954:131;:::i;:::-;29946:139;;29673:419;;;:::o;30098:::-;30264:4;30302:2;30291:9;30287:18;30279:26;;30351:9;30345:4;30341:20;30337:1;30326:9;30322:17;30315:47;30379:131;30505:4;30379:131;:::i;:::-;30371:139;;30098:419;;;:::o;30523:222::-;30616:4;30654:2;30643:9;30639:18;30631:26;;30667:71;30735:1;30724:9;30720:17;30711:6;30667:71;:::i;:::-;30523:222;;;;:::o;30751:129::-;30785:6;30812:20;;:::i;:::-;30802:30;;30841:33;30869:4;30861:6;30841:33;:::i;:::-;30751:129;;;:::o;30886:75::-;30919:6;30952:2;30946:9;30936:19;;30886:75;:::o;30967:307::-;31028:4;31118:18;31110:6;31107:30;31104:56;;;31140:18;;:::i;:::-;31104:56;31178:29;31200:6;31178:29;:::i;:::-;31170:37;;31262:4;31256;31252:15;31244:23;;30967:307;;;:::o;31280:308::-;31342:4;31432:18;31424:6;31421:30;31418:56;;;31454:18;;:::i;:::-;31418:56;31492:29;31514:6;31492:29;:::i;:::-;31484:37;;31576:4;31570;31566:15;31558:23;;31280:308;;;:::o;31594:98::-;31645:6;31679:5;31673:12;31663:22;;31594:98;;;:::o;31698:99::-;31750:6;31784:5;31778:12;31768:22;;31698:99;;;:::o;31803:168::-;31886:11;31920:6;31915:3;31908:19;31960:4;31955:3;31951:14;31936:29;;31803:168;;;;:::o;31977:169::-;32061:11;32095:6;32090:3;32083:19;32135:4;32130:3;32126:14;32111:29;;31977:169;;;;:::o;32152:148::-;32254:11;32291:3;32276:18;;32152:148;;;;:::o;32306:305::-;32346:3;32365:20;32383:1;32365:20;:::i;:::-;32360:25;;32399:20;32417:1;32399:20;:::i;:::-;32394:25;;32553:1;32485:66;32481:74;32478:1;32475:81;32472:107;;;32559:18;;:::i;:::-;32472:107;32603:1;32600;32596:9;32589:16;;32306:305;;;;:::o;32617:185::-;32657:1;32674:20;32692:1;32674:20;:::i;:::-;32669:25;;32708:20;32726:1;32708:20;:::i;:::-;32703:25;;32747:1;32737:35;;32752:18;;:::i;:::-;32737:35;32794:1;32791;32787:9;32782:14;;32617:185;;;;:::o;32808:191::-;32848:4;32868:20;32886:1;32868:20;:::i;:::-;32863:25;;32902:20;32920:1;32902:20;:::i;:::-;32897:25;;32941:1;32938;32935:8;32932:34;;;32946:18;;:::i;:::-;32932:34;32991:1;32988;32984:9;32976:17;;32808:191;;;;:::o;33005:96::-;33042:7;33071:24;33089:5;33071:24;:::i;:::-;33060:35;;33005:96;;;:::o;33107:90::-;33141:7;33184:5;33177:13;33170:21;33159:32;;33107:90;;;:::o;33203:77::-;33240:7;33269:5;33258:16;;33203:77;;;:::o;33286:149::-;33322:7;33362:66;33355:5;33351:78;33340:89;;33286:149;;;:::o;33441:126::-;33478:7;33518:42;33511:5;33507:54;33496:65;;33441:126;;;:::o;33573:77::-;33610:7;33639:5;33628:16;;33573:77;;;:::o;33656:154::-;33740:6;33735:3;33730;33717:30;33802:1;33793:6;33788:3;33784:16;33777:27;33656:154;;;:::o;33816:307::-;33884:1;33894:113;33908:6;33905:1;33902:13;33894:113;;;33993:1;33988:3;33984:11;33978:18;33974:1;33969:3;33965:11;33958:39;33930:2;33927:1;33923:10;33918:15;;33894:113;;;34025:6;34022:1;34019:13;34016:101;;;34105:1;34096:6;34091:3;34087:16;34080:27;34016:101;33865:258;33816:307;;;:::o;34129:320::-;34173:6;34210:1;34204:4;34200:12;34190:22;;34257:1;34251:4;34247:12;34278:18;34268:81;;34334:4;34326:6;34322:17;34312:27;;34268:81;34396:2;34388:6;34385:14;34365:18;34362:38;34359:84;;;34415:18;;:::i;:::-;34359:84;34180:269;34129:320;;;:::o;34455:281::-;34538:27;34560:4;34538:27;:::i;:::-;34530:6;34526:40;34668:6;34656:10;34653:22;34632:18;34620:10;34617:34;34614:62;34611:88;;;34679:18;;:::i;:::-;34611:88;34719:10;34715:2;34708:22;34498:238;34455:281;;:::o;34742:233::-;34781:3;34804:24;34822:5;34804:24;:::i;:::-;34795:33;;34850:66;34843:5;34840:77;34837:103;;;34920:18;;:::i;:::-;34837:103;34967:1;34960:5;34956:13;34949:20;;34742:233;;;:::o;34981:100::-;35020:7;35049:26;35069:5;35049:26;:::i;:::-;35038:37;;34981:100;;;:::o;35087:79::-;35126:7;35155:5;35144:16;;35087:79;;;:::o;35172:94::-;35211:7;35240:20;35254:5;35240:20;:::i;:::-;35229:31;;35172:94;;;:::o;35272:176::-;35304:1;35321:20;35339:1;35321:20;:::i;:::-;35316:25;;35355:20;35373:1;35355:20;:::i;:::-;35350:25;;35394:1;35384:35;;35399:18;;:::i;:::-;35384:35;35440:1;35437;35433:9;35428:14;;35272:176;;;;:::o;35454:180::-;35502:77;35499:1;35492:88;35599:4;35596:1;35589:15;35623:4;35620:1;35613:15;35640:180;35688:77;35685:1;35678:88;35785:4;35782:1;35775:15;35809:4;35806:1;35799:15;35826:180;35874:77;35871:1;35864:88;35971:4;35968:1;35961:15;35995:4;35992:1;35985:15;36012:180;36060:77;36057:1;36050:88;36157:4;36154:1;36147:15;36181:4;36178:1;36171:15;36198:180;36246:77;36243:1;36236:88;36343:4;36340:1;36333:15;36367:4;36364:1;36357:15;36384:180;36432:77;36429:1;36422:88;36529:4;36526:1;36519:15;36553:4;36550:1;36543:15;36570:117;36679:1;36676;36669:12;36693:117;36802:1;36799;36792:12;36816:117;36925:1;36922;36915:12;36939:117;37048:1;37045;37038:12;37062:117;37171:1;37168;37161:12;37185:117;37294:1;37291;37284:12;37308:102;37349:6;37400:2;37396:7;37391:2;37384:5;37380:14;37376:28;37366:38;;37308:102;;;:::o;37416:94::-;37449:8;37497:5;37493:2;37489:14;37468:35;;37416:94;;;:::o;37516:230::-;37656:34;37652:1;37644:6;37640:14;37633:58;37725:13;37720:2;37712:6;37708:15;37701:38;37516:230;:::o;37752:237::-;37892:34;37888:1;37880:6;37876:14;37869:58;37961:20;37956:2;37948:6;37944:15;37937:45;37752:237;:::o;37995:225::-;38135:34;38131:1;38123:6;38119:14;38112:58;38204:8;38199:2;38191:6;38187:15;38180:33;37995:225;:::o;38226:178::-;38366:30;38362:1;38354:6;38350:14;38343:54;38226:178;:::o;38410:223::-;38550:34;38546:1;38538:6;38534:14;38527:58;38619:6;38614:2;38606:6;38602:15;38595:31;38410:223;:::o;38639:175::-;38779:27;38775:1;38767:6;38763:14;38756:51;38639:175;:::o;38820:231::-;38960:34;38956:1;38948:6;38944:14;38937:58;39029:14;39024:2;39016:6;39012:15;39005:39;38820:231;:::o;39057:243::-;39197:34;39193:1;39185:6;39181:14;39174:58;39266:26;39261:2;39253:6;39249:15;39242:51;39057:243;:::o;39306:229::-;39446:34;39442:1;39434:6;39430:14;39423:58;39515:12;39510:2;39502:6;39498:15;39491:37;39306:229;:::o;39541:228::-;39681:34;39677:1;39669:6;39665:14;39658:58;39750:11;39745:2;39737:6;39733:15;39726:36;39541:228;:::o;39775:182::-;39915:34;39911:1;39903:6;39899:14;39892:58;39775:182;:::o;39963:236::-;40103:34;40099:1;40091:6;40087:14;40080:58;40172:19;40167:2;40159:6;40155:15;40148:44;39963:236;:::o;40205:231::-;40345:34;40341:1;40333:6;40329:14;40322:58;40414:14;40409:2;40401:6;40397:15;40390:39;40205:231;:::o;40442:182::-;40582:34;40578:1;40570:6;40566:14;40559:58;40442:182;:::o;40630:170::-;40770:22;40766:1;40758:6;40754:14;40747:46;40630:170;:::o;40806:228::-;40946:34;40942:1;40934:6;40930:14;40923:58;41015:11;41010:2;41002:6;40998:15;40991:36;40806:228;:::o;41040:234::-;41180:34;41176:1;41168:6;41164:14;41157:58;41249:17;41244:2;41236:6;41232:15;41225:42;41040:234;:::o;41280:220::-;41420:34;41416:1;41408:6;41404:14;41397:58;41489:3;41484:2;41476:6;41472:15;41465:28;41280:220;:::o;41506:236::-;41646:34;41642:1;41634:6;41630:14;41623:58;41715:19;41710:2;41702:6;41698:15;41691:44;41506:236;:::o;41748:231::-;41888:34;41884:1;41876:6;41872:14;41865:58;41957:14;41952:2;41944:6;41940:15;41933:39;41748:231;:::o;41985:221::-;42125:34;42121:1;42113:6;42109:14;42102:58;42194:4;42189:2;42181:6;42177:15;42170:29;41985:221;:::o;42212:173::-;42352:25;42348:1;42340:6;42336:14;42329:49;42212:173;:::o;42391:122::-;42464:24;42482:5;42464:24;:::i;:::-;42457:5;42454:35;42444:63;;42503:1;42500;42493:12;42444:63;42391:122;:::o;42519:116::-;42589:21;42604:5;42589:21;:::i;:::-;42582:5;42579:32;42569:60;;42625:1;42622;42615:12;42569:60;42519:116;:::o;42641:120::-;42713:23;42730:5;42713:23;:::i;:::-;42706:5;42703:34;42693:62;;42751:1;42748;42741:12;42693:62;42641:120;:::o;42767:122::-;42840:24;42858:5;42840:24;:::i;:::-;42833:5;42830:35;42820:63;;42879:1;42876;42869:12;42820:63;42767:122;:::o

Swarm Source

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