ETH Price: $3,337.09 (-3.69%)
Gas: 2 Gwei

Token

Poopy Experiences (POOPYEXP)
 

Overview

Max Total Supply

192 POOPYEXP

Holders

45

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
15 POOPYEXP
0xb9c979c5aEfcC85F5503A9bCcC9dCaF4E239fCB1
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:
PoopyExperiencesNFT

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-27
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}

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

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

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).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 {}
}

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**

                        _mmm888💩💩💩💩888mmm_
                   _m8**888888888888888888888**8m_
                 m8*8m*8m888***88~88~8***888m8*m8*8m
               m8888mm888*8m88888 88 8888m8*888mm8888m
              m8888888*8m88888888 88 8888888m8*8888888m
             m8888888*_8888888888 88 888888888_*8888888m
             88888888 888 POOPY EXPERIENCES 888 88888888
             88888888 88888888888 88 8888888888 88888888
             ~88888888 8888888888 88 888888888 88888888~
              ~88888888m8*8888888 88 888888*8m88888888~
               ~*888888888m8***88 88 8***8m888888888*~
                 ~*888888888888mmmmmmm888888888888*~
                    ~**888~m=m=mmmmmmm=m=m~888**~
            ____________88_888888888888888_88____________
           *888888888888888888888888888888888888888888888*
                 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
                 88888888888888888888888888888888888
                  888888888888888888888888888888888
                   *88888888*88888888888*88888888*
                     ~*888888 888888888 888888*~
                        ~**88 888888888 88**~
                          8mm 888888888 mm8
                         _88* 888888888 *88_
                    _____888_88888888888_888_____
                   8888888888888888888888888888888

**/

pragma solidity ^0.8.0;
/**
 * @title PoopyExperienceNFT contract
 * @dev Extends ERC721 Token
 */
