ETH Price: $3,598.93 (+5.01%)
 

Overview

Max Total Supply

285 Skellie

Holders

46

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
ynwa.kongz.eth
Balance
11 Skellie
0xE9bCcf975C1D18839CC0522647Df6004d01DD4f9
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:
Skellies

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-25
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: hardhat/console.sol


pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

// File: Skeletonz_Skellies.sol



/*
                                                                                                                                    
      _/_/_/  _/                  _/              _/                                          _/_/_/                                
   _/        _/  _/      _/_/    _/    _/_/    _/_/_/_/    _/_/    _/_/_/    _/_/_/_/      _/          _/_/_/  _/_/_/      _/_/_/   
    _/_/    _/_/      _/_/_/_/  _/  _/_/_/_/    _/      _/    _/  _/    _/      _/        _/  _/_/  _/    _/  _/    _/  _/    _/    
       _/  _/  _/    _/        _/  _/          _/      _/    _/  _/    _/    _/          _/    _/  _/    _/  _/    _/  _/    _/     
_/_/_/    _/    _/    _/_/_/  _/    _/_/_/      _/_/    _/_/    _/    _/  _/_/_/_/        _/_/_/    _/_/_/  _/    _/    _/_/_/      
                                                                                                                           _/       
                                                                                                                      _/_/          
*/

pragma solidity ^0.8.4;










error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error AuxQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used). 
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex times
        unchecked {
            return _currentIndex - _burnCounter;    
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant: 
                    // There will always be an ownership that has an address and is not burned 
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _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 {
        _transfer(from, to, tokenId);
        if (!_checkOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) {
                    revert TransferToNonERC721ReceiverImplementer();
                }
                updatedIndex++;
            }

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked { 
            _burnCounter++;
        }
    }

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}



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

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

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

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

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

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

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

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


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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

abstract contract GBones_Contract {
   function balanceOf(address owner) virtual public view returns(uint);
   function burnGbones(address account, uint256 amount) virtual external;
}

abstract contract Skeletonz_Contract {
   function ownerOf(uint tokenId) virtual public view returns(address);
}

