ETH Price: $3,416.21 (-1.16%)
Gas: 9 Gwei

Token

The Merge Watch Party (The Merge Watch Party)
 

Overview

Max Total Supply

128 The Merge Watch Party

Holders

128

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
maxlion.eth
Balance
1 The Merge Watch Party
0x2276de711b7e822af65b50ff214d2ce1d36154ca
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:
The_Merge_Watch_Party

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-15
*/

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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


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


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

pragma solidity ^0.8.0;

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

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

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


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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


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


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

pragma solidity ^0.8.0;

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

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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


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


// OpenZeppelin Contracts (last updated v4.6.0) (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 overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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


// File contracts/The_Merge_Watch_Party.sol


pragma solidity ^0.8.6;



contract The_Merge_Watch_Party is ERC721 {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter public counters;

  string public baseUri;

  uint256 public totalMetadata;

  mapping(uint256 => uint256) public tokenMetadata;
  mapping(address => string) public userMessage;

  constructor(string memory _baseUri, uint256 _totalMetadata)
    ERC721('The Merge Watch Party', 'The Merge Watch Party')
  {
    baseUri = _baseUri;
    totalMetadata = _totalMetadata;
  }

  /** ========== view functions ========== */
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      'ERC721Metadata: URI query for nonexistent token'
    );

    uint256 metadataId = tokenMetadata[tokenId];
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, metadataId.toString(), '.json'))
        : '';
  }

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

  /** ========== main functions ========== */
  function mint(string memory _message) external {
    require(bytes(userMessage[msg.sender]).length == 0, 'only allow mint once');

    // get tokenId
    uint256 currentTokenId = counters.current();
    counters.increment();

    // generate token metadata
    uint256 metadataId = _randomMetaData(currentTokenId, _message);
    tokenMetadata[currentTokenId] = metadataId;

    // record user message
    userMessage[msg.sender] = _message;

    // mint nft
    _mint(msg.sender, currentTokenId);

    // emit event
    emit Minted(msg.sender, currentTokenId, metadataId, _message);
  }

  /** ========== internal functions ========== */
  function _baseURI() internal view virtual override returns (string memory) {
    return baseUri;
  }

  function _beforeTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal virtual override {
    require(from == address(0), 'SBT: only allow first mint');
    super._beforeTokenTransfer(from, to, tokenId);
  }

  function _randomMetaData(uint256 tokenId, string memory _message)
    internal
    view
    returns (uint256 metadataId)
  {
    // cause the random number is only limited in totalChoices that cancel safe math check to save a little gas
    unchecked {
      metadataId =
        (uint256(
          keccak256(
            abi.encodePacked(
              'random mint: ',
              _message,
              'and the tokenId is: ',
              tokenId.toString()
            )
          )
        ) % totalMetadata) +
        1;
    }
  }

  /** ========== event ========== */
  event Minted(
    address indexed account,
    uint256 indexed tokenId,
    uint256 indexed metadataId,
    string message
  );
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"},{"internalType":"uint256","name":"_totalMetadata","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"metadataId","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"Minted","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":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"counters","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_message","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"","type":"uint256"}],"name":"tokenMetadata","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":"totalMetadata","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"address"}],"name":"userMessage","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200345338038062003453833981810160405281019062000037919062000244565b6040518060400160405280601581526020017f546865204d6572676520576174636820506172747900000000000000000000008152506040518060400160405280601581526020017f546865204d6572676520576174636820506172747900000000000000000000008152508160009080519060200190620000bb929190620000ff565b508060019080519060200190620000d4929190620000ff565b5050508160079080519060200190620000ef929190620000ff565b5080600881905550505062000452565b8280546200010d9062000349565b90600052602060002090601f0160209004810192826200013157600085556200017d565b82601f106200014c57805160ff19168380011785556200017d565b828001600101855582156200017d579182015b828111156200017c5782518255916020019190600101906200015f565b5b5090506200018c919062000190565b5090565b5b80821115620001ab57600081600090555060010162000191565b5090565b6000620001c6620001c084620002d3565b620002aa565b905082815260208101848484011115620001e557620001e462000418565b5b620001f284828562000313565b509392505050565b600082601f83011262000212576200021162000413565b5b815162000224848260208601620001af565b91505092915050565b6000815190506200023e8162000438565b92915050565b600080604083850312156200025e576200025d62000422565b5b600083015167ffffffffffffffff8111156200027f576200027e6200041d565b5b6200028d85828601620001fa565b9250506020620002a0858286016200022d565b9150509250929050565b6000620002b6620002c9565b9050620002c482826200037f565b919050565b6000604051905090565b600067ffffffffffffffff821115620002f157620002f0620003e4565b5b620002fc8262000427565b9050602081019050919050565b6000819050919050565b60005b838110156200033357808201518184015260208101905062000316565b8381111562000343576000848401525b50505050565b600060028204905060018216806200036257607f821691505b60208210811415620003795762000378620003b5565b5b50919050565b6200038a8262000427565b810181811067ffffffffffffffff82111715620003ac57620003ab620003e4565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620004438162000309565b81146200044f57600080fd5b50565b612ff180620004626000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063c87b56dd11610071578063c87b56dd14610355578063ce69b07a14610385578063d85d3d27146103a3578063e985e9c5146103bf578063f7210633146103ef5761012c565b806370a08231146102b157806395d89b41146102e15780639abc8320146102ff578063a22cb4651461031d578063b88d4fde146103395761012c565b806323b872dd116100f457806323b872dd146101e957806342842e0e146102055780636352211e1461022157806363a9a335146102515780636914db60146102815761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806318160ddd146101cb575b600080fd5b61014b60048036038101906101469190611f29565b61040d565b6040516101589190612432565b60405180910390f35b6101696104ef565b604051610176919061244d565b60405180910390f35b61019960048036038101906101949190611fcc565b610581565b6040516101a691906123cb565b60405180910390f35b6101c960048036038101906101c49190611ee9565b610606565b005b6101d361071e565b6040516101e0919061266f565b60405180910390f35b61020360048036038101906101fe9190611dd3565b61072f565b005b61021f600480360381019061021a9190611dd3565b61078f565b005b61023b60048036038101906102369190611fcc565b6107af565b60405161024891906123cb565b60405180910390f35b61026b60048036038101906102669190611d66565b610861565b604051610278919061244d565b60405180910390f35b61029b60048036038101906102969190611fcc565b610901565b6040516102a8919061266f565b60405180910390f35b6102cb60048036038101906102c69190611d66565b610919565b6040516102d8919061266f565b60405180910390f35b6102e96109d1565b6040516102f6919061244d565b60405180910390f35b610307610a63565b604051610314919061244d565b60405180910390f35b61033760048036038101906103329190611ea9565b610af1565b005b610353600480360381019061034e9190611e26565b610b07565b005b61036f600480360381019061036a9190611fcc565b610b69565b60405161037c919061244d565b60405180910390f35b61038d610c29565b60405161039a919061266f565b60405180910390f35b6103bd60048036038101906103b89190611f83565b610c2f565b005b6103d960048036038101906103d49190611d93565b610dae565b6040516103e69190612432565b60405180910390f35b6103f7610e42565b604051610404919061266f565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e857506104e782610e4e565b5b9050919050565b6060600080546104fe906128c5565b80601f016020809104026020016040519081016040528092919081815260200182805461052a906128c5565b80156105775780601f1061054c57610100808354040283529160200191610577565b820191906000526020600020905b81548152906001019060200180831161055a57829003601f168201915b5050505050905090565b600061058c82610eb8565b6105cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c2906125ef565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610611826107af565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610682576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106799061262f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106a1610f24565b73ffffffffffffffffffffffffffffffffffffffff1614806106d057506106cf816106ca610f24565b610dae565b5b61070f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107069061256f565b60405180910390fd5b6107198383610f2c565b505050565b600061072a6006610fe5565b905090565b61074061073a610f24565b82610ff3565b61077f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107769061264f565b60405180910390fd5b61078a8383836110d1565b505050565b6107aa83838360405180602001604052806000815250610b07565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f906125af565b60405180910390fd5b80915050919050565b600a6020528060005260406000206000915090508054610880906128c5565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac906128c5565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b505050505081565b60096020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561098a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109819061258f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546109e0906128c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c906128c5565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b60078054610a70906128c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c906128c5565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b505050505081565b610b03610afc610f24565b8383611338565b5050565b610b18610b12610f24565b83610ff3565b610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e9061264f565b60405180910390fd5b610b63848484846114a5565b50505050565b6060610b7482610eb8565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa9061260f565b60405180910390fd5b6000600960008481526020019081526020016000205490506000610bd5611501565b90506000815111610bf55760405180602001604052806000815250610c20565b80610bff83611593565b604051602001610c10929190612362565b6040516020818303038152906040525b92505050919050565b60085481565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054610c7b906128c5565b905014610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb49061246f565b60405180910390fd5b6000610cc96006610fe5565b9050610cd560066116f4565b6000610ce1828461170a565b905080600960008481526020019081526020016000208190555082600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190610d4e929190611b7a565b50610d59338361175d565b80823373ffffffffffffffffffffffffffffffffffffffff167ff2cb5e52049d127ad1c335f1cc25f2fdbc911bec1beb2611f4c1e8b1c274d4b486604051610da1919061244d565b60405180910390a4505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60068060000154905081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f9f836107af565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000610ffe82610eb8565b61103d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110349061254f565b60405180910390fd5b6000611048836107af565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061108a57506110898185610dae565b5b806110c857508373ffffffffffffffffffffffffffffffffffffffff166110b084610581565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166110f1826107af565b73ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e906124cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae9061250f565b60405180910390fd5b6111c2838383611937565b6111cd600082610f2c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461121d91906127db565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112749190612754565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113338383836119b6565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061252f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114989190612432565b60405180910390a3505050565b6114b08484846110d1565b6114bc848484846119bb565b6114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f2906124af565b60405180910390fd5b50505050565b606060078054611510906128c5565b80601f016020809104026020016040519081016040528092919081815260200182805461153c906128c5565b80156115895780601f1061155e57610100808354040283529160200191611589565b820191906000526020600020905b81548152906001019060200180831161156c57829003601f168201915b5050505050905090565b606060008214156115db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116ef565b600082905060005b6000821461160d5780806115f690612928565b915050600a8261160691906127aa565b91506115e3565b60008167ffffffffffffffff81111561162957611628612a5e565b5b6040519080825280601f01601f19166020018201604052801561165b5781602001600182028036833780820191505090505b5090505b600085146116e85760018261167491906127db565b9150600a856116839190612971565b603061168f9190612754565b60f81b8183815181106116a5576116a4612a2f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116e191906127aa565b945061165f565b8093505050505b919050565b6001816000016000828254019250508190555050565b600060016008548361171b86611593565b60405160200161172c929190612391565b6040516020818303038152906040528051906020012060001c81611753576117526129d1565b5b0601905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c4906125cf565b60405180910390fd5b6117d681610eb8565b15611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d906124ef565b60405180910390fd5b61182260008383611937565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118729190612754565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611933600083836119b6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d9061248f565b60405180910390fd5b6119b1838383611b52565b505050565b505050565b60006119dc8473ffffffffffffffffffffffffffffffffffffffff16611b57565b15611b45578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a05610f24565b8786866040518563ffffffff1660e01b8152600401611a2794939291906123e6565b602060405180830381600087803b158015611a4157600080fd5b505af1925050508015611a7257506040513d601f19601f82011682018060405250810190611a6f9190611f56565b60015b611af5573d8060008114611aa2576040519150601f19603f3d011682016040523d82523d6000602084013e611aa7565b606091505b50600081511415611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae4906124af565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b4a565b600190505b949350505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611b86906128c5565b90600052602060002090601f016020900481019282611ba85760008555611bef565b82601f10611bc157805160ff1916838001178555611bef565b82800160010185558215611bef579182015b82811115611bee578251825591602001919060010190611bd3565b5b509050611bfc9190611c00565b5090565b5b80821115611c19576000816000905550600101611c01565b5090565b6000611c30611c2b846126af565b61268a565b905082815260208101848484011115611c4c57611c4b612a92565b5b611c57848285612883565b509392505050565b6000611c72611c6d846126e0565b61268a565b905082815260208101848484011115611c8e57611c8d612a92565b5b611c99848285612883565b509392505050565b600081359050611cb081612f5f565b92915050565b600081359050611cc581612f76565b92915050565b600081359050611cda81612f8d565b92915050565b600081519050611cef81612f8d565b92915050565b600082601f830112611d0a57611d09612a8d565b5b8135611d1a848260208601611c1d565b91505092915050565b600082601f830112611d3857611d37612a8d565b5b8135611d48848260208601611c5f565b91505092915050565b600081359050611d6081612fa4565b92915050565b600060208284031215611d7c57611d7b612a9c565b5b6000611d8a84828501611ca1565b91505092915050565b60008060408385031215611daa57611da9612a9c565b5b6000611db885828601611ca1565b9250506020611dc985828601611ca1565b9150509250929050565b600080600060608486031215611dec57611deb612a9c565b5b6000611dfa86828701611ca1565b9350506020611e0b86828701611ca1565b9250506040611e1c86828701611d51565b9150509250925092565b60008060008060808587031215611e4057611e3f612a9c565b5b6000611e4e87828801611ca1565b9450506020611e5f87828801611ca1565b9350506040611e7087828801611d51565b925050606085013567ffffffffffffffff811115611e9157611e90612a97565b5b611e9d87828801611cf5565b91505092959194509250565b60008060408385031215611ec057611ebf612a9c565b5b6000611ece85828601611ca1565b9250506020611edf85828601611cb6565b9150509250929050565b60008060408385031215611f0057611eff612a9c565b5b6000611f0e85828601611ca1565b9250506020611f1f85828601611d51565b9150509250929050565b600060208284031215611f3f57611f3e612a9c565b5b6000611f4d84828501611ccb565b91505092915050565b600060208284031215611f6c57611f6b612a9c565b5b6000611f7a84828501611ce0565b91505092915050565b600060208284031215611f9957611f98612a9c565b5b600082013567ffffffffffffffff811115611fb757611fb6612a97565b5b611fc384828501611d23565b91505092915050565b600060208284031215611fe257611fe1612a9c565b5b6000611ff084828501611d51565b91505092915050565b6120028161280f565b82525050565b61201181612821565b82525050565b600061202282612711565b61202c8185612727565b935061203c818560208601612892565b61204581612aa1565b840191505092915050565b600061205b8261271c565b6120658185612738565b9350612075818560208601612892565b61207e81612aa1565b840191505092915050565b60006120948261271c565b61209e8185612749565b93506120ae818560208601612892565b80840191505092915050565b60006120c7601483612738565b91506120d282612ab2565b602082019050919050565b60006120ea601a83612738565b91506120f582612adb565b602082019050919050565b600061210d603283612738565b915061211882612b04565b604082019050919050565b6000612130602583612738565b915061213b82612b53565b604082019050919050565b6000612153601c83612738565b915061215e82612ba2565b602082019050919050565b6000612176602483612738565b915061218182612bcb565b604082019050919050565b6000612199601983612738565b91506121a482612c1a565b602082019050919050565b60006121bc602c83612738565b91506121c782612c43565b604082019050919050565b60006121df603883612738565b91506121ea82612c92565b604082019050919050565b6000612202602a83612738565b915061220d82612ce1565b604082019050919050565b6000612225602983612738565b915061223082612d30565b604082019050919050565b6000612248602083612738565b915061225382612d7f565b602082019050919050565b600061226b602c83612738565b915061227682612da8565b604082019050919050565b600061228e601483612749565b915061229982612df7565b601482019050919050565b60006122b1600583612749565b91506122bc82612e20565b600582019050919050565b60006122d4602f83612738565b91506122df82612e49565b604082019050919050565b60006122f7602183612738565b915061230282612e98565b604082019050919050565b600061231a603183612738565b915061232582612ee7565b604082019050919050565b600061233d600d83612749565b915061234882612f36565b600d82019050919050565b61235c81612879565b82525050565b600061236e8285612089565b915061237a8284612089565b9150612385826122a4565b91508190509392505050565b600061239c82612330565b91506123a88285612089565b91506123b382612281565b91506123bf8284612089565b91508190509392505050565b60006020820190506123e06000830184611ff9565b92915050565b60006080820190506123fb6000830187611ff9565b6124086020830186611ff9565b6124156040830185612353565b81810360608301526124278184612017565b905095945050505050565b60006020820190506124476000830184612008565b92915050565b600060208201905081810360008301526124678184612050565b905092915050565b60006020820190508181036000830152612488816120ba565b9050919050565b600060208201905081810360008301526124a8816120dd565b9050919050565b600060208201905081810360008301526124c881612100565b9050919050565b600060208201905081810360008301526124e881612123565b9050919050565b6000602082019050818103600083015261250881612146565b9050919050565b6000602082019050818103600083015261252881612169565b9050919050565b600060208201905081810360008301526125488161218c565b9050919050565b60006020820190508181036000830152612568816121af565b9050919050565b60006020820190508181036000830152612588816121d2565b9050919050565b600060208201905081810360008301526125a8816121f5565b9050919050565b600060208201905081810360008301526125c881612218565b9050919050565b600060208201905081810360008301526125e88161223b565b9050919050565b600060208201905081810360008301526126088161225e565b9050919050565b60006020820190508181036000830152612628816122c7565b9050919050565b60006020820190508181036000830152612648816122ea565b9050919050565b600060208201905081810360008301526126688161230d565b9050919050565b60006020820190506126846000830184612353565b92915050565b60006126946126a5565b90506126a082826128f7565b919050565b6000604051905090565b600067ffffffffffffffff8211156126ca576126c9612a5e565b5b6126d382612aa1565b9050602081019050919050565b600067ffffffffffffffff8211156126fb576126fa612a5e565b5b61270482612aa1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061275f82612879565b915061276a83612879565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561279f5761279e6129a2565b5b828201905092915050565b60006127b582612879565b91506127c083612879565b9250826127d0576127cf6129d1565b5b828204905092915050565b60006127e682612879565b91506127f183612879565b925082821015612804576128036129a2565b5b828203905092915050565b600061281a82612859565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156128b0578082015181840152602081019050612895565b838111156128bf576000848401525b50505050565b600060028204905060018216806128dd57607f821691505b602082108114156128f1576128f0612a00565b5b50919050565b61290082612aa1565b810181811067ffffffffffffffff8211171561291f5761291e612a5e565b5b80604052505050565b600061293382612879565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612966576129656129a2565b5b600182019050919050565b600061297c82612879565b915061298783612879565b925082612997576129966129d1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6f6e6c7920616c6c6f77206d696e74206f6e6365000000000000000000000000600082015250565b7f5342543a206f6e6c7920616c6c6f77206669727374206d696e74000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f616e642074686520746f6b656e49642069733a20000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f72616e646f6d206d696e743a2000000000000000000000000000000000000000600082015250565b612f688161280f565b8114612f7357600080fd5b50565b612f7f81612821565b8114612f8a57600080fd5b50565b612f968161282d565b8114612fa157600080fd5b50565b612fad81612879565b8114612fb857600080fd5b5056fea264697066735822122083e90950710eef191eb57eb4c0ee80ec26b11f9a5e5f22773f1b747a0759cfc664736f6c63430008060033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a4176356f364643687052417a62796448714b4d5a5662726a5969333647553464565855476e656a433566612f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063c87b56dd11610071578063c87b56dd14610355578063ce69b07a14610385578063d85d3d27146103a3578063e985e9c5146103bf578063f7210633146103ef5761012c565b806370a08231146102b157806395d89b41146102e15780639abc8320146102ff578063a22cb4651461031d578063b88d4fde146103395761012c565b806323b872dd116100f457806323b872dd146101e957806342842e0e146102055780636352211e1461022157806363a9a335146102515780636914db60146102815761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806318160ddd146101cb575b600080fd5b61014b60048036038101906101469190611f29565b61040d565b6040516101589190612432565b60405180910390f35b6101696104ef565b604051610176919061244d565b60405180910390f35b61019960048036038101906101949190611fcc565b610581565b6040516101a691906123cb565b60405180910390f35b6101c960048036038101906101c49190611ee9565b610606565b005b6101d361071e565b6040516101e0919061266f565b60405180910390f35b61020360048036038101906101fe9190611dd3565b61072f565b005b61021f600480360381019061021a9190611dd3565b61078f565b005b61023b60048036038101906102369190611fcc565b6107af565b60405161024891906123cb565b60405180910390f35b61026b60048036038101906102669190611d66565b610861565b604051610278919061244d565b60405180910390f35b61029b60048036038101906102969190611fcc565b610901565b6040516102a8919061266f565b60405180910390f35b6102cb60048036038101906102c69190611d66565b610919565b6040516102d8919061266f565b60405180910390f35b6102e96109d1565b6040516102f6919061244d565b60405180910390f35b610307610a63565b604051610314919061244d565b60405180910390f35b61033760048036038101906103329190611ea9565b610af1565b005b610353600480360381019061034e9190611e26565b610b07565b005b61036f600480360381019061036a9190611fcc565b610b69565b60405161037c919061244d565b60405180910390f35b61038d610c29565b60405161039a919061266f565b60405180910390f35b6103bd60048036038101906103b89190611f83565b610c2f565b005b6103d960048036038101906103d49190611d93565b610dae565b6040516103e69190612432565b60405180910390f35b6103f7610e42565b604051610404919061266f565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e857506104e782610e4e565b5b9050919050565b6060600080546104fe906128c5565b80601f016020809104026020016040519081016040528092919081815260200182805461052a906128c5565b80156105775780601f1061054c57610100808354040283529160200191610577565b820191906000526020600020905b81548152906001019060200180831161055a57829003601f168201915b5050505050905090565b600061058c82610eb8565b6105cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c2906125ef565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610611826107af565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610682576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106799061262f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106a1610f24565b73ffffffffffffffffffffffffffffffffffffffff1614806106d057506106cf816106ca610f24565b610dae565b5b61070f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107069061256f565b60405180910390fd5b6107198383610f2c565b505050565b600061072a6006610fe5565b905090565b61074061073a610f24565b82610ff3565b61077f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107769061264f565b60405180910390fd5b61078a8383836110d1565b505050565b6107aa83838360405180602001604052806000815250610b07565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f906125af565b60405180910390fd5b80915050919050565b600a6020528060005260406000206000915090508054610880906128c5565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac906128c5565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b505050505081565b60096020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561098a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109819061258f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546109e0906128c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c906128c5565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b60078054610a70906128c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c906128c5565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b505050505081565b610b03610afc610f24565b8383611338565b5050565b610b18610b12610f24565b83610ff3565b610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e9061264f565b60405180910390fd5b610b63848484846114a5565b50505050565b6060610b7482610eb8565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa9061260f565b60405180910390fd5b6000600960008481526020019081526020016000205490506000610bd5611501565b90506000815111610bf55760405180602001604052806000815250610c20565b80610bff83611593565b604051602001610c10929190612362565b6040516020818303038152906040525b92505050919050565b60085481565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054610c7b906128c5565b905014610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb49061246f565b60405180910390fd5b6000610cc96006610fe5565b9050610cd560066116f4565b6000610ce1828461170a565b905080600960008481526020019081526020016000208190555082600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190610d4e929190611b7a565b50610d59338361175d565b80823373ffffffffffffffffffffffffffffffffffffffff167ff2cb5e52049d127ad1c335f1cc25f2fdbc911bec1beb2611f4c1e8b1c274d4b486604051610da1919061244d565b60405180910390a4505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60068060000154905081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f9f836107af565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000610ffe82610eb8565b61103d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110349061254f565b60405180910390fd5b6000611048836107af565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061108a57506110898185610dae565b5b806110c857508373ffffffffffffffffffffffffffffffffffffffff166110b084610581565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166110f1826107af565b73ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e906124cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae9061250f565b60405180910390fd5b6111c2838383611937565b6111cd600082610f2c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461121d91906127db565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112749190612754565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113338383836119b6565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061252f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114989190612432565b60405180910390a3505050565b6114b08484846110d1565b6114bc848484846119bb565b6114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f2906124af565b60405180910390fd5b50505050565b606060078054611510906128c5565b80601f016020809104026020016040519081016040528092919081815260200182805461153c906128c5565b80156115895780601f1061155e57610100808354040283529160200191611589565b820191906000526020600020905b81548152906001019060200180831161156c57829003601f168201915b5050505050905090565b606060008214156115db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116ef565b600082905060005b6000821461160d5780806115f690612928565b915050600a8261160691906127aa565b91506115e3565b60008167ffffffffffffffff81111561162957611628612a5e565b5b6040519080825280601f01601f19166020018201604052801561165b5781602001600182028036833780820191505090505b5090505b600085146116e85760018261167491906127db565b9150600a856116839190612971565b603061168f9190612754565b60f81b8183815181106116a5576116a4612a2f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116e191906127aa565b945061165f565b8093505050505b919050565b6001816000016000828254019250508190555050565b600060016008548361171b86611593565b60405160200161172c929190612391565b6040516020818303038152906040528051906020012060001c81611753576117526129d1565b5b0601905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c4906125cf565b60405180910390fd5b6117d681610eb8565b15611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d906124ef565b60405180910390fd5b61182260008383611937565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118729190612754565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611933600083836119b6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d9061248f565b60405180910390fd5b6119b1838383611b52565b505050565b505050565b60006119dc8473ffffffffffffffffffffffffffffffffffffffff16611b57565b15611b45578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a05610f24565b8786866040518563ffffffff1660e01b8152600401611a2794939291906123e6565b602060405180830381600087803b158015611a4157600080fd5b505af1925050508015611a7257506040513d601f19601f82011682018060405250810190611a6f9190611f56565b60015b611af5573d8060008114611aa2576040519150601f19603f3d011682016040523d82523d6000602084013e611aa7565b606091505b50600081511415611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae4906124af565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b4a565b600190505b949350505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611b86906128c5565b90600052602060002090601f016020900481019282611ba85760008555611bef565b82601f10611bc157805160ff1916838001178555611bef565b82800160010185558215611bef579182015b82811115611bee578251825591602001919060010190611bd3565b5b509050611bfc9190611c00565b5090565b5b80821115611c19576000816000905550600101611c01565b5090565b6000611c30611c2b846126af565b61268a565b905082815260208101848484011115611c4c57611c4b612a92565b5b611c57848285612883565b509392505050565b6000611c72611c6d846126e0565b61268a565b905082815260208101848484011115611c8e57611c8d612a92565b5b611c99848285612883565b509392505050565b600081359050611cb081612f5f565b92915050565b600081359050611cc581612f76565b92915050565b600081359050611cda81612f8d565b92915050565b600081519050611cef81612f8d565b92915050565b600082601f830112611d0a57611d09612a8d565b5b8135611d1a848260208601611c1d565b91505092915050565b600082601f830112611d3857611d37612a8d565b5b8135611d48848260208601611c5f565b91505092915050565b600081359050611d6081612fa4565b92915050565b600060208284031215611d7c57611d7b612a9c565b5b6000611d8a84828501611ca1565b91505092915050565b60008060408385031215611daa57611da9612a9c565b5b6000611db885828601611ca1565b9250506020611dc985828601611ca1565b9150509250929050565b600080600060608486031215611dec57611deb612a9c565b5b6000611dfa86828701611ca1565b9350506020611e0b86828701611ca1565b9250506040611e1c86828701611d51565b9150509250925092565b60008060008060808587031215611e4057611e3f612a9c565b5b6000611e4e87828801611ca1565b9450506020611e5f87828801611ca1565b9350506040611e7087828801611d51565b925050606085013567ffffffffffffffff811115611e9157611e90612a97565b5b611e9d87828801611cf5565b91505092959194509250565b60008060408385031215611ec057611ebf612a9c565b5b6000611ece85828601611ca1565b9250506020611edf85828601611cb6565b9150509250929050565b60008060408385031215611f0057611eff612a9c565b5b6000611f0e85828601611ca1565b9250506020611f1f85828601611d51565b9150509250929050565b600060208284031215611f3f57611f3e612a9c565b5b6000611f4d84828501611ccb565b91505092915050565b600060208284031215611f6c57611f6b612a9c565b5b6000611f7a84828501611ce0565b91505092915050565b600060208284031215611f9957611f98612a9c565b5b600082013567ffffffffffffffff811115611fb757611fb6612a97565b5b611fc384828501611d23565b91505092915050565b600060208284031215611fe257611fe1612a9c565b5b6000611ff084828501611d51565b91505092915050565b6120028161280f565b82525050565b61201181612821565b82525050565b600061202282612711565b61202c8185612727565b935061203c818560208601612892565b61204581612aa1565b840191505092915050565b600061205b8261271c565b6120658185612738565b9350612075818560208601612892565b61207e81612aa1565b840191505092915050565b60006120948261271c565b61209e8185612749565b93506120ae818560208601612892565b80840191505092915050565b60006120c7601483612738565b91506120d282612ab2565b602082019050919050565b60006120ea601a83612738565b91506120f582612adb565b602082019050919050565b600061210d603283612738565b915061211882612b04565b604082019050919050565b6000612130602583612738565b915061213b82612b53565b604082019050919050565b6000612153601c83612738565b915061215e82612ba2565b602082019050919050565b6000612176602483612738565b915061218182612bcb565b604082019050919050565b6000612199601983612738565b91506121a482612c1a565b602082019050919050565b60006121bc602c83612738565b91506121c782612c43565b604082019050919050565b60006121df603883612738565b91506121ea82612c92565b604082019050919050565b6000612202602a83612738565b915061220d82612ce1565b604082019050919050565b6000612225602983612738565b915061223082612d30565b604082019050919050565b6000612248602083612738565b915061225382612d7f565b602082019050919050565b600061226b602c83612738565b915061227682612da8565b604082019050919050565b600061228e601483612749565b915061229982612df7565b601482019050919050565b60006122b1600583612749565b91506122bc82612e20565b600582019050919050565b60006122d4602f83612738565b91506122df82612e49565b604082019050919050565b60006122f7602183612738565b915061230282612e98565b604082019050919050565b600061231a603183612738565b915061232582612ee7565b604082019050919050565b600061233d600d83612749565b915061234882612f36565b600d82019050919050565b61235c81612879565b82525050565b600061236e8285612089565b915061237a8284612089565b9150612385826122a4565b91508190509392505050565b600061239c82612330565b91506123a88285612089565b91506123b382612281565b91506123bf8284612089565b91508190509392505050565b60006020820190506123e06000830184611ff9565b92915050565b60006080820190506123fb6000830187611ff9565b6124086020830186611ff9565b6124156040830185612353565b81810360608301526124278184612017565b905095945050505050565b60006020820190506124476000830184612008565b92915050565b600060208201905081810360008301526124678184612050565b905092915050565b60006020820190508181036000830152612488816120ba565b9050919050565b600060208201905081810360008301526124a8816120dd565b9050919050565b600060208201905081810360008301526124c881612100565b9050919050565b600060208201905081810360008301526124e881612123565b9050919050565b6000602082019050818103600083015261250881612146565b9050919050565b6000602082019050818103600083015261252881612169565b9050919050565b600060208201905081810360008301526125488161218c565b9050919050565b60006020820190508181036000830152612568816121af565b9050919050565b60006020820190508181036000830152612588816121d2565b9050919050565b600060208201905081810360008301526125a8816121f5565b9050919050565b600060208201905081810360008301526125c881612218565b9050919050565b600060208201905081810360008301526125e88161223b565b9050919050565b600060208201905081810360008301526126088161225e565b9050919050565b60006020820190508181036000830152612628816122c7565b9050919050565b60006020820190508181036000830152612648816122ea565b9050919050565b600060208201905081810360008301526126688161230d565b9050919050565b60006020820190506126846000830184612353565b92915050565b60006126946126a5565b90506126a082826128f7565b919050565b6000604051905090565b600067ffffffffffffffff8211156126ca576126c9612a5e565b5b6126d382612aa1565b9050602081019050919050565b600067ffffffffffffffff8211156126fb576126fa612a5e565b5b61270482612aa1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061275f82612879565b915061276a83612879565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561279f5761279e6129a2565b5b828201905092915050565b60006127b582612879565b91506127c083612879565b9250826127d0576127cf6129d1565b5b828204905092915050565b60006127e682612879565b91506127f183612879565b925082821015612804576128036129a2565b5b828203905092915050565b600061281a82612859565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156128b0578082015181840152602081019050612895565b838111156128bf576000848401525b50505050565b600060028204905060018216806128dd57607f821691505b602082108114156128f1576128f0612a00565b5b50919050565b61290082612aa1565b810181811067ffffffffffffffff8211171561291f5761291e612a5e565b5b80604052505050565b600061293382612879565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612966576129656129a2565b5b600182019050919050565b600061297c82612879565b915061298783612879565b925082612997576129966129d1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6f6e6c7920616c6c6f77206d696e74206f6e6365000000000000000000000000600082015250565b7f5342543a206f6e6c7920616c6c6f77206669727374206d696e74000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f616e642074686520746f6b656e49642069733a20000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f72616e646f6d206d696e743a2000000000000000000000000000000000000000600082015250565b612f688161280f565b8114612f7357600080fd5b50565b612f7f81612821565b8114612f8a57600080fd5b50565b612f968161282d565b8114612fa157600080fd5b50565b612fad81612879565b8114612fb857600080fd5b5056fea264697066735822122083e90950710eef191eb57eb4c0ee80ec26b11f9a5e5f22773f1b747a0759cfc664736f6c63430008060033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a4176356f364643687052417a62796448714b4d5a5662726a5969333647553464565855476e656a433566612f00000000000000000000