contract PoopyExperiencesNFT is ERC721, ERC721Enumerable, Ownable {

    using Strings for uint256;

    uint256 public poopySalePrice = 0.1 ether;
    uint public constant maxPoopsPerTx = 20;
    uint256 public MAX_POOPS = 10000;
    bool public saleIsActive = false;

    constructor(string memory name, string memory tokenName) ERC721(name, tokenName) {
    }

    function reservePoopy() public onlyOwner {
        uint supply = totalSupply();
        uint i;
        for (i = 0; i < 100; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function setPoopyPrice(uint _poopySalePrice) public onlyOwner {
        poopySalePrice = _poopySalePrice;
    }

    function togglePlumbing() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function takePoopy(uint numberOfPoops) public payable {
        require(saleIsActive, "Sale must be active, Contract is constipated!");
        require(numberOfPoops <= maxPoopsPerTx, "Exceeded max poops per transaction");
        require(totalSupply() + numberOfPoops <= MAX_POOPS, "Mint would exceed max supply of poops");
        require(poopySalePrice * numberOfPoops <= msg.value, "Not enough Ether sent");

        for (uint i = 0; i < numberOfPoops; i++) {
            uint mintIndex = totalSupply();
            if (totalSupply() < MAX_POOPS) {
                _safeMint(msg.sender, mintIndex);
            }
        }
    }

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

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

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    modifier onlyBurnOrMint() {
        require(burnOrMint != address(0), "ERC721BurnMint: not enabled!");
        require(_msgSender() == burnOrMint, "ERC721BurnMint: caller is not approved address");
        _;
    }

    // Allow for Extending the Contract Functionality, no plans to enable this yet (Poopy Future Proofing)
    address burnOrMint;

    function setBurnOrMintAddress(address _burnOrMint) public onlyOwner {
        burnOrMint = _burnOrMint;
    }

    function burn(uint256 tokenId) public onlyBurnOrMint {
        _burn(tokenId);
    }

    function mint(address to, uint256 tokenId) public onlyBurnOrMint {
        _safeMint(to, tokenId);
    }

    string private _baseURIextension;

    function setBaseURI(string memory baseURI_) external onlyOwner() {
        _baseURIextension = baseURI_;
    }

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

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

        if (tokenURIExternal != address(0)) {
            return ERC721(tokenURIExternal).tokenURI(tokenId);
        }

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

    // Allow delegation of metadata to more a complicated contract (Future Proof)
    address private tokenURIExternal;

    function updateTokenURIExternal(address _tokenURIExternal) public onlyOwner {
        tokenURIExternal = _tokenURIExternal;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"tokenName","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_POOPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPoopsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poopySalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservePoopy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnOrMint","type":"address"}],"name":"setBurnOrMintAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poopySalePrice","type":"uint256"}],"name":"setPoopyPrice","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":"numberOfPoops","type":"uint256"}],"name":"takePoopy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"togglePlumbing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenURIExternal","type":"address"}],"name":"updateTokenURIExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267016345785d8a0000600b55612710600c556000600d60006101000a81548160ff0219169083151502179055503480156200003e57600080fd5b5060405162004adf38038062004adf8339818101604052810190620000649190620002b2565b818181600090805190602001906200007e92919062000190565b5080600190805190602001906200009792919062000190565b505050620000ba620000ae620000c260201b60201c565b620000ca60201b60201c565b505062000456565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200019e90620003c2565b90600052602060002090601f016020900481019282620001c257600085556200020e565b82601f10620001dd57805160ff19168380011785556200020e565b828001600101855582156200020e579182015b828111156200020d578251825591602001919060010190620001f0565b5b5090506200021d919062000221565b5090565b5b808211156200023c57600081600090555060010162000222565b5090565b600062000257620002518462000359565b62000325565b9050828152602081018484840111156200027057600080fd5b6200027d8482856200038c565b509392505050565b600082601f8301126200029757600080fd5b8151620002a984826020860162000240565b91505092915050565b60008060408385031215620002c657600080fd5b600083015167ffffffffffffffff811115620002e157600080fd5b620002ef8582860162000285565b925050602083015167ffffffffffffffff8111156200030d57600080fd5b6200031b8582860162000285565b9150509250929050565b6000604051905081810181811067ffffffffffffffff821117156200034f576200034e62000427565b5b8060405250919050565b600067ffffffffffffffff82111562000377576200037662000427565b5b601f19601f8301169050602081019050919050565b60005b83811015620003ac5780820151818401526020810190506200038f565b83811115620003bc576000848401525b50505050565b60006002820490506001821680620003db57607f821691505b60208210811415620003f257620003f1620003f8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61467980620004666000396000f3fe6080604052600436106101ee5760003560e01c806355f804b31161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd146106b2578063df221389146106ef578063e985e9c514610706578063eb8d244414610743578063f2fde38b1461076e576101ee565b8063a22cb46514610620578063b077509a14610649578063b88d4fde14610660578063c66622e414610689576101ee565b8063715018a6116100dc578063715018a61461058a5780638da5cb5b146105a157806395d89b41146105cc57806398e1b087146105f7576101ee565b806355f804b3146104bc578063594ce58f146104e55780636352211e1461051057806370a082311461054d576101ee565b80633b01617d1161018557806342842e0e1161015457806342842e0e1461040457806342966c681461042d5780634f6ccce71461045657806350d6e55014610493576101ee565b80633b01617d1461037d5780633ccfd60b146103a857806340660c81146103bf57806340c10f19146103db576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632f745c59146103155780633105447a14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613373565b610797565b6040516102279190613e77565b60405180910390f35b34801561023c57600080fd5b506102456107a9565b6040516102529190613e92565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613447565b61083b565b60405161028f9190613e10565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613337565b6108c0565b005b3480156102cd57600080fd5b506102d66109d8565b6040516102e391906141b4565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190613231565b6109e5565b005b34801561032157600080fd5b5061033c60048036038101906103379190613337565b610a45565b60405161034991906141b4565b60405180910390f35b34801561035e57600080fd5b50610367610aea565b60405161037491906141b4565b60405180910390f35b34801561038957600080fd5b50610392610af0565b60405161039f91906141b4565b60405180910390f35b3480156103b457600080fd5b506103bd610af6565b005b6103d960048036038101906103d49190613447565b610bc1565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190613337565b610d46565b005b34801561041057600080fd5b5061042b60048036038101906104269190613231565b610e7d565b005b34801561043957600080fd5b50610454600480360381019061044f9190613447565b610e9d565b005b34801561046257600080fd5b5061047d60048036038101906104789190613447565b610fd2565b60405161048a91906141b4565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b591906131cc565b611069565b005b3480156104c857600080fd5b506104e360048036038101906104de91906133c5565b611129565b005b3480156104f157600080fd5b506104fa6111bf565b60405161050791906141b4565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613447565b6111c4565b6040516105449190613e10565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906131cc565b611276565b60405161058191906141b4565b60405180910390f35b34801561059657600080fd5b5061059f61132e565b005b3480156105ad57600080fd5b506105b66113b6565b6040516105c39190613e10565b60405180910390f35b3480156105d857600080fd5b506105e16113e0565b6040516105ee9190613e92565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613447565b611472565b005b34801561062c57600080fd5b50610647600480360381019061064291906132fb565b6114f8565b005b34801561065557600080fd5b5061065e611679565b005b34801561066c57600080fd5b5061068760048036038101906106829190613280565b611739565b005b34801561069557600080fd5b506106b060048036038101906106ab91906131cc565b61179b565b005b3480156106be57600080fd5b506106d960048036038101906106d49190613447565b61185b565b6040516106e69190613e92565b60405180910390f35b3480156106fb57600080fd5b50610704611a10565b005b34801561071257600080fd5b5061072d600480360381019061072891906131f5565b611ab8565b60405161073a9190613e77565b60405180910390f35b34801561074f57600080fd5b50610758611b4c565b6040516107659190613e77565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906131cc565b611b5f565b005b60006107a282611c57565b9050919050565b6060600080546107b89061446e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e49061446e565b80156108315780601f1061080657610100808354040283529160200191610831565b820191906000526020600020905b81548152906001019060200180831161081457829003601f168201915b5050505050905090565b600061084682611cd1565b610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90614094565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108cb826111c4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390614114565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661095b611d3d565b73ffffffffffffffffffffffffffffffffffffffff16148061098a575061098981610984611d3d565b611ab8565b5b6109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c090613fd4565b60405180910390fd5b6109d38383611d45565b505050565b6000600880549050905090565b6109f66109f0611d3d565b82611dfe565b610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90614174565b60405180910390fd5b610a40838383611edc565b505050565b6000610a5083611276565b8210610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890613ef4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b5481565b600c5481565b610afe611d3d565b73ffffffffffffffffffffffffffffffffffffffff16610b1c6113b6565b73ffffffffffffffffffffffffffffffffffffffff1614610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b69906140b4565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bbd573d6000803e3d6000fd5b5050565b600d60009054906101000a900460ff16610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0790614134565b60405180910390fd5b6014811115610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b90614154565b60405180910390fd5b600c5481610c606109d8565b610c6a91906142a3565b1115610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290614034565b60405180910390fd5b3481600b54610cba919061432a565b1115610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290613ed4565b60405180910390fd5b60005b81811015610d42576000610d106109d8565b9050600c54610d1d6109d8565b1015610d2e57610d2d3382612138565b5b508080610d3a906144a0565b915050610cfe565b5050565b600073ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90613eb4565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e19611d3d565b73ffffffffffffffffffffffffffffffffffffffff1614610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690614054565b60405180910390fd5b610e798282612138565b5050565b610e9883838360405180602001604052806000815250611739565b505050565b600073ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613eb4565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f70611d3d565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90614054565b60405180910390fd5b610fcf81612156565b50565b6000610fdc6109d8565b821061101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490614194565b60405180910390fd5b60088281548110611057577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611071611d3d565b73ffffffffffffffffffffffffffffffffffffffff1661108f6113b6565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc906140b4565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611131611d3d565b73ffffffffffffffffffffffffffffffffffffffff1661114f6113b6565b73ffffffffffffffffffffffffffffffffffffffff16146111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c906140b4565b60405180910390fd5b80600e90805190602001906111bb929190612f88565b5050565b601481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614014565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90613ff4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611336611d3d565b73ffffffffffffffffffffffffffffffffffffffff166113546113b6565b73ffffffffffffffffffffffffffffffffffffffff16146113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a1906140b4565b60405180910390fd5b6113b46000612267565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113ef9061446e565b80601f016020809104026020016040519081016040528092919081815260200182805461141b9061446e565b80156114685780601f1061143d57610100808354040283529160200191611468565b820191906000526020600020905b81548152906001019060200180831161144b57829003601f168201915b5050505050905090565b61147a611d3d565b73ffffffffffffffffffffffffffffffffffffffff166114986113b6565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e5906140b4565b60405180910390fd5b80600b8190555050565b611500611d3d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613f94565b60405180910390fd5b806005600061157b611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611628611d3d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161166d9190613e77565b60405180910390a35050565b611681611d3d565b73ffffffffffffffffffffffffffffffffffffffff1661169f6113b6565b73ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec906140b4565b60405180910390fd5b60006116ff6109d8565b905060005b60648110156117355761172233828461171d91906142a3565b612138565b808061172d906144a0565b915050611704565b5050565b61174a611744611d3d565b83611dfe565b611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090614174565b60405180910390fd5b6117958484848461232d565b50505050565b6117a3611d3d565b73ffffffffffffffffffffffffffffffffffffffff166117c16113b6565b73ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e906140b4565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606061186682611cd1565b6118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c906140f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b257600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b815260040161195691906141b4565b60006040518083038186803b15801561196e57600080fd5b505afa158015611982573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119ab9190613406565b9050611a0b565b60006119bc612389565b905060008151116119dc5760405180602001604052806000815250611a07565b806119e68461241b565b6040516020016119f7929190613dec565b6040516020818303038152906040525b9150505b919050565b611a18611d3d565b73ffffffffffffffffffffffffffffffffffffffff16611a366113b6565b73ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a83906140b4565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60009054906101000a900460ff1681565b611b67611d3d565b73ffffffffffffffffffffffffffffffffffffffff16611b856113b6565b73ffffffffffffffffffffffffffffffffffffffff1614611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd2906140b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290613f34565b60405180910390fd5b611c5481612267565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cca5750611cc9826125c8565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611db8836111c4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e0982611cd1565b611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f90613fb4565b60405180910390fd5b6000611e53836111c4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ec257508373ffffffffffffffffffffffffffffffffffffffff16611eaa8461083b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ed35750611ed28185611ab8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611efc826111c4565b73ffffffffffffffffffffffffffffffffffffffff1614611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f49906140d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990613f74565b60405180910390fd5b611fcd8383836126aa565b611fd8600082611d45565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120289190614384565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461207f91906142a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121528282604051806020016040528060008152506126ba565b5050565b6000612161826111c4565b905061216f816000846126aa565b61217a600083611d45565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ca9190614384565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612338848484611edc565b61234484848484612715565b612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90613f14565b60405180910390fd5b50505050565b6060600e80546123989061446e565b80601f01602080910402602001604051908101604052809291908181526020018280546123c49061446e565b80156124115780601f106123e657610100808354040283529160200191612411565b820191906000526020600020905b8154815290600101906020018083116123f457829003601f168201915b5050505050905090565b60606000821415612463576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125c3565b600082905060005b6000821461249557808061247e906144a0565b915050600a8261248e91906142f9565b915061246b565b60008167ffffffffffffffff8111156124d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156125095781602001600182028036833780820191505090505b5090505b600085146125bc576001826125229190614384565b9150600a8561253191906144e9565b603061253d91906142a3565b60f81b818381518110612579577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125b591906142f9565b945061250d565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061269357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126a357506126a2826128ac565b5b9050919050565b6126b5838383612916565b505050565b6126c48383612a2a565b6126d16000848484612715565b612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790613f14565b60405180910390fd5b505050565b60006127368473ffffffffffffffffffffffffffffffffffffffff16612bf8565b1561289f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275f611d3d565b8786866040518563ffffffff1660e01b81526004016127819493929190613e2b565b602060405180830381600087803b15801561279b57600080fd5b505af19250505080156127cc57506040513d601f19601f820116820180604052508101906127c9919061339c565b60015b61284f573d80600081146127fc576040519150601f19603f3d011682016040523d82523d6000602084013e612801565b606091505b50600081511415612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e90613f14565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a4565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612921838383612c0b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129645761295f81612c10565b6129a3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129a2576129a18382612c59565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e6576129e181612dc6565b612a25565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a2457612a238282612f09565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9190614074565b60405180910390fd5b612aa381611cd1565b15612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90613f54565b60405180910390fd5b612aef600083836126aa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b3f91906142a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c6684611276565b612c709190614384565b9050600060076000848152602001908152602001600020549050818114612d55576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612dda9190614384565b9050600060096000848152602001908152602001600020549050600060088381548110612e30577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612e78577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612f1483611276565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612f949061446e565b90600052602060002090601f016020900481019282612fb65760008555612ffd565b82601f10612fcf57805160ff1916838001178555612ffd565b82800160010185558215612ffd579182015b82811115612ffc578251825591602001919060010190612fe1565b5b50905061300a919061300e565b5090565b5b8082111561302757600081600090555060010161300f565b5090565b600061303e61303984614200565b6141cf565b90508281526020810184848401111561305657600080fd5b61306184828561442c565b509392505050565b600061307c61307784614230565b6141cf565b90508281526020810184848401111561309457600080fd5b61309f84828561442c565b509392505050565b60006130ba6130b584614230565b6141cf565b9050828152602081018484840111156130d257600080fd5b6130dd84828561443b565b509392505050565b6000813590506130f4816145e7565b92915050565b600081359050613109816145fe565b92915050565b60008135905061311e81614615565b92915050565b60008151905061313381614615565b92915050565b600082601f83011261314a57600080fd5b813561315a84826020860161302b565b91505092915050565b600082601f83011261317457600080fd5b8135613184848260208601613069565b91505092915050565b600082601f83011261319e57600080fd5b81516131ae8482602086016130a7565b91505092915050565b6000813590506131c68161462c565b92915050565b6000602082840312156131de57600080fd5b60006131ec848285016130e5565b91505092915050565b6000806040838503121561320857600080fd5b6000613216858286016130e5565b9250506020613227858286016130e5565b9150509250929050565b60008060006060848603121561324657600080fd5b6000613254868287016130e5565b9350506020613265868287016130e5565b9250506040613276868287016131b7565b9150509250925092565b6000806000806080858703121561329657600080fd5b60006132a4878288016130e5565b94505060206132b5878288016130e5565b93505060406132c6878288016131b7565b925050606085013567ffffffffffffffff8111156132e357600080fd5b6132ef87828801613139565b91505092959194509250565b6000806040838503121561330e57600080fd5b600061331c858286016130e5565b925050602061332d858286016130fa565b9150509250929050565b6000806040838503121561334a57600080fd5b6000613358858286016130e5565b9250506020613369858286016131b7565b9150509250929050565b60006020828403121561338557600080fd5b60006133938482850161310f565b91505092915050565b6000602082840312156133ae57600080fd5b60006133bc84828501613124565b91505092915050565b6000602082840312156133d757600080fd5b600082013567ffffffffffffffff8111156133f157600080fd5b6133fd84828501613163565b91505092915050565b60006020828403121561341857600080fd5b600082015167ffffffffffffffff81111561343257600080fd5b61343e8482850161318d565b91505092915050565b60006020828403121561345957600080fd5b6000613467848285016131b7565b91505092915050565b613479816143b8565b82525050565b613488816143ca565b82525050565b600061349982614260565b6134a38185614276565b93506134b381856020860161443b565b6134bc816145d6565b840191505092915050565b60006134d28261426b565b6134dc8185614287565b93506134ec81856020860161443b565b6134f5816145d6565b840191505092915050565b600061350b8261426b565b6135158185614298565b935061352581856020860161443b565b80840191505092915050565b600061353e601c83614287565b91507f4552433732314275726e4d696e743a206e6f7420656e61626c656421000000006000830152602082019050919050565b600061357e601583614287565b91507f4e6f7420656e6f7567682045746865722073656e7400000000000000000000006000830152602082019050919050565b60006135be602b83614287565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613624603283614287565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061368a602683614287565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136f0601c83614287565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613730602483614287565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613796601983614287565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006137d6602c83614287565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061383c603883614287565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006138a2602a83614287565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613908602983614287565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061396e602583614287565b91507f4d696e7420776f756c6420657863656564206d617820737570706c79206f662060008301527f706f6f70730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139d4602e83614287565b91507f4552433732314275726e4d696e743a2063616c6c6572206973206e6f7420617060008301527f70726f76656420616464726573730000000000000000000000000000000000006020830152604082019050919050565b6000613a3a602083614287565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613a7a602c83614287565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ae0602083614287565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613b20602983614287565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b86602f83614287565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613bec602183614287565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c52602d83614287565b91507f53616c65206d757374206265206163746976652c20436f6e747261637420697360008301527f20636f6e737469706174656421000000000000000000000000000000000000006020830152604082019050919050565b6000613cb8602283614287565b91507f4578636565646564206d617820706f6f707320706572207472616e736163746960008301527f6f6e0000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d1e603183614287565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613d84602c83614287565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b613de681614422565b82525050565b6000613df88285613500565b9150613e048284613500565b91508190509392505050565b6000602082019050613e256000830184613470565b92915050565b6000608082019050613e406000830187613470565b613e4d6020830186613470565b613e5a6040830185613ddd565b8181036060830152613e6c818461348e565b905095945050505050565b6000602082019050613e8c600083018461347f565b92915050565b60006020820190508181036000830152613eac81846134c7565b905092915050565b60006020820190508181036000830152613ecd81613531565b9050919050565b60006020820190508181036000830152613eed81613571565b9050919050565b60006020820190508181036000830152613f0d816135b1565b9050919050565b60006020820190508181036000830152613f2d81613617565b9050919050565b60006020820190508181036000830152613f4d8161367d565b9050919050565b60006020820190508181036000830152613f6d816136e3565b9050919050565b60006020820190508181036000830152613f8d81613723565b9050919050565b60006020820190508181036000830152613fad81613789565b9050919050565b60006020820190508181036000830152613fcd816137c9565b9050919050565b60006020820190508181036000830152613fed8161382f565b9050919050565b6000602082019050818103600083015261400d81613895565b9050919050565b6000602082019050818103600083015261402d816138fb565b9050919050565b6000602082019050818103600083015261404d81613961565b9050919050565b6000602082019050818103600083015261406d816139c7565b9050919050565b6000602082019050818103600083015261408d81613a2d565b9050919050565b600060208201905081810360008301526140ad81613a6d565b9050919050565b600060208201905081810360008301526140cd81613ad3565b9050919050565b600060208201905081810360008301526140ed81613b13565b9050919050565b6000602082019050818103600083015261410d81613b79565b9050919050565b6000602082019050818103600083015261412d81613bdf565b9050919050565b6000602082019050818103600083015261414d81613c45565b9050919050565b6000602082019050818103600083015261416d81613cab565b9050919050565b6000602082019050818103600083015261418d81613d11565b9050919050565b600060208201905081810360008301526141ad81613d77565b9050919050565b60006020820190506141c96000830184613ddd565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141f6576141f56145a7565b5b8060405250919050565b600067ffffffffffffffff82111561421b5761421a6145a7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561424b5761424a6145a7565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006142ae82614422565b91506142b983614422565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142ee576142ed61451a565b5b828201905092915050565b600061430482614422565b915061430f83614422565b92508261431f5761431e614549565b5b828204905092915050565b600061433582614422565b915061434083614422565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143795761437861451a565b5b828202905092915050565b600061438f82614422565b915061439a83614422565b9250828210156143ad576143ac61451a565b5b828203905092915050565b60006143c382614402565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561445957808201518184015260208101905061443e565b83811115614468576000848401525b50505050565b6000600282049050600182168061448657607f821691505b6020821081141561449a57614499614578565b5b50919050565b60006144ab82614422565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144de576144dd61451a565b5b600182019050919050565b60006144f482614422565b91506144ff83614422565b92508261450f5761450e614549565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6145f0816143b8565b81146145fb57600080fd5b50565b614607816143ca565b811461461257600080fd5b50565b61461e816143d6565b811461462957600080fd5b50565b61463581614422565b811461464057600080fd5b5056fea2646970667358221220e3b5e1cf8dd72205662c20307876a2f2ed57b8659b1ed3b5efcc53f175f6363264736f6c63430008000033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000011506f6f707920457870657269656e6365730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008504f4f5059455850000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c806355f804b31161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd146106b2578063df221389146106ef578063e985e9c514610706578063eb8d244414610743578063f2fde38b1461076e576101ee565b8063a22cb46514610620578063b077509a14610649578063b88d4fde14610660578063c66622e414610689576101ee565b8063715018a6116100dc578063715018a61461058a5780638da5cb5b146105a157806395d89b41146105cc57806398e1b087146105f7576101ee565b806355f804b3146104bc578063594ce58f146104e55780636352211e1461051057806370a082311461054d576101ee565b80633b01617d1161018557806342842e0e1161015457806342842e0e1461040457806342966c681461042d5780634f6ccce71461045657806350d6e55014610493576101ee565b80633b01617d1461037d5780633ccfd60b146103a857806340660c81146103bf57806340c10f19146103db576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632f745c59146103155780633105447a14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613373565b610797565b6040516102279190613e77565b60405180910390f35b34801561023c57600080fd5b506102456107a9565b6040516102529190613e92565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613447565b61083b565b60405161028f9190613e10565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613337565b6108c0565b005b3480156102cd57600080fd5b506102d66109d8565b6040516102e391906141b4565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190613231565b6109e5565b005b34801561032157600080fd5b5061033c60048036038101906103379190613337565b610a45565b60405161034991906141b4565b60405180910390f35b34801561035e57600080fd5b50610367610aea565b60405161037491906141b4565b60405180910390f35b34801561038957600080fd5b50610392610af0565b60405161039f91906141b4565b60405180910390f35b3480156103b457600080fd5b506103bd610af6565b005b6103d960048036038101906103d49190613447565b610bc1565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190613337565b610d46565b005b34801561041057600080fd5b5061042b60048036038101906104269190613231565b610e7d565b005b34801561043957600080fd5b50610454600480360381019061044f9190613447565b610e9d565b005b34801561046257600080fd5b5061047d60048036038101906104789190613447565b610fd2565b60405161048a91906141b4565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b591906131cc565b611069565b005b3480156104c857600080fd5b506104e360048036038101906104de91906133c5565b611129565b005b3480156104f157600080fd5b506104fa6111bf565b60405161050791906141b4565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613447565b6111c4565b6040516105449190613e10565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906131cc565b611276565b60405161058191906141b4565b60405180910390f35b34801561059657600080fd5b5061059f61132e565b005b3480156105ad57600080fd5b506105b66113b6565b6040516105c39190613e10565b60405180910390f35b3480156105d857600080fd5b506105e16113e0565b6040516105ee9190613e92565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613447565b611472565b005b34801561062c57600080fd5b50610647600480360381019061064291906132fb565b6114f8565b005b34801561065557600080fd5b5061065e611679565b005b34801561066c57600080fd5b5061068760048036038101906106829190613280565b611739565b005b34801561069557600080fd5b506106b060048036038101906106ab91906131cc565b61179b565b005b3480156106be57600080fd5b506106d960048036038101906106d49190613447565b61185b565b6040516106e69190613e92565b60405180910390f35b3480156106fb57600080fd5b50610704611a10565b005b34801561071257600080fd5b5061072d600480360381019061072891906131f5565b611ab8565b60405161073a9190613e77565b60405180910390f35b34801561074f57600080fd5b50610758611b4c565b6040516107659190613e77565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906131cc565b611b5f565b005b60006107a282611c57565b9050919050565b6060600080546107b89061446e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e49061446e565b80156108315780601f1061080657610100808354040283529160200191610831565b820191906000526020600020905b81548152906001019060200180831161081457829003601f168201915b5050505050905090565b600061084682611cd1565b610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90614094565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108cb826111c4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390614114565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661095b611d3d565b73ffffffffffffffffffffffffffffffffffffffff16148061098a575061098981610984611d3d565b611ab8565b5b6109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c090613fd4565b60405180910390fd5b6109d38383611d45565b505050565b6000600880549050905090565b6109f66109f0611d3d565b82611dfe565b610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90614174565b60405180910390fd5b610a40838383611edc565b505050565b6000610a5083611276565b8210610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890613ef4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b5481565b600c5481565b610afe611d3d565b73ffffffffffffffffffffffffffffffffffffffff16610b1c6113b6565b73ffffffffffffffffffffffffffffffffffffffff1614610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b69906140b4565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bbd573d6000803e3d6000fd5b5050565b600d60009054906101000a900460ff16610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0790614134565b60405180910390fd5b6014811115610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b90614154565b60405180910390fd5b600c5481610c606109d8565b610c6a91906142a3565b1115610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290614034565b60405180910390fd5b3481600b54610cba919061432a565b1115610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290613ed4565b60405180910390fd5b60005b81811015610d42576000610d106109d8565b9050600c54610d1d6109d8565b1015610d2e57610d2d3382612138565b5b508080610d3a906144a0565b915050610cfe565b5050565b600073ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90613eb4565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e19611d3d565b73ffffffffffffffffffffffffffffffffffffffff1614610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690614054565b60405180910390fd5b610e798282612138565b5050565b610e9883838360405180602001604052806000815250611739565b505050565b600073ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613eb4565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f70611d3d565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90614054565b60405180910390fd5b610fcf81612156565b50565b6000610fdc6109d8565b821061101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490614194565b60405180910390fd5b60088281548110611057577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611071611d3d565b73ffffffffffffffffffffffffffffffffffffffff1661108f6113b6565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc906140b4565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611131611d3d565b73ffffffffffffffffffffffffffffffffffffffff1661114f6113b6565b73ffffffffffffffffffffffffffffffffffffffff16146111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c906140b4565b60405180910390fd5b80600e90805190602001906111bb929190612f88565b5050565b601481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614014565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90613ff4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611336611d3d565b73ffffffffffffffffffffffffffffffffffffffff166113546113b6565b73ffffffffffffffffffffffffffffffffffffffff16146113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a1906140b4565b60405180910390fd5b6113b46000612267565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113ef9061446e565b80601f016020809104026020016040519081016040528092919081815260200182805461141b9061446e565b80156114685780601f1061143d57610100808354040283529160200191611468565b820191906000526020600020905b81548152906001019060200180831161144b57829003601f168201915b5050505050905090565b61147a611d3d565b73ffffffffffffffffffffffffffffffffffffffff166114986113b6565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e5906140b4565b60405180910390fd5b80600b8190555050565b611500611d3d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613f94565b60405180910390fd5b806005600061157b611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611628611d3d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161166d9190613e77565b60405180910390a35050565b611681611d3d565b73ffffffffffffffffffffffffffffffffffffffff1661169f6113b6565b73ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec906140b4565b60405180910390fd5b60006116ff6109d8565b905060005b60648110156117355761172233828461171d91906142a3565b612138565b808061172d906144a0565b915050611704565b5050565b61174a611744611d3d565b83611dfe565b611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090614174565b60405180910390fd5b6117958484848461232d565b50505050565b6117a3611d3d565b73ffffffffffffffffffffffffffffffffffffffff166117c16113b6565b73ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e906140b4565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606061186682611cd1565b6118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c906140f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b257600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b815260040161195691906141b4565b60006040518083038186803b15801561196e57600080fd5b505afa158015611982573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119ab9190613406565b9050611a0b565b60006119bc612389565b905060008151116119dc5760405180602001604052806000815250611a07565b806119e68461241b565b6040516020016119f7929190613dec565b6040516020818303038152906040525b9150505b919050565b611a18611d3d565b73ffffffffffffffffffffffffffffffffffffffff16611a366113b6565b73ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a83906140b4565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60009054906101000a900460ff1681565b611b67611d3d565b73ffffffffffffffffffffffffffffffffffffffff16611b856113b6565b73ffffffffffffffffffffffffffffffffffffffff1614611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd2906140b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290613f34565b60405180910390fd5b611c5481612267565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cca5750611cc9826125c8565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611db8836111c4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e0982611cd1565b611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f90613fb4565b60405180910390fd5b6000611e53836111c4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ec257508373ffffffffffffffffffffffffffffffffffffffff16611eaa8461083b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ed35750611ed28185611ab8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611efc826111c4565b73ffffffffffffffffffffffffffffffffffffffff1614611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f49906140d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990613f74565b60405180910390fd5b611fcd8383836126aa565b611fd8600082611d45565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120289190614384565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461207f91906142a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121528282604051806020016040528060008152506126ba565b5050565b6000612161826111c4565b905061216f816000846126aa565b61217a600083611d45565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ca9190614384565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612338848484611edc565b61234484848484612715565b612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90613f14565b60405180910390fd5b50505050565b6060600e80546123989061446e565b80601f01602080910402602001604051908101604052809291908181526020018280546123c49061446e565b80156124115780601f106123e657610100808354040283529160200191612411565b820191906000526020600020905b8154815290600101906020018083116123f457829003601f168201915b5050505050905090565b60606000821415612463576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125c3565b600082905060005b6000821461249557808061247e906144a0565b915050600a8261248e91906142f9565b915061246b565b60008167ffffffffffffffff8111156124d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156125095781602001600182028036833780820191505090505b5090505b600085146125bc576001826125229190614384565b9150600a8561253191906144e9565b603061253d91906142a3565b60f81b818381518110612579577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125b591906142f9565b945061250d565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061269357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126a357506126a2826128ac565b5b9050919050565b6126b5838383612916565b505050565b6126c48383612a2a565b6126d16000848484612715565b612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790613f14565b60405180910390fd5b505050565b60006127368473ffffffffffffffffffffffffffffffffffffffff16612bf8565b1561289f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275f611d3d565b8786866040518563ffffffff1660e01b81526004016127819493929190613e2b565b602060405180830381600087803b15801561279b57600080fd5b505af19250505080156127cc57506040513d601f19601f820116820180604052508101906127c9919061339c565b60015b61284f573d80600081146127fc576040519150601f19603f3d011682016040523d82523d6000602084013e612801565b606091505b50600081511415612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e90613f14565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a4565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612921838383612c0b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129645761295f81612c10565b6129a3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129a2576129a18382612c59565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e6576129e181612dc6565b612a25565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a2457612a238282612f09565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9190614074565b60405180910390fd5b612aa381611cd1565b15612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90613f54565b60405180910390fd5b612aef600083836126aa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b3f91906142a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c6684611276565b612c709190614384565b9050600060076000848152602001908152602001600020549050818114612d55576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612dda9190614384565b9050600060096000848152602001908152602001600020549050600060088381548110612e30577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612e78577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612f1483611276565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612f949061446e565b90600052602060002090601f016020900481019282612fb65760008555612ffd565b82601f10612fcf57805160ff1916838001178555612ffd565b82800160010185558215612ffd579182015b82811115612ffc578251825591602001919060010190612fe1565b5b50905061300a919061300e565b5090565b5b8082111561302757600081600090555060010161300f565b5090565b600061303e61303984614200565b6141cf565b90508281526020810184848401111561305657600080fd5b61306184828561442c565b509392505050565b600061307c61307784614230565b6141cf565b90508281526020810184848401111561309457600080fd5b61309f84828561442c565b509392505050565b60006130ba6130b584614230565b6141cf565b9050828152602081018484840111156130d257600080fd5b6130dd84828561443b565b509392505050565b6000813590506130f4816145e7565b92915050565b600081359050613109816145fe565b92915050565b60008135905061311e81614615565b92915050565b60008151905061313381614615565b92915050565b600082601f83011261314a57600080fd5b813561315a84826020860161302b565b91505092915050565b600082601f83011261317457600080fd5b8135613184848260208601613069565b91505092915050565b600082601f83011261319e57600080fd5b81516131ae8482602086016130a7565b91505092915050565b6000813590506131c68161462c565b92915050565b6000602082840312156131de57600080fd5b60006131ec848285016130e5565b91505092915050565b6000806040838503121561320857600080fd5b6000613216858286016130e5565b9250506020613227858286016130e5565b9150509250929050565b60008060006060848603121561324657600080fd5b6000613254868287016130e5565b9350506020613265868287016130e5565b9250506040613276868287016131b7565b9150509250925092565b6000806000806080858703121561329657600080fd5b60006132a4878288016130e5565b94505060206132b5878288016130e5565b93505060406132c6878288016131b7565b925050606085013567ffffffffffffffff8111156132e357600080fd5b6132ef87828801613139565b91505092959194509250565b6000806040838503121561330e57600080fd5b600061331c858286016130e5565b925050602061332d858286016130fa565b9150509250929050565b6000806040838503121561334a57600080fd5b6000613358858286016130e5565b9250506020613369858286016131b7565b9150509250929050565b60006020828403121561338557600080fd5b60006133938482850161310f565b91505092915050565b6000602082840312156133ae57600080fd5b60006133bc84828501613124565b91505092915050565b6000602082840312156133d757600080fd5b600082013567ffffffffffffffff8111156133f157600080fd5b6133fd84828501613163565b91505092915050565b60006020828403121561341857600080fd5b600082015167ffffffffffffffff81111561343257600080fd5b61343e8482850161318d565b91505092915050565b60006020828403121561345957600080fd5b6000613467848285016131b7565b91505092915050565b613479816143b8565b82525050565b613488816143ca565b82525050565b600061349982614260565b6134a38185614276565b93506134b381856020860161443b565b6134bc816145d6565b840191505092915050565b60006134d28261426b565b6134dc8185614287565b93506134ec81856020860161443b565b6134f5816145d6565b840191505092915050565b600061350b8261426b565b6135158185614298565b935061352581856020860161443b565b80840191505092915050565b600061353e601c83614287565b91507f4552433732314275726e4d696e743a206e6f7420656e61626c656421000000006000830152602082019050919050565b600061357e601583614287565b91507f4e6f7420656e6f7567682045746865722073656e7400000000000000000000006000830152602082019050919050565b60006135be602b83614287565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613624603283614287565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061368a602683614287565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136f0601c83614287565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613730602483614287565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613796601983614287565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006137d6602c83614287565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061383c603883614287565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006138a2602a83614287565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613908602983614287565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061396e602583614287565b91507f4d696e7420776f756c6420657863656564206d617820737570706c79206f662060008301527f706f6f70730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139d4602e83614287565b91507f4552433732314275726e4d696e743a2063616c6c6572206973206e6f7420617060008301527f70726f76656420616464726573730000000000000000000000000000000000006020830152604082019050919050565b6000613a3a602083614287565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613a7a602c83614287565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ae0602083614287565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613b20602983614287565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b86602f83614287565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613bec602183614287565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c52602d83614287565b91507f53616c65206d757374206265206163746976652c20436f6e747261637420697360008301527f20636f6e737469706174656421000000000000000000000000000000000000006020830152604082019050919050565b6000613cb8602283614287565b91507f4578636565646564206d617820706f6f707320706572207472616e736163746960008301527f6f6e0000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d1e603183614287565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613d84602c83614287565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b613de681614422565b82525050565b6000613df88285613500565b9150613e048284613500565b91508190509392505050565b6000602082019050613e256000830184613470565b92915050565b6000608082019050613e406000830187613470565b613e4d6020830186613470565b613e5a6040830185613ddd565b8181036060830152613e6c818461348e565b905095945050505050565b6000602082019050613e8c600083018461347f565b92915050565b60006020820190508181036000830152613eac81846134c7565b905092915050565b60006020820190508181036000830152613ecd81613531565b9050919050565b60006020820190508181036000830152613eed81613571565b9050919050565b60006020820190508181036000830152613f0d816135b1565b9050919050565b60006020820190508181036000830152613f2d81613617565b9050919050565b60006020820190508181036000830152613f4d8161367d565b9050919050565b60006020820190508181036000830152613f6d816136e3565b9050919050565b60006020820190508181036000830152613f8d81613723565b9050919050565b60006020820190508181036000830152613fad81613789565b9050919050565b60006020820190508181036000830152613fcd816137c9565b9050919050565b60006020820190508181036000830152613fed8161382f565b9050919050565b6000602082019050818103600083015261400d81613895565b9050919050565b6000602082019050818103600083015261402d816138fb565b9050919050565b6000602082019050818103600083015261404d81613961565b9050919050565b6000602082019050818103600083015261406d816139c7565b9050919050565b6000602082019050818103600083015261408d81613a2d565b9050919050565b600060208201905081810360008301526140ad81613a6d565b9050919050565b600060208201905081810360008301526140cd81613ad3565b9050919050565b600060208201905081810360008301526140ed81613b13565b9050919050565b6000602082019050818103600083015261410d81613b79565b9050919050565b6000602082019050818103600083015261412d81613bdf565b9050919050565b6000602082019050818103600083015261414d81613c45565b9050919050565b6000602082019050818103600083015261416d81613cab565b9050919050565b6000602082019050818103600083015261418d81613d11565b9050919050565b600060208201905081810360008301526141ad81613d77565b9050919050565b60006020820190506141c96000830184613ddd565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141f6576141f56145a7565b5b8060405250919050565b600067ffffffffffffffff82111561421b5761421a6145a7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561424b5761424a6145a7565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006142ae82614422565b91506142b983614422565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142ee576142ed61451a565b5b828201905092915050565b600061430482614422565b915061430f83614422565b92508261431f5761431e614549565b5b828204905092915050565b600061433582614422565b915061434083614422565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143795761437861451a565b5b828202905092915050565b600061438f82614422565b915061439a83614422565b9250828210156143ad576143ac61451a565b5b828203905092915050565b60006143c382614402565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561445957808201518184015260208101905061443e565b83811115614468576000848401525b50505050565b6000600282049050600182168061448657607f821691505b6020821081141561449a57614499614578565b5b50919050565b60006144ab82614422565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144de576144dd61451a565b5b600182019050919050565b60006144f482614422565b91506144ff83614422565b92508261450f5761450e614549565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6145f0816143b8565b81146145fb57600080fd5b50565b614607816143ca565b811461461257600080fd5b50565b61461e816143d6565b811461462957600080fd5b50565b61463581614422565b811461464057600080fd5b5056fea2646970667358221220e3b5e1cf8dd72205662c20307876a2f2ed57b8659b1ed3b5efcc53f175f6363264736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000011506f6f707920457870657269656e6365730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008504f4f5059455850000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Poopy Experiences