contract Skellies is ERC721A, ReentrancyGuard, Ownable {
	
    uint256 public constant maxSkellies = 4500;
    uint256 public constant maxMutants = 250;

    uint256 public skelliesMinted = 0;
    uint256 public mutantsMinted = 0;
    uint256 public breedCost = 900 ether;
    uint256 private randomNonce = 4500;

    mapping(uint256 => bool) private _isMutantToken;

    uint public baseTokenSequential = 0;
    mapping(uint256 => uint256) private _baseTokenIDs;
    mapping(uint256 => uint256) private _mutantTokenIDs;

    uint256 public cooldown = 600; // time in seconds

    address genesisContractAddress;
    address gBonesContractAddress;

    // Mapping for skeletonz and their cooldowns
    mapping(uint256 => uint256) private _cooldowns;

	string internal baseTokenURI;
    string internal mutantTokenURI;
	string baseTokenURI_extension = ".json";

    modifier noContracts {
        require(msg.sender == tx.origin, "No smart contracts!");
        _;
    }
	
	constructor(address _genesisContractAddress, address _gbonesContractAddress) ERC721A("Skellies", "Skellie") Ownable() {

        genesisContractAddress = _genesisContractAddress;
        gBonesContractAddress = _gbonesContractAddress;

    }

    function setGBonesContract(address _gBonesContractAddress) external onlyOwner {
        gBonesContractAddress = _gBonesContractAddress;
    }

	function setBaseTokenURI(string memory _uri) external onlyOwner {
        baseTokenURI = _uri;
    }

    function setMutantTokenURI(string memory _uri) external onlyOwner {
        mutantTokenURI = _uri;
    }
	
	function setBaseTokenURI_extension(string memory _ext) external onlyOwner {
        baseTokenURI_extension = _ext;
    }

    function setCooldown(uint256 _seconds) external onlyOwner {
        cooldown = _seconds;
    }

    function setCost(uint256 _breedCost) external onlyOwner {
        breedCost = _breedCost;
    }
	
	function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Query for non-existent token!");

        if (_isMutantToken[_tokenId]) {
            return string(abi.encodePacked(mutantTokenURI, Strings.toString(_mutantTokenIDs[_tokenId]), baseTokenURI_extension));
        }
        else {
            return string(abi.encodePacked(baseTokenURI, Strings.toString(_baseTokenIDs[_tokenId]), baseTokenURI_extension));
        }
        
    }

	function mintSkellie(uint256[] memory skeletonz_IDs) public nonReentrant noContracts payable {

        Skeletonz_Contract source_data = Skeletonz_Contract(genesisContractAddress);

        for (uint64 i = 0; i < 2; i++) {
            // Check cooldowns for skeletonz
            require(_cooldowns[skeletonz_IDs[i]] + cooldown < block.timestamp, "Skeletonz in cooldown");

            // Check ownership for used skeletonz
            require(source_data.ownerOf(skeletonz_IDs[i]) == msg.sender, "Not your skeletonz");

            // Set the new cooldown time
            _cooldowns[skeletonz_IDs[i]] = block.timestamp;

        }

        require(skelliesMinted < maxSkellies, "Mint over the max tokens limit"); 

        // Pay for the skellie with tokens
        GBones_Contract gBonesContract = GBones_Contract(gBonesContractAddress);
        gBonesContract.burnGbones(msg.sender, breedCost);

        if (shouldMintMutant()) {
            _mutantTokenIDs[skelliesMinted] = mutantsMinted;
            mutantsMinted++;
            _isMutantToken[skelliesMinted] = true;
        }
        else {
            _baseTokenIDs[skelliesMinted] = baseTokenSequential;
            baseTokenSequential++;
        }

        skelliesMinted++;
        _safeMint(_msgSender(), 1);

    }

    function shouldMintMutant() private returns (bool) {

        bool result = false;

        uint256 skelliesRemaining = (maxSkellies - skelliesMinted);
        if (skelliesRemaining == 0) {
            return result;
        }

        uint256 mutantsRemaining = (maxMutants - mutantsMinted) * 1000;
        uint256 probability = mutantsRemaining/skelliesRemaining;
        
        uint256 randomVal = random();

        if (randomVal < probability) {
            result = true;
        }

        return result;
    }

    function random() private returns (uint256) {

        uint256 newRandom = uint256(keccak256(abi.encodePacked(
            block.timestamp,
            msg.sender,
            randomNonce,
            skelliesMinted))) % 1000;
        
        randomNonce += newRandom;

        return newRandom;
    }

    function getMutantsMinted() public view returns(uint256) {
        return mutantsMinted;
    }
    
    function getSkeletonCooldown(uint256 tokenId) public view returns(uint256) {
        return _cooldowns[tokenId];
    }

    function isMutantToken(uint256 tokenId) public view returns(bool) {
        return _isMutantToken[tokenId];
    }

  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_genesisContractAddress","type":"address"},{"internalType":"address","name":"_gbonesContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenSequential","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breedCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldown","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":[],"name":"getMutantsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSkeletonCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isMutantToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMutants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSkellies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"skeletonz_IDs","type":"uint256[]"}],"name":"mintSkellie","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mutantsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ext","type":"string"}],"name":"setBaseTokenURI_extension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_breedCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gBonesContractAddress","type":"address"}],"name":"setGBonesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setMutantTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skelliesMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600a556000600b556830ca024f987b900000600c55611194600d556000600f556102586012556040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506018908051906020019062000079929190620002cd565b503480156200008757600080fd5b5060405162004242380380620042428339818101604052810190620000ad919062000394565b6040518060400160405280600881526020017f536b656c6c6965730000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f536b656c6c696500000000000000000000000000000000000000000000000000815250816002908051906020019062000131929190620002cd565b5080600390805190602001906200014a929190620002cd565b50505060016008819055506200017562000169620001ff60201b60201c565b6200020760201b60201c565b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000493565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002db906200040f565b90600052602060002090601f016020900481019282620002ff57600085556200034b565b82601f106200031a57805160ff19168380011785556200034b565b828001600101855582156200034b579182015b828111156200034a5782518255916020019190600101906200032d565b5b5090506200035a91906200035e565b5090565b5b80821115620003795760008160009055506001016200035f565b5090565b6000815190506200038e8162000479565b92915050565b60008060408385031215620003ae57620003ad62000474565b5b6000620003be858286016200037d565b9250506020620003d1858286016200037d565b9150509250929050565b6000620003e882620003ef565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200042857607f821691505b602082108114156200043f576200043e62000445565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200048481620003db565b81146200049057600080fd5b50565b613d9f80620004a36000396000f3fe6080604052600436106101f95760003560e01c80638d7bc4ac1161010d578063c87b56dd116100a0578063ea698a271161006f578063ea698a2714610747578063f2fde38b14610770578063f71bc40f14610799578063f94c1b43146107c4578063fe05452d146107e0576101f9565b8063c87b56dd14610665578063db2abc4a146106a2578063e87afa6b146106df578063e985e9c51461070a576101f9565b8063a22cb465116100dc578063a22cb465146105bf578063a9521a26146105e8578063ae67499414610613578063b88d4fde1461063c576101f9565b80638d7bc4ac146105015780638da5cb5b1461053e5780638f5fc1db1461056957806395d89b4114610594576101f9565b806342842e0e11610190578063595193d41161015f578063595193d41461041a5780636352211e1461044557806370a0823114610482578063715018a6146104bf578063787a08a6146104d6576101f9565b806342842e0e1461037457806344a0d68a1461039d5780634fc3f41a146103c657806354559a90146103ef576101f9565b80630e945497116101cc5780630e945497146102cc57806318160ddd146102f757806323b872dd1461032257806330176e131461034b576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061308b565b610809565b60405161023291906134ff565b60405180910390f35b34801561024757600080fd5b506102506108eb565b60405161025d919061351a565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061312e565b61097d565b60405161029a919061346f565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613002565b6109f9565b005b3480156102d857600080fd5b506102e1610b04565b6040516102ee919061363c565b60405180910390f35b34801561030357600080fd5b5061030c610b0a565b604051610319919061363c565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190612eec565b610b18565b005b34801561035757600080fd5b50610372600480360381019061036d91906130e5565b610b28565b005b34801561038057600080fd5b5061039b60048036038101906103969190612eec565b610bbe565b005b3480156103a957600080fd5b506103c460048036038101906103bf919061312e565b610bde565b005b3480156103d257600080fd5b506103ed60048036038101906103e8919061312e565b610c64565b005b3480156103fb57600080fd5b50610404610cea565b604051610411919061363c565b60405180910390f35b34801561042657600080fd5b5061042f610cf0565b60405161043c919061363c565b60405180910390f35b34801561045157600080fd5b5061046c6004803603810190610467919061312e565b610cf6565b604051610479919061346f565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190612e52565b610d0c565b6040516104b6919061363c565b60405180910390f35b3480156104cb57600080fd5b506104d4610ddc565b005b3480156104e257600080fd5b506104eb610e64565b6040516104f8919061363c565b60405180910390f35b34801561050d57600080fd5b506105286004803603810190610523919061312e565b610e6a565b60405161053591906134ff565b60405180910390f35b34801561054a57600080fd5b50610553610e94565b604051610560919061346f565b60405180910390f35b34801561057557600080fd5b5061057e610ebe565b60405161058b919061363c565b60405180910390f35b3480156105a057600080fd5b506105a9610ec4565b6040516105b6919061351a565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190612fc2565b610f56565b005b3480156105f457600080fd5b506105fd6110ce565b60405161060a919061363c565b60405180910390f35b34801561061f57600080fd5b5061063a60048036038101906106359190612e52565b6110d4565b005b34801561064857600080fd5b50610663600480360381019061065e9190612f3f565b611194565b005b34801561067157600080fd5b5061068c6004803603810190610687919061312e565b6111e7565b604051610699919061351a565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c4919061312e565b6112e8565b6040516106d6919061363c565b60405180910390f35b3480156106eb57600080fd5b506106f4611305565b604051610701919061363c565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190612eac565b61130a565b60405161073e91906134ff565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906130e5565b61139e565b005b34801561077c57600080fd5b5061079760048036038101906107929190612e52565b611434565b005b3480156107a557600080fd5b506107ae61152c565b6040516107bb919061363c565b60405180910390f35b6107de60048036038101906107d99190613042565b611536565b005b3480156107ec57600080fd5b50610807600480360381019061080291906130e5565b6119db565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108d457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108e457506108e382611a71565b5b9050919050565b6060600280546108fa90613941565b80601f016020809104026020016040519081016040528092919081815260200182805461092690613941565b80156109735780601f1061094857610100808354040283529160200191610973565b820191906000526020600020905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b600061098882611adb565b6109be576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a0482610cf6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6c576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8b611b15565b73ffffffffffffffffffffffffffffffffffffffff1614158015610abd5750610abb81610ab6611b15565b61130a565b155b15610af4576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aff838383611b1d565b505050565b600b5481565b600060015460005403905090565b610b23838383611bcf565b505050565b610b30611b15565b73ffffffffffffffffffffffffffffffffffffffff16610b4e610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b906135dc565b60405180910390fd5b8060169080519060200190610bba929190612b70565b5050565b610bd983838360405180602001604052806000815250611194565b505050565b610be6611b15565b73ffffffffffffffffffffffffffffffffffffffff16610c04610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c51906135dc565b60405180910390fd5b80600c8190555050565b610c6c611b15565b73ffffffffffffffffffffffffffffffffffffffff16610c8a610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd7906135dc565b60405180910390fd5b8060128190555050565b600c5481565b61119481565b6000610d01826120c0565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d74576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610de4611b15565b73ffffffffffffffffffffffffffffffffffffffff16610e02610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906135dc565b60405180910390fd5b610e62600061233c565b565b60125481565b6000600e600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b606060038054610ed390613941565b80601f0160208091040260200160405190810160405280929190818152602001828054610eff90613941565b8015610f4c5780601f10610f2157610100808354040283529160200191610f4c565b820191906000526020600020905b815481529060010190602001808311610f2f57829003601f168201915b5050505050905090565b610f5e611b15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fc3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610fd0611b15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661107d611b15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110c291906134ff565b60405180910390a35050565b600a5481565b6110dc611b15565b73ffffffffffffffffffffffffffffffffffffffff166110fa610e94565b73ffffffffffffffffffffffffffffffffffffffff1614611150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611147906135dc565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61119f848484611bcf565b6111ab84848484612402565b6111e1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606111f282611adb565b611231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611228906135bc565b60405180910390fd5b600e600083815260200190815260200160002060009054906101000a900460ff161561129f5760176112756011600085815260200190815260200160002054612590565b6018604051602001611289939291906133f0565b60405160208183030381529060405290506112e3565b60166112bd6010600085815260200190815260200160002054612590565b60186040516020016112d1939291906133f0565b60405160208183030381529060405290505b919050565b600060156000838152602001908152602001600020549050919050565b60fa81565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113a6611b15565b73ffffffffffffffffffffffffffffffffffffffff166113c4610e94565b73ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611411906135dc565b60405180910390fd5b8060179080519060200190611430929190612b70565b5050565b61143c611b15565b73ffffffffffffffffffffffffffffffffffffffff1661145a610e94565b73ffffffffffffffffffffffffffffffffffffffff16146114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a7906135dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115179061353c565b60405180910390fd5b6115298161233c565b50565b6000600b54905090565b6002600854141561157c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115739061361c565b60405180910390fd5b60026008819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e99061359c565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b60028167ffffffffffffffff16101561181e574260125460156000868567ffffffffffffffff168151811061165457611653613b0a565b5b60200260200101518152602001908152602001600020546116759190613762565b106116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac906135fc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e858467ffffffffffffffff168151811061170557611704613b0a565b5b60200260200101516040518263ffffffff1660e01b8152600401611729919061363c565b60206040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117799190612e7f565b73ffffffffffffffffffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c69061355c565b60405180910390fd5b4260156000858467ffffffffffffffff16815181106117f1576117f0613b0a565b5b60200260200101518152602001908152602001600020819055508080611816906139ed565b91505061161c565b50611194600a5410611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c9061357c565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166309ee21c033600c546040518363ffffffff1660e01b81526004016118c99291906134d6565b600060405180830381600087803b1580156118e357600080fd5b505af11580156118f7573d6000803e3d6000fd5b505050506119036126f1565b1561196f57600b5460116000600a54815260200190815260200160002081905550600b6000815480929190611937906139a4565b91905055506001600e6000600a54815260200190815260200160002060006101000a81548160ff0219169083151502179055506119a4565b600f5460106000600a54815260200190815260200160002081905550600f600081548092919061199e906139a4565b91905055505b600a60008154809291906119b7906139a4565b91905055506119ce6119c7611b15565b6001612774565b5050600160088190555050565b6119e3611b15565b73ffffffffffffffffffffffffffffffffffffffff16611a01610e94565b73ffffffffffffffffffffffffffffffffffffffff1614611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e906135dc565b60405180910390fd5b8060189080519060200190611a6d929190612b70565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482108015611b0e575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611bda826120c0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611c01611b15565b73ffffffffffffffffffffffffffffffffffffffff161480611c345750611c338260000151611c2e611b15565b61130a565b5b80611c795750611c42611b15565b73ffffffffffffffffffffffffffffffffffffffff16611c618461097d565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611cb2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d82576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d8f8585856001612792565b611d9f6000848460000151611b1d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120505760005481101561204f5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120b98585856001612798565b5050505050565b6120c8612bf6565b6000829050600054811015612305576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161230357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121e7578092505050612337565b5b60011561230257818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122fd578092505050612337565b6121e8565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006124238473ffffffffffffffffffffffffffffffffffffffff1661279e565b15612583578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261244c611b15565b8786866040518563ffffffff1660e01b815260040161246e949392919061348a565b602060405180830381600087803b15801561248857600080fd5b505af19250505080156124b957506040513d601f19601f820116820180604052508101906124b691906130b8565b60015b612533573d80600081146124e9576040519150601f19603f3d011682016040523d82523d6000602084013e6124ee565b606091505b5060008151141561252b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612588565b600190505b949350505050565b606060008214156125d8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ec565b600082905060005b6000821461260a5780806125f3906139a4565b915050600a8261260391906137b8565b91506125e0565b60008167ffffffffffffffff81111561262657612625613b39565b5b6040519080825280601f01601f1916602001820160405280156126585781602001600182028036833780820191505090505b5090505b600085146126e5576001826126719190613843565b9150600a856126809190613a4c565b603061268c9190613762565b60f81b8183815181106126a2576126a1613b0a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126de91906137b8565b945061265c565b8093505050505b919050565b600080600090506000600a5461119461270a9190613843565b9050600081141561271f578192505050612771565b60006103e8600b5460fa6127339190613843565b61273d91906137e9565b90506000828261274d91906137b8565b905060006127596127c1565b90508181101561276857600194505b84955050505050505b90565b61278e828260405180602001604052806000815250612827565b5050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000806103e84233600d54600a546040516020016127e29493929190613421565b6040516020818303038152906040528051906020012060001c6128059190613a4c565b905080600d60008282546128199190613762565b925050819055508091505090565b6128348383836001612839565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156128a6576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156128e1576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128ee6000868387612792565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b5357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612b075750612b056000888488612402565b155b15612b3e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612a8c565b508060008190555050612b696000868387612798565b5050505050565b828054612b7c90613941565b90600052602060002090601f016020900481019282612b9e5760008555612be5565b82601f10612bb757805160ff1916838001178555612be5565b82800160010185558215612be5579182015b82811115612be4578251825591602001919060010190612bc9565b5b509050612bf29190612c39565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612c52576000816000905550600101612c3a565b5090565b6000612c69612c648461367c565b613657565b90508083825260208201905082856020860282011115612c8c57612c8b613b6d565b5b60005b85811015612cbc5781612ca28882612e3d565b845260208401935060208301925050600181019050612c8f565b5050509392505050565b6000612cd9612cd4846136a8565b613657565b905082815260208101848484011115612cf557612cf4613b72565b5b612d008482856138ff565b509392505050565b6000612d1b612d16846136d9565b613657565b905082815260208101848484011115612d3757612d36613b72565b5b612d428482856138ff565b509392505050565b600081359050612d5981613d0d565b92915050565b600081519050612d6e81613d0d565b92915050565b600082601f830112612d8957612d88613b68565b5b8135612d99848260208601612c56565b91505092915050565b600081359050612db181613d24565b92915050565b600081359050612dc681613d3b565b92915050565b600081519050612ddb81613d3b565b92915050565b600082601f830112612df657612df5613b68565b5b8135612e06848260208601612cc6565b91505092915050565b600082601f830112612e2457612e23613b68565b5b8135612e34848260208601612d08565b91505092915050565b600081359050612e4c81613d52565b92915050565b600060208284031215612e6857612e67613b7c565b5b6000612e7684828501612d4a565b91505092915050565b600060208284031215612e9557612e94613b7c565b5b6000612ea384828501612d5f565b91505092915050565b60008060408385031215612ec357612ec2613b7c565b5b6000612ed185828601612d4a565b9250506020612ee285828601612d4a565b9150509250929050565b600080600060608486031215612f0557612f04613b7c565b5b6000612f1386828701612d4a565b9350506020612f2486828701612d4a565b9250506040612f3586828701612e3d565b9150509250925092565b60008060008060808587031215612f5957612f58613b7c565b5b6000612f6787828801612d4a565b9450506020612f7887828801612d4a565b9350506040612f8987828801612e3d565b925050606085013567ffffffffffffffff811115612faa57612fa9613b77565b5b612fb687828801612de1565b91505092959194509250565b60008060408385031215612fd957612fd8613b7c565b5b6000612fe785828601612d4a565b9250506020612ff885828601612da2565b9150509250929050565b6000806040838503121561301957613018613b7c565b5b600061302785828601612d4a565b925050602061303885828601612e3d565b9150509250929050565b60006020828403121561305857613057613b7c565b5b600082013567ffffffffffffffff81111561307657613075613b77565b5b61308284828501612d74565b91505092915050565b6000602082840312156130a1576130a0613b7c565b5b60006130af84828501612db7565b91505092915050565b6000602082840312156130ce576130cd613b7c565b5b60006130dc84828501612dcc565b91505092915050565b6000602082840312156130fb576130fa613b7c565b5b600082013567ffffffffffffffff81111561311957613118613b77565b5b61312584828501612e0f565b91505092915050565b60006020828403121561314457613143613b7c565b5b600061315284828501612e3d565b91505092915050565b61316481613877565b82525050565b61317b61317682613877565b613a1e565b82525050565b61318a81613889565b82525050565b600061319b8261371f565b6131a58185613735565b93506131b581856020860161390e565b6131be81613b81565b840191505092915050565b60006131d48261372a565b6131de8185613746565b93506131ee81856020860161390e565b6131f781613b81565b840191505092915050565b600061320d8261372a565b6132178185613757565b935061322781856020860161390e565b80840191505092915050565b6000815461324081613941565b61324a8186613757565b945060018216600081146132655760018114613276576132a9565b60ff198316865281860193506132a9565b61327f8561370a565b60005b838110156132a157815481890152600182019150602081019050613282565b838801955050505b50505092915050565b60006132bf602683613746565b91506132ca82613b9f565b604082019050919050565b60006132e2601283613746565b91506132ed82613bee565b602082019050919050565b6000613305601e83613746565b915061331082613c17565b602082019050919050565b6000613328601383613746565b915061333382613c40565b602082019050919050565b600061334b601d83613746565b915061335682613c69565b602082019050919050565b600061336e602083613746565b915061337982613c92565b602082019050919050565b6000613391601583613746565b915061339c82613cbb565b602082019050919050565b60006133b4601f83613746565b91506133bf82613ce4565b602082019050919050565b6133d3816138e1565b82525050565b6133ea6133e5826138e1565b613a42565b82525050565b60006133fc8286613233565b91506134088285613202565b91506134148284613233565b9150819050949350505050565b600061342d82876133d9565b60208201915061343d828661316a565b60148201915061344d82856133d9565b60208201915061345d82846133d9565b60208201915081905095945050505050565b6000602082019050613484600083018461315b565b92915050565b600060808201905061349f600083018761315b565b6134ac602083018661315b565b6134b960408301856133ca565b81810360608301526134cb8184613190565b905095945050505050565b60006040820190506134eb600083018561315b565b6134f860208301846133ca565b9392505050565b60006020820190506135146000830184613181565b92915050565b6000602082019050818103600083015261353481846131c9565b905092915050565b60006020820190508181036000830152613555816132b2565b9050919050565b60006020820190508181036000830152613575816132d5565b9050919050565b60006020820190508181036000830152613595816132f8565b9050919050565b600060208201905081810360008301526135b58161331b565b9050919050565b600060208201905081810360008301526135d58161333e565b9050919050565b600060208201905081810360008301526135f581613361565b9050919050565b6000602082019050818103600083015261361581613384565b9050919050565b60006020820190508181036000830152613635816133a7565b9050919050565b600060208201905061365160008301846133ca565b92915050565b6000613661613672565b905061366d8282613973565b919050565b6000604051905090565b600067ffffffffffffffff82111561369757613696613b39565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136c3576136c2613b39565b5b6136cc82613b81565b9050602081019050919050565b600067ffffffffffffffff8211156136f4576136f3613b39565b5b6136fd82613b81565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061376d826138e1565b9150613778836138e1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ad576137ac613a7d565b5b828201905092915050565b60006137c3826138e1565b91506137ce836138e1565b9250826137de576137dd613aac565b5b828204905092915050565b60006137f4826138e1565b91506137ff836138e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561383857613837613a7d565b5b828202905092915050565b600061384e826138e1565b9150613859836138e1565b92508282101561386c5761386b613a7d565b5b828203905092915050565b6000613882826138c1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561392c578082015181840152602081019050613911565b8381111561393b576000848401525b50505050565b6000600282049050600182168061395957607f821691505b6020821081141561396d5761396c613adb565b5b50919050565b61397c82613b81565b810181811067ffffffffffffffff8211171561399b5761399a613b39565b5b80604052505050565b60006139af826138e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139e2576139e1613a7d565b5b600182019050919050565b60006139f8826138eb565b915067ffffffffffffffff821415613a1357613a12613a7d565b5b600182019050919050565b6000613a2982613a30565b9050919050565b6000613a3b82613b92565b9050919050565b6000819050919050565b6000613a57826138e1565b9150613a62836138e1565b925082613a7257613a71613aac565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420796f757220736b656c65746f6e7a0000000000000000000000000000600082015250565b7f4d696e74206f76657220746865206d617820746f6b656e73206c696d69740000600082015250565b7f4e6f20736d61727420636f6e7472616374732100000000000000000000000000600082015250565b7f517565727920666f72206e6f6e2d6578697374656e7420746f6b656e21000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f536b656c65746f6e7a20696e20636f6f6c646f776e0000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613d1681613877565b8114613d2157600080fd5b50565b613d2d81613889565b8114613d3857600080fd5b50565b613d4481613895565b8114613d4f57600080fd5b50565b613d5b816138e1565b8114613d6657600080fd5b5056fea264697066735822122004311a4e12a2e8a137e6cf7b308d82732e6024dd856f3724751dd38f706c100464736f6c634300080700330000000000000000000000001f8c273ddc98163192273495dfa1e818c06bcd6d000000000000000000000000be8c18857c84d2f6e18d62f1fa8cad8061714161