-----Decoded View---------------
Arg [0] : _baseUri (string): ipfs://QmZAv5o6FChpRAzbydHqKMZVbrjYi36GU4dVXUGnejC5fa/
Arg [1] : _totalMetadata (uint256): 8

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d5a4176356f364643687052417a62796448714b4d5a5662
Arg [4] : 726a5969333647553464565855476e656a433566612f00000000000000000000


Deployed Bytecode Sourcemap

36444:2937:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21774:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22719:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24279:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23802:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37477:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25029:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25439:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22413:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36717:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36664:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22143:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22888:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36601:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24572:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25695:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37015:456;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36629:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37623:605;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24798:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36562:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21774:305;21876:4;21928:25;21913:40;;;:11;:40;;;;:105;;;;21985:33;21970:48;;;:11;:48;;;;21913:105;:158;;;;22035:36;22059:11;22035:23;:36::i;:::-;21913:158;21893:178;;21774:305;;;:::o;22719:100::-;22773:13;22806:5;22799:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22719:100;:::o;24279:221::-;24355:7;24383:16;24391:7;24383;:16::i;:::-;24375:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24468:15;:24;24484:7;24468:24;;;;;;;;;;;;;;;;;;;;;24461:31;;24279:221;;;:::o;23802:411::-;23883:13;23899:23;23914:7;23899:14;:23::i;:::-;23883:39;;23947:5;23941:11;;:2;:11;;;;23933:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24041:5;24025:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24050:37;24067:5;24074:12;:10;:12::i;:::-;24050:16;:37::i;:::-;24025:62;24003:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24184:21;24193:2;24197:7;24184:8;:21::i;:::-;23872:341;23802:411;;:::o;37477:93::-;37521:7;37546:18;:8;:16;:18::i;:::-;37539:25;;37477:93;:::o;25029:339::-;25224:41;25243:12;:10;:12::i;:::-;25257:7;25224:18;:41::i;:::-;25216:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25332:28;25342:4;25348:2;25352:7;25332:9;:28::i;:::-;25029:339;;;:::o;25439:185::-;25577:39;25594:4;25600:2;25604:7;25577:39;;;;;;;;;;;;:16;:39::i;:::-;25439:185;;;:::o;22413:239::-;22485:7;22505:13;22521:7;:16;22529:7;22521:16;;;;;;;;;;;;;;;;;;;;;22505:32;;22573:1;22556:19;;:5;:19;;;;22548:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22639:5;22632:12;;;22413:239;;;:::o;36717:45::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36664:48::-;;;;;;;;;;;;;;;;;:::o;22143:208::-;22215:7;22260:1;22243:19;;:5;:19;;;;22235:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22327:9;:16;22337:5;22327:16;;;;;;;;;;;;;;;;22320:23;;22143:208;;;:::o;22888:104::-;22944:13;22977:7;22970:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22888:104;:::o;36601:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24572:155::-;24667:52;24686:12;:10;:12::i;:::-;24700:8;24710;24667:18;:52::i;:::-;24572:155;;:::o;25695:328::-;25870:41;25889:12;:10;:12::i;:::-;25903:7;25870:18;:41::i;:::-;25862:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25976:39;25990:4;25996:2;26000:7;26009:5;25976:13;:39::i;:::-;25695:328;;;;:::o;37015:456::-;37113:13;37154:16;37162:7;37154;:16::i;:::-;37138:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37244:18;37265:13;:22;37279:7;37265:22;;;;;;;;;;;;37244:43;;37294:21;37318:10;:8;:10::i;:::-;37294:34;;37373:1;37355:7;37349:21;:25;:116;;;;;;;;;;;;;;;;;37410:7;37419:21;:10;:19;:21::i;:::-;37393:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37349:116;37335:130;;;;37015:456;;;:::o;36629:28::-;;;;:::o;37623:605::-;37726:1;37691:11;:23;37703:10;37691:23;;;;;;;;;;;;;;;37685:37;;;;;:::i;:::-;;;:42;37677:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37781:22;37806:18;:8;:16;:18::i;:::-;37781:43;;37831:20;:8;:18;:20::i;:::-;37892:18;37913:41;37929:14;37945:8;37913:15;:41::i;:::-;37892:62;;37993:10;37961:13;:29;37975:14;37961:29;;;;;;;;;;;:42;;;;38066:8;38040:11;:23;38052:10;38040:23;;;;;;;;;;;;;;;:34;;;;;;;;;;;;:::i;:::-;;38100:33;38106:10;38118:14;38100:5;:33::i;:::-;38201:10;38185:14;38173:10;38166:56;;;38213:8;38166:56;;;;;;:::i;:::-;;;;;;;;37670:558;;37623:605;:::o;24798:164::-;24895:4;24919:18;:25;24938:5;24919:25;;;;;;;;;;;;;;;:35;24945:8;24919:35;;;;;;;;;;;;;;;;;;;;;;;;;24912:42;;24798:164;;;;:::o;36562:32::-;;;;;;;;;:::o;20197:157::-;20282:4;20321:25;20306:40;;;:11;:40;;;;20299:47;;20197:157;;;:::o;27533:127::-;27598:4;27650:1;27622:30;;:7;:16;27630:7;27622:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27615:37;;27533:127;;;:::o;16980:98::-;17033:7;17060:10;17053:17;;16980:98;:::o;31679:174::-;31781:2;31754:15;:24;31770:7;31754:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31837:7;31833:2;31799:46;;31808:23;31823:7;31808:14;:23::i;:::-;31799:46;;;;;;;;;;;;31679:174;;:::o;35769:114::-;35834:7;35861;:14;;;35854:21;;35769:114;;;:::o;27827:348::-;27920:4;27945:16;27953:7;27945;:16::i;:::-;27937:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28021:13;28037:23;28052:7;28037:14;:23::i;:::-;28021:39;;28090:5;28079:16;;:7;:16;;;:52;;;;28099:32;28116:5;28123:7;28099:16;:32::i;:::-;28079:52;:87;;;;28159:7;28135:31;;:20;28147:7;28135:11;:20::i;:::-;:31;;;28079:87;28071:96;;;27827:348;;;;:::o;30936:625::-;31095:4;31068:31;;:23;31083:7;31068:14;:23::i;:::-;:31;;;31060:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31174:1;31160:16;;:2;:16;;;;31152:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31230:39;31251:4;31257:2;31261:7;31230:20;:39::i;:::-;31334:29;31351:1;31355:7;31334:8;:29::i;:::-;31395:1;31376:9;:15;31386:4;31376:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31424:1;31407:9;:13;31417:2;31407:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31455:2;31436:7;:16;31444:7;31436:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31494:7;31490:2;31475:27;;31484:4;31475:27;;;;;;;;;;;;31515:38;31535:4;31541:2;31545:7;31515:19;:38::i;:::-;30936:625;;;:::o;31995:315::-;32150:8;32141:17;;:5;:17;;;;32133:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32237:8;32199:18;:25;32218:5;32199:25;;;;;;;;;;;;;;;:35;32225:8;32199:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32283:8;32261:41;;32276:5;32261:41;;;32293:8;32261:41;;;;;;:::i;:::-;;;;;;;;31995:315;;;:::o;26905:::-;27062:28;27072:4;27078:2;27082:7;27062:9;:28::i;:::-;27109:48;27132:4;27138:2;27142:7;27151:5;27109:22;:48::i;:::-;27101:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26905:315;;;;:::o;38285:102::-;38345:13;38374:7;38367:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38285:102;:::o;17567:723::-;17623:13;17853:1;17844:5;:10;17840:53;;;17871:10;;;;;;;;;;;;;;;;;;;;;17840:53;17903:12;17918:5;17903:20;;17934:14;17959:78;17974:1;17966:4;:9;17959:78;;17992:8;;;;;:::i;:::-;;;;18023:2;18015:10;;;;;:::i;:::-;;;17959:78;;;18047:19;18079:6;18069:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18047:39;;18097:154;18113:1;18104:5;:10;18097:154;;18141:1;18131:11;;;;;:::i;:::-;;;18208:2;18200:5;:10;;;;:::i;:::-;18187:2;:24;;;;:::i;:::-;18174:39;;18157:6;18164;18157:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18237:2;18228:11;;;;;:::i;:::-;;;18097:154;;;18275:6;18261:21;;;;;17567:723;;;;:::o;35891:127::-;35998:1;35980:7;:14;;;:19;;;;;;;;;;;35891:127;:::o;38640:562::-;38744:18;39188:1;39162:13;;39038:8;39102:18;:7;:16;:18::i;:::-;38973:162;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38949:199;;;;;;38929:230;;:246;;;;;:::i;:::-;;;38928:261;38906:283;;38640:562;;;;:::o;29511:439::-;29605:1;29591:16;;:2;:16;;;;29583:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29664:16;29672:7;29664;:16::i;:::-;29663:17;29655:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29726:45;29755:1;29759:2;29763:7;29726:20;:45::i;:::-;29801:1;29784:9;:13;29794:2;29784:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29832:2;29813:7;:16;29821:7;29813:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29877:7;29873:2;29852:33;;29869:1;29852:33;;;;;;;;;;;;29898:44;29926:1;29930:2;29934:7;29898:19;:44::i;:::-;29511:439;;:::o;38393:241::-;38543:1;38527:18;;:4;:18;;;38519:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;38583:45;38610:4;38616:2;38620:7;38583:26;:45::i;:::-;38393:241;;;:::o;34757:125::-;;;;:::o;32875:799::-;33030:4;33051:15;:2;:13;;;:15::i;:::-;33047:620;;;33103:2;33087:36;;;33124:12;:10;:12::i;:::-;33138:4;33144:7;33153:5;33087:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33083:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33346:1;33329:6;:13;:18;33325:272;;;33372:60;;;;;;;;;;:::i;:::-;;;;;;;;33325:272;33547:6;33541:13;33532:6;33528:2;33524:15;33517:38;33083:529;33220:41;;;33210:51;;;:6;:51;;;;33203:58;;;;;33047:620;33651:4;33644:11;;32875:799;;;;;;;:::o;34246:126::-;;;;:::o;9023:326::-;9083:4;9340:1;9318:7;:19;;;:23;9311:30;;9023:326;;;:::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:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::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:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:2;;;5733:79;;:::i;:::-;5695:2;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5685:262;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6077:79;;:::i;:::-;6039:2;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;6029:273;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:2;;;6432:79;;:::i;:::-;6394:2;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:2;;;6632:79;;:::i;:::-;6596:2;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6384:433;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:2;;;6937:79;;:::i;:::-;6899:2;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6889:263;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7223:53;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7341:50;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8662:220;;;:::o;8888:366::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;9034:220;;;:::o;9260:366::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9406:220;;;:::o;9632:366::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9778:220;;;:::o;10004:366::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10150:220;;;:::o;10376:366::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10522:220;;;:::o;10748:366::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10894:220;;;:::o;11120:366::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11266:220;;;:::o;11492:366::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11638:220;;;:::o;11864:366::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;12010:220;;;:::o;12236:366::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12382:220;;;:::o;12608:366::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12754:220;;;:::o;12980:366::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;13126:220;;;:::o;13352:402::-;13512:3;13533:85;13615:2;13610:3;13533:85;:::i;:::-;13526:92;;13627:93;13716:3;13627:93;:::i;:::-;13745:2;13740:3;13736:12;13729:19;;13516:238;;;:::o;13760:400::-;13920:3;13941:84;14023:1;14018:3;13941:84;:::i;:::-;13934:91;;14034:93;14123:3;14034:93;:::i;:::-;14152:1;14147:3;14143:11;14136:18;;13924:236;;;:::o;14166:366::-;14308:3;14329:67;14393:2;14388:3;14329:67;:::i;:::-;14322:74;;14405:93;14494:3;14405:93;:::i;:::-;14523:2;14518:3;14514:12;14507:19;;14312:220;;;:::o;14538:366::-;14680:3;14701:67;14765:2;14760:3;14701:67;:::i;:::-;14694:74;;14777:93;14866:3;14777:93;:::i;:::-;14895:2;14890:3;14886:12;14879:19;;14684:220;;;:::o;14910:366::-;15052:3;15073:67;15137:2;15132:3;15073:67;:::i;:::-;15066:74;;15149:93;15238:3;15149:93;:::i;:::-;15267:2;15262:3;15258:12;15251:19;;15056:220;;;:::o;15282:402::-;15442:3;15463:85;15545:2;15540:3;15463:85;:::i;:::-;15456:92;;15557:93;15646:3;15557:93;:::i;:::-;15675:2;15670:3;15666:12;15659:19;;15446:238;;;:::o;15690:118::-;15777:24;15795:5;15777:24;:::i;:::-;15772:3;15765:37;15755:53;;:::o;15814:701::-;16095:3;16117:95;16208:3;16199:6;16117:95;:::i;:::-;16110:102;;16229:95;16320:3;16311:6;16229:95;:::i;:::-;16222:102;;16341:148;16485:3;16341:148;:::i;:::-;16334:155;;16506:3;16499:10;;16099:416;;;;;:::o;16521:967::-;16903:3;16925:148;17069:3;16925:148;:::i;:::-;16918:155;;17090:95;17181:3;17172:6;17090:95;:::i;:::-;17083:102;;17202:148;17346:3;17202:148;:::i;:::-;17195:155;;17367:95;17458:3;17449:6;17367:95;:::i;:::-;17360:102;;17479:3;17472:10;;16907:581;;;;;:::o;17494:222::-;17587:4;17625:2;17614:9;17610:18;17602:26;;17638:71;17706:1;17695:9;17691:17;17682:6;17638:71;:::i;:::-;17592:124;;;;:::o;17722:640::-;17917:4;17955:3;17944:9;17940:19;17932:27;;17969:71;18037:1;18026:9;18022:17;18013:6;17969:71;:::i;:::-;18050:72;18118:2;18107:9;18103:18;18094:6;18050:72;:::i;:::-;18132;18200:2;18189:9;18185:18;18176:6;18132:72;:::i;:::-;18251:9;18245:4;18241:20;18236:2;18225:9;18221:18;18214:48;18279:76;18350:4;18341:6;18279:76;:::i;:::-;18271:84;;17922:440;;;;;;;:::o;18368:210::-;18455:4;18493:2;18482:9;18478:18;18470:26;;18506:65;18568:1;18557:9;18553:17;18544:6;18506:65;:::i;:::-;18460:118;;;;:::o;18584:313::-;18697:4;18735:2;18724:9;18720:18;18712:26;;18784:9;18778:4;18774:20;18770:1;18759:9;18755:17;18748:47;18812:78;18885:4;18876:6;18812:78;:::i;:::-;18804:86;;18702:195;;;;:::o;18903:419::-;19069:4;19107:2;19096:9;19092:18;19084:26;;19156:9;19150:4;19146:20;19142:1;19131:9;19127:17;19120:47;19184:131;19310:4;19184:131;:::i;:::-;19176:139;;19074:248;;;:::o;19328:419::-;19494:4;19532:2;19521:9;19517:18;19509:26;;19581:9;19575:4;19571:20;19567:1;19556:9;19552:17;19545:47;19609:131;19735:4;19609:131;:::i;:::-;19601:139;;19499:248;;;:::o;19753:419::-;19919:4;19957:2;19946:9;19942:18;19934:26;;20006:9;20000:4;19996:20;19992:1;19981:9;19977:17;19970:47;20034:131;20160:4;20034:131;:::i;:::-;20026:139;;19924:248;;;:::o;20178:419::-;20344:4;20382:2;20371:9;20367:18;20359:26;;20431:9;20425:4;20421:20;20417:1;20406:9;20402:17;20395:47;20459:131;20585:4;20459:131;:::i;:::-;20451:139;;20349:248;;;:::o;20603:419::-;20769:4;20807:2;20796:9;20792:18;20784:26;;20856:9;20850:4;20846:20;20842:1;20831:9;20827:17;20820:47;20884:131;21010:4;20884:131;:::i;:::-;20876:139;;20774:248;;;:::o;21028:419::-;21194:4;21232:2;21221:9;21217:18;21209:26;;21281:9;21275:4;21271:20;21267:1;21256:9;21252:17;21245:47;21309:131;21435:4;21309:131;:::i;:::-;21301:139;;21199:248;;;:::o;21453:419::-;21619:4;21657:2;21646:9;21642:18;21634:26;;21706:9;21700:4;21696:20;21692:1;21681:9;21677:17;21670:47;21734:131;21860:4;21734:131;:::i;:::-;21726:139;;21624:248;;;:::o;21878:419::-;22044:4;22082:2;22071:9;22067:18;22059:26;;22131:9;22125:4;22121:20;22117:1;22106:9;22102:17;22095:47;22159:131;22285:4;22159:131;:::i;:::-;22151:139;;22049:248;;;:::o;22303:419::-;22469:4;22507:2;22496:9;22492:18;22484:26;;22556:9;22550:4;22546:20;22542:1;22531:9;22527:17;22520:47;22584:131;22710:4;22584:131;:::i;:::-;22576:139;;22474:248;;;:::o;22728:419::-;22894:4;22932:2;22921:9;22917:18;22909:26;;22981:9;22975:4;22971:20;22967:1;22956:9;22952:17;22945:47;23009:131;23135:4;23009:131;:::i;:::-;23001:139;;22899:248;;;:::o;23153:419::-;23319:4;23357:2;23346:9;23342:18;23334:26;;23406:9;23400:4;23396:20;23392:1;23381:9;23377:17;23370:47;23434:131;23560:4;23434:131;:::i;:::-;23426:139;;23324:248;;;:::o;23578:419::-;23744:4;23782:2;23771:9;23767:18;23759:26;;23831:9;23825:4;23821:20;23817:1;23806:9;23802:17;23795:47;23859:131;23985:4;23859:131;:::i;:::-;23851:139;;23749:248;;;:::o;24003:419::-;24169:4;24207:2;24196:9;24192:18;24184:26;;24256:9;24250:4;24246:20;24242:1;24231:9;24227:17;24220:47;24284:131;24410:4;24284:131;:::i;:::-;24276:139;;24174:248;;;:::o;24428:419::-;24594:4;24632:2;24621:9;24617:18;24609:26;;24681:9;24675:4;24671:20;24667:1;24656:9;24652:17;24645:47;24709:131;24835:4;24709:131;:::i;:::-;24701:139;;24599:248;;;:::o;24853:419::-;25019:4;25057:2;25046:9;25042:18;25034:26;;25106:9;25100:4;25096:20;25092:1;25081:9;25077:17;25070:47;25134:131;25260:4;25134:131;:::i;:::-;25126:139;;25024:248;;;:::o;25278:419::-;25444:4;25482:2;25471:9;25467:18;25459:26;;25531:9;25525:4;25521:20;25517:1;25506:9;25502:17;25495:47;25559:131;25685:4;25559:131;:::i;:::-;25551:139;;25449:248;;;:::o;25703:222::-;25796:4;25834:2;25823:9;25819:18;25811:26;;25847:71;25915:1;25904:9;25900:17;25891:6;25847:71;:::i;:::-;25801:124;;;;:::o;25931:129::-;25965:6;25992:20;;:::i;:::-;25982:30;;26021:33;26049:4;26041:6;26021:33;:::i;:::-;25972:88;;;:::o;26066:75::-;26099:6;26132:2;26126:9;26116:19;;26106:35;:::o;26147:307::-;26208:4;26298:18;26290:6;26287:30;26284:2;;;26320:18;;:::i;:::-;26284:2;26358:29;26380:6;26358:29;:::i;:::-;26350:37;;26442:4;26436;26432:15;26424:23;;26213:241;;;:::o;26460:308::-;26522:4;26612:18;26604:6;26601:30;26598:2;;;26634:18;;:::i;:::-;26598:2;26672:29;26694:6;26672:29;:::i;:::-;26664:37;;26756:4;26750;26746:15;26738:23;;26527:241;;;:::o;26774:98::-;26825:6;26859:5;26853:12;26843:22;;26832:40;;;:::o;26878:99::-;26930:6;26964:5;26958:12;26948:22;;26937:40;;;:::o;26983:168::-;27066:11;27100:6;27095:3;27088:19;27140:4;27135:3;27131:14;27116:29;;27078:73;;;;:::o;27157:169::-;27241:11;27275:6;27270:3;27263:19;27315:4;27310:3;27306:14;27291:29;;27253:73;;;;:::o;27332:148::-;27434:11;27471:3;27456:18;;27446:34;;;;:::o;27486:305::-;27526:3;27545:20;27563:1;27545:20;:::i;:::-;27540:25;;27579:20;27597:1;27579:20;:::i;:::-;27574:25;;27733:1;27665:66;27661:74;27658:1;27655:81;27652:2;;;27739:18;;:::i;:::-;27652:2;27783:1;27780;27776:9;27769:16;;27530:261;;;;:::o;27797:185::-;27837:1;27854:20;27872:1;27854:20;:::i;:::-;27849:25;;27888:20;27906:1;27888:20;:::i;:::-;27883:25;;27927:1;27917:2;;27932:18;;:::i;:::-;27917:2;27974:1;27971;27967:9;27962:14;;27839:143;;;;:::o;27988:191::-;28028:4;28048:20;28066:1;28048:20;:::i;:::-;28043:25;;28082:20;28100:1;28082:20;:::i;:::-;28077:25;;28121:1;28118;28115:8;28112:2;;;28126:18;;:::i;:::-;28112:2;28171:1;28168;28164:9;28156:17;;28033:146;;;;:::o;28185:96::-;28222:7;28251:24;28269:5;28251:24;:::i;:::-;28240:35;;28230:51;;;:::o;28287:90::-;28321:7;28364:5;28357:13;28350:21;28339:32;;28329:48;;;:::o;28383:149::-;28419:7;28459:66;28452:5;28448:78;28437:89;;28427:105;;;:::o;28538:126::-;28575:7;28615:42;28608:5;28604:54;28593:65;;28583:81;;;:::o;28670:77::-;28707:7;28736:5;28725:16;;28715:32;;;:::o;28753:154::-;28837:6;28832:3;28827;28814:30;28899:1;28890:6;28885:3;28881:16;28874:27;28804:103;;;:::o;28913:307::-;28981:1;28991:113;29005:6;29002:1;28999:13;28991:113;;;29090:1;29085:3;29081:11;29075:18;29071:1;29066:3;29062:11;29055:39;29027:2;29024:1;29020:10;29015:15;;28991:113;;;29122:6;29119:1;29116:13;29113:2;;;29202:1;29193:6;29188:3;29184:16;29177:27;29113:2;28962:258;;;;:::o;29226:320::-;29270:6;29307:1;29301:4;29297:12;29287:22;;29354:1;29348:4;29344:12;29375:18;29365:2;;29431:4;29423:6;29419:17;29409:27;;29365:2;29493;29485:6;29482:14;29462:18;29459:38;29456:2;;;29512:18;;:::i;:::-;29456:2;29277:269;;;;:::o;29552:281::-;29635:27;29657:4;29635:27;:::i;:::-;29627:6;29623:40;29765:6;29753:10;29750:22;29729:18;29717:10;29714:34;29711:62;29708:2;;;29776:18;;:::i;:::-;29708:2;29816:10;29812:2;29805:22;29595:238;;;:::o;29839:233::-;29878:3;29901:24;29919:5;29901:24;:::i;:::-;29892:33;;29947:66;29940:5;29937:77;29934:2;;;30017:18;;:::i;:::-;29934:2;30064:1;30057:5;30053:13;30046:20;;29882:190;;;:::o;30078:176::-;30110:1;30127:20;30145:1;30127:20;:::i;:::-;30122:25;;30161:20;30179:1;30161:20;:::i;:::-;30156:25;;30200:1;30190:2;;30205:18;;:::i;:::-;30190:2;30246:1;30243;30239:9;30234:14;;30112:142;;;;:::o;30260:180::-;30308:77;30305:1;30298:88;30405:4;30402:1;30395:15;30429:4;30426:1;30419:15;30446:180;30494:77;30491:1;30484:88;30591:4;30588:1;30581:15;30615:4;30612:1;30605:15;30632:180;30680:77;30677:1;30670:88;30777:4;30774:1;30767:15;30801:4;30798:1;30791:15;30818:180;30866:77;30863:1;30856:88;30963:4;30960:1;30953:15;30987:4;30984:1;30977:15;31004:180;31052:77;31049:1;31042:88;31149:4;31146:1;31139:15;31173:4;31170:1;31163:15;31190:117;31299:1;31296;31289:12;31313:117;31422:1;31419;31412:12;31436:117;31545:1;31542;31535:12;31559:117;31668:1;31665;31658:12;31682:102;31723:6;31774:2;31770:7;31765:2;31758:5;31754:14;31750:28;31740:38;;31730:54;;;:::o;31790:170::-;31930:22;31926:1;31918:6;31914:14;31907:46;31896:64;:::o;31966:176::-;32106:28;32102:1;32094:6;32090:14;32083:52;32072:70;:::o;32148:237::-;32288:34;32284:1;32276:6;32272:14;32265:58;32357:20;32352:2;32344:6;32340:15;32333:45;32254:131;:::o;32391:224::-;32531:34;32527:1;32519:6;32515:14;32508:58;32600:7;32595:2;32587:6;32583:15;32576:32;32497:118;:::o;32621:178::-;32761:30;32757:1;32749:6;32745:14;32738:54;32727:72;:::o;32805:223::-;32945:34;32941:1;32933:6;32929:14;32922:58;33014:6;33009:2;33001:6;32997:15;32990:31;32911:117;:::o;33034:175::-;33174:27;33170:1;33162:6;33158:14;33151:51;33140:69;:::o;33215:231::-;33355:34;33351:1;33343:6;33339:14;33332:58;33424:14;33419:2;33411:6;33407:15;33400:39;33321:125;:::o;33452:243::-;33592:34;33588:1;33580:6;33576:14;33569:58;33661:26;33656:2;33648:6;33644:15;33637:51;33558:137;:::o;33701:229::-;33841:34;33837:1;33829:6;33825:14;33818:58;33910:12;33905:2;33897:6;33893:15;33886:37;33807:123;:::o;33936:228::-;34076:34;34072:1;34064:6;34060:14;34053:58;34145:11;34140:2;34132:6;34128:15;34121:36;34042:122;:::o;34170:182::-;34310:34;34306:1;34298:6;34294:14;34287:58;34276:76;:::o;34358:231::-;34498:34;34494:1;34486:6;34482:14;34475:58;34567:14;34562:2;34554:6;34550:15;34543:39;34464:125;:::o;34595:170::-;34735:22;34731:1;34723:6;34719:14;34712:46;34701:64;:::o;34771:155::-;34911:7;34907:1;34899:6;34895:14;34888:31;34877:49;:::o;34932:234::-;35072:34;35068:1;35060:6;35056:14;35049:58;35141:17;35136:2;35128:6;35124:15;35117:42;35038:128;:::o;35172:220::-;35312:34;35308:1;35300:6;35296:14;35289:58;35381:3;35376:2;35368:6;35364:15;35357:28;35278:114;:::o;35398:236::-;35538:34;35534:1;35526:6;35522:14;35515:58;35607:19;35602:2;35594:6;35590:15;35583:44;35504:130;:::o;35640:163::-;35780:15;35776:1;35768:6;35764:14;35757:39;35746:57;:::o;35809:122::-;35882:24;35900:5;35882:24;:::i;:::-;35875:5;35872:35;35862:2;;35921:1;35918;35911:12;35862:2;35852:79;:::o;35937:116::-;36007:21;36022:5;36007:21;:::i;:::-;36000:5;35997:32;35987:2;;36043:1;36040;36033:12;35987:2;35977:76;:::o;36059:120::-;36131:23;36148:5;36131:23;:::i;:::-;36124:5;36121:34;36111:2;;36169:1;36166;36159:12;36111:2;36101:78;:::o;36185:122::-;36258:24;36276:5;36258:24;:::i;:::-;36251:5;36248:35;36238:2;;36297:1;36294;36287:12;36238:2;36228:79;:::o

Swarm Source

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