Arg [1] : tokenName (string): POOPYEXP

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [3] : 506f6f707920457870657269656e636573000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 504f4f5059455850000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43543:3682:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45191:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23001:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24560:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24083:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36567:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25450:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36235:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43652:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43746:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45378:140;;;;;;;;;;;;;:::i;:::-;;44350:644;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46100:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25860:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46006:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36757:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47091:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46255:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43700:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22695:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22425:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2403:94;;;;;;;;;;;;;:::i;:::-;;1752:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23170:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44131:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24853:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43923:200;;;;;;;;;;;;;:::i;:::-;;26116:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45887:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46501:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44252:90;;;;;;;;;;;;;:::i;:::-;;25219:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43785:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2652:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45191:179;45302:4;45326:36;45350:11;45326:23;:36::i;:::-;45319:43;;45191:179;;;:::o;23001:100::-;23055:13;23088:5;23081:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23001:100;:::o;24560:221::-;24636:7;24664:16;24672:7;24664;:16::i;:::-;24656:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24749:15;:24;24765:7;24749:24;;;;;;;;;;;;;;;;;;;;;24742:31;;24560:221;;;:::o;24083:411::-;24164:13;24180:23;24195:7;24180:14;:23::i;:::-;24164:39;;24228:5;24222:11;;:2;:11;;;;24214:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24322:5;24306:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24331:37;24348:5;24355:12;:10;:12::i;:::-;24331:16;:37::i;:::-;24306:62;24284:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24465:21;24474:2;24478:7;24465:8;:21::i;:::-;24083:411;;;:::o;36567:113::-;36628:7;36655:10;:17;;;;36648:24;;36567:113;:::o;25450:339::-;25645:41;25664:12;:10;:12::i;:::-;25678:7;25645:18;:41::i;:::-;25637:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25753:28;25763:4;25769:2;25773:7;25753:9;:28::i;:::-;25450:339;;;:::o;36235:256::-;36332:7;36368:23;36385:5;36368:16;:23::i;:::-;36360:5;:31;36352:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36457:12;:19;36470:5;36457:19;;;;;;;;;;;;;;;:26;36477:5;36457:26;;;;;;;;;;;;36450:33;;36235:256;;;;:::o;43652:41::-;;;;:::o;43746:32::-;;;;:::o;45378:140::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45426:12:::1;45441:21;45426:36;;45481:10;45473:28;;:37;45502:7;45473:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2043:1;45378:140::o:0;44350:644::-;44423:12;;;;;;;;;;;44415:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43737:2;44504:13;:30;;44496:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44625:9;;44608:13;44592;:11;:13::i;:::-;:29;;;;:::i;:::-;:42;;44584:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44729:9;44712:13;44695:14;;:30;;;;:::i;:::-;:43;;44687:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44782:6;44777:210;44798:13;44794:1;:17;44777:210;;;44833:14;44850:13;:11;:13::i;:::-;44833:30;;44898:9;;44882:13;:11;:13::i;:::-;:25;44878:98;;;44928:32;44938:10;44950:9;44928;:32::i;:::-;44878:98;44777:210;44813:3;;;;;:::i;:::-;;;;44777:210;;;;44350:644;:::o;46100:106::-;45593:1;45571:24;;:10;;;;;;;;;;;:24;;;;45563:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45663:10;;;;;;;;;;;45647:26;;:12;:10;:12::i;:::-;:26;;;45639:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;46176:22:::1;46186:2;46190:7;46176:9;:22::i;:::-;46100:106:::0;;:::o;25860:185::-;25998:39;26015:4;26021:2;26025:7;25998:39;;;;;;;;;;;;:16;:39::i;:::-;25860:185;;;:::o;46006:86::-;45593:1;45571:24;;:10;;;;;;;;;;;:24;;;;45563:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45663:10;;;;;;;;;;;45647:26;;:12;:10;:12::i;:::-;:26;;;45639:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;46070:14:::1;46076:7;46070:5;:14::i;:::-;46006:86:::0;:::o;36757:233::-;36832:7;36868:30;:28;:30::i;:::-;36860:5;:38;36852:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36965:10;36976:5;36965:17;;;;;;;;;;;;;;;;;;;;;;;;36958:24;;36757:233;;;:::o;47091:131::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47197:17:::1;47178:16;;:36;;;;;;;;;;;;;;;;;;47091:131:::0;:::o;46255:112::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46351:8:::1;46331:17;:28;;;;;;;;;;;;:::i;:::-;;46255:112:::0;:::o;43700:39::-;43737:2;43700:39;:::o;22695:239::-;22767:7;22787:13;22803:7;:16;22811:7;22803:16;;;;;;;;;;;;;;;;;;;;;22787:32;;22855:1;22838:19;;:5;:19;;;;22830:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22921:5;22914:12;;;22695:239;;;:::o;22425:208::-;22497:7;22542:1;22525:19;;:5;:19;;;;22517:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22609:9;:16;22619:5;22609:16;;;;;;;;;;;;;;;;22602:23;;22425:208;;;:::o;2403:94::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2468:21:::1;2486:1;2468:9;:21::i;:::-;2403:94::o:0;1752:87::-;1798:7;1825:6;;;;;;;;;;;1818:13;;1752:87;:::o;23170:104::-;23226:13;23259:7;23252:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23170:104;:::o;44131:113::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44221:15:::1;44204:14;:32;;;;44131:113:::0;:::o;24853:295::-;24968:12;:10;:12::i;:::-;24956:24;;:8;:24;;;;24948:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25068:8;25023:18;:32;25042:12;:10;:12::i;:::-;25023:32;;;;;;;;;;;;;;;:42;25056:8;25023:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25121:8;25092:48;;25107:12;:10;:12::i;:::-;25092:48;;;25131:8;25092:48;;;;;;:::i;:::-;;;;;;;;24853:295;;:::o;43923:200::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43975:11:::1;43989:13;:11;:13::i;:::-;43975:27;;44013:6;44030:86;44046:3;44042:1;:7;44030:86;;;44071:33;44081:10;44102:1;44093:6;:10;;;;:::i;:::-;44071:9;:33::i;:::-;44051:3;;;;;:::i;:::-;;;;44030:86;;;2043:1;;43923:200::o:0;26116:328::-;26291:41;26310:12;:10;:12::i;:::-;26324:7;26291:18;:41::i;:::-;26283:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26397:39;26411:4;26417:2;26421:7;26430:5;26397:13;:39::i;:::-;26116:328;;;;:::o;45887:111::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45979:11:::1;45966:10;;:24;;;;;;;;;;;;;;;;;;45887:111:::0;:::o;46501:458::-;46574:13;46608:16;46616:7;46608;:16::i;:::-;46600:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46721:1;46693:30;;:16;;;;;;;;;;;:30;;;46689:112;;46754:16;;;;;;;;;;;46747:33;;;46781:7;46747:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46740:49;;;;46689:112;46813:21;46837:10;:8;:10::i;:::-;46813:34;;46889:1;46871:7;46865:21;:25;:86;;;;;;;;;;;;;;;;;46917:7;46926:18;:7;:16;:18::i;:::-;46900:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46865:86;46858:93;;;46501:458;;;;:::o;44252:90::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44322:12:::1;;;;;;;;;;;44321:13;44306:12;;:28;;;;;;;;;;;;;;;;;;44252:90::o:0;25219:164::-;25316:4;25340:18;:25;25359:5;25340:25;;;;;;;;;;;;;;;:35;25366:8;25340:35;;;;;;;;;;;;;;;;;;;;;;;;;25333:42;;25219:164;;;;:::o;43785:32::-;;;;;;;;;;;;;:::o;2652:192::-;1983:12;:10;:12::i;:::-;1972:23;;:7;:5;:7::i;:::-;:23;;;1964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2761:1:::1;2741:22;;:8;:22;;;;2733:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2817:19;2827:8;2817:9;:19::i;:::-;2652:192:::0;:::o;35927:224::-;36029:4;36068:35;36053:50;;;:11;:50;;;;:90;;;;36107:36;36131:11;36107:23;:36::i;:::-;36053:90;36046:97;;35927:224;;;:::o;27954:127::-;28019:4;28071:1;28043:30;;:7;:16;28051:7;28043:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28036:37;;27954:127;;;:::o;601:98::-;654:7;681:10;674:17;;601:98;:::o;31936:174::-;32038:2;32011:15;:24;32027:7;32011:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32094:7;32090:2;32056:46;;32065:23;32080:7;32065:14;:23::i;:::-;32056:46;;;;;;;;;;;;31936:174;;:::o;28248:348::-;28341:4;28366:16;28374:7;28366;:16::i;:::-;28358:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28442:13;28458:23;28473:7;28458:14;:23::i;:::-;28442:39;;28511:5;28500:16;;:7;:16;;;:51;;;;28544:7;28520:31;;:20;28532:7;28520:11;:20::i;:::-;:31;;;28500:51;:87;;;;28555:32;28572:5;28579:7;28555:16;:32::i;:::-;28500:87;28492:96;;;28248:348;;;;:::o;31240:578::-;31399:4;31372:31;;:23;31387:7;31372:14;:23::i;:::-;:31;;;31364:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31482:1;31468:16;;:2;:16;;;;31460:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31538:39;31559:4;31565:2;31569:7;31538:20;:39::i;:::-;31642:29;31659:1;31663:7;31642:8;:29::i;:::-;31703:1;31684:9;:15;31694:4;31684:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31732:1;31715:9;:13;31725:2;31715:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31763:2;31744:7;:16;31752:7;31744:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31802:7;31798:2;31783:27;;31792:4;31783:27;;;;;;;;;;;;31240:578;;;:::o;28938:110::-;29014:26;29024:2;29028:7;29014:26;;;;;;;;;;;;:9;:26::i;:::-;28938:110;;:::o;30543:360::-;30603:13;30619:23;30634:7;30619:14;:23::i;:::-;30603:39;;30655:48;30676:5;30691:1;30695:7;30655:20;:48::i;:::-;30744:29;30761:1;30765:7;30744:8;:29::i;:::-;30806:1;30786:9;:16;30796:5;30786:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;30825:7;:16;30833:7;30825:16;;;;;;;;;;;;30818:23;;;;;;;;;;;30887:7;30883:1;30859:36;;30868:5;30859:36;;;;;;;;;;;;30543:360;;:::o;2852:173::-;2908:16;2927:6;;;;;;;;;;;2908:25;;2953:8;2944:6;;:17;;;;;;;;;;;;;;;;;;3008:8;2977:40;;2998:8;2977:40;;;;;;;;;;;;2852:173;;:::o;27326:315::-;27483:28;27493:4;27499:2;27503:7;27483:9;:28::i;:::-;27530:48;27553:4;27559:2;27563:7;27572:5;27530:22;:48::i;:::-;27522:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27326:315;;;;:::o;46375:118::-;46435:13;46468:17;46461:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46375:118;:::o;18154:723::-;18210:13;18440:1;18431:5;:10;18427:53;;;18458:10;;;;;;;;;;;;;;;;;;;;;18427:53;18490:12;18505:5;18490:20;;18521:14;18546:78;18561:1;18553:4;:9;18546:78;;18579:8;;;;;:::i;:::-;;;;18610:2;18602:10;;;;;:::i;:::-;;;18546:78;;;18634:19;18666:6;18656:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18634:39;;18684:154;18700:1;18691:5;:10;18684:154;;18728:1;18718:11;;;;;:::i;:::-;;;18795:2;18787:5;:10;;;;:::i;:::-;18774:2;:24;;;;:::i;:::-;18761:39;;18744:6;18751;18744:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18824:2;18815:11;;;;;:::i;:::-;;;18684:154;;;18862:6;18848:21;;;;;18154:723;;;;:::o;22056:305::-;22158:4;22210:25;22195:40;;;:11;:40;;;;:105;;;;22267:33;22252:48;;;:11;:48;;;;22195:105;:158;;;;22317:36;22341:11;22317:23;:36::i;:::-;22195:158;22175:178;;22056:305;;;:::o;45002:181::-;45130:45;45157:4;45163:2;45167:7;45130:26;:45::i;:::-;45002:181;;;:::o;29275:321::-;29405:18;29411:2;29415:7;29405:5;:18::i;:::-;29456:54;29487:1;29491:2;29495:7;29504:5;29456:22;:54::i;:::-;29434:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29275:321;;;:::o;32675:803::-;32830:4;32851:15;:2;:13;;;:15::i;:::-;32847:624;;;32903:2;32887:36;;;32924:12;:10;:12::i;:::-;32938:4;32944:7;32953:5;32887:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32883:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33150:1;33133:6;:13;:18;33129:272;;;33176:60;;;;;;;;;;:::i;:::-;;;;;;;;33129:272;33351:6;33345:13;33336:6;33332:2;33328:15;33321:38;32883:533;33020:45;;;33010:55;;;:6;:55;;;;33003:62;;;;;32847:624;33455:4;33448:11;;32675:803;;;;;;;:::o;20638:157::-;20723:4;20762:25;20747:40;;;:11;:40;;;;20740:47;;20638:157;;;:::o;37603:589::-;37747:45;37774:4;37780:2;37784:7;37747:26;:45::i;:::-;37825:1;37809:18;;:4;:18;;;37805:187;;;37844:40;37876:7;37844:31;:40::i;:::-;37805:187;;;37914:2;37906:10;;:4;:10;;;37902:90;;37933:47;37966:4;37972:7;37933:32;:47::i;:::-;37902:90;37805:187;38020:1;38006:16;;:2;:16;;;38002:183;;;38039:45;38076:7;38039:36;:45::i;:::-;38002:183;;;38112:4;38106:10;;:2;:10;;;38102:83;;38133:40;38161:2;38165:7;38133:27;:40::i;:::-;38102:83;38002:183;37603:589;;;:::o;29932:382::-;30026:1;30012:16;;:2;:16;;;;30004:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30085:16;30093:7;30085;:16::i;:::-;30084:17;30076:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30147:45;30176:1;30180:2;30184:7;30147:20;:45::i;:::-;30222:1;30205:9;:13;30215:2;30205:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30253:2;30234:7;:16;30242:7;30234:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30298:7;30294:2;30273:33;;30290:1;30273:33;;;;;;;;;;;;29932:382;;:::o;10787:387::-;10847:4;11055:12;11122:7;11110:20;11102:28;;11165:1;11158:4;:8;11151:15;;;10787:387;;;:::o;34050:126::-;;;;:::o;38915:164::-;39019:10;:17;;;;38992:15;:24;39008:7;38992:24;;;;;;;;;;;:44;;;;39047:10;39063:7;39047:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38915:164;:::o;39706:988::-;39972:22;40022:1;39997:22;40014:4;39997:16;:22::i;:::-;:26;;;;:::i;:::-;39972:51;;40034:18;40055:17;:26;40073:7;40055:26;;;;;;;;;;;;40034:47;;40202:14;40188:10;:28;40184:328;;40233:19;40255:12;:18;40268:4;40255:18;;;;;;;;;;;;;;;:34;40274:14;40255:34;;;;;;;;;;;;40233:56;;40339:11;40306:12;:18;40319:4;40306:18;;;;;;;;;;;;;;;:30;40325:10;40306:30;;;;;;;;;;;:44;;;;40456:10;40423:17;:30;40441:11;40423:30;;;;;;;;;;;:43;;;;40184:328;;40608:17;:26;40626:7;40608:26;;;;;;;;;;;40601:33;;;40652:12;:18;40665:4;40652:18;;;;;;;;;;;;;;;:34;40671:14;40652:34;;;;;;;;;;;40645:41;;;39706:988;;;;:::o;40989:1079::-;41242:22;41287:1;41267:10;:17;;;;:21;;;;:::i;:::-;41242:46;;41299:18;41320:15;:24;41336:7;41320:24;;;;;;;;;;;;41299:45;;41671:19;41693:10;41704:14;41693:26;;;;;;;;;;;;;;;;;;;;;;;;41671:48;;41757:11;41732:10;41743;41732:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41868:10;41837:15;:28;41853:11;41837:28;;;;;;;;;;;:41;;;;42009:15;:24;42025:7;42009:24;;;;;;;;;;;42002:31;;;42044:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40989:1079;;;;:::o;38493:221::-;38578:14;38595:20;38612:2;38595:16;:20::i;:::-;38578:37;;38653:7;38626:12;:16;38639:2;38626:16;;;;;;;;;;;;;;;:24;38643:6;38626:24;;;;;;;;;;;:34;;;;38700:6;38671:17;:26;38689:7;38671:26;;;;;;;;;;;:35;;;;38493:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:353::-;;819:65;834:49;876:6;834:49;:::i;:::-;819:65;:::i;:::-;810:74;;907:6;900:5;893:21;945:4;938:5;934:16;983:3;974:6;969:3;965:16;962:25;959:2;;;1000:1;997;990:12;959:2;1013:39;1045:6;1040:3;1035;1013:39;:::i;:::-;800:258;;;;;;:::o;1064:139::-;;1148:6;1135:20;1126:29;;1164:33;1191:5;1164:33;:::i;:::-;1116:87;;;;:::o;1209:133::-;;1290:6;1277:20;1268:29;;1306:30;1330:5;1306:30;:::i;:::-;1258:84;;;;:::o;1348:137::-;;1431:6;1418:20;1409:29;;1447:32;1473:5;1447:32;:::i;:::-;1399:86;;;;:::o;1491:141::-;;1578:6;1572:13;1563:22;;1594:32;1620:5;1594:32;:::i;:::-;1553:79;;;;:::o;1651:271::-;;1755:3;1748:4;1740:6;1736:17;1732:27;1722:2;;1773:1;1770;1763:12;1722:2;1813:6;1800:20;1838:78;1912:3;1904:6;1897:4;1889:6;1885:17;1838:78;:::i;:::-;1829:87;;1712:210;;;;;:::o;1942:273::-;;2047:3;2040:4;2032:6;2028:17;2024:27;2014:2;;2065:1;2062;2055:12;2014:2;2105:6;2092:20;2130:79;2205:3;2197:6;2190:4;2182:6;2178:17;2130:79;:::i;:::-;2121:88;;2004:211;;;;;:::o;2235:288::-;;2351:3;2344:4;2336:6;2332:17;2328:27;2318:2;;2369:1;2366;2359:12;2318:2;2402:6;2396:13;2427:90;2513:3;2505:6;2498:4;2490:6;2486:17;2427:90;:::i;:::-;2418:99;;2308:215;;;;;:::o;2529:139::-;;2613:6;2600:20;2591:29;;2629:33;2656:5;2629:33;:::i;:::-;2581:87;;;;:::o;2674:262::-;;2782:2;2770:9;2761:7;2757:23;2753:32;2750:2;;;2798:1;2795;2788:12;2750:2;2841:1;2866:53;2911:7;2902:6;2891:9;2887:22;2866:53;:::i;:::-;2856:63;;2812:117;2740:196;;;;:::o;2942:407::-;;;3067:2;3055:9;3046:7;3042:23;3038:32;3035:2;;;3083:1;3080;3073:12;3035:2;3126:1;3151:53;3196:7;3187:6;3176:9;3172:22;3151:53;:::i;:::-;3141:63;;3097:117;3253:2;3279:53;3324:7;3315:6;3304:9;3300:22;3279:53;:::i;:::-;3269:63;;3224:118;3025:324;;;;;:::o;3355:552::-;;;;3497:2;3485:9;3476:7;3472:23;3468:32;3465:2;;;3513:1;3510;3503:12;3465:2;3556:1;3581:53;3626:7;3617:6;3606:9;3602:22;3581:53;:::i;:::-;3571:63;;3527:117;3683:2;3709:53;3754:7;3745:6;3734:9;3730:22;3709:53;:::i;:::-;3699:63;;3654:118;3811:2;3837:53;3882:7;3873:6;3862:9;3858:22;3837:53;:::i;:::-;3827:63;;3782:118;3455:452;;;;;:::o;3913:809::-;;;;;4081:3;4069:9;4060:7;4056:23;4052:33;4049:2;;;4098:1;4095;4088:12;4049:2;4141:1;4166:53;4211:7;4202:6;4191:9;4187:22;4166:53;:::i;:::-;4156:63;;4112:117;4268:2;4294:53;4339:7;4330:6;4319:9;4315:22;4294:53;:::i;:::-;4284:63;;4239:118;4396:2;4422:53;4467:7;4458:6;4447:9;4443:22;4422:53;:::i;:::-;4412:63;;4367:118;4552:2;4541:9;4537:18;4524:32;4583:18;4575:6;4572:30;4569:2;;;4615:1;4612;4605:12;4569:2;4643:62;4697:7;4688:6;4677:9;4673:22;4643:62;:::i;:::-;4633:72;;4495:220;4039:683;;;;;;;:::o;4728:401::-;;;4850:2;4838:9;4829:7;4825:23;4821:32;4818:2;;;4866:1;4863;4856:12;4818:2;4909:1;4934:53;4979:7;4970:6;4959:9;4955:22;4934:53;:::i;:::-;4924:63;;4880:117;5036:2;5062:50;5104:7;5095:6;5084:9;5080:22;5062:50;:::i;:::-;5052:60;;5007:115;4808:321;;;;;:::o;5135:407::-;;;5260:2;5248:9;5239:7;5235:23;5231:32;5228:2;;;5276:1;5273;5266:12;5228:2;5319:1;5344:53;5389:7;5380:6;5369:9;5365:22;5344:53;:::i;:::-;5334:63;;5290:117;5446:2;5472:53;5517:7;5508:6;5497:9;5493:22;5472:53;:::i;:::-;5462:63;;5417:118;5218:324;;;;;:::o;5548:260::-;;5655:2;5643:9;5634:7;5630:23;5626:32;5623:2;;;5671:1;5668;5661:12;5623:2;5714:1;5739:52;5783:7;5774:6;5763:9;5759:22;5739:52;:::i;:::-;5729:62;;5685:116;5613:195;;;;:::o;5814:282::-;;5932:2;5920:9;5911:7;5907:23;5903:32;5900:2;;;5948:1;5945;5938:12;5900:2;5991:1;6016:63;6071:7;6062:6;6051:9;6047:22;6016:63;:::i;:::-;6006:73;;5962:127;5890:206;;;;:::o;6102:375::-;;6220:2;6208:9;6199:7;6195:23;6191:32;6188:2;;;6236:1;6233;6226:12;6188:2;6307:1;6296:9;6292:17;6279:31;6337:18;6329:6;6326:30;6323:2;;;6369:1;6366;6359:12;6323:2;6397:63;6452:7;6443:6;6432:9;6428:22;6397:63;:::i;:::-;6387:73;;6250:220;6178:299;;;;:::o;6483:390::-;;6612:2;6600:9;6591:7;6587:23;6583:32;6580:2;;;6628:1;6625;6618:12;6580:2;6692:1;6681:9;6677:17;6671:24;6722:18;6714:6;6711:30;6708:2;;;6754:1;6751;6744:12;6708:2;6782:74;6848:7;6839:6;6828:9;6824:22;6782:74;:::i;:::-;6772:84;;6642:224;6570:303;;;;:::o;6879:262::-;;6987:2;6975:9;6966:7;6962:23;6958:32;6955:2;;;7003:1;7000;6993:12;6955:2;7046:1;7071:53;7116:7;7107:6;7096:9;7092:22;7071:53;:::i;:::-;7061:63;;7017:117;6945:196;;;;:::o;7147:118::-;7234:24;7252:5;7234:24;:::i;:::-;7229:3;7222:37;7212:53;;:::o;7271:109::-;7352:21;7367:5;7352:21;:::i;:::-;7347:3;7340:34;7330:50;;:::o;7386:360::-;;7500:38;7532:5;7500:38;:::i;:::-;7554:70;7617:6;7612:3;7554:70;:::i;:::-;7547:77;;7633:52;7678:6;7673:3;7666:4;7659:5;7655:16;7633:52;:::i;:::-;7710:29;7732:6;7710:29;:::i;:::-;7705:3;7701:39;7694:46;;7476:270;;;;;:::o;7752:364::-;;7868:39;7901:5;7868:39;:::i;:::-;7923:71;7987:6;7982:3;7923:71;:::i;:::-;7916:78;;8003:52;8048:6;8043:3;8036:4;8029:5;8025:16;8003:52;:::i;:::-;8080:29;8102:6;8080:29;:::i;:::-;8075:3;8071:39;8064:46;;7844:272;;;;;:::o;8122:377::-;;8256:39;8289:5;8256:39;:::i;:::-;8311:89;8393:6;8388:3;8311:89;:::i;:::-;8304:96;;8409:52;8454:6;8449:3;8442:4;8435:5;8431:16;8409:52;:::i;:::-;8486:6;8481:3;8477:16;8470:23;;8232:267;;;;;:::o;8505:326::-;;8668:67;8732:2;8727:3;8668:67;:::i;:::-;8661:74;;8765:30;8761:1;8756:3;8752:11;8745:51;8822:2;8817:3;8813:12;8806:19;;8651:180;;;:::o;8837:319::-;;9000:67;9064:2;9059:3;9000:67;:::i;:::-;8993:74;;9097:23;9093:1;9088:3;9084:11;9077:44;9147:2;9142:3;9138:12;9131:19;;8983:173;;;:::o;9162:375::-;;9325:67;9389:2;9384:3;9325:67;:::i;:::-;9318:74;;9422:34;9418:1;9413:3;9409:11;9402:55;9488:13;9483:2;9478:3;9474:12;9467:35;9528:2;9523:3;9519:12;9512:19;;9308:229;;;:::o;9543:382::-;;9706:67;9770:2;9765:3;9706:67;:::i;:::-;9699:74;;9803:34;9799:1;9794:3;9790:11;9783:55;9869:20;9864:2;9859:3;9855:12;9848:42;9916:2;9911:3;9907:12;9900:19;;9689:236;;;:::o;9931:370::-;;10094:67;10158:2;10153:3;10094:67;:::i;:::-;10087:74;;10191:34;10187:1;10182:3;10178:11;10171:55;10257:8;10252:2;10247:3;10243:12;10236:30;10292:2;10287:3;10283:12;10276:19;;10077:224;;;:::o;10307:326::-;;10470:67;10534:2;10529:3;10470:67;:::i;:::-;10463:74;;10567:30;10563:1;10558:3;10554:11;10547:51;10624:2;10619:3;10615:12;10608:19;;10453:180;;;:::o;10639:368::-;;10802:67;10866:2;10861:3;10802:67;:::i;:::-;10795:74;;10899:34;10895:1;10890:3;10886:11;10879:55;10965:6;10960:2;10955:3;10951:12;10944:28;10998:2;10993:3;10989:12;10982:19;;10785:222;;;:::o;11013:323::-;;11176:67;11240:2;11235:3;11176:67;:::i;:::-;11169:74;;11273:27;11269:1;11264:3;11260:11;11253:48;11327:2;11322:3;11318:12;11311:19;;11159:177;;;:::o;11342:376::-;;11505:67;11569:2;11564:3;11505:67;:::i;:::-;11498:74;;11602:34;11598:1;11593:3;11589:11;11582:55;11668:14;11663:2;11658:3;11654:12;11647:36;11709:2;11704:3;11700:12;11693:19;;11488:230;;;:::o;11724:388::-;;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11984:34;11980:1;11975:3;11971:11;11964:55;12050:26;12045:2;12040:3;12036:12;12029:48;12103:2;12098:3;12094:12;12087:19;;11870:242;;;:::o;12118:374::-;;12281:67;12345:2;12340:3;12281:67;:::i;:::-;12274:74;;12378:34;12374:1;12369:3;12365:11;12358:55;12444:12;12439:2;12434:3;12430:12;12423:34;12483:2;12478:3;12474:12;12467:19;;12264:228;;;:::o;12498:373::-;;12661:67;12725:2;12720:3;12661:67;:::i;:::-;12654:74;;12758:34;12754:1;12749:3;12745:11;12738:55;12824:11;12819:2;12814:3;12810:12;12803:33;12862:2;12857:3;12853:12;12846:19;;12644:227;;;:::o;12877:369::-;;13040:67;13104:2;13099:3;13040:67;:::i;:::-;13033:74;;13137:34;13133:1;13128:3;13124:11;13117:55;13203:7;13198:2;13193:3;13189:12;13182:29;13237:2;13232:3;13228:12;13221:19;;13023:223;;;:::o;13252:378::-;;13415:67;13479:2;13474:3;13415:67;:::i;:::-;13408:74;;13512:34;13508:1;13503:3;13499:11;13492:55;13578:16;13573:2;13568:3;13564:12;13557:38;13621:2;13616:3;13612:12;13605:19;;13398:232;;;:::o;13636:330::-;;13799:67;13863:2;13858:3;13799:67;:::i;:::-;13792:74;;13896:34;13892:1;13887:3;13883:11;13876:55;13957:2;13952:3;13948:12;13941:19;;13782:184;;;:::o;13972:376::-;;14135:67;14199:2;14194:3;14135:67;:::i;:::-;14128:74;;14232:34;14228:1;14223:3;14219:11;14212:55;14298:14;14293:2;14288:3;14284:12;14277:36;14339:2;14334:3;14330:12;14323:19;;14118:230;;;:::o;14354:330::-;;14517:67;14581:2;14576:3;14517:67;:::i;:::-;14510:74;;14614:34;14610:1;14605:3;14601:11;14594:55;14675:2;14670:3;14666:12;14659:19;;14500:184;;;:::o;14690:373::-;;14853:67;14917:2;14912:3;14853:67;:::i;:::-;14846:74;;14950:34;14946:1;14941:3;14937:11;14930:55;15016:11;15011:2;15006:3;15002:12;14995:33;15054:2;15049:3;15045:12;15038:19;;14836:227;;;:::o;15069:379::-;;15232:67;15296:2;15291:3;15232:67;:::i;:::-;15225:74;;15329:34;15325:1;15320:3;15316:11;15309:55;15395:17;15390:2;15385:3;15381:12;15374:39;15439:2;15434:3;15430:12;15423:19;;15215:233;;;:::o;15454:365::-;;15617:67;15681:2;15676:3;15617:67;:::i;:::-;15610:74;;15714:34;15710:1;15705:3;15701:11;15694:55;15780:3;15775:2;15770:3;15766:12;15759:25;15810:2;15805:3;15801:12;15794:19;;15600:219;;;:::o;15825:377::-;;15988:67;16052:2;16047:3;15988:67;:::i;:::-;15981:74;;16085:34;16081:1;16076:3;16072:11;16065:55;16151:15;16146:2;16141:3;16137:12;16130:37;16193:2;16188:3;16184:12;16177:19;;15971:231;;;:::o;16208:366::-;;16371:67;16435:2;16430:3;16371:67;:::i;:::-;16364:74;;16468:34;16464:1;16459:3;16455:11;16448:55;16534:4;16529:2;16524:3;16520:12;16513:26;16565:2;16560:3;16556:12;16549:19;;16354:220;;;:::o;16580:381::-;;16743:67;16807:2;16802:3;16743:67;:::i;:::-;16736:74;;16840:34;16836:1;16831:3;16827:11;16820:55;16906:19;16901:2;16896:3;16892:12;16885:41;16952:2;16947:3;16943:12;16936:19;;16726:235;;;:::o;16967:376::-;;17130:67;17194:2;17189:3;17130:67;:::i;:::-;17123:74;;17227:34;17223:1;17218:3;17214:11;17207:55;17293:14;17288:2;17283:3;17279:12;17272:36;17334:2;17329:3;17325:12;17318:19;;17113:230;;;:::o;17349:118::-;17436:24;17454:5;17436:24;:::i;:::-;17431:3;17424:37;17414:53;;:::o;17473:435::-;;17675:95;17766:3;17757:6;17675:95;:::i;:::-;17668:102;;17787:95;17878:3;17869:6;17787:95;:::i;:::-;17780:102;;17899:3;17892:10;;17657:251;;;;;:::o;17914:222::-;;18045:2;18034:9;18030:18;18022:26;;18058:71;18126:1;18115:9;18111:17;18102:6;18058:71;:::i;:::-;18012:124;;;;:::o;18142:640::-;;18375:3;18364:9;18360:19;18352:27;;18389:71;18457:1;18446:9;18442:17;18433:6;18389:71;:::i;:::-;18470:72;18538:2;18527:9;18523:18;18514:6;18470:72;:::i;:::-;18552;18620:2;18609:9;18605:18;18596:6;18552:72;:::i;:::-;18671:9;18665:4;18661:20;18656:2;18645:9;18641:18;18634:48;18699:76;18770:4;18761:6;18699:76;:::i;:::-;18691:84;;18342:440;;;;;;;:::o;18788:210::-;;18913:2;18902:9;18898:18;18890:26;;18926:65;18988:1;18977:9;18973:17;18964:6;18926:65;:::i;:::-;18880:118;;;;:::o;19004:313::-;;19155:2;19144:9;19140:18;19132:26;;19204:9;19198:4;19194:20;19190:1;19179:9;19175:17;19168:47;19232:78;19305:4;19296:6;19232:78;:::i;:::-;19224:86;;19122:195;;;;:::o;19323:419::-;;19527:2;19516:9;19512:18;19504:26;;19576:9;19570:4;19566:20;19562:1;19551:9;19547:17;19540:47;19604:131;19730:4;19604:131;:::i;:::-;19596:139;;19494:248;;;:::o;19748:419::-;;19952:2;19941:9;19937:18;19929:26;;20001:9;19995:4;19991:20;19987:1;19976:9;19972:17;19965:47;20029:131;20155:4;20029:131;:::i;:::-;20021:139;;19919:248;;;:::o;20173:419::-;;20377:2;20366:9;20362:18;20354:26;;20426:9;20420:4;20416:20;20412:1;20401:9;20397:17;20390:47;20454:131;20580:4;20454:131;:::i;:::-;20446:139;;20344:248;;;:::o;20598:419::-;;20802:2;20791:9;20787:18;20779:26;;20851:9;20845:4;20841:20;20837:1;20826:9;20822:17;20815:47;20879:131;21005:4;20879:131;:::i;:::-;20871:139;;20769:248;;;:::o;21023:419::-;;21227:2;21216:9;21212:18;21204:26;;21276:9;21270:4;21266:20;21262:1;21251:9;21247:17;21240:47;21304:131;21430:4;21304:131;:::i;:::-;21296:139;;21194:248;;;:::o;21448:419::-;;21652:2;21641:9;21637:18;21629:26;;21701:9;21695:4;21691:20;21687:1;21676:9;21672:17;21665:47;21729:131;21855:4;21729:131;:::i;:::-;21721:139;;21619:248;;;:::o;21873:419::-;;22077:2;22066:9;22062:18;22054:26;;22126:9;22120:4;22116:20;22112:1;22101:9;22097:17;22090:47;22154:131;22280:4;22154:131;:::i;:::-;22146:139;;22044:248;;;:::o;22298:419::-;;22502:2;22491:9;22487:18;22479:26;;22551:9;22545:4;22541:20;22537:1;22526:9;22522:17;22515:47;22579:131;22705:4;22579:131;:::i;:::-;22571:139;;22469:248;;;:::o;22723:419::-;;22927:2;22916:9;22912:18;22904:26;;22976:9;22970:4;22966:20;22962:1;22951:9;22947:17;22940:47;23004:131;23130:4;23004:131;:::i;:::-;22996:139;;22894:248;;;:::o;23148:419::-;;23352:2;23341:9;23337:18;23329:26;;23401:9;23395:4;23391:20;23387:1;23376:9;23372:17;23365:47;23429:131;23555:4;23429:131;:::i;:::-;23421:139;;23319:248;;;:::o;23573:419::-;;23777:2;23766:9;23762:18;23754:26;;23826:9;23820:4;23816:20;23812:1;23801:9;23797:17;23790:47;23854:131;23980:4;23854:131;:::i;:::-;23846:139;;23744:248;;;:::o;23998:419::-;;24202:2;24191:9;24187:18;24179:26;;24251:9;24245:4;24241:20;24237:1;24226:9;24222:17;24215:47;24279:131;24405:4;24279:131;:::i;:::-;24271:139;;24169:248;;;:::o;24423:419::-;;24627:2;24616:9;24612:18;24604:26;;24676:9;24670:4;24666:20;24662:1;24651:9;24647:17;24640:47;24704:131;24830:4;24704:131;:::i;:::-;24696:139;;24594:248;;;:::o;24848:419::-;;25052:2;25041:9;25037:18;25029:26;;25101:9;25095:4;25091:20;25087:1;25076:9;25072:17;25065:47;25129:131;25255:4;25129:131;:::i;:::-;25121:139;;25019:248;;;:::o;25273:419::-;;25477:2;25466:9;25462:18;25454:26;;25526:9;25520:4;25516:20;25512:1;25501:9;25497:17;25490:47;25554:131;25680:4;25554:131;:::i;:::-;25546:139;;25444:248;;;:::o;25698:419::-;;25902:2;25891:9;25887:18;25879:26;;25951:9;25945:4;25941:20;25937:1;25926:9;25922:17;25915:47;25979:131;26105:4;25979:131;:::i;:::-;25971:139;;25869:248;;;:::o;26123:419::-;;26327:2;26316:9;26312:18;26304:26;;26376:9;26370:4;26366:20;26362:1;26351:9;26347:17;26340:47;26404:131;26530:4;26404:131;:::i;:::-;26396:139;;26294:248;;;:::o;26548:419::-;;26752:2;26741:9;26737:18;26729:26;;26801:9;26795:4;26791:20;26787:1;26776:9;26772:17;26765:47;26829:131;26955:4;26829:131;:::i;:::-;26821:139;;26719:248;;;:::o;26973:419::-;;27177:2;27166:9;27162:18;27154:26;;27226:9;27220:4;27216:20;27212:1;27201:9;27197:17;27190:47;27254:131;27380:4;27254:131;:::i;:::-;27246:139;;27144:248;;;:::o;27398:419::-;;27602:2;27591:9;27587:18;27579:26;;27651:9;27645:4;27641:20;27637:1;27626:9;27622:17;27615:47;27679:131;27805:4;27679:131;:::i;:::-;27671:139;;27569:248;;;:::o;27823:419::-;;28027:2;28016:9;28012:18;28004:26;;28076:9;28070:4;28066:20;28062:1;28051:9;28047:17;28040:47;28104:131;28230:4;28104:131;:::i;:::-;28096:139;;27994:248;;;:::o;28248:419::-;;28452:2;28441:9;28437:18;28429:26;;28501:9;28495:4;28491:20;28487:1;28476:9;28472:17;28465:47;28529:131;28655:4;28529:131;:::i;:::-;28521:139;;28419:248;;;:::o;28673:419::-;;28877:2;28866:9;28862:18;28854:26;;28926:9;28920:4;28916:20;28912:1;28901:9;28897:17;28890:47;28954:131;29080:4;28954:131;:::i;:::-;28946:139;;28844:248;;;:::o;29098:419::-;;29302:2;29291:9;29287:18;29279:26;;29351:9;29345:4;29341:20;29337:1;29326:9;29322:17;29315:47;29379:131;29505:4;29379:131;:::i;:::-;29371:139;;29269:248;;;:::o;29523:222::-;;29654:2;29643:9;29639:18;29631:26;;29667:71;29735:1;29724:9;29720:17;29711:6;29667:71;:::i;:::-;29621:124;;;;:::o;29751:283::-;;29817:2;29811:9;29801:19;;29859:4;29851:6;29847:17;29966:6;29954:10;29951:22;29930:18;29918:10;29915:34;29912:62;29909:2;;;29977:18;;:::i;:::-;29909:2;30017:10;30013:2;30006:22;29791:243;;;;:::o;30040:331::-;;30191:18;30183:6;30180:30;30177:2;;;30213:18;;:::i;:::-;30177:2;30298:4;30294:9;30287:4;30279:6;30275:17;30271:33;30263:41;;30359:4;30353;30349:15;30341:23;;30106:265;;;:::o;30377:332::-;;30529:18;30521:6;30518:30;30515:2;;;30551:18;;:::i;:::-;30515:2;30636:4;30632:9;30625:4;30617:6;30613:17;30609:33;30601:41;;30697:4;30691;30687:15;30679:23;;30444:265;;;:::o;30715:98::-;;30800:5;30794:12;30784:22;;30773:40;;;:::o;30819:99::-;;30905:5;30899:12;30889:22;;30878:40;;;:::o;30924:168::-;;31041:6;31036:3;31029:19;31081:4;31076:3;31072:14;31057:29;;31019:73;;;;:::o;31098:169::-;;31216:6;31211:3;31204:19;31256:4;31251:3;31247:14;31232:29;;31194:73;;;;:::o;31273:148::-;;31412:3;31397:18;;31387:34;;;;:::o;31427:305::-;;31486:20;31504:1;31486:20;:::i;:::-;31481:25;;31520:20;31538:1;31520:20;:::i;:::-;31515:25;;31674:1;31606:66;31602:74;31599:1;31596:81;31593:2;;;31680:18;;:::i;:::-;31593:2;31724:1;31721;31717:9;31710:16;;31471:261;;;;:::o;31738:185::-;;31795:20;31813:1;31795:20;:::i;:::-;31790:25;;31829:20;31847:1;31829:20;:::i;:::-;31824:25;;31868:1;31858:2;;31873:18;;:::i;:::-;31858:2;31915:1;31912;31908:9;31903:14;;31780:143;;;;:::o;31929:348::-;;31992:20;32010:1;31992:20;:::i;:::-;31987:25;;32026:20;32044:1;32026:20;:::i;:::-;32021:25;;32214:1;32146:66;32142:74;32139:1;32136:81;32131:1;32124:9;32117:17;32113:105;32110:2;;;32221:18;;:::i;:::-;32110:2;32269:1;32266;32262:9;32251:20;;31977:300;;;;:::o;32283:191::-;;32343:20;32361:1;32343:20;:::i;:::-;32338:25;;32377:20;32395:1;32377:20;:::i;:::-;32372:25;;32416:1;32413;32410:8;32407:2;;;32421:18;;:::i;:::-;32407:2;32466:1;32463;32459:9;32451:17;;32328:146;;;;:::o;32480:96::-;;32546:24;32564:5;32546:24;:::i;:::-;32535:35;;32525:51;;;:::o;32582:90::-;;32659:5;32652:13;32645:21;32634:32;;32624:48;;;:::o;32678:149::-;;32754:66;32747:5;32743:78;32732:89;;32722:105;;;:::o;32833:126::-;;32910:42;32903:5;32899:54;32888:65;;32878:81;;;:::o;32965:77::-;;33031:5;33020:16;;33010:32;;;:::o;33048:154::-;33132:6;33127:3;33122;33109:30;33194:1;33185:6;33180:3;33176:16;33169:27;33099:103;;;:::o;33208:307::-;33276:1;33286:113;33300:6;33297:1;33294:13;33286:113;;;33385:1;33380:3;33376:11;33370:18;33366:1;33361:3;33357:11;33350:39;33322:2;33319:1;33315:10;33310:15;;33286:113;;;33417:6;33414:1;33411:13;33408:2;;;33497:1;33488:6;33483:3;33479:16;33472:27;33408:2;33257:258;;;;:::o;33521:320::-;;33602:1;33596:4;33592:12;33582:22;;33649:1;33643:4;33639:12;33670:18;33660:2;;33726:4;33718:6;33714:17;33704:27;;33660:2;33788;33780:6;33777:14;33757:18;33754:38;33751:2;;;33807:18;;:::i;:::-;33751:2;33572:269;;;;:::o;33847:233::-;;33909:24;33927:5;33909:24;:::i;:::-;33900:33;;33955:66;33948:5;33945:77;33942:2;;;34025:18;;:::i;:::-;33942:2;34072:1;34065:5;34061:13;34054:20;;33890:190;;;:::o;34086:176::-;;34135:20;34153:1;34135:20;:::i;:::-;34130:25;;34169:20;34187:1;34169:20;:::i;:::-;34164:25;;34208:1;34198:2;;34213:18;;:::i;:::-;34198:2;34254:1;34251;34247:9;34242:14;;34120:142;;;;:::o;34268:180::-;34316:77;34313:1;34306:88;34413:4;34410:1;34403:15;34437:4;34434:1;34427:15;34454:180;34502:77;34499:1;34492:88;34599:4;34596:1;34589:15;34623:4;34620:1;34613:15;34640:180;34688:77;34685:1;34678:88;34785:4;34782:1;34775:15;34809:4;34806:1;34799:15;34826:180;34874:77;34871:1;34864:88;34971:4;34968:1;34961:15;34995:4;34992:1;34985:15;35012:102;;35104:2;35100:7;35095:2;35088:5;35084:14;35080:28;35070:38;;35060:54;;;:::o;35120:122::-;35193:24;35211:5;35193:24;:::i;:::-;35186:5;35183:35;35173:2;;35232:1;35229;35222:12;35173:2;35163:79;:::o;35248:116::-;35318:21;35333:5;35318:21;:::i;:::-;35311:5;35308:32;35298:2;;35354:1;35351;35344:12;35298:2;35288:76;:::o;35370:120::-;35442:23;35459:5;35442:23;:::i;:::-;35435:5;35432:34;35422:2;;35480:1;35477;35470:12;35422:2;35412:78;:::o;35496:122::-;35569:24;35587:5;35569:24;:::i;:::-;35562:5;35559:35;35549:2;;35608:1;35605;35598:12;35549:2;35539:79;:::o

Swarm Source

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