Deployed Bytecode

0x6080604052600436106101f95760003560e01c80638d7bc4ac1161010d578063c87b56dd116100a0578063ea698a271161006f578063ea698a2714610747578063f2fde38b14610770578063f71bc40f14610799578063f94c1b43146107c4578063fe05452d146107e0576101f9565b8063c87b56dd14610665578063db2abc4a146106a2578063e87afa6b146106df578063e985e9c51461070a576101f9565b8063a22cb465116100dc578063a22cb465146105bf578063a9521a26146105e8578063ae67499414610613578063b88d4fde1461063c576101f9565b80638d7bc4ac146105015780638da5cb5b1461053e5780638f5fc1db1461056957806395d89b4114610594576101f9565b806342842e0e11610190578063595193d41161015f578063595193d41461041a5780636352211e1461044557806370a0823114610482578063715018a6146104bf578063787a08a6146104d6576101f9565b806342842e0e1461037457806344a0d68a1461039d5780634fc3f41a146103c657806354559a90146103ef576101f9565b80630e945497116101cc5780630e945497146102cc57806318160ddd146102f757806323b872dd1461032257806330176e131461034b576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061308b565b610809565b60405161023291906134ff565b60405180910390f35b34801561024757600080fd5b506102506108eb565b60405161025d919061351a565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061312e565b61097d565b60405161029a919061346f565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613002565b6109f9565b005b3480156102d857600080fd5b506102e1610b04565b6040516102ee919061363c565b60405180910390f35b34801561030357600080fd5b5061030c610b0a565b604051610319919061363c565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190612eec565b610b18565b005b34801561035757600080fd5b50610372600480360381019061036d91906130e5565b610b28565b005b34801561038057600080fd5b5061039b60048036038101906103969190612eec565b610bbe565b005b3480156103a957600080fd5b506103c460048036038101906103bf919061312e565b610bde565b005b3480156103d257600080fd5b506103ed60048036038101906103e8919061312e565b610c64565b005b3480156103fb57600080fd5b50610404610cea565b604051610411919061363c565b60405180910390f35b34801561042657600080fd5b5061042f610cf0565b60405161043c919061363c565b60405180910390f35b34801561045157600080fd5b5061046c6004803603810190610467919061312e565b610cf6565b604051610479919061346f565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190612e52565b610d0c565b6040516104b6919061363c565b60405180910390f35b3480156104cb57600080fd5b506104d4610ddc565b005b3480156104e257600080fd5b506104eb610e64565b6040516104f8919061363c565b60405180910390f35b34801561050d57600080fd5b506105286004803603810190610523919061312e565b610e6a565b60405161053591906134ff565b60405180910390f35b34801561054a57600080fd5b50610553610e94565b604051610560919061346f565b60405180910390f35b34801561057557600080fd5b5061057e610ebe565b60405161058b919061363c565b60405180910390f35b3480156105a057600080fd5b506105a9610ec4565b6040516105b6919061351a565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190612fc2565b610f56565b005b3480156105f457600080fd5b506105fd6110ce565b60405161060a919061363c565b60405180910390f35b34801561061f57600080fd5b5061063a60048036038101906106359190612e52565b6110d4565b005b34801561064857600080fd5b50610663600480360381019061065e9190612f3f565b611194565b005b34801561067157600080fd5b5061068c6004803603810190610687919061312e565b6111e7565b604051610699919061351a565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c4919061312e565b6112e8565b6040516106d6919061363c565b60405180910390f35b3480156106eb57600080fd5b506106f4611305565b604051610701919061363c565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190612eac565b61130a565b60405161073e91906134ff565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906130e5565b61139e565b005b34801561077c57600080fd5b5061079760048036038101906107929190612e52565b611434565b005b3480156107a557600080fd5b506107ae61152c565b6040516107bb919061363c565b60405180910390f35b6107de60048036038101906107d99190613042565b611536565b005b3480156107ec57600080fd5b50610807600480360381019061080291906130e5565b6119db565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108d457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108e457506108e382611a71565b5b9050919050565b6060600280546108fa90613941565b80601f016020809104026020016040519081016040528092919081815260200182805461092690613941565b80156109735780601f1061094857610100808354040283529160200191610973565b820191906000526020600020905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b600061098882611adb565b6109be576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a0482610cf6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6c576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8b611b15565b73ffffffffffffffffffffffffffffffffffffffff1614158015610abd5750610abb81610ab6611b15565b61130a565b155b15610af4576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aff838383611b1d565b505050565b600b5481565b600060015460005403905090565b610b23838383611bcf565b505050565b610b30611b15565b73ffffffffffffffffffffffffffffffffffffffff16610b4e610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b906135dc565b60405180910390fd5b8060169080519060200190610bba929190612b70565b5050565b610bd983838360405180602001604052806000815250611194565b505050565b610be6611b15565b73ffffffffffffffffffffffffffffffffffffffff16610c04610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c51906135dc565b60405180910390fd5b80600c8190555050565b610c6c611b15565b73ffffffffffffffffffffffffffffffffffffffff16610c8a610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd7906135dc565b60405180910390fd5b8060128190555050565b600c5481565b61119481565b6000610d01826120c0565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d74576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610de4611b15565b73ffffffffffffffffffffffffffffffffffffffff16610e02610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906135dc565b60405180910390fd5b610e62600061233c565b565b60125481565b6000600e600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b606060038054610ed390613941565b80601f0160208091040260200160405190810160405280929190818152602001828054610eff90613941565b8015610f4c5780601f10610f2157610100808354040283529160200191610f4c565b820191906000526020600020905b815481529060010190602001808311610f2f57829003601f168201915b5050505050905090565b610f5e611b15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fc3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610fd0611b15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661107d611b15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110c291906134ff565b60405180910390a35050565b600a5481565b6110dc611b15565b73ffffffffffffffffffffffffffffffffffffffff166110fa610e94565b73ffffffffffffffffffffffffffffffffffffffff1614611150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611147906135dc565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61119f848484611bcf565b6111ab84848484612402565b6111e1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606111f282611adb565b611231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611228906135bc565b60405180910390fd5b600e600083815260200190815260200160002060009054906101000a900460ff161561129f5760176112756011600085815260200190815260200160002054612590565b6018604051602001611289939291906133f0565b60405160208183030381529060405290506112e3565b60166112bd6010600085815260200190815260200160002054612590565b60186040516020016112d1939291906133f0565b60405160208183030381529060405290505b919050565b600060156000838152602001908152602001600020549050919050565b60fa81565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113a6611b15565b73ffffffffffffffffffffffffffffffffffffffff166113c4610e94565b73ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611411906135dc565b60405180910390fd5b8060179080519060200190611430929190612b70565b5050565b61143c611b15565b73ffffffffffffffffffffffffffffffffffffffff1661145a610e94565b73ffffffffffffffffffffffffffffffffffffffff16146114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a7906135dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115179061353c565b60405180910390fd5b6115298161233c565b50565b6000600b54905090565b6002600854141561157c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115739061361c565b60405180910390fd5b60026008819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e99061359c565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b60028167ffffffffffffffff16101561181e574260125460156000868567ffffffffffffffff168151811061165457611653613b0a565b5b60200260200101518152602001908152602001600020546116759190613762565b106116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac906135fc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e858467ffffffffffffffff168151811061170557611704613b0a565b5b60200260200101516040518263ffffffff1660e01b8152600401611729919061363c565b60206040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117799190612e7f565b73ffffffffffffffffffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c69061355c565b60405180910390fd5b4260156000858467ffffffffffffffff16815181106117f1576117f0613b0a565b5b60200260200101518152602001908152602001600020819055508080611816906139ed565b91505061161c565b50611194600a5410611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c9061357c565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166309ee21c033600c546040518363ffffffff1660e01b81526004016118c99291906134d6565b600060405180830381600087803b1580156118e357600080fd5b505af11580156118f7573d6000803e3d6000fd5b505050506119036126f1565b1561196f57600b5460116000600a54815260200190815260200160002081905550600b6000815480929190611937906139a4565b91905055506001600e6000600a54815260200190815260200160002060006101000a81548160ff0219169083151502179055506119a4565b600f5460106000600a54815260200190815260200160002081905550600f600081548092919061199e906139a4565b91905055505b600a60008154809291906119b7906139a4565b91905055506119ce6119c7611b15565b6001612774565b5050600160088190555050565b6119e3611b15565b73ffffffffffffffffffffffffffffffffffffffff16611a01610e94565b73ffffffffffffffffffffffffffffffffffffffff1614611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e906135dc565b60405180910390fd5b8060189080519060200190611a6d929190612b70565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482108015611b0e575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611bda826120c0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611c01611b15565b73ffffffffffffffffffffffffffffffffffffffff161480611c345750611c338260000151611c2e611b15565b61130a565b5b80611c795750611c42611b15565b73ffffffffffffffffffffffffffffffffffffffff16611c618461097d565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611cb2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d82576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d8f8585856001612792565b611d9f6000848460000151611b1d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120505760005481101561204f5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120b98585856001612798565b5050505050565b6120c8612bf6565b6000829050600054811015612305576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161230357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121e7578092505050612337565b5b60011561230257818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122fd578092505050612337565b6121e8565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006124238473ffffffffffffffffffffffffffffffffffffffff1661279e565b15612583578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261244c611b15565b8786866040518563ffffffff1660e01b815260040161246e949392919061348a565b602060405180830381600087803b15801561248857600080fd5b505af19250505080156124b957506040513d601f19601f820116820180604052508101906124b691906130b8565b60015b612533573d80600081146124e9576040519150601f19603f3d011682016040523d82523d6000602084013e6124ee565b606091505b5060008151141561252b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612588565b600190505b949350505050565b606060008214156125d8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ec565b600082905060005b6000821461260a5780806125f3906139a4565b915050600a8261260391906137b8565b91506125e0565b60008167ffffffffffffffff81111561262657612625613b39565b5b6040519080825280601f01601f1916602001820160405280156126585781602001600182028036833780820191505090505b5090505b600085146126e5576001826126719190613843565b9150600a856126809190613a4c565b603061268c9190613762565b60f81b8183815181106126a2576126a1613b0a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126de91906137b8565b945061265c565b8093505050505b919050565b600080600090506000600a5461119461270a9190613843565b9050600081141561271f578192505050612771565b60006103e8600b5460fa6127339190613843565b61273d91906137e9565b90506000828261274d91906137b8565b905060006127596127c1565b90508181101561276857600194505b84955050505050505b90565b61278e828260405180602001604052806000815250612827565b5050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000806103e84233600d54600a546040516020016127e29493929190613421565b6040516020818303038152906040528051906020012060001c6128059190613a4c565b905080600d60008282546128199190613762565b925050819055508091505090565b6128348383836001612839565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156128a6576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156128e1576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128ee6000868387612792565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b5357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612b075750612b056000888488612402565b155b15612b3e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612a8c565b508060008190555050612b696000868387612798565b5050505050565b828054612b7c90613941565b90600052602060002090601f016020900481019282612b9e5760008555612be5565b82601f10612bb757805160ff1916838001178555612be5565b82800160010185558215612be5579182015b82811115612be4578251825591602001919060010190612bc9565b5b509050612bf29190612c39565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612c52576000816000905550600101612c3a565b5090565b6000612c69612c648461367c565b613657565b90508083825260208201905082856020860282011115612c8c57612c8b613b6d565b5b60005b85811015612cbc5781612ca28882612e3d565b845260208401935060208301925050600181019050612c8f565b5050509392505050565b6000612cd9612cd4846136a8565b613657565b905082815260208101848484011115612cf557612cf4613b72565b5b612d008482856138ff565b509392505050565b6000612d1b612d16846136d9565b613657565b905082815260208101848484011115612d3757612d36613b72565b5b612d428482856138ff565b509392505050565b600081359050612d5981613d0d565b92915050565b600081519050612d6e81613d0d565b92915050565b600082601f830112612d8957612d88613b68565b5b8135612d99848260208601612c56565b91505092915050565b600081359050612db181613d24565b92915050565b600081359050612dc681613d3b565b92915050565b600081519050612ddb81613d3b565b92915050565b600082601f830112612df657612df5613b68565b5b8135612e06848260208601612cc6565b91505092915050565b600082601f830112612e2457612e23613b68565b5b8135612e34848260208601612d08565b91505092915050565b600081359050612e4c81613d52565b92915050565b600060208284031215612e6857612e67613b7c565b5b6000612e7684828501612d4a565b91505092915050565b600060208284031215612e9557612e94613b7c565b5b6000612ea384828501612d5f565b91505092915050565b60008060408385031215612ec357612ec2613b7c565b5b6000612ed185828601612d4a565b9250506020612ee285828601612d4a565b9150509250929050565b600080600060608486031215612f0557612f04613b7c565b5b6000612f1386828701612d4a565b9350506020612f2486828701612d4a565b9250506040612f3586828701612e3d565b9150509250925092565b60008060008060808587031215612f5957612f58613b7c565b5b6000612f6787828801612d4a565b9450506020612f7887828801612d4a565b9350506040612f8987828801612e3d565b925050606085013567ffffffffffffffff811115612faa57612fa9613b77565b5b612fb687828801612de1565b91505092959194509250565b60008060408385031215612fd957612fd8613b7c565b5b6000612fe785828601612d4a565b9250506020612ff885828601612da2565b9150509250929050565b6000806040838503121561301957613018613b7c565b5b600061302785828601612d4a565b925050602061303885828601612e3d565b9150509250929050565b60006020828403121561305857613057613b7c565b5b600082013567ffffffffffffffff81111561307657613075613b77565b5b61308284828501612d74565b91505092915050565b6000602082840312156130a1576130a0613b7c565b5b60006130af84828501612db7565b91505092915050565b6000602082840312156130ce576130cd613b7c565b5b60006130dc84828501612dcc565b91505092915050565b6000602082840312156130fb576130fa613b7c565b5b600082013567ffffffffffffffff81111561311957613118613b77565b5b61312584828501612e0f565b91505092915050565b60006020828403121561314457613143613b7c565b5b600061315284828501612e3d565b91505092915050565b61316481613877565b82525050565b61317b61317682613877565b613a1e565b82525050565b61318a81613889565b82525050565b600061319b8261371f565b6131a58185613735565b93506131b581856020860161390e565b6131be81613b81565b840191505092915050565b60006131d48261372a565b6131de8185613746565b93506131ee81856020860161390e565b6131f781613b81565b840191505092915050565b600061320d8261372a565b6132178185613757565b935061322781856020860161390e565b80840191505092915050565b6000815461324081613941565b61324a8186613757565b945060018216600081146132655760018114613276576132a9565b60ff198316865281860193506132a9565b61327f8561370a565b60005b838110156132a157815481890152600182019150602081019050613282565b838801955050505b50505092915050565b60006132bf602683613746565b91506132ca82613b9f565b604082019050919050565b60006132e2601283613746565b91506132ed82613bee565b602082019050919050565b6000613305601e83613746565b915061331082613c17565b602082019050919050565b6000613328601383613746565b915061333382613c40565b602082019050919050565b600061334b601d83613746565b915061335682613c69565b602082019050919050565b600061336e602083613746565b915061337982613c92565b602082019050919050565b6000613391601583613746565b915061339c82613cbb565b602082019050919050565b60006133b4601f83613746565b91506133bf82613ce4565b602082019050919050565b6133d3816138e1565b82525050565b6133ea6133e5826138e1565b613a42565b82525050565b60006133fc8286613233565b91506134088285613202565b91506134148284613233565b9150819050949350505050565b600061342d82876133d9565b60208201915061343d828661316a565b60148201915061344d82856133d9565b60208201915061345d82846133d9565b60208201915081905095945050505050565b6000602082019050613484600083018461315b565b92915050565b600060808201905061349f600083018761315b565b6134ac602083018661315b565b6134b960408301856133ca565b81810360608301526134cb8184613190565b905095945050505050565b60006040820190506134eb600083018561315b565b6134f860208301846133ca565b9392505050565b60006020820190506135146000830184613181565b92915050565b6000602082019050818103600083015261353481846131c9565b905092915050565b60006020820190508181036000830152613555816132b2565b9050919050565b60006020820190508181036000830152613575816132d5565b9050919050565b60006020820190508181036000830152613595816132f8565b9050919050565b600060208201905081810360008301526135b58161331b565b9050919050565b600060208201905081810360008301526135d58161333e565b9050919050565b600060208201905081810360008301526135f581613361565b9050919050565b6000602082019050818103600083015261361581613384565b9050919050565b60006020820190508181036000830152613635816133a7565b9050919050565b600060208201905061365160008301846133ca565b92915050565b6000613661613672565b905061366d8282613973565b919050565b6000604051905090565b600067ffffffffffffffff82111561369757613696613b39565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136c3576136c2613b39565b5b6136cc82613b81565b9050602081019050919050565b600067ffffffffffffffff8211156136f4576136f3613b39565b5b6136fd82613b81565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061376d826138e1565b9150613778836138e1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ad576137ac613a7d565b5b828201905092915050565b60006137c3826138e1565b91506137ce836138e1565b9250826137de576137dd613aac565b5b828204905092915050565b60006137f4826138e1565b91506137ff836138e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561383857613837613a7d565b5b828202905092915050565b600061384e826138e1565b9150613859836138e1565b92508282101561386c5761386b613a7d565b5b828203905092915050565b6000613882826138c1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561392c578082015181840152602081019050613911565b8381111561393b576000848401525b50505050565b6000600282049050600182168061395957607f821691505b6020821081141561396d5761396c613adb565b5b50919050565b61397c82613b81565b810181811067ffffffffffffffff8211171561399b5761399a613b39565b5b80604052505050565b60006139af826138e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139e2576139e1613a7d565b5b600182019050919050565b60006139f8826138eb565b915067ffffffffffffffff821415613a1357613a12613a7d565b5b600182019050919050565b6000613a2982613a30565b9050919050565b6000613a3b82613b92565b9050919050565b6000819050919050565b6000613a57826138e1565b9150613a62836138e1565b925082613a7257613a71613aac565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420796f757220736b656c65746f6e7a0000000000000000000000000000600082015250565b7f4d696e74206f76657220746865206d617820746f6b656e73206c696d69740000600082015250565b7f4e6f20736d61727420636f6e7472616374732100000000000000000000000000600082015250565b7f517565727920666f72206e6f6e2d6578697374656e7420746f6b656e21000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f536b656c65746f6e7a20696e20636f6f6c646f776e0000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613d1681613877565b8114613d2157600080fd5b50565b613d2d81613889565b8114613d3857600080fd5b50565b613d4481613895565b8114613d4f57600080fd5b50565b613d5b816138e1565b8114613d6657600080fd5b5056fea264697066735822122004311a4e12a2e8a137e6cf7b308d82732e6024dd856f3724751dd38f706c100464736f6c63430008070033

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

