ETH Price: $2,002.61 (-2.86%)

Token

Royal Cats Club (RC Club)
 

Overview

Max Total Supply

4 RC Club

Holders

2

Transfers

-
0 (0%)

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

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:
ERC721

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-08-06
*/

// SPDX-License-Identifier: MIT

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

pragma solidity ^0.8.0;

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


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        return account.code.length > 0;
    }

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

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

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

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}


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 String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}


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

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

    
    address public _owner;
    uint256 public totalSupply;
    uint256 public _price;
    string public _baseURI;
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_, string memory baseURI_) {
        _name = name_;
        _symbol = symbol_;
        _owner = msg.sender;
        _baseURI = baseURI_;
    }

    modifier onlyOwner() {
        require(msg.sender == _owner, "not owner");
        _;
    }

    function setPrice(uint256 amount) public onlyOwner {
        _price = amount;
    }

    function withdraw(address to, uint256 amount) public onlyOwner {
        payable(to).transfer(amount);
    }

    function mint() payable public {
        require(msg.value >= _price, "insufficient value");
        totalSupply = totalSupply + 1;
        _mint(msg.sender, totalSupply);
    }

    /**
     * @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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

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


    /**
     * @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 token owner or approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or 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: caller is not token owner or 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     * This is an internal function that does not check if the sender is authorized to operate on the token.
     *
     * 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
        delete _tokenApprovals[tokenId];

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        delete _tokenApprovals[tokenId];

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

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

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

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","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":"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":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002e9c38038062002e9c8339818101604052810190620000379190620001fa565b82600090805190602001906200004f929190620000cc565b50816001908051906020019062000068929190620000cc565b5033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060099080519060200190620000c2929190620000cc565b5050505062000437565b828054620000da9062000348565b90600052602060002090601f016020900481019282620000fe57600085556200014a565b82601f106200011957805160ff19168380011785556200014a565b828001600101855582156200014a579182015b82811115620001495782518255916020019190600101906200012c565b5b5090506200015991906200015d565b5090565b5b80821115620001785760008160009055506001016200015e565b5090565b6000620001936200018d84620002dc565b620002b3565b905082815260208101848484011115620001b257620001b162000417565b5b620001bf84828562000312565b509392505050565b600082601f830112620001df57620001de62000412565b5b8151620001f18482602086016200017c565b91505092915050565b60008060006060848603121562000216576200021562000421565b5b600084015167ffffffffffffffff8111156200023757620002366200041c565b5b6200024586828701620001c7565b935050602084015167ffffffffffffffff8111156200026957620002686200041c565b5b6200027786828701620001c7565b925050604084015167ffffffffffffffff8111156200029b576200029a6200041c565b5b620002a986828701620001c7565b9150509250925092565b6000620002bf620002d2565b9050620002cd82826200037e565b919050565b6000604051905090565b600067ffffffffffffffff821115620002fa57620002f9620003e3565b5b620003058262000426565b9050602081019050919050565b60005b838110156200033257808201518184015260208101905062000315565b8381111562000342576000848401525b50505050565b600060028204905060018216806200036157607f821691505b60208210811415620003785762000377620003b4565b5b50919050565b620003898262000426565b810181811067ffffffffffffffff82111715620003ab57620003aa620003e3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b612a5580620004476000396000f3fe60806040526004361061011f5760003560e01c806370a08231116100a0578063b2bdfa7b11610064578063b2bdfa7b146103c6578063b88d4fde146103f1578063c87b56dd1461041a578063e985e9c514610457578063f3fef3a3146104945761011f565b806370a08231146102e1578063743976a01461031e57806391b7f5ed1461034957806395d89b4114610372578063a22cb4651461039d5761011f565b806318160ddd116100e757806318160ddd146101fc578063235b6ea11461022757806323b872dd1461025257806342842e0e1461027b5780636352211e146102a45761011f565b806301ffc9a71461012457806306fdde0314610161578063081812fc1461018c578063095ea7b3146101c95780631249c58b146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611d0c565b6104bd565b60405161015891906120b5565b60405180910390f35b34801561016d57600080fd5b5061017661059f565b60405161018391906120d0565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190611d66565b610631565b6040516101c0919061204e565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190611ccc565b610677565b005b6101fa61078f565b005b34801561020857600080fd5b506102116107f7565b60405161021e9190612292565b60405180910390f35b34801561023357600080fd5b5061023c6107fd565b6040516102499190612292565b60405180910390f35b34801561025e57600080fd5b5061027960048036038101906102749190611bb6565b610803565b005b34801561028757600080fd5b506102a2600480360381019061029d9190611bb6565b610863565b005b3480156102b057600080fd5b506102cb60048036038101906102c69190611d66565b610883565b6040516102d8919061204e565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190611b49565b610935565b6040516103159190612292565b60405180910390f35b34801561032a57600080fd5b506103336109ed565b60405161034091906120d0565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190611d66565b610a7b565b005b34801561037e57600080fd5b50610387610b15565b60405161039491906120d0565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190611c8c565b610ba7565b005b3480156103d257600080fd5b506103db610bbd565b6040516103e8919061204e565b60405180910390f35b3480156103fd57600080fd5b5061041860048036038101906104139190611c09565b610be3565b005b34801561042657600080fd5b50610441600480360381019061043c9190611d66565b610c45565b60405161044e91906120d0565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190611b76565b610d30565b60405161048b91906120b5565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190611ccc565b610dc4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610598575061059782610e9f565b5b9050919050565b6060600080546105ae906124b7565b80601f01602080910402602001604051908101604052809291908181526020018280546105da906124b7565b80156106275780601f106105fc57610100808354040283529160200191610627565b820191906000526020600020905b81548152906001019060200180831161060a57829003601f168201915b5050505050905090565b600061063c82610f09565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061068282610883565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea90612232565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610712610f54565b73ffffffffffffffffffffffffffffffffffffffff16148061074157506107408161073b610f54565b610d30565b5b610780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077790612252565b60405180910390fd5b61078a8383610f5c565b505050565b6008543410156107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb90612172565b60405180910390fd5b60016007546107e39190612346565b6007819055506107f533600754611015565b565b60075481565b60085481565b61081461080e610f54565b826111ef565b610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a906120f2565b60405180910390fd5b61085e838383611284565b505050565b61087e83838360405180602001604052806000815250610be3565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390612212565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d906121d2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600980546109fa906124b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a26906124b7565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b505050505081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290612272565b60405180910390fd5b8060088190555050565b606060018054610b24906124b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b50906124b7565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b610bb9610bb2610f54565b8383611516565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bf4610bee610f54565b836111ef565b610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a906120f2565b60405180910390fd5b610c3f84848484611683565b50505050565b6060610c5082610f09565b600060098054610c5f906124b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8b906124b7565b8015610cd85780601f10610cad57610100808354040283529160200191610cd8565b820191906000526020600020905b815481529060010190602001808311610cbb57829003601f168201915b505050505090506000815111610cfd5760405180602001604052806000815250610d28565b80610d07846116df565b604051602001610d1892919061202a565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90612272565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e9a573d6000803e3d6000fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610f1281611840565b610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890612212565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610fcf83610883565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c906121f2565b60405180910390fd5b61108e81611840565b156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590612152565b60405180910390fd5b6110da600083836118ac565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461112a9190612346565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46111eb600083836118b1565b5050565b6000806111fb83610883565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061123d575061123c8185610d30565b5b8061127b57508373ffffffffffffffffffffffffffffffffffffffff1661126384610631565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166112a482610883565b73ffffffffffffffffffffffffffffffffffffffff16146112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190612132565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190612192565b60405180910390fd5b6113758383836118ac565b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113fb91906123cd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114529190612346565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115118383836118b1565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c906121b2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161167691906120b5565b60405180910390a3505050565b61168e848484611284565b61169a848484846118b6565b6116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090612112565b60405180910390fd5b50505050565b60606000821415611727576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061183b565b600082905060005b600082146117595780806117429061251a565b915050600a82611752919061239c565b915061172f565b60008167ffffffffffffffff81111561177557611774612650565b5b6040519080825280601f01601f1916602001820160405280156117a75781602001600182028036833780820191505090505b5090505b60008514611834576001826117c091906123cd565b9150600a856117cf9190612563565b60306117db9190612346565b60f81b8183815181106117f1576117f0612621565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561182d919061239c565b94506117ab565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006118d78473ffffffffffffffffffffffffffffffffffffffff16611a4d565b15611a40578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611900610f54565b8786866040518563ffffffff1660e01b81526004016119229493929190612069565b602060405180830381600087803b15801561193c57600080fd5b505af192505050801561196d57506040513d601f19601f8201168201806040525081019061196a9190611d39565b60015b6119f0573d806000811461199d576040519150601f19603f3d011682016040523d82523d6000602084013e6119a2565b606091505b506000815114156119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90612112565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a45565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611a83611a7e846122d2565b6122ad565b905082815260208101848484011115611a9f57611a9e612684565b5b611aaa848285612475565b509392505050565b600081359050611ac1816129c3565b92915050565b600081359050611ad6816129da565b92915050565b600081359050611aeb816129f1565b92915050565b600081519050611b00816129f1565b92915050565b600082601f830112611b1b57611b1a61267f565b5b8135611b2b848260208601611a70565b91505092915050565b600081359050611b4381612a08565b92915050565b600060208284031215611b5f57611b5e61268e565b5b6000611b6d84828501611ab2565b91505092915050565b60008060408385031215611b8d57611b8c61268e565b5b6000611b9b85828601611ab2565b9250506020611bac85828601611ab2565b9150509250929050565b600080600060608486031215611bcf57611bce61268e565b5b6000611bdd86828701611ab2565b9350506020611bee86828701611ab2565b9250506040611bff86828701611b34565b9150509250925092565b60008060008060808587031215611c2357611c2261268e565b5b6000611c3187828801611ab2565b9450506020611c4287828801611ab2565b9350506040611c5387828801611b34565b925050606085013567ffffffffffffffff811115611c7457611c73612689565b5b611c8087828801611b06565b91505092959194509250565b60008060408385031215611ca357611ca261268e565b5b6000611cb185828601611ab2565b9250506020611cc285828601611ac7565b9150509250929050565b60008060408385031215611ce357611ce261268e565b5b6000611cf185828601611ab2565b9250506020611d0285828601611b34565b9150509250929050565b600060208284031215611d2257611d2161268e565b5b6000611d3084828501611adc565b91505092915050565b600060208284031215611d4f57611d4e61268e565b5b6000611d5d84828501611af1565b91505092915050565b600060208284031215611d7c57611d7b61268e565b5b6000611d8a84828501611b34565b91505092915050565b611d9c81612401565b82525050565b611dab81612413565b82525050565b6000611dbc82612303565b611dc68185612319565b9350611dd6818560208601612484565b611ddf81612693565b840191505092915050565b6000611df58261230e565b611dff818561232a565b9350611e0f818560208601612484565b611e1881612693565b840191505092915050565b6000611e2e8261230e565b611e38818561233b565b9350611e48818560208601612484565b80840191505092915050565b6000611e61602d8361232a565b9150611e6c826126a4565b604082019050919050565b6000611e8460328361232a565b9150611e8f826126f3565b604082019050919050565b6000611ea760258361232a565b9150611eb282612742565b604082019050919050565b6000611eca601c8361232a565b9150611ed582612791565b602082019050919050565b6000611eed60128361232a565b9150611ef8826127ba565b602082019050919050565b6000611f1060248361232a565b9150611f1b826127e3565b604082019050919050565b6000611f3360198361232a565b9150611f3e82612832565b602082019050919050565b6000611f5660298361232a565b9150611f618261285b565b604082019050919050565b6000611f7960208361232a565b9150611f84826128aa565b602082019050919050565b6000611f9c60188361232a565b9150611fa7826128d3565b602082019050919050565b6000611fbf60218361232a565b9150611fca826128fc565b604082019050919050565b6000611fe2603d8361232a565b9150611fed8261294b565b604082019050919050565b600061200560098361232a565b91506120108261299a565b602082019050919050565b6120248161246b565b82525050565b60006120368285611e23565b91506120428284611e23565b91508190509392505050565b60006020820190506120636000830184611d93565b92915050565b600060808201905061207e6000830187611d93565b61208b6020830186611d93565b612098604083018561201b565b81810360608301526120aa8184611db1565b905095945050505050565b60006020820190506120ca6000830184611da2565b92915050565b600060208201905081810360008301526120ea8184611dea565b905092915050565b6000602082019050818103600083015261210b81611e54565b9050919050565b6000602082019050818103600083015261212b81611e77565b9050919050565b6000602082019050818103600083015261214b81611e9a565b9050919050565b6000602082019050818103600083015261216b81611ebd565b9050919050565b6000602082019050818103600083015261218b81611ee0565b9050919050565b600060208201905081810360008301526121ab81611f03565b9050919050565b600060208201905081810360008301526121cb81611f26565b9050919050565b600060208201905081810360008301526121eb81611f49565b9050919050565b6000602082019050818103600083015261220b81611f6c565b9050919050565b6000602082019050818103600083015261222b81611f8f565b9050919050565b6000602082019050818103600083015261224b81611fb2565b9050919050565b6000602082019050818103600083015261226b81611fd5565b9050919050565b6000602082019050818103600083015261228b81611ff8565b9050919050565b60006020820190506122a7600083018461201b565b92915050565b60006122b76122c8565b90506122c382826124e9565b919050565b6000604051905090565b600067ffffffffffffffff8211156122ed576122ec612650565b5b6122f682612693565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006123518261246b565b915061235c8361246b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561239157612390612594565b5b828201905092915050565b60006123a78261246b565b91506123b28361246b565b9250826123c2576123c16125c3565b5b828204905092915050565b60006123d88261246b565b91506123e38361246b565b9250828210156123f6576123f5612594565b5b828203905092915050565b600061240c8261244b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156124a2578082015181840152602081019050612487565b838111156124b1576000848401525b50505050565b600060028204905060018216806124cf57607f821691505b602082108114156124e3576124e26125f2565b5b50919050565b6124f282612693565b810181811067ffffffffffffffff8211171561251157612510612650565b5b80604052505050565b60006125258261246b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561255857612557612594565b5b600182019050919050565b600061256e8261246b565b91506125798361246b565b925082612589576125886125c3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f696e73756666696369656e742076616c75650000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6129cc81612401565b81146129d757600080fd5b50565b6129e381612413565b81146129ee57600080fd5b50565b6129fa8161241f565b8114612a0557600080fd5b50565b612a118161246b565b8114612a1c57600080fd5b5056fea26469706673582212206ffc94d446390c5a06c43f06da6171f99439761465b0bde88b833f314649dd4564736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f526f79616c204361747320436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007524320436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f726f79616c636174732e6f72672f697066732f0000000000

Deployed Bytecode

0x60806040526004361061011f5760003560e01c806370a08231116100a0578063b2bdfa7b11610064578063b2bdfa7b146103c6578063b88d4fde146103f1578063c87b56dd1461041a578063e985e9c514610457578063f3fef3a3146104945761011f565b806370a08231146102e1578063743976a01461031e57806391b7f5ed1461034957806395d89b4114610372578063a22cb4651461039d5761011f565b806318160ddd116100e757806318160ddd146101fc578063235b6ea11461022757806323b872dd1461025257806342842e0e1461027b5780636352211e146102a45761011f565b806301ffc9a71461012457806306fdde0314610161578063081812fc1461018c578063095ea7b3146101c95780631249c58b146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611d0c565b6104bd565b60405161015891906120b5565b60405180910390f35b34801561016d57600080fd5b5061017661059f565b60405161018391906120d0565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190611d66565b610631565b6040516101c0919061204e565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190611ccc565b610677565b005b6101fa61078f565b005b34801561020857600080fd5b506102116107f7565b60405161021e9190612292565b60405180910390f35b34801561023357600080fd5b5061023c6107fd565b6040516102499190612292565b60405180910390f35b34801561025e57600080fd5b5061027960048036038101906102749190611bb6565b610803565b005b34801561028757600080fd5b506102a2600480360381019061029d9190611bb6565b610863565b005b3480156102b057600080fd5b506102cb60048036038101906102c69190611d66565b610883565b6040516102d8919061204e565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190611b49565b610935565b6040516103159190612292565b60405180910390f35b34801561032a57600080fd5b506103336109ed565b60405161034091906120d0565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190611d66565b610a7b565b005b34801561037e57600080fd5b50610387610b15565b60405161039491906120d0565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190611c8c565b610ba7565b005b3480156103d257600080fd5b506103db610bbd565b6040516103e8919061204e565b60405180910390f35b3480156103fd57600080fd5b5061041860048036038101906104139190611c09565b610be3565b005b34801561042657600080fd5b50610441600480360381019061043c9190611d66565b610c45565b60405161044e91906120d0565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190611b76565b610d30565b60405161048b91906120b5565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190611ccc565b610dc4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610598575061059782610e9f565b5b9050919050565b6060600080546105ae906124b7565b80601f01602080910402602001604051908101604052809291908181526020018280546105da906124b7565b80156106275780601f106105fc57610100808354040283529160200191610627565b820191906000526020600020905b81548152906001019060200180831161060a57829003601f168201915b5050505050905090565b600061063c82610f09565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061068282610883565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea90612232565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610712610f54565b73ffffffffffffffffffffffffffffffffffffffff16148061074157506107408161073b610f54565b610d30565b5b610780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077790612252565b60405180910390fd5b61078a8383610f5c565b505050565b6008543410156107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb90612172565b60405180910390fd5b60016007546107e39190612346565b6007819055506107f533600754611015565b565b60075481565b60085481565b61081461080e610f54565b826111ef565b610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a906120f2565b60405180910390fd5b61085e838383611284565b505050565b61087e83838360405180602001604052806000815250610be3565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390612212565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d906121d2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600980546109fa906124b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a26906124b7565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b505050505081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290612272565b60405180910390fd5b8060088190555050565b606060018054610b24906124b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b50906124b7565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b610bb9610bb2610f54565b8383611516565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bf4610bee610f54565b836111ef565b610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a906120f2565b60405180910390fd5b610c3f84848484611683565b50505050565b6060610c5082610f09565b600060098054610c5f906124b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8b906124b7565b8015610cd85780601f10610cad57610100808354040283529160200191610cd8565b820191906000526020600020905b815481529060010190602001808311610cbb57829003601f168201915b505050505090506000815111610cfd5760405180602001604052806000815250610d28565b80610d07846116df565b604051602001610d1892919061202a565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90612272565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e9a573d6000803e3d6000fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610f1281611840565b610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890612212565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610fcf83610883565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c906121f2565b60405180910390fd5b61108e81611840565b156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590612152565b60405180910390fd5b6110da600083836118ac565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461112a9190612346565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46111eb600083836118b1565b5050565b6000806111fb83610883565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061123d575061123c8185610d30565b5b8061127b57508373ffffffffffffffffffffffffffffffffffffffff1661126384610631565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166112a482610883565b73ffffffffffffffffffffffffffffffffffffffff16146112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190612132565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190612192565b60405180910390fd5b6113758383836118ac565b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113fb91906123cd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114529190612346565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115118383836118b1565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c906121b2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161167691906120b5565b60405180910390a3505050565b61168e848484611284565b61169a848484846118b6565b6116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090612112565b60405180910390fd5b50505050565b60606000821415611727576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061183b565b600082905060005b600082146117595780806117429061251a565b915050600a82611752919061239c565b915061172f565b60008167ffffffffffffffff81111561177557611774612650565b5b6040519080825280601f01601f1916602001820160405280156117a75781602001600182028036833780820191505090505b5090505b60008514611834576001826117c091906123cd565b9150600a856117cf9190612563565b60306117db9190612346565b60f81b8183815181106117f1576117f0612621565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561182d919061239c565b94506117ab565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006118d78473ffffffffffffffffffffffffffffffffffffffff16611a4d565b15611a40578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611900610f54565b8786866040518563ffffffff1660e01b81526004016119229493929190612069565b602060405180830381600087803b15801561193c57600080fd5b505af192505050801561196d57506040513d601f19601f8201168201806040525081019061196a9190611d39565b60015b6119f0573d806000811461199d576040519150601f19603f3d011682016040523d82523d6000602084013e6119a2565b606091505b506000815114156119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90612112565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a45565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611a83611a7e846122d2565b6122ad565b905082815260208101848484011115611a9f57611a9e612684565b5b611aaa848285612475565b509392505050565b600081359050611ac1816129c3565b92915050565b600081359050611ad6816129da565b92915050565b600081359050611aeb816129f1565b92915050565b600081519050611b00816129f1565b92915050565b600082601f830112611b1b57611b1a61267f565b5b8135611b2b848260208601611a70565b91505092915050565b600081359050611b4381612a08565b92915050565b600060208284031215611b5f57611b5e61268e565b5b6000611b6d84828501611ab2565b91505092915050565b60008060408385031215611b8d57611b8c61268e565b5b6000611b9b85828601611ab2565b9250506020611bac85828601611ab2565b9150509250929050565b600080600060608486031215611bcf57611bce61268e565b5b6000611bdd86828701611ab2565b9350506020611bee86828701611ab2565b9250506040611bff86828701611b34565b9150509250925092565b60008060008060808587031215611c2357611c2261268e565b5b6000611c3187828801611ab2565b9450506020611c4287828801611ab2565b9350506040611c5387828801611b34565b925050606085013567ffffffffffffffff811115611c7457611c73612689565b5b611c8087828801611b06565b91505092959194509250565b60008060408385031215611ca357611ca261268e565b5b6000611cb185828601611ab2565b9250506020611cc285828601611ac7565b9150509250929050565b60008060408385031215611ce357611ce261268e565b5b6000611cf185828601611ab2565b9250506020611d0285828601611b34565b9150509250929050565b600060208284031215611d2257611d2161268e565b5b6000611d3084828501611adc565b91505092915050565b600060208284031215611d4f57611d4e61268e565b5b6000611d5d84828501611af1565b91505092915050565b600060208284031215611d7c57611d7b61268e565b5b6000611d8a84828501611b34565b91505092915050565b611d9c81612401565b82525050565b611dab81612413565b82525050565b6000611dbc82612303565b611dc68185612319565b9350611dd6818560208601612484565b611ddf81612693565b840191505092915050565b6000611df58261230e565b611dff818561232a565b9350611e0f818560208601612484565b611e1881612693565b840191505092915050565b6000611e2e8261230e565b611e38818561233b565b9350611e48818560208601612484565b80840191505092915050565b6000611e61602d8361232a565b9150611e6c826126a4565b604082019050919050565b6000611e8460328361232a565b9150611e8f826126f3565b604082019050919050565b6000611ea760258361232a565b9150611eb282612742565b604082019050919050565b6000611eca601c8361232a565b9150611ed582612791565b602082019050919050565b6000611eed60128361232a565b9150611ef8826127ba565b602082019050919050565b6000611f1060248361232a565b9150611f1b826127e3565b604082019050919050565b6000611f3360198361232a565b9150611f3e82612832565b602082019050919050565b6000611f5660298361232a565b9150611f618261285b565b604082019050919050565b6000611f7960208361232a565b9150611f84826128aa565b602082019050919050565b6000611f9c60188361232a565b9150611fa7826128d3565b602082019050919050565b6000611fbf60218361232a565b9150611fca826128fc565b604082019050919050565b6000611fe2603d8361232a565b9150611fed8261294b565b604082019050919050565b600061200560098361232a565b91506120108261299a565b602082019050919050565b6120248161246b565b82525050565b60006120368285611e23565b91506120428284611e23565b91508190509392505050565b60006020820190506120636000830184611d93565b92915050565b600060808201905061207e6000830187611d93565b61208b6020830186611d93565b612098604083018561201b565b81810360608301526120aa8184611db1565b905095945050505050565b60006020820190506120ca6000830184611da2565b92915050565b600060208201905081810360008301526120ea8184611dea565b905092915050565b6000602082019050818103600083015261210b81611e54565b9050919050565b6000602082019050818103600083015261212b81611e77565b9050919050565b6000602082019050818103600083015261214b81611e9a565b9050919050565b6000602082019050818103600083015261216b81611ebd565b9050919050565b6000602082019050818103600083015261218b81611ee0565b9050919050565b600060208201905081810360008301526121ab81611f03565b9050919050565b600060208201905081810360008301526121cb81611f26565b9050919050565b600060208201905081810360008301526121eb81611f49565b9050919050565b6000602082019050818103600083015261220b81611f6c565b9050919050565b6000602082019050818103600083015261222b81611f8f565b9050919050565b6000602082019050818103600083015261224b81611fb2565b9050919050565b6000602082019050818103600083015261226b81611fd5565b9050919050565b6000602082019050818103600083015261228b81611ff8565b9050919050565b60006020820190506122a7600083018461201b565b92915050565b60006122b76122c8565b90506122c382826124e9565b919050565b6000604051905090565b600067ffffffffffffffff8211156122ed576122ec612650565b5b6122f682612693565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006123518261246b565b915061235c8361246b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561239157612390612594565b5b828201905092915050565b60006123a78261246b565b91506123b28361246b565b9250826123c2576123c16125c3565b5b828204905092915050565b60006123d88261246b565b91506123e38361246b565b9250828210156123f6576123f5612594565b5b828203905092915050565b600061240c8261244b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156124a2578082015181840152602081019050612487565b838111156124b1576000848401525b50505050565b600060028204905060018216806124cf57607f821691505b602082108114156124e3576124e26125f2565b5b50919050565b6124f282612693565b810181811067ffffffffffffffff8211171561251157612510612650565b5b80604052505050565b60006125258261246b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561255857612557612594565b5b600182019050919050565b600061256e8261246b565b91506125798361246b565b925082612589576125886125c3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f696e73756666696369656e742076616c75650000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6129cc81612401565b81146129d757600080fd5b50565b6129e381612413565b81146129ee57600080fd5b50565b6129fa8161241f565b8114612a0557600080fd5b50565b612a118161246b565b8114612a1c57600080fd5b5056fea26469706673582212206ffc94d446390c5a06c43f06da6171f99439761465b0bde88b833f314649dd4564736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f526f79616c204361747320436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007524320436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f726f79616c636174732e6f72672f697066732f0000000000

-----Decoded View---------------
Arg [0] : name_ (string): Royal Cats Club
Arg [1] : symbol_ (string): RC Club
Arg [2] : baseURI_ (string): https://royalcats.org/ipfs/

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 526f79616c204361747320436c75620000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 524320436c756200000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [8] : 68747470733a2f2f726f79616c636174732e6f72672f697066732f0000000000


Deployed Bytecode Sourcemap

20713:14631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22398:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23325:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24494:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24012:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22145:181;;;:::i;:::-;;21418:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21451:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25194:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25600:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23036:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22767:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21479:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21934:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23494:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24737:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21390:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25856:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23669:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24963:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22027:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22398:305;22500:4;22552:25;22537:40;;;:11;:40;;;;:105;;;;22609:33;22594:48;;;:11;:48;;;;22537:105;:158;;;;22659:36;22683:11;22659:23;:36::i;:::-;22537:158;22517:178;;22398:305;;;:::o;23325:100::-;23379:13;23412:5;23405:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23325:100;:::o;24494:171::-;24570:7;24590:23;24605:7;24590:14;:23::i;:::-;24633:15;:24;24649:7;24633:24;;;;;;;;;;;;;;;;;;;;;24626:31;;24494:171;;;:::o;24012:416::-;24093:13;24109:23;24124:7;24109:14;:23::i;:::-;24093:39;;24157:5;24151:11;;:2;:11;;;;24143:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24251:5;24235:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24260:37;24277:5;24284:12;:10;:12::i;:::-;24260:16;:37::i;:::-;24235:62;24213:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;24399:21;24408:2;24412:7;24399:8;:21::i;:::-;24082:346;24012:416;;:::o;22145:181::-;22208:6;;22195:9;:19;;22187:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;22276:1;22262:11;;:15;;;;:::i;:::-;22248:11;:29;;;;22288:30;22294:10;22306:11;;22288:5;:30::i;:::-;22145:181::o;21418:26::-;;;;:::o;21451:21::-;;;;:::o;25194:335::-;25389:41;25408:12;:10;:12::i;:::-;25422:7;25389:18;:41::i;:::-;25381:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;25493:28;25503:4;25509:2;25513:7;25493:9;:28::i;:::-;25194:335;;;:::o;25600:185::-;25738:39;25755:4;25761:2;25765:7;25738:39;;;;;;;;;;;;:16;:39::i;:::-;25600:185;;;:::o;23036:222::-;23108:7;23128:13;23144:7;:16;23152:7;23144:16;;;;;;;;;;;;;;;;;;;;;23128:32;;23196:1;23179:19;;:5;:19;;;;23171:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;23245:5;23238:12;;;23036:222;;;:::o;22767:207::-;22839:7;22884:1;22867:19;;:5;:19;;;;22859:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22950:9;:16;22960:5;22950:16;;;;;;;;;;;;;;;;22943:23;;22767:207;;;:::o;21479:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21934:85::-;21886:6;;;;;;;;;;;21872:20;;:10;:20;;;21864:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;22005:6:::1;21996;:15;;;;21934:85:::0;:::o;23494:104::-;23550:13;23583:7;23576:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23494:104;:::o;24737:155::-;24832:52;24851:12;:10;:12::i;:::-;24865:8;24875;24832:18;:52::i;:::-;24737:155;;:::o;21390:21::-;;;;;;;;;;;;;:::o;25856:322::-;26030:41;26049:12;:10;:12::i;:::-;26063:7;26030:18;:41::i;:::-;26022:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;26132:38;26146:4;26152:2;26156:7;26165:4;26132:13;:38::i;:::-;25856:322;;;;:::o;23669:279::-;23742:13;23768:23;23783:7;23768:14;:23::i;:::-;23804:21;23828:8;23804:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23878:1;23860:7;23854:21;:25;:86;;;;;;;;;;;;;;;;;23906:7;23915:18;:7;:16;:18::i;:::-;23889:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23854:86;23847:93;;;23669:279;;;:::o;24963:164::-;25060:4;25084:18;:25;25103:5;25084:25;;;;;;;;;;;;;;;:35;25110:8;25084:35;;;;;;;;;;;;;;;;;;;;;;;;;25077:42;;24963:164;;;;:::o;22027:110::-;21886:6;;;;;;;;;;;21872:20;;:10;:20;;;21864:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;22109:2:::1;22101:20;;:28;22122:6;22101:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22027:110:::0;;:::o;20261:157::-;20346:4;20385:25;20370:40;;;:11;:40;;;;20363:47;;20261:157;;;:::o;32581:135::-;32663:16;32671:7;32663;:16::i;:::-;32655:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32581:135;:::o;16977:98::-;17030:7;17057:10;17050:17;;16977:98;:::o;31860:174::-;31962:2;31935:15;:24;31951:7;31935:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32018:7;32014:2;31980:46;;31989:23;32004:7;31989:14;:23::i;:::-;31980:46;;;;;;;;;;;;31860:174;;:::o;29577:439::-;29671:1;29657:16;;:2;:16;;;;29649:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29730:16;29738:7;29730;:16::i;:::-;29729:17;29721:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29792:45;29821:1;29825:2;29829:7;29792:20;:45::i;:::-;29867:1;29850:9;:13;29860:2;29850:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29898:2;29879:7;:16;29887:7;29879:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29943:7;29939:2;29918:33;;29935:1;29918:33;;;;;;;;;;;;29964:44;29992:1;29996:2;30000:7;29964:19;:44::i;:::-;29577:439;;:::o;27979:264::-;28072:4;28089:13;28105:23;28120:7;28105:14;:23::i;:::-;28089:39;;28158:5;28147:16;;:7;:16;;;:52;;;;28167:32;28184:5;28191:7;28167:16;:32::i;:::-;28147:52;:87;;;;28227:7;28203:31;;:20;28215:7;28203:11;:20::i;:::-;:31;;;28147:87;28139:96;;;27979:264;;;;:::o;31114:627::-;31273:4;31246:31;;:23;31261:7;31246:14;:23::i;:::-;:31;;;31238:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31352:1;31338:16;;:2;:16;;;;31330:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31408:39;31429:4;31435:2;31439:7;31408:20;:39::i;:::-;31519:15;:24;31535:7;31519:24;;;;;;;;;;;;31512:31;;;;;;;;;;;31575:1;31556:9;:15;31566:4;31556:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31604:1;31587:9;:13;31597:2;31587:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31635:2;31616:7;:16;31624:7;31616:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31674:7;31670:2;31655:27;;31664:4;31655:27;;;;;;;;;;;;31695:38;31715:4;31721:2;31725:7;31695:19;:38::i;:::-;31114:627;;;:::o;32177:315::-;32332:8;32323:17;;:5;:17;;;;32315:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32419:8;32381:18;:25;32400:5;32381:25;;;;;;;;;;;;;;;:35;32407:8;32381:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32465:8;32443:41;;32458:5;32443:41;;;32475:8;32443:41;;;;;;:::i;:::-;;;;;;;;32177:315;;;:::o;27059:313::-;27215:28;27225:4;27231:2;27235:7;27215:9;:28::i;:::-;27262:47;27285:4;27291:2;27295:7;27304:4;27262:22;:47::i;:::-;27254:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27059:313;;;;:::o;17494:723::-;17550:13;17780:1;17771:5;:10;17767:53;;;17798:10;;;;;;;;;;;;;;;;;;;;;17767:53;17830:12;17845:5;17830:20;;17861:14;17886:78;17901:1;17893:4;:9;17886:78;;17919:8;;;;;:::i;:::-;;;;17950:2;17942:10;;;;;:::i;:::-;;;17886:78;;;17974:19;18006:6;17996:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17974:39;;18024:154;18040:1;18031:5;:10;18024:154;;18068:1;18058:11;;;;;:::i;:::-;;;18135:2;18127:5;:10;;;;:::i;:::-;18114:2;:24;;;;:::i;:::-;18101:39;;18084:6;18091;18084:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18164:2;18155:11;;;;;:::i;:::-;;;18024:154;;;18202:6;18188:21;;;;;17494:723;;;;:::o;27685:127::-;27750:4;27802:1;27774:30;;:7;:16;27782:7;27774:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27767:37;;27685:127;;;:::o;34705:126::-;;;;:::o;35216:125::-;;;;:::o;33280:853::-;33434:4;33455:15;:2;:13;;;:15::i;:::-;33451:675;;;33507:2;33491:36;;;33528:12;:10;:12::i;:::-;33542:4;33548:7;33557:4;33491:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33487:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33749:1;33732:6;:13;:18;33728:328;;;33775:60;;;;;;;;;;:::i;:::-;;;;;;;;33728:328;34006:6;34000:13;33991:6;33987:2;33983:15;33976:38;33487:584;33623:41;;;33613:51;;;:6;:51;;;;33606:58;;;;;33451:675;34110:4;34103:11;;33280:853;;;;;;;:::o;8213:326::-;8273:4;8530:1;8508:7;:19;;;:23;8501:30;;8213:326;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;6840:377;;;;:::o;7223:366::-;7365:3;7386:67;7450:2;7445:3;7386:67;:::i;:::-;7379:74;;7462:93;7551:3;7462:93;:::i;:::-;7580:2;7575:3;7571:12;7564:19;;7223:366;;;:::o;7595:::-;7737:3;7758:67;7822:2;7817:3;7758:67;:::i;:::-;7751:74;;7834:93;7923:3;7834:93;:::i;:::-;7952:2;7947:3;7943:12;7936:19;;7595:366;;;:::o;7967:::-;8109:3;8130:67;8194:2;8189:3;8130:67;:::i;:::-;8123:74;;8206:93;8295:3;8206:93;:::i;:::-;8324:2;8319:3;8315:12;8308:19;;7967:366;;;:::o;8339:::-;8481:3;8502:67;8566:2;8561:3;8502:67;:::i;:::-;8495:74;;8578:93;8667:3;8578:93;:::i;:::-;8696:2;8691:3;8687:12;8680:19;;8339:366;;;:::o;8711:::-;8853:3;8874:67;8938:2;8933:3;8874:67;:::i;:::-;8867:74;;8950:93;9039:3;8950:93;:::i;:::-;9068:2;9063:3;9059:12;9052:19;;8711:366;;;:::o;9083:::-;9225:3;9246:67;9310:2;9305:3;9246:67;:::i;:::-;9239:74;;9322:93;9411:3;9322:93;:::i;:::-;9440:2;9435:3;9431:12;9424:19;;9083:366;;;:::o;9455:::-;9597:3;9618:67;9682:2;9677:3;9618:67;:::i;:::-;9611:74;;9694:93;9783:3;9694:93;:::i;:::-;9812:2;9807:3;9803:12;9796:19;;9455:366;;;:::o;9827:::-;9969:3;9990:67;10054:2;10049:3;9990:67;:::i;:::-;9983:74;;10066:93;10155:3;10066:93;:::i;:::-;10184:2;10179:3;10175:12;10168:19;;9827:366;;;:::o;10199:::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10199:366;;;:::o;10571:::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10571:366;;;:::o;10943:::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11315:366;;;:::o;11687:365::-;11829:3;11850:66;11914:1;11909:3;11850:66;:::i;:::-;11843:73;;11925:93;12014:3;11925:93;:::i;:::-;12043:2;12038:3;12034:12;12027:19;;11687:365;;;:::o;12058:118::-;12145:24;12163:5;12145:24;:::i;:::-;12140:3;12133:37;12058:118;;:::o;12182:435::-;12362:3;12384:95;12475:3;12466:6;12384:95;:::i;:::-;12377:102;;12496:95;12587:3;12578:6;12496:95;:::i;:::-;12489:102;;12608:3;12601:10;;12182:435;;;;;:::o;12623:222::-;12716:4;12754:2;12743:9;12739:18;12731:26;;12767:71;12835:1;12824:9;12820:17;12811:6;12767:71;:::i;:::-;12623:222;;;;:::o;12851:640::-;13046:4;13084:3;13073:9;13069:19;13061:27;;13098:71;13166:1;13155:9;13151:17;13142:6;13098:71;:::i;:::-;13179:72;13247:2;13236:9;13232:18;13223:6;13179:72;:::i;:::-;13261;13329:2;13318:9;13314:18;13305:6;13261:72;:::i;:::-;13380:9;13374:4;13370:20;13365:2;13354:9;13350:18;13343:48;13408:76;13479:4;13470:6;13408:76;:::i;:::-;13400:84;;12851:640;;;;;;;:::o;13497:210::-;13584:4;13622:2;13611:9;13607:18;13599:26;;13635:65;13697:1;13686:9;13682:17;13673:6;13635:65;:::i;:::-;13497:210;;;;:::o;13713:313::-;13826:4;13864:2;13853:9;13849:18;13841:26;;13913:9;13907:4;13903:20;13899:1;13888:9;13884:17;13877:47;13941:78;14014:4;14005:6;13941:78;:::i;:::-;13933:86;;13713:313;;;;:::o;14032:419::-;14198:4;14236:2;14225:9;14221:18;14213:26;;14285:9;14279:4;14275:20;14271:1;14260:9;14256:17;14249:47;14313:131;14439:4;14313:131;:::i;:::-;14305:139;;14032:419;;;:::o;14457:::-;14623:4;14661:2;14650:9;14646:18;14638:26;;14710:9;14704:4;14700:20;14696:1;14685:9;14681:17;14674:47;14738:131;14864:4;14738:131;:::i;:::-;14730:139;;14457:419;;;:::o;14882:::-;15048:4;15086:2;15075:9;15071:18;15063:26;;15135:9;15129:4;15125:20;15121:1;15110:9;15106:17;15099:47;15163:131;15289:4;15163:131;:::i;:::-;15155:139;;14882:419;;;:::o;15307:::-;15473:4;15511:2;15500:9;15496:18;15488:26;;15560:9;15554:4;15550:20;15546:1;15535:9;15531:17;15524:47;15588:131;15714:4;15588:131;:::i;:::-;15580:139;;15307:419;;;:::o;15732:::-;15898:4;15936:2;15925:9;15921:18;15913:26;;15985:9;15979:4;15975:20;15971:1;15960:9;15956:17;15949:47;16013:131;16139:4;16013:131;:::i;:::-;16005:139;;15732:419;;;:::o;16157:::-;16323:4;16361:2;16350:9;16346:18;16338:26;;16410:9;16404:4;16400:20;16396:1;16385:9;16381:17;16374:47;16438:131;16564:4;16438:131;:::i;:::-;16430:139;;16157:419;;;:::o;16582:::-;16748:4;16786:2;16775:9;16771:18;16763:26;;16835:9;16829:4;16825:20;16821:1;16810:9;16806:17;16799:47;16863:131;16989:4;16863:131;:::i;:::-;16855:139;;16582:419;;;:::o;17007:::-;17173:4;17211:2;17200:9;17196:18;17188:26;;17260:9;17254:4;17250:20;17246:1;17235:9;17231:17;17224:47;17288:131;17414:4;17288:131;:::i;:::-;17280:139;;17007:419;;;:::o;17432:::-;17598:4;17636:2;17625:9;17621:18;17613:26;;17685:9;17679:4;17675:20;17671:1;17660:9;17656:17;17649:47;17713:131;17839:4;17713:131;:::i;:::-;17705:139;;17432:419;;;:::o;17857:::-;18023:4;18061:2;18050:9;18046:18;18038:26;;18110:9;18104:4;18100:20;18096:1;18085:9;18081:17;18074:47;18138:131;18264:4;18138:131;:::i;:::-;18130:139;;17857:419;;;:::o;18282:::-;18448:4;18486:2;18475:9;18471:18;18463:26;;18535:9;18529:4;18525:20;18521:1;18510:9;18506:17;18499:47;18563:131;18689:4;18563:131;:::i;:::-;18555:139;;18282:419;;;:::o;18707:::-;18873:4;18911:2;18900:9;18896:18;18888:26;;18960:9;18954:4;18950:20;18946:1;18935:9;18931:17;18924:47;18988:131;19114:4;18988:131;:::i;:::-;18980:139;;18707:419;;;:::o;19132:::-;19298:4;19336:2;19325:9;19321:18;19313:26;;19385:9;19379:4;19375:20;19371:1;19360:9;19356:17;19349:47;19413:131;19539:4;19413:131;:::i;:::-;19405:139;;19132:419;;;:::o;19557:222::-;19650:4;19688:2;19677:9;19673:18;19665:26;;19701:71;19769:1;19758:9;19754:17;19745:6;19701:71;:::i;:::-;19557:222;;;;:::o;19785:129::-;19819:6;19846:20;;:::i;:::-;19836:30;;19875:33;19903:4;19895:6;19875:33;:::i;:::-;19785:129;;;:::o;19920:75::-;19953:6;19986:2;19980:9;19970:19;;19920:75;:::o;20001:307::-;20062:4;20152:18;20144:6;20141:30;20138:56;;;20174:18;;:::i;:::-;20138:56;20212:29;20234:6;20212:29;:::i;:::-;20204:37;;20296:4;20290;20286:15;20278:23;;20001:307;;;:::o;20314:98::-;20365:6;20399:5;20393:12;20383:22;;20314:98;;;:::o;20418:99::-;20470:6;20504:5;20498:12;20488:22;;20418:99;;;:::o;20523:168::-;20606:11;20640:6;20635:3;20628:19;20680:4;20675:3;20671:14;20656:29;;20523:168;;;;:::o;20697:169::-;20781:11;20815:6;20810:3;20803:19;20855:4;20850:3;20846:14;20831:29;;20697:169;;;;:::o;20872:148::-;20974:11;21011:3;20996:18;;20872:148;;;;:::o;21026:305::-;21066:3;21085:20;21103:1;21085:20;:::i;:::-;21080:25;;21119:20;21137:1;21119:20;:::i;:::-;21114:25;;21273:1;21205:66;21201:74;21198:1;21195:81;21192:107;;;21279:18;;:::i;:::-;21192:107;21323:1;21320;21316:9;21309:16;;21026:305;;;;:::o;21337:185::-;21377:1;21394:20;21412:1;21394:20;:::i;:::-;21389:25;;21428:20;21446:1;21428:20;:::i;:::-;21423:25;;21467:1;21457:35;;21472:18;;:::i;:::-;21457:35;21514:1;21511;21507:9;21502:14;;21337:185;;;;:::o;21528:191::-;21568:4;21588:20;21606:1;21588:20;:::i;:::-;21583:25;;21622:20;21640:1;21622:20;:::i;:::-;21617:25;;21661:1;21658;21655:8;21652:34;;;21666:18;;:::i;:::-;21652:34;21711:1;21708;21704:9;21696:17;;21528:191;;;;:::o;21725:96::-;21762:7;21791:24;21809:5;21791:24;:::i;:::-;21780:35;;21725:96;;;:::o;21827:90::-;21861:7;21904:5;21897:13;21890:21;21879:32;;21827:90;;;:::o;21923:149::-;21959:7;21999:66;21992:5;21988:78;21977:89;;21923:149;;;:::o;22078:126::-;22115:7;22155:42;22148:5;22144:54;22133:65;;22078:126;;;:::o;22210:77::-;22247:7;22276:5;22265:16;;22210:77;;;:::o;22293:154::-;22377:6;22372:3;22367;22354:30;22439:1;22430:6;22425:3;22421:16;22414:27;22293:154;;;:::o;22453:307::-;22521:1;22531:113;22545:6;22542:1;22539:13;22531:113;;;22630:1;22625:3;22621:11;22615:18;22611:1;22606:3;22602:11;22595:39;22567:2;22564:1;22560:10;22555:15;;22531:113;;;22662:6;22659:1;22656:13;22653:101;;;22742:1;22733:6;22728:3;22724:16;22717:27;22653:101;22502:258;22453:307;;;:::o;22766:320::-;22810:6;22847:1;22841:4;22837:12;22827:22;;22894:1;22888:4;22884:12;22915:18;22905:81;;22971:4;22963:6;22959:17;22949:27;;22905:81;23033:2;23025:6;23022:14;23002:18;22999:38;22996:84;;;23052:18;;:::i;:::-;22996:84;22817:269;22766:320;;;:::o;23092:281::-;23175:27;23197:4;23175:27;:::i;:::-;23167:6;23163:40;23305:6;23293:10;23290:22;23269:18;23257:10;23254:34;23251:62;23248:88;;;23316:18;;:::i;:::-;23248:88;23356:10;23352:2;23345:22;23135:238;23092:281;;:::o;23379:233::-;23418:3;23441:24;23459:5;23441:24;:::i;:::-;23432:33;;23487:66;23480:5;23477:77;23474:103;;;23557:18;;:::i;:::-;23474:103;23604:1;23597:5;23593:13;23586:20;;23379:233;;;:::o;23618:176::-;23650:1;23667:20;23685:1;23667:20;:::i;:::-;23662:25;;23701:20;23719:1;23701:20;:::i;:::-;23696:25;;23740:1;23730:35;;23745:18;;:::i;:::-;23730:35;23786:1;23783;23779:9;23774:14;;23618:176;;;;:::o;23800:180::-;23848:77;23845:1;23838:88;23945:4;23942:1;23935:15;23969:4;23966:1;23959:15;23986:180;24034:77;24031:1;24024:88;24131:4;24128:1;24121:15;24155:4;24152:1;24145:15;24172:180;24220:77;24217:1;24210:88;24317:4;24314:1;24307:15;24341:4;24338:1;24331:15;24358:180;24406:77;24403:1;24396:88;24503:4;24500:1;24493:15;24527:4;24524:1;24517:15;24544:180;24592:77;24589:1;24582:88;24689:4;24686:1;24679:15;24713:4;24710:1;24703:15;24730:117;24839:1;24836;24829:12;24853:117;24962:1;24959;24952:12;24976:117;25085:1;25082;25075:12;25099:117;25208:1;25205;25198:12;25222:102;25263:6;25314:2;25310:7;25305:2;25298:5;25294:14;25290:28;25280:38;;25222:102;;;:::o;25330:232::-;25470:34;25466:1;25458:6;25454:14;25447:58;25539:15;25534:2;25526:6;25522:15;25515:40;25330:232;:::o;25568:237::-;25708:34;25704:1;25696:6;25692:14;25685:58;25777:20;25772:2;25764:6;25760:15;25753:45;25568:237;:::o;25811:224::-;25951:34;25947:1;25939:6;25935:14;25928:58;26020:7;26015:2;26007:6;26003:15;25996:32;25811:224;:::o;26041:178::-;26181:30;26177:1;26169:6;26165:14;26158:54;26041:178;:::o;26225:168::-;26365:20;26361:1;26353:6;26349:14;26342:44;26225:168;:::o;26399:223::-;26539:34;26535:1;26527:6;26523:14;26516:58;26608:6;26603:2;26595:6;26591:15;26584:31;26399:223;:::o;26628:175::-;26768:27;26764:1;26756:6;26752:14;26745:51;26628:175;:::o;26809:228::-;26949:34;26945:1;26937:6;26933:14;26926:58;27018:11;27013:2;27005:6;27001:15;26994:36;26809:228;:::o;27043:182::-;27183:34;27179:1;27171:6;27167:14;27160:58;27043:182;:::o;27231:174::-;27371:26;27367:1;27359:6;27355:14;27348:50;27231:174;:::o;27411:220::-;27551:34;27547:1;27539:6;27535:14;27528:58;27620:3;27615:2;27607:6;27603:15;27596:28;27411:220;:::o;27637:248::-;27777:34;27773:1;27765:6;27761:14;27754:58;27846:31;27841:2;27833:6;27829:15;27822:56;27637:248;:::o;27891:159::-;28031:11;28027:1;28019:6;28015:14;28008:35;27891:159;:::o;28056:122::-;28129:24;28147:5;28129:24;:::i;:::-;28122:5;28119:35;28109:63;;28168:1;28165;28158:12;28109:63;28056:122;:::o;28184:116::-;28254:21;28269:5;28254:21;:::i;:::-;28247:5;28244:32;28234:60;;28290:1;28287;28280:12;28234:60;28184:116;:::o;28306:120::-;28378:23;28395:5;28378:23;:::i;:::-;28371:5;28368:34;28358:62;;28416:1;28413;28406:12;28358:62;28306:120;:::o;28432:122::-;28505:24;28523:5;28505:24;:::i;:::-;28498:5;28495:35;28485:63;;28544:1;28541;28534:12;28485:63;28432:122;:::o

Swarm Source

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