0000000000000000000000001f8c273ddc98163192273495dfa1e818c06bcd6d000000000000000000000000be8c18857c84d2f6e18d62f1fa8cad8061714161

-----Decoded View---------------
Arg [0] : _genesisContractAddress (address): 0x1f8C273DdC98163192273495DfA1e818C06bCD6d
Arg [1] : _gbonesContractAddress (address): 0xbE8C18857C84D2F6E18D62f1Fa8CAd8061714161

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001f8c273ddc98163192273495dfa1e818c06bcd6d
Arg [1] : 000000000000000000000000be8c18857c84d2f6e18d62f1fa8cad8061714161


Deployed Bytecode Sourcemap

111905:5029:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89603:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;92963:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94466:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94029:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;112108:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;89260:271;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95323:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;113313:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;95564:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;113769:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;113665:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;112147:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;111970:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;92772:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;89972:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;108370:94;;;;;;;;;;;;;:::i;:::-;;112447:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;116810:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;107719:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;112289:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;93132:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94742:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;112068:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;113165:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;95820:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;113872:508;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;116682:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;112019:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95092:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;113423:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;108619:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;116574:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;114385:1314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;113535:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;89603:305;89705:4;89757:25;89742:40;;;:11;:40;;;;:105;;;;89814:33;89799:48;;;:11;:48;;;;89742:105;:158;;;;89864:36;89888:11;89864:23;:36::i;:::-;89742:158;89722:178;;89603:305;;;:::o;92963:100::-;93017:13;93050:5;93043:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92963:100;:::o;94466:204::-;94534:7;94559:16;94567:7;94559;:16::i;:::-;94554:64;;94584:34;;;;;;;;;;;;;;94554:64;94638:15;:24;94654:7;94638:24;;;;;;;;;;;;;;;;;;;;;94631:31;;94466:204;;;:::o;94029:371::-;94102:13;94118:24;94134:7;94118:15;:24::i;:::-;94102:40;;94163:5;94157:11;;:2;:11;;;94153:48;;;94177:24;;;;;;;;;;;;;;94153:48;94234:5;94218:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;94244:37;94261:5;94268:12;:10;:12::i;:::-;94244:16;:37::i;:::-;94243:38;94218:63;94214:138;;;94305:35;;;;;;;;;;;;;;94214:138;94364:28;94373:2;94377:7;94386:5;94364:8;:28::i;:::-;94091:309;94029:371;;:::o;112108:32::-;;;;:::o;89260:271::-;89304:7;89496:12;;89480:13;;:28;89473:35;;89260:271;:::o;95323:170::-;95457:28;95467:4;95473:2;95477:7;95457:9;:28::i;:::-;95323:170;;;:::o;113313:102::-;107950:12;:10;:12::i;:::-;107939:23;;:7;:5;:7::i;:::-;:23;;;107931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;113403:4:::1;113388:12;:19;;;;;;;;;;;;:::i;:::-;;113313:102:::0;:::o;95564:185::-;95702:39;95719:4;95725:2;95729:7;95702:39;;;;;;;;;;;;:16;:39::i;:::-;95564:185;;;:::o;113769:97::-;107950:12;:10;:12::i;:::-;107939:23;;:7;:5;:7::i;:::-;:23;;;107931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;113848:10:::1;113836:9;:22;;;;113769:97:::0;:::o;113665:96::-;107950:12;:10;:12::i;:::-;107939:23;;:7;:5;:7::i;:::-;:23;;;107931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;113745:8:::1;113734;:19;;;;113665:96:::0;:::o;112147:36::-;;;;:::o;111970:42::-;112008:4;111970:42;:::o;92772:124::-;92836:7;92863:20;92875:7;92863:11;:20::i;:::-;:25;;;92856:32;;92772:124;;;:::o;89972:206::-;90036:7;90077:1;90060:19;;:5;:19;;;90056:60;;;90088:28;;;;;;;;;;;;;;90056:60;90142:12;:19;90155:5;90142:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;90134:36;;90127:43;;89972:206;;;:::o;108370:94::-;107950:12;:10;:12::i;:::-;107939:23;;:7;:5;:7::i;:::-;:23;;;107931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;108435:21:::1;108453:1;108435:9;:21::i;:::-;108370:94::o:0;112447:29::-;;;;:::o;116810:115::-;116870:4;116894:14;:23;116909:7;116894:23;;;;;;;;;;;;;;;;;;;;;116887:30;;116810:115;;;:::o;107719:87::-;107765:7;107792:6;;;;;;;;;;;107785:13;;107719:87;:::o;112289:35::-;;;;:::o;93132:104::-;93188:13;93221:7;93214:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;93132:104;:::o;94742:279::-;94845:12;:10;:12::i;:::-;94833:24;;:8;:24;;;94829:54;;;94866:17;;;;;;;;;;;;;;94829:54;94941:8;94896:18;:32;94915:12;:10;:12::i;:::-;94896:32;;;;;;;;;;;;;;;:42;94929:8;94896:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;94994:8;94965:48;;94980:12;:10;:12::i;:::-;94965:48;;;95004:8;94965:48;;;;;;:::i;:::-;;;;;;;;94742:279;;:::o;112068:33::-;;;;:::o;113165:143::-;107950:12;:10;:12::i;:::-;107939:23;;:7;:5;:7::i;:::-;:23;;;107931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;113278:22:::1;113254:21;;:46;;;;;;;;;;;;;;;;;;113165:143:::0;:::o;95820:342::-;95987:28;95997:4;96003:2;96007:7;95987:9;:28::i;:::-;96031:48;96054:4;96060:2;96064:7;96073:5;96031:22;:48::i;:::-;96026:129;;96103:40;;;;;;;;;;;;;;96026:129;95820:342;;;;:::o;113872:508::-;113938:13;113972:17;113980:8;113972:7;:17::i;:::-;113964:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;114040:14;:24;114055:8;114040:24;;;;;;;;;;;;;;;;;;;;;114036:327;;;114112:14;114128:43;114145:15;:25;114161:8;114145:25;;;;;;;;;;;;114128:16;:43::i;:::-;114173:22;114095:101;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;114081:116;;;;114036:327;114270:12;114284:41;114301:13;:23;114315:8;114301:23;;;;;;;;;;;;114284:16;:41::i;:::-;114327:22;114253:97;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;114239:112;;113872:508;;;;:::o;116682:120::-;116748:7;116775:10;:19;116786:7;116775:19;;;;;;;;;;;;116768:26;;116682:120;;;:::o;112019:40::-;112056:3;112019:40;:::o;95092:164::-;95189:4;95213:18;:25;95232:5;95213:25;;;;;;;;;;;;;;;:35;95239:8;95213:35;;;;;;;;;;;;;;;;;;;;;;;;;95206:42;;95092:164;;;;:::o;113423:106::-;107950:12;:10;:12::i;:::-;107939:23;;:7;:5;:7::i;:::-;:23;;;107931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;113517:4:::1;113500:14;:21;;;;;;;;;;;;:::i;:::-;;113423:106:::0;:::o;108619:192::-;107950:12;:10;:12::i;:::-;107939:23;;:7;:5;:7::i;:::-;:23;;;107931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;108728:1:::1;108708:22;;:8;:22;;;;108700:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;108784:19;108794:8;108784:9;:19::i;:::-;108619:192:::0;:::o;116574:96::-;116622:7;116649:13;;116642:20;;116574:96;:::o;114385:1314::-;110652:1;111248:7;;:19;;111240:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;110652:1;111381:7;:18;;;;112852:9:::1;112838:23;;:10;:23;;;112830:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;114491:30:::2;114543:22;;;;;;;;;;;114491:75;;114584:8;114579:452;114602:1;114598;:5;;;114579:452;;;114721:15;114710:8;;114679:10;:28;114690:13;114704:1;114690:16;;;;;;;;;;:::i;:::-;;;;;;;;114679:28;;;;;;;;;;;;:39;;;;:::i;:::-;:57;114671:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;114879:10;114838:51;;:11;:19;;;114858:13;114872:1;114858:16;;;;;;;;;;:::i;:::-;;;;;;;;114838:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;114830:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;115002:15;114971:10;:28;114982:13;114996:1;114982:16;;;;;;;;;;:::i;:::-;;;;;;;;114971:28;;;;;;;;;;;:46;;;;114605:3;;;;;:::i;:::-;;;;114579:452;;;;112008:4;115051:14;;:28;115043:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;115172:30;115221:21;;;;;;;;;;;115172:71;;115254:14;:25;;;115280:10;115292:9;;115254:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;115319:18;:16;:18::i;:::-;115315:309;;;115388:13;;115354:15;:31;115370:14;;115354:31;;;;;;;;;;;:47;;;;115416:13;;:15;;;;;;;;;:::i;:::-;;;;;;115479:4;115446:14;:30;115461:14;;115446:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;115315:309;;;115557:19;;115525:13;:29;115539:14;;115525:29;;;;;;;;;;;:51;;;;115591:19;;:21;;;;;;;;;:::i;:::-;;;;;;115315:309;115636:14;;:16;;;;;;;;;:::i;:::-;;;;;;115663:26;115673:12;:10;:12::i;:::-;115687:1;115663:9;:26::i;:::-;114478:1221;;110608:1:::0;111560:7;:22;;;;114385:1314;:::o;113535:122::-;107950:12;:10;:12::i;:::-;107939:23;;:7;:5;:7::i;:::-;:23;;;107931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;113645:4:::1;113620:22;:29;;;;;;;;;;;;:::i;:::-;;113535:122:::0;:::o;14333:157::-;14418:4;14457:25;14442:40;;;:11;:40;;;;14435:47;;14333:157;;;:::o;96417:144::-;96474:4;96508:13;;96498:7;:23;:55;;;;;96526:11;:20;96538:7;96526:20;;;;;;;;;;;:27;;;;;;;;;;;;96525:28;96498:55;96491:62;;96417:144;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;103623:196::-;103765:2;103738:15;:24;103754:7;103738:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;103803:7;103799:2;103783:28;;103792:5;103783:28;;;;;;;;;;;;103623:196;;;:::o;99124:2112::-;99239:35;99277:20;99289:7;99277:11;:20::i;:::-;99239:58;;99310:22;99352:13;:18;;;99336:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;99387:50;99404:13;:18;;;99424:12;:10;:12::i;:::-;99387:16;:50::i;:::-;99336:101;:154;;;;99478:12;:10;:12::i;:::-;99454:36;;:20;99466:7;99454:11;:20::i;:::-;:36;;;99336:154;99310:181;;99509:17;99504:66;;99535:35;;;;;;;;;;;;;;99504:66;99607:4;99585:26;;:13;:18;;;:26;;;99581:67;;99620:28;;;;;;;;;;;;;;99581:67;99677:1;99663:16;;:2;:16;;;99659:52;;;99688:23;;;;;;;;;;;;;;99659:52;99724:43;99746:4;99752:2;99756:7;99765:1;99724:21;:43::i;:::-;99832:49;99849:1;99853:7;99862:13;:18;;;99832:8;:49::i;:::-;100207:1;100177:12;:18;100190:4;100177:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;100251:1;100223:12;:16;100236:2;100223:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;100297:2;100269:11;:20;100281:7;100269:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;100359:15;100314:11;:20;100326:7;100314:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;100627:19;100659:1;100649:7;:11;100627:33;;100720:1;100679:43;;:11;:24;100691:11;100679:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;100675:445;;;100904:13;;100890:11;:27;100886:219;;;100974:13;:18;;;100942:11;:24;100954:11;100942:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;101057:13;:28;;;101015:11;:24;101027:11;101015:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;100886:219;100675:445;100152:979;101167:7;101163:2;101148:27;;101157:4;101148:27;;;;;;;;;;;;101186:42;101207:4;101213:2;101217:7;101226:1;101186:20;:42::i;:::-;99228:2008;;99124:2112;;;:::o;91627:1083::-;91688:21;;:::i;:::-;91722:12;91737:7;91722:22;;91793:13;;91786:4;:20;91782:861;;;91827:31;91861:11;:17;91873:4;91861:17;;;;;;;;;;;91827:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;91902:9;:16;;;91897:731;;91973:1;91947:28;;:9;:14;;;:28;;;91943:101;;92011:9;92004:16;;;;;;91943:101;92348:261;92355:4;92348:261;;;92388:6;;;;;;;;92433:11;:17;92445:4;92433:17;;;;;;;;;;;92421:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92507:1;92481:28;;:9;:14;;;:28;;;92477:109;;92549:9;92542:16;;;;;;92477:109;92348:261;;;91897:731;91808:835;91782:861;92671:31;;;;;;;;;;;;;;91627:1083;;;;:::o;108819:173::-;108875:16;108894:6;;;;;;;;;;;108875:25;;108920:8;108911:6;;:17;;;;;;;;;;;;;;;;;;108975:8;108944:40;;108965:8;108944:40;;;;;;;;;;;;108864:128;108819:173;:::o;104384:790::-;104539:4;104560:15;:2;:13;;;:15::i;:::-;104556:611;;;104612:2;104596:36;;;104633:12;:10;:12::i;:::-;104647:4;104653:7;104662:5;104596:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;104592:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104859:1;104842:6;:13;:18;104838:259;;;104892:40;;;;;;;;;;;;;;104838:259;105047:6;105041:13;105032:6;105028:2;105024:15;105017:38;104592:520;104729:45;;;104719:55;;;:6;:55;;;;104712:62;;;;;104556:611;105151:4;105144:11;;104384:790;;;;;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;115707:538::-;115752:4;115771:11;115785:5;115771:19;;115803:25;115846:14;;112008:4;115832:28;;;;:::i;:::-;115803:58;;115897:1;115876:17;:22;115872:68;;;115922:6;115915:13;;;;;;115872:68;115952:24;116010:4;115993:13;;112056:3;115980:26;;;;:::i;:::-;115979:35;;;;:::i;:::-;115952:62;;116025:19;116064:17;116047:16;:34;;;;:::i;:::-;116025:56;;116102:17;116122:8;:6;:8::i;:::-;116102:28;;116159:11;116147:9;:23;116143:69;;;116196:4;116187:13;;116143:69;116231:6;116224:13;;;;;;;115707:538;;:::o;96569:104::-;96638:27;96648:2;96652:8;96638:27;;;;;;;;;;;;:9;:27::i;:::-;96569:104;;:::o;105822:159::-;;;;;:::o;106640:158::-;;;;;:::o;4250:326::-;4310:4;4567:1;4545:7;:19;;;:23;4538:30;;4250:326;;;:::o;116253:313::-;116288:7;116310:17;116480:4;116379:15;116409:10;116434:11;;116460:14;;116348:127;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;116338:138;;;;;;116330:147;;:154;;;;:::i;:::-;116310:174;;116520:9;116505:11;;:24;;;;;;;:::i;:::-;;;;;;;;116549:9;116542:16;;;116253:313;:::o;97036:163::-;97159:32;97165:2;97169:8;97179:5;97186:4;97159:5;:32::i;:::-;97036:163;;;:::o;97458:1412::-;97597:20;97620:13;;97597:36;;97662:1;97648:16;;:2;:16;;;97644:48;;;97673:19;;;;;;;;;;;;;;97644:48;97719:1;97707:8;:13;97703:44;;;97729:18;;;;;;;;;;;;;;97703:44;97760:61;97790:1;97794:2;97798:12;97812:8;97760:21;:61::i;:::-;98133:8;98098:12;:16;98111:2;98098:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98197:8;98157:12;:16;98170:2;98157:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98256:2;98223:11;:25;98235:12;98223:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;98323:15;98273:11;:25;98285:12;98273:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;98356:20;98379:12;98356:35;;98413:9;98408:328;98428:8;98424:1;:12;98408:328;;;98492:12;98488:2;98467:38;;98484:1;98467:38;;;;;;;;;;;;98528:4;:68;;;;;98537:59;98568:1;98572:2;98576:12;98590:5;98537:22;:59::i;:::-;98536:60;98528:68;98524:164;;;98628:40;;;;;;;;;;;;;;98524:164;98706:14;;;;;;;98438:3;;;;;;;98408:328;;;;98768:12;98752:13;:28;;;;98073:719;98802:60;98831:1;98835:2;98839:12;98853:8;98802:20;:60::i;:::-;97586:1284;97458:1412;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:370::-;1968:5;2017:3;2010:4;2002:6;1998:17;1994:27;1984:122;;2025:79;;:::i;:::-;1984:122;2142:6;2129:20;2167:94;2257:3;2249:6;2242:4;2234:6;2230:17;2167:94;:::i;:::-;2158:103;;1974:293;1897:370;;;;:::o;2273:133::-;2316:5;2354:6;2341:20;2332:29;;2370:30;2394:5;2370:30;:::i;:::-;2273:133;;;;:::o;2412:137::-;2457:5;2495:6;2482:20;2473:29;;2511:32;2537:5;2511:32;:::i;:::-;2412:137;;;;:::o;2555:141::-;2611:5;2642:6;2636:13;2627:22;;2658:32;2684:5;2658:32;:::i;:::-;2555:141;;;;:::o;2715:338::-;2770:5;2819:3;2812:4;2804:6;2800:17;2796:27;2786:122;;2827:79;;:::i;:::-;2786:122;2944:6;2931:20;2969:78;3043:3;3035:6;3028:4;3020:6;3016:17;2969:78;:::i;:::-;2960:87;;2776:277;2715:338;;;;:::o;3073:340::-;3129:5;3178:3;3171:4;3163:6;3159:17;3155:27;3145:122;;3186:79;;:::i;:::-;3145:122;3303:6;3290:20;3328:79;3403:3;3395:6;3388:4;3380:6;3376:17;3328:79;:::i;:::-;3319:88;;3135:278;3073:340;;;;:::o;3419:139::-;3465:5;3503:6;3490:20;3481:29;;3519:33;3546:5;3519:33;:::i;:::-;3419:139;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:351::-;3969:6;4018:2;4006:9;3997:7;3993:23;3989:32;3986:119;;;4024:79;;:::i;:::-;3986:119;4144:1;4169:64;4225:7;4216:6;4205:9;4201:22;4169:64;:::i;:::-;4159:74;;4115:128;3899:351;;;;:::o;4256:474::-;4324:6;4332;4381:2;4369:9;4360:7;4356:23;4352:32;4349:119;;;4387:79;;:::i;:::-;4349:119;4507:1;4532:53;4577:7;4568:6;4557:9;4553:22;4532:53;:::i;:::-;4522:63;;4478:117;4634:2;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4605:118;4256:474;;;;;:::o;4736:619::-;4813:6;4821;4829;4878:2;4866:9;4857:7;4853:23;4849:32;4846:119;;;4884:79;;:::i;:::-;4846:119;5004:1;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4975:117;5131:2;5157:53;5202:7;5193:6;5182:9;5178:22;5157:53;:::i;:::-;5147:63;;5102:118;5259:2;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5230:118;4736:619;;;;;:::o;5361:943::-;5456:6;5464;5472;5480;5529:3;5517:9;5508:7;5504:23;5500:33;5497:120;;;5536:79;;:::i;:::-;5497:120;5656:1;5681:53;5726:7;5717:6;5706:9;5702:22;5681:53;:::i;:::-;5671:63;;5627:117;5783:2;5809:53;5854:7;5845:6;5834:9;5830:22;5809:53;:::i;:::-;5799:63;;5754:118;5911:2;5937:53;5982:7;5973:6;5962:9;5958:22;5937:53;:::i;:::-;5927:63;;5882:118;6067:2;6056:9;6052:18;6039:32;6098:18;6090:6;6087:30;6084:117;;;6120:79;;:::i;:::-;6084:117;6225:62;6279:7;6270:6;6259:9;6255:22;6225:62;:::i;:::-;6215:72;;6010:287;5361:943;;;;;;;:::o;6310:468::-;6375:6;6383;6432:2;6420:9;6411:7;6407:23;6403:32;6400:119;;;6438:79;;:::i;:::-;6400:119;6558:1;6583:53;6628:7;6619:6;6608:9;6604:22;6583:53;:::i;:::-;6573:63;;6529:117;6685:2;6711:50;6753:7;6744:6;6733:9;6729:22;6711:50;:::i;:::-;6701:60;;6656:115;6310:468;;;;;:::o;6784:474::-;6852:6;6860;6909:2;6897:9;6888:7;6884:23;6880:32;6877:119;;;6915:79;;:::i;:::-;6877:119;7035:1;7060:53;7105:7;7096:6;7085:9;7081:22;7060:53;:::i;:::-;7050:63;;7006:117;7162:2;7188:53;7233:7;7224:6;7213:9;7209:22;7188:53;:::i;:::-;7178:63;;7133:118;6784:474;;;;;:::o;7264:539::-;7348:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:119;;;7403:79;;:::i;:::-;7365:119;7551:1;7540:9;7536:17;7523:31;7581:18;7573:6;7570:30;7567:117;;;7603:79;;:::i;:::-;7567:117;7708:78;7778:7;7769:6;7758:9;7754:22;7708:78;:::i;:::-;7698:88;;7494:302;7264:539;;;;:::o;7809:327::-;7867:6;7916:2;7904:9;7895:7;7891:23;7887:32;7884:119;;;7922:79;;:::i;:::-;7884:119;8042:1;8067:52;8111:7;8102:6;8091:9;8087:22;8067:52;:::i;:::-;8057:62;;8013:116;7809:327;;;;:::o;8142:349::-;8211:6;8260:2;8248:9;8239:7;8235:23;8231:32;8228:119;;;8266:79;;:::i;:::-;8228:119;8386:1;8411:63;8466:7;8457:6;8446:9;8442:22;8411:63;:::i;:::-;8401:73;;8357:127;8142:349;;;;:::o;8497:509::-;8566:6;8615:2;8603:9;8594:7;8590:23;8586:32;8583:119;;;8621:79;;:::i;:::-;8583:119;8769:1;8758:9;8754:17;8741:31;8799:18;8791:6;8788:30;8785:117;;;8821:79;;:::i;:::-;8785:117;8926:63;8981:7;8972:6;8961:9;8957:22;8926:63;:::i;:::-;8916:73;;8712:287;8497:509;;;;:::o;9012:329::-;9071:6;9120:2;9108:9;9099:7;9095:23;9091:32;9088:119;;;9126:79;;:::i;:::-;9088:119;9246:1;9271:53;9316:7;9307:6;9296:9;9292:22;9271:53;:::i;:::-;9261:63;;9217:117;9012:329;;;;:::o;9347:118::-;9434:24;9452:5;9434:24;:::i;:::-;9429:3;9422:37;9347:118;;:::o;9471:157::-;9576:45;9596:24;9614:5;9596:24;:::i;:::-;9576:45;:::i;:::-;9571:3;9564:58;9471:157;;:::o;9634:109::-;9715:21;9730:5;9715:21;:::i;:::-;9710:3;9703:34;9634:109;;:::o;9749:360::-;9835:3;9863:38;9895:5;9863:38;:::i;:::-;9917:70;9980:6;9975:3;9917:70;:::i;:::-;9910:77;;9996:52;10041:6;10036:3;10029:4;10022:5;10018:16;9996:52;:::i;:::-;10073:29;10095:6;10073:29;:::i;:::-;10068:3;10064:39;10057:46;;9839:270;9749:360;;;;:::o;10115:364::-;10203:3;10231:39;10264:5;10231:39;:::i;:::-;10286:71;10350:6;10345:3;10286:71;:::i;:::-;10279:78;;10366:52;10411:6;10406:3;10399:4;10392:5;10388:16;10366:52;:::i;:::-;10443:29;10465:6;10443:29;:::i;:::-;10438:3;10434:39;10427:46;;10207:272;10115:364;;;;:::o;10485:377::-;10591:3;10619:39;10652:5;10619:39;:::i;:::-;10674:89;10756:6;10751:3;10674:89;:::i;:::-;10667:96;;10772:52;10817:6;10812:3;10805:4;10798:5;10794:16;10772:52;:::i;:::-;10849:6;10844:3;10840:16;10833:23;;10595:267;10485:377;;;;:::o;10892:845::-;10995:3;11032:5;11026:12;11061:36;11087:9;11061:36;:::i;:::-;11113:89;11195:6;11190:3;11113:89;:::i;:::-;11106:96;;11233:1;11222:9;11218:17;11249:1;11244:137;;;;11395:1;11390:341;;;;11211:520;;11244:137;11328:4;11324:9;11313;11309:25;11304:3;11297:38;11364:6;11359:3;11355:16;11348:23;;11244:137;;11390:341;11457:38;11489:5;11457:38;:::i;:::-;11517:1;11531:154;11545:6;11542:1;11539:13;11531:154;;;11619:7;11613:14;11609:1;11604:3;11600:11;11593:35;11669:1;11660:7;11656:15;11645:26;;11567:4;11564:1;11560:12;11555:17;;11531:154;;;11714:6;11709:3;11705:16;11698:23;;11397:334;;11211:520;;10999:738;;10892:845;;;;:::o;11743:366::-;11885:3;11906:67;11970:2;11965:3;11906:67;:::i;:::-;11899:74;;11982:93;12071:3;11982:93;:::i;:::-;12100:2;12095:3;12091:12;12084:19;;11743:366;;;:::o;12115:::-;12257:3;12278:67;12342:2;12337:3;12278:67;:::i;:::-;12271:74;;12354:93;12443:3;12354:93;:::i;:::-;12472:2;12467:3;12463:12;12456:19;;12115:366;;;:::o;12487:::-;12629:3;12650:67;12714:2;12709:3;12650:67;:::i;:::-;12643:74;;12726:93;12815:3;12726:93;:::i;:::-;12844:2;12839:3;12835:12;12828:19;;12487:366;;;:::o;12859:::-;13001:3;13022:67;13086:2;13081:3;13022:67;:::i;:::-;13015:74;;13098:93;13187:3;13098:93;:::i;:::-;13216:2;13211:3;13207:12;13200:19;;12859:366;;;:::o;13231:::-;13373:3;13394:67;13458:2;13453:3;13394:67;:::i;:::-;13387:74;;13470:93;13559:3;13470:93;:::i;:::-;13588:2;13583:3;13579:12;13572:19;;13231:366;;;:::o;13603:::-;13745:3;13766:67;13830:2;13825:3;13766:67;:::i;:::-;13759:74;;13842:93;13931:3;13842:93;:::i;:::-;13960:2;13955:3;13951:12;13944:19;;13603:366;;;:::o;13975:::-;14117:3;14138:67;14202:2;14197:3;14138:67;:::i;:::-;14131:74;;14214:93;14303:3;14214:93;:::i;:::-;14332:2;14327:3;14323:12;14316:19;;13975:366;;;:::o;14347:::-;14489:3;14510:67;14574:2;14569:3;14510:67;:::i;:::-;14503:74;;14586:93;14675:3;14586:93;:::i;:::-;14704:2;14699:3;14695:12;14688:19;;14347:366;;;:::o;14719:118::-;14806:24;14824:5;14806:24;:::i;:::-;14801:3;14794:37;14719:118;;:::o;14843:157::-;14948:45;14968:24;14986:5;14968:24;:::i;:::-;14948:45;:::i;:::-;14943:3;14936:58;14843:157;;:::o;15006:583::-;15228:3;15250:92;15338:3;15329:6;15250:92;:::i;:::-;15243:99;;15359:95;15450:3;15441:6;15359:95;:::i;:::-;15352:102;;15471:92;15559:3;15550:6;15471:92;:::i;:::-;15464:99;;15580:3;15573:10;;15006:583;;;;;;:::o;15595:679::-;15791:3;15806:75;15877:3;15868:6;15806:75;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15919:75;15990:3;15981:6;15919:75;:::i;:::-;16019:2;16014:3;16010:12;16003:19;;16032:75;16103:3;16094:6;16032:75;:::i;:::-;16132:2;16127:3;16123:12;16116:19;;16145:75;16216:3;16207:6;16145:75;:::i;:::-;16245:2;16240:3;16236:12;16229:19;;16265:3;16258:10;;15595:679;;;;;;;:::o;16280:222::-;16373:4;16411:2;16400:9;16396:18;16388:26;;16424:71;16492:1;16481:9;16477:17;16468:6;16424:71;:::i;:::-;16280:222;;;;:::o;16508:640::-;16703:4;16741:3;16730:9;16726:19;16718:27;;16755:71;16823:1;16812:9;16808:17;16799:6;16755:71;:::i;:::-;16836:72;16904:2;16893:9;16889:18;16880:6;16836:72;:::i;:::-;16918;16986:2;16975:9;16971:18;16962:6;16918:72;:::i;:::-;17037:9;17031:4;17027:20;17022:2;17011:9;17007:18;17000:48;17065:76;17136:4;17127:6;17065:76;:::i;:::-;17057:84;;16508:640;;;;;;;:::o;17154:332::-;17275:4;17313:2;17302:9;17298:18;17290:26;;17326:71;17394:1;17383:9;17379:17;17370:6;17326:71;:::i;:::-;17407:72;17475:2;17464:9;17460:18;17451:6;17407:72;:::i;:::-;17154:332;;;;;:::o;17492:210::-;17579:4;17617:2;17606:9;17602:18;17594:26;;17630:65;17692:1;17681:9;17677:17;17668:6;17630:65;:::i;:::-;17492:210;;;;:::o;17708:313::-;17821:4;17859:2;17848:9;17844:18;17836:26;;17908:9;17902:4;17898:20;17894:1;17883:9;17879:17;17872:47;17936:78;18009:4;18000:6;17936:78;:::i;:::-;17928:86;;17708:313;;;;:::o;18027:419::-;18193:4;18231:2;18220:9;18216:18;18208:26;;18280:9;18274:4;18270:20;18266:1;18255:9;18251:17;18244:47;18308:131;18434:4;18308:131;:::i;:::-;18300:139;;18027:419;;;:::o;18452:::-;18618:4;18656:2;18645:9;18641:18;18633:26;;18705:9;18699:4;18695:20;18691:1;18680:9;18676:17;18669:47;18733:131;18859:4;18733:131;:::i;:::-;18725:139;;18452:419;;;:::o;18877:::-;19043:4;19081:2;19070:9;19066:18;19058:26;;19130:9;19124:4;19120:20;19116:1;19105:9;19101:17;19094:47;19158:131;19284:4;19158:131;:::i;:::-;19150:139;;18877:419;;;:::o;19302:::-;19468:4;19506:2;19495:9;19491:18;19483:26;;19555:9;19549:4;19545:20;19541:1;19530:9;19526:17;19519:47;19583:131;19709:4;19583:131;:::i;:::-;19575:139;;19302:419;;;:::o;19727:::-;19893:4;19931:2;19920:9;19916:18;19908:26;;19980:9;19974:4;19970:20;19966:1;19955:9;19951:17;19944:47;20008:131;20134:4;20008:131;:::i;:::-;20000:139;;19727:419;;;:::o;20152:::-;20318:4;20356:2;20345:9;20341:18;20333:26;;20405:9;20399:4;20395:20;20391:1;20380:9;20376:17;20369:47;20433:131;20559:4;20433:131;:::i;:::-;20425:139;;20152:419;;;:::o;20577:::-;20743:4;20781:2;20770:9;20766:18;20758:26;;20830:9;20824:4;20820:20;20816:1;20805:9;20801:17;20794:47;20858:131;20984:4;20858:131;:::i;:::-;20850:139;;20577:419;;;:::o;21002:::-;21168:4;21206:2;21195:9;21191:18;21183:26;;21255:9;21249:4;21245:20;21241:1;21230:9;21226:17;21219:47;21283:131;21409:4;21283:131;:::i;:::-;21275:139;;21002:419;;;:::o;21427:222::-;21520:4;21558:2;21547:9;21543:18;21535:26;;21571:71;21639:1;21628:9;21624:17;21615:6;21571:71;:::i;:::-;21427:222;;;;:::o;21655:129::-;21689:6;21716:20;;:::i;:::-;21706:30;;21745:33;21773:4;21765:6;21745:33;:::i;:::-;21655:129;;;:::o;21790:75::-;21823:6;21856:2;21850:9;21840:19;;21790:75;:::o;21871:311::-;21948:4;22038:18;22030:6;22027:30;22024:56;;;22060:18;;:::i;:::-;22024:56;22110:4;22102:6;22098:17;22090:25;;22170:4;22164;22160:15;22152:23;;21871:311;;;:::o;22188:307::-;22249:4;22339:18;22331:6;22328:30;22325:56;;;22361:18;;:::i;:::-;22325:56;22399:29;22421:6;22399:29;:::i;:::-;22391:37;;22483:4;22477;22473:15;22465:23;;22188:307;;;:::o;22501:308::-;22563:4;22653:18;22645:6;22642:30;22639:56;;;22675:18;;:::i;:::-;22639:56;22713:29;22735:6;22713:29;:::i;:::-;22705:37;;22797:4;22791;22787:15;22779:23;;22501:308;;;:::o;22815:141::-;22864:4;22887:3;22879:11;;22910:3;22907:1;22900:14;22944:4;22941:1;22931:18;22923:26;;22815:141;;;:::o;22962:98::-;23013:6;23047:5;23041:12;23031:22;;22962:98;;;:::o;23066:99::-;23118:6;23152:5;23146:12;23136:22;;23066:99;;;:::o;23171:168::-;23254:11;23288:6;23283:3;23276:19;23328:4;23323:3;23319:14;23304:29;;23171:168;;;;:::o;23345:169::-;23429:11;23463:6;23458:3;23451:19;23503:4;23498:3;23494:14;23479:29;;23345:169;;;;:::o;23520:148::-;23622:11;23659:3;23644:18;;23520:148;;;;:::o;23674:305::-;23714:3;23733:20;23751:1;23733:20;:::i;:::-;23728:25;;23767:20;23785:1;23767:20;:::i;:::-;23762:25;;23921:1;23853:66;23849:74;23846:1;23843:81;23840:107;;;23927:18;;:::i;:::-;23840:107;23971:1;23968;23964:9;23957:16;;23674:305;;;;:::o;23985:185::-;24025:1;24042:20;24060:1;24042:20;:::i;:::-;24037:25;;24076:20;24094:1;24076:20;:::i;:::-;24071:25;;24115:1;24105:35;;24120:18;;:::i;:::-;24105:35;24162:1;24159;24155:9;24150:14;;23985:185;;;;:::o;24176:348::-;24216:7;24239:20;24257:1;24239:20;:::i;:::-;24234:25;;24273:20;24291:1;24273:20;:::i;:::-;24268:25;;24461:1;24393:66;24389:74;24386:1;24383:81;24378:1;24371:9;24364:17;24360:105;24357:131;;;24468:18;;:::i;:::-;24357:131;24516:1;24513;24509:9;24498:20;;24176:348;;;;:::o;24530:191::-;24570:4;24590:20;24608:1;24590:20;:::i;:::-;24585:25;;24624:20;24642:1;24624:20;:::i;:::-;24619:25;;24663:1;24660;24657:8;24654:34;;;24668:18;;:::i;:::-;24654:34;24713:1;24710;24706:9;24698:17;;24530:191;;;;:::o;24727:96::-;24764:7;24793:24;24811:5;24793:24;:::i;:::-;24782:35;;24727:96;;;:::o;24829:90::-;24863:7;24906:5;24899:13;24892:21;24881:32;;24829:90;;;:::o;24925:149::-;24961:7;25001:66;24994:5;24990:78;24979:89;;24925:149;;;:::o;25080:126::-;25117:7;25157:42;25150:5;25146:54;25135:65;;25080:126;;;:::o;25212:77::-;25249:7;25278:5;25267:16;;25212:77;;;:::o;25295:101::-;25331:7;25371:18;25364:5;25360:30;25349:41;;25295:101;;;:::o;25402:154::-;25486:6;25481:3;25476;25463:30;25548:1;25539:6;25534:3;25530:16;25523:27;25402:154;;;:::o;25562:307::-;25630:1;25640:113;25654:6;25651:1;25648:13;25640:113;;;25739:1;25734:3;25730:11;25724:18;25720:1;25715:3;25711:11;25704:39;25676:2;25673:1;25669:10;25664:15;;25640:113;;;25771:6;25768:1;25765:13;25762:101;;;25851:1;25842:6;25837:3;25833:16;25826:27;25762:101;25611:258;25562:307;;;:::o;25875:320::-;25919:6;25956:1;25950:4;25946:12;25936:22;;26003:1;25997:4;25993:12;26024:18;26014:81;;26080:4;26072:6;26068:17;26058:27;;26014:81;26142:2;26134:6;26131:14;26111:18;26108:38;26105:84;;;26161:18;;:::i;:::-;26105:84;25926:269;25875:320;;;:::o;26201:281::-;26284:27;26306:4;26284:27;:::i;:::-;26276:6;26272:40;26414:6;26402:10;26399:22;26378:18;26366:10;26363:34;26360:62;26357:88;;;26425:18;;:::i;:::-;26357:88;26465:10;26461:2;26454:22;26244:238;26201:281;;:::o;26488:233::-;26527:3;26550:24;26568:5;26550:24;:::i;:::-;26541:33;;26596:66;26589:5;26586:77;26583:103;;;26666:18;;:::i;:::-;26583:103;26713:1;26706:5;26702:13;26695:20;;26488:233;;;:::o;26727:183::-;26765:3;26788:23;26805:5;26788:23;:::i;:::-;26779:32;;26833:18;26826:5;26823:29;26820:55;;;26855:18;;:::i;:::-;26820:55;26902:1;26895:5;26891:13;26884:20;;26727:183;;;:::o;26916:100::-;26955:7;26984:26;27004:5;26984:26;:::i;:::-;26973:37;;26916:100;;;:::o;27022:94::-;27061:7;27090:20;27104:5;27090:20;:::i;:::-;27079:31;;27022:94;;;:::o;27122:79::-;27161:7;27190:5;27179:16;;27122:79;;;:::o;27207:176::-;27239:1;27256:20;27274:1;27256:20;:::i;:::-;27251:25;;27290:20;27308:1;27290:20;:::i;:::-;27285:25;;27329:1;27319:35;;27334:18;;:::i;:::-;27319:35;27375:1;27372;27368:9;27363:14;;27207:176;;;;:::o;27389:180::-;27437:77;27434:1;27427:88;27534:4;27531:1;27524:15;27558:4;27555:1;27548:15;27575:180;27623:77;27620:1;27613:88;27720:4;27717:1;27710:15;27744:4;27741:1;27734:15;27761:180;27809:77;27806:1;27799:88;27906:4;27903:1;27896:15;27930:4;27927:1;27920:15;27947:180;27995:77;27992:1;27985:88;28092:4;28089:1;28082:15;28116:4;28113:1;28106:15;28133:180;28181:77;28178:1;28171:88;28278:4;28275:1;28268:15;28302:4;28299:1;28292:15;28319:117;28428:1;28425;28418:12;28442:117;28551:1;28548;28541:12;28565:117;28674:1;28671;28664:12;28688:117;28797:1;28794;28787:12;28811:117;28920:1;28917;28910:12;28934:102;28975:6;29026:2;29022:7;29017:2;29010:5;29006:14;29002:28;28992:38;;28934:102;;;:::o;29042:94::-;29075:8;29123:5;29119:2;29115:14;29094:35;;29042:94;;;:::o;29142:225::-;29282:34;29278:1;29270:6;29266:14;29259:58;29351:8;29346:2;29338:6;29334:15;29327:33;29142:225;:::o;29373:168::-;29513:20;29509:1;29501:6;29497:14;29490:44;29373:168;:::o;29547:180::-;29687:32;29683:1;29675:6;29671:14;29664:56;29547:180;:::o;29733:169::-;29873:21;29869:1;29861:6;29857:14;29850:45;29733:169;:::o;29908:179::-;30048:31;30044:1;30036:6;30032:14;30025:55;29908:179;:::o;30093:182::-;30233:34;30229:1;30221:6;30217:14;30210:58;30093:182;:::o;30281:171::-;30421:23;30417:1;30409:6;30405:14;30398:47;30281:171;:::o;30458:181::-;30598:33;30594:1;30586:6;30582:14;30575:57;30458:181;:::o;30645:122::-;30718:24;30736:5;30718:24;:::i;:::-;30711:5;30708:35;30698:63;;30757:1;30754;30747:12;30698:63;30645:122;:::o;30773:116::-;30843:21;30858:5;30843:21;:::i;:::-;30836:5;30833:32;30823:60;;30879:1;30876;30869:12;30823:60;30773:116;:::o;30895:120::-;30967:23;30984:5;30967:23;:::i;:::-;30960:5;30957:34;30947:62;;31005:1;31002;30995:12;30947:62;30895:120;:::o;31021:122::-;31094:24;31112:5;31094:24;:::i;:::-;31087:5;31084:35;31074:63;;31133:1;31130;31123:12;31074:63;31021:122;:::o

Swarm Source

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