ETH Price: $3,263.80 (+2.22%)
Gas: 1 Gwei

Token

 

Overview

Max Total Supply

2,219

Holders

141

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
0chill.eth
0xaA88580E65fB09ff45985a174660428879ee4792
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:
cubeXGoldCrad

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-03
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
//SPDX-License-Identifier
pragma solidity ^0.8.0;

/**
 * @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 making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

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

// 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/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts (last updated v4.8.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 functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

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

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// 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/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non-ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non-ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File: contracts/cubeXGold.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;








/*
 * By @Dr.Robotnik
 */
contract cubeXGoldCrad is ERC1155, ERC1155Supply, Ownable {
    constructor(string memory _uri) ERC1155(_uri) {
        _setURI(_uri);
    }

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function claim(uint256 _dropNumber, address[] calldata _list)
        public
        onlyOwner
        
    {
        for (uint256 i = 0; i < _list.length; i++) {
            _mint(_list[i], _dropNumber, 10, "");
        }
    }
    function airdrop5(uint256 _dropNumber, address[] calldata _list)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _list.length; i++) {
            _mint(_list[i], _dropNumber, 5, "");
        }
    }
    function airdrop3(uint256 _dropNumber, address[] calldata _list)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _list.length; i++) {
            _mint(_list[i], _dropNumber, 3, "");
        }
    }
    function airdrop2(uint256 _dropNumber, address[] calldata _list)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _list.length; i++) {
            _mint(_list[i], _dropNumber, 2, "");
        }
    }
    function airdrop25(uint256 _dropNumber, address[] calldata _list)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _list.length; i++) {
            _mint(_list[i], _dropNumber, 25, "");
        }
    }

 
    function batchMint(
        uint256 _tokenID,
        address _address,
        uint256 _quantity
    ) public onlyOwner {
        _mint(_address, _tokenID, _quantity, "");
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal override(ERC1155, ERC1155Supply) {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"_dropNumber","type":"uint256"},{"internalType":"address[]","name":"_list","type":"address[]"}],"name":"airdrop2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dropNumber","type":"uint256"},{"internalType":"address[]","name":"_list","type":"address[]"}],"name":"airdrop25","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dropNumber","type":"uint256"},{"internalType":"address[]","name":"_list","type":"address[]"}],"name":"airdrop3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dropNumber","type":"uint256"},{"internalType":"address[]","name":"_list","type":"address[]"}],"name":"airdrop5","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dropNumber","type":"uint256"},{"internalType":"address[]","name":"_list","type":"address[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200394c3803806200394c83398181016040528101906200003791906200029a565b8062000049816200008260201b60201c565b506200006a6200005e6200009e60201b60201c565b620000a660201b60201c565b6200007b816200008260201b60201c565b506200046f565b80600290805190602001906200009a9291906200016c565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200017a9062000380565b90600052602060002090601f0160209004810192826200019e5760008555620001ea565b82601f10620001b957805160ff1916838001178555620001ea565b82800160010185558215620001ea579182015b82811115620001e9578251825591602001919060010190620001cc565b5b509050620001f99190620001fd565b5090565b5b8082111562000218576000816000905550600101620001fe565b5090565b6000620002336200022d8462000314565b620002eb565b9050828152602081018484840111156200025257620002516200044f565b5b6200025f8482856200034a565b509392505050565b600082601f8301126200027f576200027e6200044a565b5b8151620002918482602086016200021c565b91505092915050565b600060208284031215620002b357620002b262000459565b5b600082015167ffffffffffffffff811115620002d457620002d362000454565b5b620002e28482850162000267565b91505092915050565b6000620002f76200030a565b9050620003058282620003b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156200033257620003316200041b565b5b6200033d826200045e565b9050602081019050919050565b60005b838110156200036a5780820151818401526020810190506200034d565b838111156200037a576000848401525b50505050565b600060028204905060018216806200039957607f821691505b60208210811415620003b057620003af620003ec565b5b50919050565b620003c1826200045e565b810181811067ffffffffffffffff82111715620003e357620003e26200041b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6134cd806200047f6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80636d5c2fac116100ad578063bd85b03911610071578063bd85b03914610328578063c49dcc2014610358578063e985e9c514610374578063f242432a146103a4578063f2fde38b146103c05761012b565b80636d5c2fac146102ac578063715018a6146102c85780638da5cb5b146102d2578063a22cb465146102f0578063abb9ee881461030c5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101f85780633567ed3b1461021457806342eb9d94146102305780634e1273f41461024c5780634f558e791461027c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806302fe5305146101905780630e89341c146101ac57806323b9c0fa146101dc575b600080fd5b61014a60048036038101906101459190612329565b6103dc565b6040516101579190612b62565b60405180910390f35b61017a600480360381019061017591906123e1565b6104a5565b6040516101879190612985565b60405180910390f35b6101aa60048036038101906101a5919061243b565b610587565b005b6101c660048036038101906101c19190612484565b61059b565b6040516101d391906129a0565b60405180910390f35b6101f660048036038101906101f19190612504565b61062f565b005b610212600480360381019061020d9190612183565b6106a1565b005b61022e600480360381019061022991906124b1565b610742565b005b61024a60048036038101906102459190612504565b61076a565b005b61026660048036038101906102619190612369565b6107dc565b604051610273919061292c565b60405180910390f35b61029660048036038101906102919190612484565b6108f5565b6040516102a39190612985565b60405180910390f35b6102c660048036038101906102c19190612504565b610909565b005b6102d061097b565b005b6102da61098f565b6040516102e7919061284f565b60405180910390f35b61030a600480360381019061030591906122e9565b6109b9565b005b61032660048036038101906103219190612504565b6109cf565b005b610342600480360381019061033d9190612484565b610a41565b60405161034f9190612b62565b60405180910390f35b610372600480360381019061036d9190612504565b610a5e565b005b61038e60048036038101906103899190612143565b610ad0565b60405161039b9190612985565b60405180910390f35b6103be60048036038101906103b99190612252565b610b64565b005b6103da60048036038101906103d59190612116565b610c05565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612a02565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610580575061057f82610c89565b5b9050919050565b61058f610cf3565b61059881610d71565b50565b6060600280546105aa90612e02565b80601f01602080910402602001604051908101604052809291908181526020018280546105d690612e02565b80156106235780601f106105f857610100808354040283529160200191610623565b820191906000526020600020905b81548152906001019060200180831161060657829003601f168201915b50505050509050919050565b610637610cf3565b60005b8282905081101561069b5761068883838381811061065b5761065a612f0c565b5b90506020020160208101906106709190612116565b85601960405180602001604052806000815250610d8b565b808061069390612e65565b91505061063a565b50505050565b6106a9610f3c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106ef57506106ee856106e9610f3c565b610ad0565b5b61072e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072590612a22565b60405180910390fd5b61073b8585858585610f44565b5050505050565b61074a610cf3565b61076582848360405180602001604052806000815250610d8b565b505050565b610772610cf3565b60005b828290508110156107d6576107c383838381811061079657610795612f0c565b5b90506020020160208101906107ab9190612116565b85600a60405180602001604052806000815250610d8b565b80806107ce90612e65565b915050610775565b50505050565b60608151835114610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081990612ae2565b60405180910390fd5b6000835167ffffffffffffffff81111561083f5761083e612f3b565b5b60405190808252806020026020018201604052801561086d5781602001602082028036833780820191505090505b50905060005b84518110156108ea576108ba85828151811061089257610891612f0c565b5b60200260200101518583815181106108ad576108ac612f0c565b5b60200260200101516103dc565b8282815181106108cd576108cc612f0c565b5b602002602001018181525050806108e390612e65565b9050610873565b508091505092915050565b60008061090183610a41565b119050919050565b610911610cf3565b60005b828290508110156109755761096283838381811061093557610934612f0c565b5b905060200201602081019061094a9190612116565b85600360405180602001604052806000815250610d8b565b808061096d90612e65565b915050610914565b50505050565b610983610cf3565b61098d6000611266565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109cb6109c4610f3c565b838361132c565b5050565b6109d7610cf3565b60005b82829050811015610a3b57610a288383838181106109fb576109fa612f0c565b5b9050602002016020810190610a109190612116565b85600260405180602001604052806000815250610d8b565b8080610a3390612e65565b9150506109da565b50505050565b600060036000838152602001908152602001600020549050919050565b610a66610cf3565b60005b82829050811015610aca57610ab7838383818110610a8a57610a89612f0c565b5b9050602002016020810190610a9f9190612116565b85600560405180602001604052806000815250610d8b565b8080610ac290612e65565b915050610a69565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b6c610f3c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bb25750610bb185610bac610f3c565b610ad0565b5b610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be890612a22565b60405180910390fd5b610bfe8585858585611499565b5050505050565b610c0d610cf3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c74906129e2565b60405180910390fd5b610c8681611266565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610cfb610f3c565b73ffffffffffffffffffffffffffffffffffffffff16610d1961098f565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690612a82565b60405180910390fd5b565b8060029080519060200190610d87929190611d98565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290612b22565b60405180910390fd5b6000610e05610f3c565b90506000610e1285611735565b90506000610e1f85611735565b9050610e30836000898585896117af565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e8f9190612cf6565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610f0d929190612b7d565b60405180910390a4610f24836000898585896117c5565b610f33836000898989896117cd565b50505050505050565b600033905090565b8151835114610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90612b02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90612a42565b60405180910390fd5b6000611002610f3c565b90506110128187878787876117af565b60005b84518110156111c357600085828151811061103357611032612f0c565b5b60200260200101519050600085838151811061105257611051612f0c565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90612a62565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111a89190612cf6565b92505081905550505050806111bc90612e65565b9050611015565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161123a92919061294e565b60405180910390a46112508187878787876117c5565b61125e8187878787876119b4565b505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290612ac2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161148c9190612985565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150090612a42565b60405180910390fd5b6000611513610f3c565b9050600061152085611735565b9050600061152d85611735565b905061153d8389898585896117af565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90612a62565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116899190612cf6565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611706929190612b7d565b60405180910390a461171c848a8a86868a6117c5565b61172a848a8a8a8a8a6117cd565b505050505050505050565b60606000600167ffffffffffffffff81111561175457611753612f3b565b5b6040519080825280602002602001820160405280156117825781602001602082028036833780820191505090505b509050828160008151811061179a57611799612f0c565b5b60200260200101818152505080915050919050565b6117bd868686868686611b9b565b505050505050565b505050505050565b6117ec8473ffffffffffffffffffffffffffffffffffffffff16611d6d565b156119ac578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016118329594939291906128d2565b602060405180830381600087803b15801561184c57600080fd5b505af192505050801561187d57506040513d601f19601f8201168201806040525081019061187a919061240e565b60015b61192357611889612f6a565b806308c379a014156118e6575061189e6133a5565b806118a957506118e8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd91906129a0565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90612b42565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a1906129c2565b60405180910390fd5b505b505050505050565b6119d38473ffffffffffffffffffffffffffffffffffffffff16611d6d565b15611b93578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611a1995949392919061286a565b602060405180830381600087803b158015611a3357600080fd5b505af1925050508015611a6457506040513d601f19601f82011682018060405250810190611a61919061240e565b60015b611b0a57611a70612f6a565b806308c379a01415611acd5750611a856133a5565b80611a905750611acf565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac491906129a0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190612b42565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b88906129c2565b60405180910390fd5b505b505050505050565b611ba9868686868686611d90565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611c5b5760005b8351811015611c5957828181518110611bfd57611bfc612f0c565b5b602002602001015160036000868481518110611c1c57611c1b612f0c565b5b602002602001015181526020019081526020016000206000828254611c419190612cf6565b9250508190555080611c5290612e65565b9050611be1565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d655760005b8351811015611d63576000848281518110611cb157611cb0612f0c565b5b602002602001015190506000848381518110611cd057611ccf612f0c565b5b6020026020010151905060006003600084815260200190815260200160002054905081811015611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90612aa2565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080611d5c90612e65565b9050611c93565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054611da490612e02565b90600052602060002090601f016020900481019282611dc65760008555611e0d565b82601f10611ddf57805160ff1916838001178555611e0d565b82800160010185558215611e0d579182015b82811115611e0c578251825591602001919060010190611df1565b5b509050611e1a9190611e1e565b5090565b5b80821115611e37576000816000905550600101611e1f565b5090565b6000611e4e611e4984612bcb565b612ba6565b90508083825260208201905082856020860282011115611e7157611e70612f96565b5b60005b85811015611ea15781611e878882611f9f565b845260208401935060208301925050600181019050611e74565b5050509392505050565b6000611ebe611eb984612bf7565b612ba6565b90508083825260208201905082856020860282011115611ee157611ee0612f96565b5b60005b85811015611f115781611ef78882612101565b845260208401935060208301925050600181019050611ee4565b5050509392505050565b6000611f2e611f2984612c23565b612ba6565b905082815260208101848484011115611f4a57611f49612f9b565b5b611f55848285612dc0565b509392505050565b6000611f70611f6b84612c54565b612ba6565b905082815260208101848484011115611f8c57611f8b612f9b565b5b611f97848285612dc0565b509392505050565b600081359050611fae8161343b565b92915050565b60008083601f840112611fca57611fc9612f91565b5b8235905067ffffffffffffffff811115611fe757611fe6612f8c565b5b60208301915083602082028301111561200357612002612f96565b5b9250929050565b600082601f83011261201f5761201e612f91565b5b813561202f848260208601611e3b565b91505092915050565b600082601f83011261204d5761204c612f91565b5b813561205d848260208601611eab565b91505092915050565b60008135905061207581613452565b92915050565b60008135905061208a81613469565b92915050565b60008151905061209f81613469565b92915050565b600082601f8301126120ba576120b9612f91565b5b81356120ca848260208601611f1b565b91505092915050565b600082601f8301126120e8576120e7612f91565b5b81356120f8848260208601611f5d565b91505092915050565b60008135905061211081613480565b92915050565b60006020828403121561212c5761212b612fa5565b5b600061213a84828501611f9f565b91505092915050565b6000806040838503121561215a57612159612fa5565b5b600061216885828601611f9f565b925050602061217985828601611f9f565b9150509250929050565b600080600080600060a0868803121561219f5761219e612fa5565b5b60006121ad88828901611f9f565b95505060206121be88828901611f9f565b945050604086013567ffffffffffffffff8111156121df576121de612fa0565b5b6121eb88828901612038565b935050606086013567ffffffffffffffff81111561220c5761220b612fa0565b5b61221888828901612038565b925050608086013567ffffffffffffffff81111561223957612238612fa0565b5b612245888289016120a5565b9150509295509295909350565b600080600080600060a0868803121561226e5761226d612fa5565b5b600061227c88828901611f9f565b955050602061228d88828901611f9f565b945050604061229e88828901612101565b93505060606122af88828901612101565b925050608086013567ffffffffffffffff8111156122d0576122cf612fa0565b5b6122dc888289016120a5565b9150509295509295909350565b60008060408385031215612300576122ff612fa5565b5b600061230e85828601611f9f565b925050602061231f85828601612066565b9150509250929050565b600080604083850312156123405761233f612fa5565b5b600061234e85828601611f9f565b925050602061235f85828601612101565b9150509250929050565b600080604083850312156123805761237f612fa5565b5b600083013567ffffffffffffffff81111561239e5761239d612fa0565b5b6123aa8582860161200a565b925050602083013567ffffffffffffffff8111156123cb576123ca612fa0565b5b6123d785828601612038565b9150509250929050565b6000602082840312156123f7576123f6612fa5565b5b60006124058482850161207b565b91505092915050565b60006020828403121561242457612423612fa5565b5b600061243284828501612090565b91505092915050565b60006020828403121561245157612450612fa5565b5b600082013567ffffffffffffffff81111561246f5761246e612fa0565b5b61247b848285016120d3565b91505092915050565b60006020828403121561249a57612499612fa5565b5b60006124a884828501612101565b91505092915050565b6000806000606084860312156124ca576124c9612fa5565b5b60006124d886828701612101565b93505060206124e986828701611f9f565b92505060406124fa86828701612101565b9150509250925092565b60008060006040848603121561251d5761251c612fa5565b5b600061252b86828701612101565b935050602084013567ffffffffffffffff81111561254c5761254b612fa0565b5b61255886828701611fb4565b92509250509250925092565b60006125708383612831565b60208301905092915050565b61258581612d4c565b82525050565b600061259682612c95565b6125a08185612cc3565b93506125ab83612c85565b8060005b838110156125dc5781516125c38882612564565b97506125ce83612cb6565b9250506001810190506125af565b5085935050505092915050565b6125f281612d5e565b82525050565b600061260382612ca0565b61260d8185612cd4565b935061261d818560208601612dcf565b61262681612faa565b840191505092915050565b600061263c82612cab565b6126468185612ce5565b9350612656818560208601612dcf565b61265f81612faa565b840191505092915050565b6000612677602883612ce5565b915061268282612fc8565b604082019050919050565b600061269a602683612ce5565b91506126a582613017565b604082019050919050565b60006126bd602a83612ce5565b91506126c882613066565b604082019050919050565b60006126e0602e83612ce5565b91506126eb826130b5565b604082019050919050565b6000612703602583612ce5565b915061270e82613104565b604082019050919050565b6000612726602a83612ce5565b915061273182613153565b604082019050919050565b6000612749602083612ce5565b9150612754826131a2565b602082019050919050565b600061276c602883612ce5565b9150612777826131cb565b604082019050919050565b600061278f602983612ce5565b915061279a8261321a565b604082019050919050565b60006127b2602983612ce5565b91506127bd82613269565b604082019050919050565b60006127d5602883612ce5565b91506127e0826132b8565b604082019050919050565b60006127f8602183612ce5565b915061280382613307565b604082019050919050565b600061281b603483612ce5565b915061282682613356565b604082019050919050565b61283a81612db6565b82525050565b61284981612db6565b82525050565b6000602082019050612864600083018461257c565b92915050565b600060a08201905061287f600083018861257c565b61288c602083018761257c565b818103604083015261289e818661258b565b905081810360608301526128b2818561258b565b905081810360808301526128c681846125f8565b90509695505050505050565b600060a0820190506128e7600083018861257c565b6128f4602083018761257c565b6129016040830186612840565b61290e6060830185612840565b818103608083015261292081846125f8565b90509695505050505050565b60006020820190508181036000830152612946818461258b565b905092915050565b60006040820190508181036000830152612968818561258b565b9050818103602083015261297c818461258b565b90509392505050565b600060208201905061299a60008301846125e9565b92915050565b600060208201905081810360008301526129ba8184612631565b905092915050565b600060208201905081810360008301526129db8161266a565b9050919050565b600060208201905081810360008301526129fb8161268d565b9050919050565b60006020820190508181036000830152612a1b816126b0565b9050919050565b60006020820190508181036000830152612a3b816126d3565b9050919050565b60006020820190508181036000830152612a5b816126f6565b9050919050565b60006020820190508181036000830152612a7b81612719565b9050919050565b60006020820190508181036000830152612a9b8161273c565b9050919050565b60006020820190508181036000830152612abb8161275f565b9050919050565b60006020820190508181036000830152612adb81612782565b9050919050565b60006020820190508181036000830152612afb816127a5565b9050919050565b60006020820190508181036000830152612b1b816127c8565b9050919050565b60006020820190508181036000830152612b3b816127eb565b9050919050565b60006020820190508181036000830152612b5b8161280e565b9050919050565b6000602082019050612b776000830184612840565b92915050565b6000604082019050612b926000830185612840565b612b9f6020830184612840565b9392505050565b6000612bb0612bc1565b9050612bbc8282612e34565b919050565b6000604051905090565b600067ffffffffffffffff821115612be657612be5612f3b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c1257612c11612f3b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c3e57612c3d612f3b565b5b612c4782612faa565b9050602081019050919050565b600067ffffffffffffffff821115612c6f57612c6e612f3b565b5b612c7882612faa565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612d0182612db6565b9150612d0c83612db6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d4157612d40612eae565b5b828201905092915050565b6000612d5782612d96565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612ded578082015181840152602081019050612dd2565b83811115612dfc576000848401525b50505050565b60006002820490506001821680612e1a57607f821691505b60208210811415612e2e57612e2d612edd565b5b50919050565b612e3d82612faa565b810181811067ffffffffffffffff82111715612e5c57612e5b612f3b565b5b80604052505050565b6000612e7082612db6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ea357612ea2612eae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612f895760046000803e612f86600051612fbb565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600060443d10156133b557613438565b6133bd612bc1565b60043d036004823e80513d602482011167ffffffffffffffff821117156133e5575050613438565b808201805167ffffffffffffffff8111156134035750505050613438565b80602083010160043d038501811115613420575050505050613438565b61342f82602001850186612e34565b82955050505050505b90565b61344481612d4c565b811461344f57600080fd5b50565b61345b81612d5e565b811461346657600080fd5b50565b61347281612d6a565b811461347d57600080fd5b50565b61348981612db6565b811461349457600080fd5b5056fea2646970667358221220be611d58c81e9a3a6f5f8a515266abf907c54ab6755a9eee7983353b5698e07e64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f6d6574616c68656164732e6d7970696e6174612e636c6f75642f697066732f516d635455736548716b583372426138516e6659645161326f576b746f4b683751626d7256465744756934646e792f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012b5760003560e01c80636d5c2fac116100ad578063bd85b03911610071578063bd85b03914610328578063c49dcc2014610358578063e985e9c514610374578063f242432a146103a4578063f2fde38b146103c05761012b565b80636d5c2fac146102ac578063715018a6146102c85780638da5cb5b146102d2578063a22cb465146102f0578063abb9ee881461030c5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101f85780633567ed3b1461021457806342eb9d94146102305780634e1273f41461024c5780634f558e791461027c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806302fe5305146101905780630e89341c146101ac57806323b9c0fa146101dc575b600080fd5b61014a60048036038101906101459190612329565b6103dc565b6040516101579190612b62565b60405180910390f35b61017a600480360381019061017591906123e1565b6104a5565b6040516101879190612985565b60405180910390f35b6101aa60048036038101906101a5919061243b565b610587565b005b6101c660048036038101906101c19190612484565b61059b565b6040516101d391906129a0565b60405180910390f35b6101f660048036038101906101f19190612504565b61062f565b005b610212600480360381019061020d9190612183565b6106a1565b005b61022e600480360381019061022991906124b1565b610742565b005b61024a60048036038101906102459190612504565b61076a565b005b61026660048036038101906102619190612369565b6107dc565b604051610273919061292c565b60405180910390f35b61029660048036038101906102919190612484565b6108f5565b6040516102a39190612985565b60405180910390f35b6102c660048036038101906102c19190612504565b610909565b005b6102d061097b565b005b6102da61098f565b6040516102e7919061284f565b60405180910390f35b61030a600480360381019061030591906122e9565b6109b9565b005b61032660048036038101906103219190612504565b6109cf565b005b610342600480360381019061033d9190612484565b610a41565b60405161034f9190612b62565b60405180910390f35b610372600480360381019061036d9190612504565b610a5e565b005b61038e60048036038101906103899190612143565b610ad0565b60405161039b9190612985565b60405180910390f35b6103be60048036038101906103b99190612252565b610b64565b005b6103da60048036038101906103d59190612116565b610c05565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612a02565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610580575061057f82610c89565b5b9050919050565b61058f610cf3565b61059881610d71565b50565b6060600280546105aa90612e02565b80601f01602080910402602001604051908101604052809291908181526020018280546105d690612e02565b80156106235780601f106105f857610100808354040283529160200191610623565b820191906000526020600020905b81548152906001019060200180831161060657829003601f168201915b50505050509050919050565b610637610cf3565b60005b8282905081101561069b5761068883838381811061065b5761065a612f0c565b5b90506020020160208101906106709190612116565b85601960405180602001604052806000815250610d8b565b808061069390612e65565b91505061063a565b50505050565b6106a9610f3c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106ef57506106ee856106e9610f3c565b610ad0565b5b61072e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072590612a22565b60405180910390fd5b61073b8585858585610f44565b5050505050565b61074a610cf3565b61076582848360405180602001604052806000815250610d8b565b505050565b610772610cf3565b60005b828290508110156107d6576107c383838381811061079657610795612f0c565b5b90506020020160208101906107ab9190612116565b85600a60405180602001604052806000815250610d8b565b80806107ce90612e65565b915050610775565b50505050565b60608151835114610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081990612ae2565b60405180910390fd5b6000835167ffffffffffffffff81111561083f5761083e612f3b565b5b60405190808252806020026020018201604052801561086d5781602001602082028036833780820191505090505b50905060005b84518110156108ea576108ba85828151811061089257610891612f0c565b5b60200260200101518583815181106108ad576108ac612f0c565b5b60200260200101516103dc565b8282815181106108cd576108cc612f0c565b5b602002602001018181525050806108e390612e65565b9050610873565b508091505092915050565b60008061090183610a41565b119050919050565b610911610cf3565b60005b828290508110156109755761096283838381811061093557610934612f0c565b5b905060200201602081019061094a9190612116565b85600360405180602001604052806000815250610d8b565b808061096d90612e65565b915050610914565b50505050565b610983610cf3565b61098d6000611266565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109cb6109c4610f3c565b838361132c565b5050565b6109d7610cf3565b60005b82829050811015610a3b57610a288383838181106109fb576109fa612f0c565b5b9050602002016020810190610a109190612116565b85600260405180602001604052806000815250610d8b565b8080610a3390612e65565b9150506109da565b50505050565b600060036000838152602001908152602001600020549050919050565b610a66610cf3565b60005b82829050811015610aca57610ab7838383818110610a8a57610a89612f0c565b5b9050602002016020810190610a9f9190612116565b85600560405180602001604052806000815250610d8b565b8080610ac290612e65565b915050610a69565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b6c610f3c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bb25750610bb185610bac610f3c565b610ad0565b5b610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be890612a22565b60405180910390fd5b610bfe8585858585611499565b5050505050565b610c0d610cf3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c74906129e2565b60405180910390fd5b610c8681611266565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610cfb610f3c565b73ffffffffffffffffffffffffffffffffffffffff16610d1961098f565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690612a82565b60405180910390fd5b565b8060029080519060200190610d87929190611d98565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290612b22565b60405180910390fd5b6000610e05610f3c565b90506000610e1285611735565b90506000610e1f85611735565b9050610e30836000898585896117af565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e8f9190612cf6565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610f0d929190612b7d565b60405180910390a4610f24836000898585896117c5565b610f33836000898989896117cd565b50505050505050565b600033905090565b8151835114610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90612b02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90612a42565b60405180910390fd5b6000611002610f3c565b90506110128187878787876117af565b60005b84518110156111c357600085828151811061103357611032612f0c565b5b60200260200101519050600085838151811061105257611051612f0c565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90612a62565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111a89190612cf6565b92505081905550505050806111bc90612e65565b9050611015565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161123a92919061294e565b60405180910390a46112508187878787876117c5565b61125e8187878787876119b4565b505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290612ac2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161148c9190612985565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150090612a42565b60405180910390fd5b6000611513610f3c565b9050600061152085611735565b9050600061152d85611735565b905061153d8389898585896117af565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90612a62565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116899190612cf6565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611706929190612b7d565b60405180910390a461171c848a8a86868a6117c5565b61172a848a8a8a8a8a6117cd565b505050505050505050565b60606000600167ffffffffffffffff81111561175457611753612f3b565b5b6040519080825280602002602001820160405280156117825781602001602082028036833780820191505090505b509050828160008151811061179a57611799612f0c565b5b60200260200101818152505080915050919050565b6117bd868686868686611b9b565b505050505050565b505050505050565b6117ec8473ffffffffffffffffffffffffffffffffffffffff16611d6d565b156119ac578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016118329594939291906128d2565b602060405180830381600087803b15801561184c57600080fd5b505af192505050801561187d57506040513d601f19601f8201168201806040525081019061187a919061240e565b60015b61192357611889612f6a565b806308c379a014156118e6575061189e6133a5565b806118a957506118e8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd91906129a0565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90612b42565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a1906129c2565b60405180910390fd5b505b505050505050565b6119d38473ffffffffffffffffffffffffffffffffffffffff16611d6d565b15611b93578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611a1995949392919061286a565b602060405180830381600087803b158015611a3357600080fd5b505af1925050508015611a6457506040513d601f19601f82011682018060405250810190611a61919061240e565b60015b611b0a57611a70612f6a565b806308c379a01415611acd5750611a856133a5565b80611a905750611acf565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac491906129a0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190612b42565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b88906129c2565b60405180910390fd5b505b505050505050565b611ba9868686868686611d90565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611c5b5760005b8351811015611c5957828181518110611bfd57611bfc612f0c565b5b602002602001015160036000868481518110611c1c57611c1b612f0c565b5b602002602001015181526020019081526020016000206000828254611c419190612cf6565b9250508190555080611c5290612e65565b9050611be1565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d655760005b8351811015611d63576000848281518110611cb157611cb0612f0c565b5b602002602001015190506000848381518110611cd057611ccf612f0c565b5b6020026020010151905060006003600084815260200190815260200160002054905081811015611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90612aa2565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080611d5c90612e65565b9050611c93565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054611da490612e02565b90600052602060002090601f016020900481019282611dc65760008555611e0d565b82601f10611ddf57805160ff1916838001178555611e0d565b82800160010185558215611e0d579182015b82811115611e0c578251825591602001919060010190611df1565b5b509050611e1a9190611e1e565b5090565b5b80821115611e37576000816000905550600101611e1f565b5090565b6000611e4e611e4984612bcb565b612ba6565b90508083825260208201905082856020860282011115611e7157611e70612f96565b5b60005b85811015611ea15781611e878882611f9f565b845260208401935060208301925050600181019050611e74565b5050509392505050565b6000611ebe611eb984612bf7565b612ba6565b90508083825260208201905082856020860282011115611ee157611ee0612f96565b5b60005b85811015611f115781611ef78882612101565b845260208401935060208301925050600181019050611ee4565b5050509392505050565b6000611f2e611f2984612c23565b612ba6565b905082815260208101848484011115611f4a57611f49612f9b565b5b611f55848285612dc0565b509392505050565b6000611f70611f6b84612c54565b612ba6565b905082815260208101848484011115611f8c57611f8b612f9b565b5b611f97848285612dc0565b509392505050565b600081359050611fae8161343b565b92915050565b60008083601f840112611fca57611fc9612f91565b5b8235905067ffffffffffffffff811115611fe757611fe6612f8c565b5b60208301915083602082028301111561200357612002612f96565b5b9250929050565b600082601f83011261201f5761201e612f91565b5b813561202f848260208601611e3b565b91505092915050565b600082601f83011261204d5761204c612f91565b5b813561205d848260208601611eab565b91505092915050565b60008135905061207581613452565b92915050565b60008135905061208a81613469565b92915050565b60008151905061209f81613469565b92915050565b600082601f8301126120ba576120b9612f91565b5b81356120ca848260208601611f1b565b91505092915050565b600082601f8301126120e8576120e7612f91565b5b81356120f8848260208601611f5d565b91505092915050565b60008135905061211081613480565b92915050565b60006020828403121561212c5761212b612fa5565b5b600061213a84828501611f9f565b91505092915050565b6000806040838503121561215a57612159612fa5565b5b600061216885828601611f9f565b925050602061217985828601611f9f565b9150509250929050565b600080600080600060a0868803121561219f5761219e612fa5565b5b60006121ad88828901611f9f565b95505060206121be88828901611f9f565b945050604086013567ffffffffffffffff8111156121df576121de612fa0565b5b6121eb88828901612038565b935050606086013567ffffffffffffffff81111561220c5761220b612fa0565b5b61221888828901612038565b925050608086013567ffffffffffffffff81111561223957612238612fa0565b5b612245888289016120a5565b9150509295509295909350565b600080600080600060a0868803121561226e5761226d612fa5565b5b600061227c88828901611f9f565b955050602061228d88828901611f9f565b945050604061229e88828901612101565b93505060606122af88828901612101565b925050608086013567ffffffffffffffff8111156122d0576122cf612fa0565b5b6122dc888289016120a5565b9150509295509295909350565b60008060408385031215612300576122ff612fa5565b5b600061230e85828601611f9f565b925050602061231f85828601612066565b9150509250929050565b600080604083850312156123405761233f612fa5565b5b600061234e85828601611f9f565b925050602061235f85828601612101565b9150509250929050565b600080604083850312156123805761237f612fa5565b5b600083013567ffffffffffffffff81111561239e5761239d612fa0565b5b6123aa8582860161200a565b925050602083013567ffffffffffffffff8111156123cb576123ca612fa0565b5b6123d785828601612038565b9150509250929050565b6000602082840312156123f7576123f6612fa5565b5b60006124058482850161207b565b91505092915050565b60006020828403121561242457612423612fa5565b5b600061243284828501612090565b91505092915050565b60006020828403121561245157612450612fa5565b5b600082013567ffffffffffffffff81111561246f5761246e612fa0565b5b61247b848285016120d3565b91505092915050565b60006020828403121561249a57612499612fa5565b5b60006124a884828501612101565b91505092915050565b6000806000606084860312156124ca576124c9612fa5565b5b60006124d886828701612101565b93505060206124e986828701611f9f565b92505060406124fa86828701612101565b9150509250925092565b60008060006040848603121561251d5761251c612fa5565b5b600061252b86828701612101565b935050602084013567ffffffffffffffff81111561254c5761254b612fa0565b5b61255886828701611fb4565b92509250509250925092565b60006125708383612831565b60208301905092915050565b61258581612d4c565b82525050565b600061259682612c95565b6125a08185612cc3565b93506125ab83612c85565b8060005b838110156125dc5781516125c38882612564565b97506125ce83612cb6565b9250506001810190506125af565b5085935050505092915050565b6125f281612d5e565b82525050565b600061260382612ca0565b61260d8185612cd4565b935061261d818560208601612dcf565b61262681612faa565b840191505092915050565b600061263c82612cab565b6126468185612ce5565b9350612656818560208601612dcf565b61265f81612faa565b840191505092915050565b6000612677602883612ce5565b915061268282612fc8565b604082019050919050565b600061269a602683612ce5565b91506126a582613017565b604082019050919050565b60006126bd602a83612ce5565b91506126c882613066565b604082019050919050565b60006126e0602e83612ce5565b91506126eb826130b5565b604082019050919050565b6000612703602583612ce5565b915061270e82613104565b604082019050919050565b6000612726602a83612ce5565b915061273182613153565b604082019050919050565b6000612749602083612ce5565b9150612754826131a2565b602082019050919050565b600061276c602883612ce5565b9150612777826131cb565b604082019050919050565b600061278f602983612ce5565b915061279a8261321a565b604082019050919050565b60006127b2602983612ce5565b91506127bd82613269565b604082019050919050565b60006127d5602883612ce5565b91506127e0826132b8565b604082019050919050565b60006127f8602183612ce5565b915061280382613307565b604082019050919050565b600061281b603483612ce5565b915061282682613356565b604082019050919050565b61283a81612db6565b82525050565b61284981612db6565b82525050565b6000602082019050612864600083018461257c565b92915050565b600060a08201905061287f600083018861257c565b61288c602083018761257c565b818103604083015261289e818661258b565b905081810360608301526128b2818561258b565b905081810360808301526128c681846125f8565b90509695505050505050565b600060a0820190506128e7600083018861257c565b6128f4602083018761257c565b6129016040830186612840565b61290e6060830185612840565b818103608083015261292081846125f8565b90509695505050505050565b60006020820190508181036000830152612946818461258b565b905092915050565b60006040820190508181036000830152612968818561258b565b9050818103602083015261297c818461258b565b90509392505050565b600060208201905061299a60008301846125e9565b92915050565b600060208201905081810360008301526129ba8184612631565b905092915050565b600060208201905081810360008301526129db8161266a565b9050919050565b600060208201905081810360008301526129fb8161268d565b9050919050565b60006020820190508181036000830152612a1b816126b0565b9050919050565b60006020820190508181036000830152612a3b816126d3565b9050919050565b60006020820190508181036000830152612a5b816126f6565b9050919050565b60006020820190508181036000830152612a7b81612719565b9050919050565b60006020820190508181036000830152612a9b8161273c565b9050919050565b60006020820190508181036000830152612abb8161275f565b9050919050565b60006020820190508181036000830152612adb81612782565b9050919050565b60006020820190508181036000830152612afb816127a5565b9050919050565b60006020820190508181036000830152612b1b816127c8565b9050919050565b60006020820190508181036000830152612b3b816127eb565b9050919050565b60006020820190508181036000830152612b5b8161280e565b9050919050565b6000602082019050612b776000830184612840565b92915050565b6000604082019050612b926000830185612840565b612b9f6020830184612840565b9392505050565b6000612bb0612bc1565b9050612bbc8282612e34565b919050565b6000604051905090565b600067ffffffffffffffff821115612be657612be5612f3b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c1257612c11612f3b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c3e57612c3d612f3b565b5b612c4782612faa565b9050602081019050919050565b600067ffffffffffffffff821115612c6f57612c6e612f3b565b5b612c7882612faa565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612d0182612db6565b9150612d0c83612db6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d4157612d40612eae565b5b828201905092915050565b6000612d5782612d96565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612ded578082015181840152602081019050612dd2565b83811115612dfc576000848401525b50505050565b60006002820490506001821680612e1a57607f821691505b60208210811415612e2e57612e2d612edd565b5b50919050565b612e3d82612faa565b810181811067ffffffffffffffff82111715612e5c57612e5b612f3b565b5b80604052505050565b6000612e7082612db6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ea357612ea2612eae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612f895760046000803e612f86600051612fbb565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600060443d10156133b557613438565b6133bd612bc1565b60043d036004823e80513d602482011167ffffffffffffffff821117156133e5575050613438565b808201805167ffffffffffffffff8111156134035750505050613438565b80602083010160043d038501811115613420575050505050613438565b61342f82602001850186612e34565b82955050505050505b90565b61344481612d4c565b811461344f57600080fd5b50565b61345b81612d5e565b811461346657600080fd5b50565b61347281612d6a565b811461347d57600080fd5b50565b61348981612db6565b811461349457600080fd5b5056fea2646970667358221220be611d58c81e9a3a6f5f8a515266abf907c54ab6755a9eee7983353b5698e07e64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f6d6574616c68656164732e6d7970696e6174612e636c6f75642f697066732f516d635455736548716b583372426138516e6659645161326f576b746f4b683751626d7256465744756934646e792f00000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): https://metalheads.mypinata.cloud/ipfs/QmcTUseHqkX3rBa8QnfYdQa2oWktoKh7QbmrVFWDui4dny/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000056
Arg [2] : 68747470733a2f2f6d6574616c68656164732e6d7970696e6174612e636c6f75
Arg [3] : 642f697066732f516d635455736548716b583372426138516e6659645161326f
Arg [4] : 576b746f4b683751626d7256465744756934646e792f00000000000000000000


Deployed Bytecode Sourcemap

45219:1957:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27470:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26493:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45370:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27214:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46411:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29413:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46652:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45467:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27866:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43946:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45943:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5747:103;;;:::i;:::-;;5099:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28463:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46177:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43735:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45709:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28690:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28930:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6005:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27470:230;27556:7;27603:1;27584:21;;:7;:21;;;;27576:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27670:9;:13;27680:2;27670:13;;;;;;;;;;;:22;27684:7;27670:22;;;;;;;;;;;;;;;;27663:29;;27470:230;;;;:::o;26493:310::-;26595:4;26647:26;26632:41;;;:11;:41;;;;:110;;;;26705:37;26690:52;;;:11;:52;;;;26632:110;:163;;;;26759:36;26783:11;26759:23;:36::i;:::-;26632:163;26612:183;;26493:310;;;:::o;45370:89::-;4985:13;:11;:13::i;:::-;45436:15:::1;45444:6;45436:7;:15::i;:::-;45370:89:::0;:::o;27214:105::-;27274:13;27307:4;27300:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27214:105;;;:::o;46411:230::-;4985:13;:11;:13::i;:::-;46533:9:::1;46528:106;46552:5;;:12;;46548:1;:16;46528:106;;;46586:36;46592:5;;46598:1;46592:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46602:11;46615:2;46586:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;46566:3;;;;;:::i;:::-;;;;46528:106;;;;46411:230:::0;;;:::o;29413:438::-;29654:12;:10;:12::i;:::-;29646:20;;:4;:20;;;:60;;;;29670:36;29687:4;29693:12;:10;:12::i;:::-;29670:16;:36::i;:::-;29646:60;29624:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;29791:52;29814:4;29820:2;29824:3;29829:7;29838:4;29791:22;:52::i;:::-;29413:438;;;;;:::o;46652:184::-;4985:13;:11;:13::i;:::-;46788:40:::1;46794:8;46804;46814:9;46788:40;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;46652:184:::0;;;:::o;45467:236::-;4985:13;:11;:13::i;:::-;45595:9:::1;45590:106;45614:5;;:12;;45610:1;:16;45590:106;;;45648:36;45654:5;;45660:1;45654:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45664:11;45677:2;45648:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;45628:3;;;;;:::i;:::-;;;;45590:106;;;;45467:236:::0;;;:::o;27866:524::-;28022:16;28083:3;:10;28064:8;:15;:29;28056:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28152:30;28199:8;:15;28185:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28152:63;;28233:9;28228:122;28252:8;:15;28248:1;:19;28228:122;;;28308:30;28318:8;28327:1;28318:11;;;;;;;;:::i;:::-;;;;;;;;28331:3;28335:1;28331:6;;;;;;;;:::i;:::-;;;;;;;;28308:9;:30::i;:::-;28289:13;28303:1;28289:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;28269:3;;;;:::i;:::-;;;28228:122;;;;28369:13;28362:20;;;27866:524;;;;:::o;43946:122::-;44003:4;44059:1;44027:29;44053:2;44027:25;:29::i;:::-;:33;44020:40;;43946:122;;;:::o;45943:228::-;4985:13;:11;:13::i;:::-;46064:9:::1;46059:105;46083:5;;:12;;46079:1;:16;46059:105;;;46117:35;46123:5;;46129:1;46123:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46133:11;46146:1;46117:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;46097:3;;;;;:::i;:::-;;;;46059:105;;;;45943:228:::0;;;:::o;5747:103::-;4985:13;:11;:13::i;:::-;5812:30:::1;5839:1;5812:18;:30::i;:::-;5747:103::o:0;5099:87::-;5145:7;5172:6;;;;;;;;;;;5165:13;;5099:87;:::o;28463:155::-;28558:52;28577:12;:10;:12::i;:::-;28591:8;28601;28558:18;:52::i;:::-;28463:155;;:::o;46177:228::-;4985:13;:11;:13::i;:::-;46298:9:::1;46293:105;46317:5;;:12;;46313:1;:16;46293:105;;;46351:35;46357:5;;46363:1;46357:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46367:11;46380:1;46351:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;46331:3;;;;;:::i;:::-;;;;46293:105;;;;46177:228:::0;;;:::o;43735:113::-;43797:7;43824:12;:16;43837:2;43824:16;;;;;;;;;;;;43817:23;;43735:113;;;:::o;45709:228::-;4985:13;:11;:13::i;:::-;45830:9:::1;45825:105;45849:5;;:12;;45845:1;:16;45825:105;;;45883:35;45889:5;;45895:1;45889:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45899:11;45912:1;45883:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;45863:3;;;;;:::i;:::-;;;;45825:105;;;;45709:228:::0;;;:::o;28690:168::-;28789:4;28813:18;:27;28832:7;28813:27;;;;;;;;;;;;;;;:37;28841:8;28813:37;;;;;;;;;;;;;;;;;;;;;;;;;28806:44;;28690:168;;;;:::o;28930:406::-;29146:12;:10;:12::i;:::-;29138:20;;:4;:20;;;:60;;;;29162:36;29179:4;29185:12;:10;:12::i;:::-;29162:16;:36::i;:::-;29138:60;29116:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;29283:45;29301:4;29307:2;29311;29315:6;29323:4;29283:17;:45::i;:::-;28930:406;;;;;:::o;6005:201::-;4985:13;:11;:13::i;:::-;6114:1:::1;6094:22;;:8;:22;;;;6086:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6170:28;6189:8;6170:18;:28::i;:::-;6005:201:::0;:::o;17774:157::-;17859:4;17898:25;17883:40;;;:11;:40;;;;17876:47;;17774:157;;;:::o;5264:132::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5264:132::o;33637:88::-;33711:6;33704:4;:13;;;;;;;;;;;;:::i;:::-;;33637:88;:::o;34111:729::-;34278:1;34264:16;;:2;:16;;;;34256:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34331:16;34350:12;:10;:12::i;:::-;34331:31;;34373:20;34396:21;34414:2;34396:17;:21::i;:::-;34373:44;;34428:24;34455:25;34473:6;34455:17;:25::i;:::-;34428:52;;34493:66;34514:8;34532:1;34536:2;34540:3;34545:7;34554:4;34493:20;:66::i;:::-;34593:6;34572:9;:13;34582:2;34572:13;;;;;;;;;;;:17;34586:2;34572:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;34652:2;34615:52;;34648:1;34615:52;;34630:8;34615:52;;;34656:2;34660:6;34615:52;;;;;;;:::i;:::-;;;;;;;;34680:65;34700:8;34718:1;34722:2;34726:3;34731:7;34740:4;34680:19;:65::i;:::-;34758:74;34789:8;34807:1;34811:2;34815;34819:6;34827:4;34758:30;:74::i;:::-;34245:595;;;34111:729;;;;:::o;3650:98::-;3703:7;3730:10;3723:17;;3650:98;:::o;31647:1146::-;31874:7;:14;31860:3;:10;:28;31852:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31966:1;31952:16;;:2;:16;;;;31944:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32023:16;32042:12;:10;:12::i;:::-;32023:31;;32067:60;32088:8;32098:4;32104:2;32108:3;32113:7;32122:4;32067:20;:60::i;:::-;32145:9;32140:421;32164:3;:10;32160:1;:14;32140:421;;;32196:10;32209:3;32213:1;32209:6;;;;;;;;:::i;:::-;;;;;;;;32196:19;;32230:14;32247:7;32255:1;32247:10;;;;;;;;:::i;:::-;;;;;;;;32230:27;;32274:19;32296:9;:13;32306:2;32296:13;;;;;;;;;;;:19;32310:4;32296:19;;;;;;;;;;;;;;;;32274:41;;32353:6;32338:11;:21;;32330:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32486:6;32472:11;:20;32450:9;:13;32460:2;32450:13;;;;;;;;;;;:19;32464:4;32450:19;;;;;;;;;;;;;;;:42;;;;32543:6;32522:9;:13;32532:2;32522:13;;;;;;;;;;;:17;32536:2;32522:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32181:380;;;32176:3;;;;:::i;:::-;;;32140:421;;;;32608:2;32578:47;;32602:4;32578:47;;32592:8;32578:47;;;32612:3;32617:7;32578:47;;;;;;;:::i;:::-;;;;;;;;32638:59;32658:8;32668:4;32674:2;32678:3;32683:7;32692:4;32638:19;:59::i;:::-;32710:75;32746:8;32756:4;32762:2;32766:3;32771:7;32780:4;32710:35;:75::i;:::-;31841:952;31647:1146;;;;;:::o;6366:191::-;6440:16;6459:6;;;;;;;;;;;6440:25;;6485:8;6476:6;;:17;;;;;;;;;;;;;;;;;;6540:8;6509:40;;6530:8;6509:40;;;;;;;;;;;;6429:128;6366:191;:::o;38524:331::-;38679:8;38670:17;;:5;:17;;;;38662:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38782:8;38744:18;:25;38763:5;38744:25;;;;;;;;;;;;;;;:35;38770:8;38744:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38828:8;38806:41;;38821:5;38806:41;;;38838:8;38806:41;;;;;;:::i;:::-;;;;;;;;38524:331;;;:::o;30315:974::-;30517:1;30503:16;;:2;:16;;;;30495:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30574:16;30593:12;:10;:12::i;:::-;30574:31;;30616:20;30639:21;30657:2;30639:17;:21::i;:::-;30616:44;;30671:24;30698:25;30716:6;30698:17;:25::i;:::-;30671:52;;30736:60;30757:8;30767:4;30773:2;30777:3;30782:7;30791:4;30736:20;:60::i;:::-;30809:19;30831:9;:13;30841:2;30831:13;;;;;;;;;;;:19;30845:4;30831:19;;;;;;;;;;;;;;;;30809:41;;30884:6;30869:11;:21;;30861:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31009:6;30995:11;:20;30973:9;:13;30983:2;30973:13;;;;;;;;;;;:19;30987:4;30973:19;;;;;;;;;;;;;;;:42;;;;31058:6;31037:9;:13;31047:2;31037:13;;;;;;;;;;;:17;31051:2;31037:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31113:2;31082:46;;31107:4;31082:46;;31097:8;31082:46;;;31117:2;31121:6;31082:46;;;;;;;:::i;:::-;;;;;;;;31141:59;31161:8;31171:4;31177:2;31181:3;31186:7;31195:4;31141:19;:59::i;:::-;31213:68;31244:8;31254:4;31260:2;31264;31268:6;31276:4;31213:30;:68::i;:::-;30484:805;;;;30315:974;;;;;:::o;42790:198::-;42856:16;42885:22;42924:1;42910:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42885:41;;42948:7;42937:5;42943:1;42937:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;42975:5;42968:12;;;42790:198;;;:::o;46844:329::-;47099:66;47126:8;47136:4;47142:2;47146:3;47151:7;47160:4;47099:26;:66::i;:::-;46844:329;;;;;;:::o;40989:220::-;;;;;;;:::o;41217:744::-;41432:15;:2;:13;;;:15::i;:::-;41428:526;;;41485:2;41468:38;;;41507:8;41517:4;41523:2;41527:6;41535:4;41468:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41464:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41816:6;41809:14;;;;;;;;;;;:::i;:::-;;;;;;;;41464:479;;;41865:62;;;;;;;;;;:::i;:::-;;;;;;;;41464:479;41602:43;;;41590:55;;;:8;:55;;;;41586:154;;41670:50;;;;;;;;;;:::i;:::-;;;;;;;;41586:154;41541:214;41428:526;41217:744;;;;;;:::o;41969:813::-;42209:15;:2;:13;;;:15::i;:::-;42205:570;;;42262:2;42245:43;;;42289:8;42299:4;42305:3;42310:7;42319:4;42245:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42241:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42637:6;42630:14;;;;;;;;;;;:::i;:::-;;;;;;;;42241:523;;;42686:62;;;;;;;;;;:::i;:::-;;;;;;;;42241:523;42418:48;;;42406:60;;;:8;:60;;;;42402:159;;42491:50;;;;;;;;;;:::i;:::-;;;;;;;;42402:159;42325:251;42205:570;41969:813;;;;;;:::o;44143:931::-;44382:66;44409:8;44419:4;44425:2;44429:3;44434:7;44443:4;44382:26;:66::i;:::-;44481:1;44465:18;;:4;:18;;;44461:160;;;44505:9;44500:110;44524:3;:10;44520:1;:14;44500:110;;;44584:7;44592:1;44584:10;;;;;;;;:::i;:::-;;;;;;;;44560:12;:20;44573:3;44577:1;44573:6;;;;;;;;:::i;:::-;;;;;;;;44560:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;44536:3;;;;:::i;:::-;;;44500:110;;;;44461:160;44651:1;44637:16;;:2;:16;;;44633:434;;;44675:9;44670:386;44694:3;:10;44690:1;:14;44670:386;;;44730:10;44743:3;44747:1;44743:6;;;;;;;;:::i;:::-;;;;;;;;44730:19;;44768:14;44785:7;44793:1;44785:10;;;;;;;;:::i;:::-;;;;;;;;44768:27;;44814:14;44831:12;:16;44844:2;44831:16;;;;;;;;;;;;44814:33;;44884:6;44874;:16;;44866:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;45015:6;45006;:15;44987:12;:16;45000:2;44987:16;;;;;;;;;;;:34;;;;44711:345;;;44706:3;;;;:::i;:::-;;;44670:386;;;;44633:434;44143:931;;;;;;:::o;7797:326::-;7857:4;8114:1;8092:7;:19;;;:23;8085:30;;7797:326;;;:::o;39813:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:568::-;2566:8;2576:6;2626:3;2619:4;2611:6;2607:17;2603:27;2593:122;;2634:79;;:::i;:::-;2593:122;2747:6;2734:20;2724:30;;2777:18;2769:6;2766:30;2763:117;;;2799:79;;:::i;:::-;2763:117;2913:4;2905:6;2901:17;2889:29;;2967:3;2959:4;2951:6;2947:17;2937:8;2933:32;2930:41;2927:128;;;2974:79;;:::i;:::-;2927:128;2493:568;;;;;:::o;3084:370::-;3155:5;3204:3;3197:4;3189:6;3185:17;3181:27;3171:122;;3212:79;;:::i;:::-;3171:122;3329:6;3316:20;3354:94;3444:3;3436:6;3429:4;3421:6;3417:17;3354:94;:::i;:::-;3345:103;;3161:293;3084:370;;;;:::o;3477:::-;3548:5;3597:3;3590:4;3582:6;3578:17;3574:27;3564:122;;3605:79;;:::i;:::-;3564:122;3722:6;3709:20;3747:94;3837:3;3829:6;3822:4;3814:6;3810:17;3747:94;:::i;:::-;3738:103;;3554:293;3477:370;;;;:::o;3853:133::-;3896:5;3934:6;3921:20;3912:29;;3950:30;3974:5;3950:30;:::i;:::-;3853:133;;;;:::o;3992:137::-;4037:5;4075:6;4062:20;4053:29;;4091:32;4117:5;4091:32;:::i;:::-;3992:137;;;;:::o;4135:141::-;4191:5;4222:6;4216:13;4207:22;;4238:32;4264:5;4238:32;:::i;:::-;4135:141;;;;:::o;4295:338::-;4350:5;4399:3;4392:4;4384:6;4380:17;4376:27;4366:122;;4407:79;;:::i;:::-;4366:122;4524:6;4511:20;4549:78;4623:3;4615:6;4608:4;4600:6;4596:17;4549:78;:::i;:::-;4540:87;;4356:277;4295:338;;;;:::o;4653:340::-;4709:5;4758:3;4751:4;4743:6;4739:17;4735:27;4725:122;;4766:79;;:::i;:::-;4725:122;4883:6;4870:20;4908:79;4983:3;4975:6;4968:4;4960:6;4956:17;4908:79;:::i;:::-;4899:88;;4715:278;4653:340;;;;:::o;4999:139::-;5045:5;5083:6;5070:20;5061:29;;5099:33;5126:5;5099:33;:::i;:::-;4999:139;;;;:::o;5144:329::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:119;;;5258:79;;:::i;:::-;5220:119;5378:1;5403:53;5448:7;5439:6;5428:9;5424:22;5403:53;:::i;:::-;5393:63;;5349:117;5144:329;;;;:::o;5479:474::-;5547:6;5555;5604:2;5592:9;5583:7;5579:23;5575:32;5572:119;;;5610:79;;:::i;:::-;5572:119;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;5479:474;;;;;:::o;5959:1509::-;6113:6;6121;6129;6137;6145;6194:3;6182:9;6173:7;6169:23;6165:33;6162:120;;;6201:79;;:::i;:::-;6162:120;6321:1;6346:53;6391:7;6382:6;6371:9;6367:22;6346:53;:::i;:::-;6336:63;;6292:117;6448:2;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6419:118;6604:2;6593:9;6589:18;6576:32;6635:18;6627:6;6624:30;6621:117;;;6657:79;;:::i;:::-;6621:117;6762:78;6832:7;6823:6;6812:9;6808:22;6762:78;:::i;:::-;6752:88;;6547:303;6917:2;6906:9;6902:18;6889:32;6948:18;6940:6;6937:30;6934:117;;;6970:79;;:::i;:::-;6934:117;7075:78;7145:7;7136:6;7125:9;7121:22;7075:78;:::i;:::-;7065:88;;6860:303;7230:3;7219:9;7215:19;7202:33;7262:18;7254:6;7251:30;7248:117;;;7284:79;;:::i;:::-;7248:117;7389:62;7443:7;7434:6;7423:9;7419:22;7389:62;:::i;:::-;7379:72;;7173:288;5959:1509;;;;;;;;:::o;7474:1089::-;7578:6;7586;7594;7602;7610;7659:3;7647:9;7638:7;7634:23;7630:33;7627:120;;;7666:79;;:::i;:::-;7627:120;7786:1;7811:53;7856:7;7847:6;7836:9;7832:22;7811:53;:::i;:::-;7801:63;;7757:117;7913:2;7939:53;7984:7;7975:6;7964:9;7960:22;7939:53;:::i;:::-;7929:63;;7884:118;8041:2;8067:53;8112:7;8103:6;8092:9;8088:22;8067:53;:::i;:::-;8057:63;;8012:118;8169:2;8195:53;8240:7;8231:6;8220:9;8216:22;8195:53;:::i;:::-;8185:63;;8140:118;8325:3;8314:9;8310:19;8297:33;8357:18;8349:6;8346:30;8343:117;;;8379:79;;:::i;:::-;8343:117;8484:62;8538:7;8529:6;8518:9;8514:22;8484:62;:::i;:::-;8474:72;;8268:288;7474:1089;;;;;;;;:::o;8569:468::-;8634:6;8642;8691:2;8679:9;8670:7;8666:23;8662:32;8659:119;;;8697:79;;:::i;:::-;8659:119;8817:1;8842:53;8887:7;8878:6;8867:9;8863:22;8842:53;:::i;:::-;8832:63;;8788:117;8944:2;8970:50;9012:7;9003:6;8992:9;8988:22;8970:50;:::i;:::-;8960:60;;8915:115;8569:468;;;;;:::o;9043:474::-;9111:6;9119;9168:2;9156:9;9147:7;9143:23;9139:32;9136:119;;;9174:79;;:::i;:::-;9136:119;9294:1;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9265:117;9421:2;9447:53;9492:7;9483:6;9472:9;9468:22;9447:53;:::i;:::-;9437:63;;9392:118;9043:474;;;;;:::o;9523:894::-;9641:6;9649;9698:2;9686:9;9677:7;9673:23;9669:32;9666:119;;;9704:79;;:::i;:::-;9666:119;9852:1;9841:9;9837:17;9824:31;9882:18;9874:6;9871:30;9868:117;;;9904:79;;:::i;:::-;9868:117;10009:78;10079:7;10070:6;10059:9;10055:22;10009:78;:::i;:::-;9999:88;;9795:302;10164:2;10153:9;10149:18;10136:32;10195:18;10187:6;10184:30;10181:117;;;10217:79;;:::i;:::-;10181:117;10322:78;10392:7;10383:6;10372:9;10368:22;10322:78;:::i;:::-;10312:88;;10107:303;9523:894;;;;;:::o;10423:327::-;10481:6;10530:2;10518:9;10509:7;10505:23;10501:32;10498:119;;;10536:79;;:::i;:::-;10498:119;10656:1;10681:52;10725:7;10716:6;10705:9;10701:22;10681:52;:::i;:::-;10671:62;;10627:116;10423:327;;;;:::o;10756:349::-;10825:6;10874:2;10862:9;10853:7;10849:23;10845:32;10842:119;;;10880:79;;:::i;:::-;10842:119;11000:1;11025:63;11080:7;11071:6;11060:9;11056:22;11025:63;:::i;:::-;11015:73;;10971:127;10756:349;;;;:::o;11111:509::-;11180:6;11229:2;11217:9;11208:7;11204:23;11200:32;11197:119;;;11235:79;;:::i;:::-;11197:119;11383:1;11372:9;11368:17;11355:31;11413:18;11405:6;11402:30;11399:117;;;11435:79;;:::i;:::-;11399:117;11540:63;11595:7;11586:6;11575:9;11571:22;11540:63;:::i;:::-;11530:73;;11326:287;11111:509;;;;:::o;11626:329::-;11685:6;11734:2;11722:9;11713:7;11709:23;11705:32;11702:119;;;11740:79;;:::i;:::-;11702:119;11860:1;11885:53;11930:7;11921:6;11910:9;11906:22;11885:53;:::i;:::-;11875:63;;11831:117;11626:329;;;;:::o;11961:619::-;12038:6;12046;12054;12103:2;12091:9;12082:7;12078:23;12074:32;12071:119;;;12109:79;;:::i;:::-;12071:119;12229:1;12254:53;12299:7;12290:6;12279:9;12275:22;12254:53;:::i;:::-;12244:63;;12200:117;12356:2;12382:53;12427:7;12418:6;12407:9;12403:22;12382:53;:::i;:::-;12372:63;;12327:118;12484:2;12510:53;12555:7;12546:6;12535:9;12531:22;12510:53;:::i;:::-;12500:63;;12455:118;11961:619;;;;;:::o;12586:704::-;12681:6;12689;12697;12746:2;12734:9;12725:7;12721:23;12717:32;12714:119;;;12752:79;;:::i;:::-;12714:119;12872:1;12897:53;12942:7;12933:6;12922:9;12918:22;12897:53;:::i;:::-;12887:63;;12843:117;13027:2;13016:9;13012:18;12999:32;13058:18;13050:6;13047:30;13044:117;;;13080:79;;:::i;:::-;13044:117;13193:80;13265:7;13256:6;13245:9;13241:22;13193:80;:::i;:::-;13175:98;;;;12970:313;12586:704;;;;;:::o;13296:179::-;13365:10;13386:46;13428:3;13420:6;13386:46;:::i;:::-;13464:4;13459:3;13455:14;13441:28;;13296:179;;;;:::o;13481:118::-;13568:24;13586:5;13568:24;:::i;:::-;13563:3;13556:37;13481:118;;:::o;13635:732::-;13754:3;13783:54;13831:5;13783:54;:::i;:::-;13853:86;13932:6;13927:3;13853:86;:::i;:::-;13846:93;;13963:56;14013:5;13963:56;:::i;:::-;14042:7;14073:1;14058:284;14083:6;14080:1;14077:13;14058:284;;;14159:6;14153:13;14186:63;14245:3;14230:13;14186:63;:::i;:::-;14179:70;;14272:60;14325:6;14272:60;:::i;:::-;14262:70;;14118:224;14105:1;14102;14098:9;14093:14;;14058:284;;;14062:14;14358:3;14351:10;;13759:608;;;13635:732;;;;:::o;14373:109::-;14454:21;14469:5;14454:21;:::i;:::-;14449:3;14442:34;14373:109;;:::o;14488:360::-;14574:3;14602:38;14634:5;14602:38;:::i;:::-;14656:70;14719:6;14714:3;14656:70;:::i;:::-;14649:77;;14735:52;14780:6;14775:3;14768:4;14761:5;14757:16;14735:52;:::i;:::-;14812:29;14834:6;14812:29;:::i;:::-;14807:3;14803:39;14796:46;;14578:270;14488:360;;;;:::o;14854:364::-;14942:3;14970:39;15003:5;14970:39;:::i;:::-;15025:71;15089:6;15084:3;15025:71;:::i;:::-;15018:78;;15105:52;15150:6;15145:3;15138:4;15131:5;15127:16;15105:52;:::i;:::-;15182:29;15204:6;15182:29;:::i;:::-;15177:3;15173:39;15166:46;;14946:272;14854:364;;;;:::o;15224:366::-;15366:3;15387:67;15451:2;15446:3;15387:67;:::i;:::-;15380:74;;15463:93;15552:3;15463:93;:::i;:::-;15581:2;15576:3;15572:12;15565:19;;15224:366;;;:::o;15596:::-;15738:3;15759:67;15823:2;15818:3;15759:67;:::i;:::-;15752:74;;15835:93;15924:3;15835:93;:::i;:::-;15953:2;15948:3;15944:12;15937:19;;15596:366;;;:::o;15968:::-;16110:3;16131:67;16195:2;16190:3;16131:67;:::i;:::-;16124:74;;16207:93;16296:3;16207:93;:::i;:::-;16325:2;16320:3;16316:12;16309:19;;15968:366;;;:::o;16340:::-;16482:3;16503:67;16567:2;16562:3;16503:67;:::i;:::-;16496:74;;16579:93;16668:3;16579:93;:::i;:::-;16697:2;16692:3;16688:12;16681:19;;16340:366;;;:::o;16712:::-;16854:3;16875:67;16939:2;16934:3;16875:67;:::i;:::-;16868:74;;16951:93;17040:3;16951:93;:::i;:::-;17069:2;17064:3;17060:12;17053:19;;16712:366;;;:::o;17084:::-;17226:3;17247:67;17311:2;17306:3;17247:67;:::i;:::-;17240:74;;17323:93;17412:3;17323:93;:::i;:::-;17441:2;17436:3;17432:12;17425:19;;17084:366;;;:::o;17456:::-;17598:3;17619:67;17683:2;17678:3;17619:67;:::i;:::-;17612:74;;17695:93;17784:3;17695:93;:::i;:::-;17813:2;17808:3;17804:12;17797:19;;17456:366;;;:::o;17828:::-;17970:3;17991:67;18055:2;18050:3;17991:67;:::i;:::-;17984:74;;18067:93;18156:3;18067:93;:::i;:::-;18185:2;18180:3;18176:12;18169:19;;17828:366;;;:::o;18200:::-;18342:3;18363:67;18427:2;18422:3;18363:67;:::i;:::-;18356:74;;18439:93;18528:3;18439:93;:::i;:::-;18557:2;18552:3;18548:12;18541:19;;18200:366;;;:::o;18572:::-;18714:3;18735:67;18799:2;18794:3;18735:67;:::i;:::-;18728:74;;18811:93;18900:3;18811:93;:::i;:::-;18929:2;18924:3;18920:12;18913:19;;18572:366;;;:::o;18944:::-;19086:3;19107:67;19171:2;19166:3;19107:67;:::i;:::-;19100:74;;19183:93;19272:3;19183:93;:::i;:::-;19301:2;19296:3;19292:12;19285:19;;18944:366;;;:::o;19316:::-;19458:3;19479:67;19543:2;19538:3;19479:67;:::i;:::-;19472:74;;19555:93;19644:3;19555:93;:::i;:::-;19673:2;19668:3;19664:12;19657:19;;19316:366;;;:::o;19688:::-;19830:3;19851:67;19915:2;19910:3;19851:67;:::i;:::-;19844:74;;19927:93;20016:3;19927:93;:::i;:::-;20045:2;20040:3;20036:12;20029:19;;19688:366;;;:::o;20060:108::-;20137:24;20155:5;20137:24;:::i;:::-;20132:3;20125:37;20060:108;;:::o;20174:118::-;20261:24;20279:5;20261:24;:::i;:::-;20256:3;20249:37;20174:118;;:::o;20298:222::-;20391:4;20429:2;20418:9;20414:18;20406:26;;20442:71;20510:1;20499:9;20495:17;20486:6;20442:71;:::i;:::-;20298:222;;;;:::o;20526:1053::-;20849:4;20887:3;20876:9;20872:19;20864:27;;20901:71;20969:1;20958:9;20954:17;20945:6;20901:71;:::i;:::-;20982:72;21050:2;21039:9;21035:18;21026:6;20982:72;:::i;:::-;21101:9;21095:4;21091:20;21086:2;21075:9;21071:18;21064:48;21129:108;21232:4;21223:6;21129:108;:::i;:::-;21121:116;;21284:9;21278:4;21274:20;21269:2;21258:9;21254:18;21247:48;21312:108;21415:4;21406:6;21312:108;:::i;:::-;21304:116;;21468:9;21462:4;21458:20;21452:3;21441:9;21437:19;21430:49;21496:76;21567:4;21558:6;21496:76;:::i;:::-;21488:84;;20526:1053;;;;;;;;:::o;21585:751::-;21808:4;21846:3;21835:9;21831:19;21823:27;;21860:71;21928:1;21917:9;21913:17;21904:6;21860:71;:::i;:::-;21941:72;22009:2;21998:9;21994:18;21985:6;21941:72;:::i;:::-;22023;22091:2;22080:9;22076:18;22067:6;22023:72;:::i;:::-;22105;22173:2;22162:9;22158:18;22149:6;22105:72;:::i;:::-;22225:9;22219:4;22215:20;22209:3;22198:9;22194:19;22187:49;22253:76;22324:4;22315:6;22253:76;:::i;:::-;22245:84;;21585:751;;;;;;;;:::o;22342:373::-;22485:4;22523:2;22512:9;22508:18;22500:26;;22572:9;22566:4;22562:20;22558:1;22547:9;22543:17;22536:47;22600:108;22703:4;22694:6;22600:108;:::i;:::-;22592:116;;22342:373;;;;:::o;22721:634::-;22942:4;22980:2;22969:9;22965:18;22957:26;;23029:9;23023:4;23019:20;23015:1;23004:9;23000:17;22993:47;23057:108;23160:4;23151:6;23057:108;:::i;:::-;23049:116;;23212:9;23206:4;23202:20;23197:2;23186:9;23182:18;23175:48;23240:108;23343:4;23334:6;23240:108;:::i;:::-;23232:116;;22721:634;;;;;:::o;23361:210::-;23448:4;23486:2;23475:9;23471:18;23463:26;;23499:65;23561:1;23550:9;23546:17;23537:6;23499:65;:::i;:::-;23361:210;;;;:::o;23577:313::-;23690:4;23728:2;23717:9;23713:18;23705:26;;23777:9;23771:4;23767:20;23763:1;23752:9;23748:17;23741:47;23805:78;23878:4;23869:6;23805:78;:::i;:::-;23797:86;;23577:313;;;;:::o;23896:419::-;24062:4;24100:2;24089:9;24085:18;24077:26;;24149:9;24143:4;24139:20;24135:1;24124:9;24120:17;24113:47;24177:131;24303:4;24177:131;:::i;:::-;24169:139;;23896:419;;;:::o;24321:::-;24487:4;24525:2;24514:9;24510:18;24502:26;;24574:9;24568:4;24564:20;24560:1;24549:9;24545:17;24538:47;24602:131;24728:4;24602:131;:::i;:::-;24594:139;;24321:419;;;:::o;24746:::-;24912:4;24950:2;24939:9;24935:18;24927:26;;24999:9;24993:4;24989:20;24985:1;24974:9;24970:17;24963:47;25027:131;25153:4;25027:131;:::i;:::-;25019:139;;24746:419;;;:::o;25171:::-;25337:4;25375:2;25364:9;25360:18;25352:26;;25424:9;25418:4;25414:20;25410:1;25399:9;25395:17;25388:47;25452:131;25578:4;25452:131;:::i;:::-;25444:139;;25171:419;;;:::o;25596:::-;25762:4;25800:2;25789:9;25785:18;25777:26;;25849:9;25843:4;25839:20;25835:1;25824:9;25820:17;25813:47;25877:131;26003:4;25877:131;:::i;:::-;25869:139;;25596:419;;;:::o;26021:::-;26187:4;26225:2;26214:9;26210:18;26202:26;;26274:9;26268:4;26264:20;26260:1;26249:9;26245:17;26238:47;26302:131;26428:4;26302:131;:::i;:::-;26294:139;;26021:419;;;:::o;26446:::-;26612:4;26650:2;26639:9;26635:18;26627:26;;26699:9;26693:4;26689:20;26685:1;26674:9;26670:17;26663:47;26727:131;26853:4;26727:131;:::i;:::-;26719:139;;26446:419;;;:::o;26871:::-;27037:4;27075:2;27064:9;27060:18;27052:26;;27124:9;27118:4;27114:20;27110:1;27099:9;27095:17;27088:47;27152:131;27278:4;27152:131;:::i;:::-;27144:139;;26871:419;;;:::o;27296:::-;27462:4;27500:2;27489:9;27485:18;27477:26;;27549:9;27543:4;27539:20;27535:1;27524:9;27520:17;27513:47;27577:131;27703:4;27577:131;:::i;:::-;27569:139;;27296:419;;;:::o;27721:::-;27887:4;27925:2;27914:9;27910:18;27902:26;;27974:9;27968:4;27964:20;27960:1;27949:9;27945:17;27938:47;28002:131;28128:4;28002:131;:::i;:::-;27994:139;;27721:419;;;:::o;28146:::-;28312:4;28350:2;28339:9;28335:18;28327:26;;28399:9;28393:4;28389:20;28385:1;28374:9;28370:17;28363:47;28427:131;28553:4;28427:131;:::i;:::-;28419:139;;28146:419;;;:::o;28571:::-;28737:4;28775:2;28764:9;28760:18;28752:26;;28824:9;28818:4;28814:20;28810:1;28799:9;28795:17;28788:47;28852:131;28978:4;28852:131;:::i;:::-;28844:139;;28571:419;;;:::o;28996:::-;29162:4;29200:2;29189:9;29185:18;29177:26;;29249:9;29243:4;29239:20;29235:1;29224:9;29220:17;29213:47;29277:131;29403:4;29277:131;:::i;:::-;29269:139;;28996:419;;;:::o;29421:222::-;29514:4;29552:2;29541:9;29537:18;29529:26;;29565:71;29633:1;29622:9;29618:17;29609:6;29565:71;:::i;:::-;29421:222;;;;:::o;29649:332::-;29770:4;29808:2;29797:9;29793:18;29785:26;;29821:71;29889:1;29878:9;29874:17;29865:6;29821:71;:::i;:::-;29902:72;29970:2;29959:9;29955:18;29946:6;29902:72;:::i;:::-;29649:332;;;;;:::o;29987:129::-;30021:6;30048:20;;:::i;:::-;30038:30;;30077:33;30105:4;30097:6;30077:33;:::i;:::-;29987:129;;;:::o;30122:75::-;30155:6;30188:2;30182:9;30172:19;;30122:75;:::o;30203:311::-;30280:4;30370:18;30362:6;30359:30;30356:56;;;30392:18;;:::i;:::-;30356:56;30442:4;30434:6;30430:17;30422:25;;30502:4;30496;30492:15;30484:23;;30203:311;;;:::o;30520:::-;30597:4;30687:18;30679:6;30676:30;30673:56;;;30709:18;;:::i;:::-;30673:56;30759:4;30751:6;30747:17;30739:25;;30819:4;30813;30809:15;30801:23;;30520:311;;;:::o;30837:307::-;30898:4;30988:18;30980:6;30977:30;30974:56;;;31010:18;;:::i;:::-;30974:56;31048:29;31070:6;31048:29;:::i;:::-;31040:37;;31132:4;31126;31122:15;31114:23;;30837:307;;;:::o;31150:308::-;31212:4;31302:18;31294:6;31291:30;31288:56;;;31324:18;;:::i;:::-;31288:56;31362:29;31384:6;31362:29;:::i;:::-;31354:37;;31446:4;31440;31436:15;31428:23;;31150:308;;;:::o;31464:132::-;31531:4;31554:3;31546:11;;31584:4;31579:3;31575:14;31567:22;;31464:132;;;:::o;31602:114::-;31669:6;31703:5;31697:12;31687:22;;31602:114;;;:::o;31722:98::-;31773:6;31807:5;31801:12;31791:22;;31722:98;;;:::o;31826:99::-;31878:6;31912:5;31906:12;31896:22;;31826:99;;;:::o;31931:113::-;32001:4;32033;32028:3;32024:14;32016:22;;31931:113;;;:::o;32050:184::-;32149:11;32183:6;32178:3;32171:19;32223:4;32218:3;32214:14;32199:29;;32050:184;;;;:::o;32240:168::-;32323:11;32357:6;32352:3;32345:19;32397:4;32392:3;32388:14;32373:29;;32240:168;;;;:::o;32414:169::-;32498:11;32532:6;32527:3;32520:19;32572:4;32567:3;32563:14;32548:29;;32414:169;;;;:::o;32589:305::-;32629:3;32648:20;32666:1;32648:20;:::i;:::-;32643:25;;32682:20;32700:1;32682:20;:::i;:::-;32677:25;;32836:1;32768:66;32764:74;32761:1;32758:81;32755:107;;;32842:18;;:::i;:::-;32755:107;32886:1;32883;32879:9;32872:16;;32589:305;;;;:::o;32900:96::-;32937:7;32966:24;32984:5;32966:24;:::i;:::-;32955:35;;32900:96;;;:::o;33002:90::-;33036:7;33079:5;33072:13;33065:21;33054:32;;33002:90;;;:::o;33098:149::-;33134:7;33174:66;33167:5;33163:78;33152:89;;33098:149;;;:::o;33253:126::-;33290:7;33330:42;33323:5;33319:54;33308:65;;33253:126;;;:::o;33385:77::-;33422:7;33451:5;33440:16;;33385:77;;;:::o;33468:154::-;33552:6;33547:3;33542;33529:30;33614:1;33605:6;33600:3;33596:16;33589:27;33468:154;;;:::o;33628:307::-;33696:1;33706:113;33720:6;33717:1;33714:13;33706:113;;;33805:1;33800:3;33796:11;33790:18;33786:1;33781:3;33777:11;33770:39;33742:2;33739:1;33735:10;33730:15;;33706:113;;;33837:6;33834:1;33831:13;33828:101;;;33917:1;33908:6;33903:3;33899:16;33892:27;33828:101;33677:258;33628:307;;;:::o;33941:320::-;33985:6;34022:1;34016:4;34012:12;34002:22;;34069:1;34063:4;34059:12;34090:18;34080:81;;34146:4;34138:6;34134:17;34124:27;;34080:81;34208:2;34200:6;34197:14;34177:18;34174:38;34171:84;;;34227:18;;:::i;:::-;34171:84;33992:269;33941:320;;;:::o;34267:281::-;34350:27;34372:4;34350:27;:::i;:::-;34342:6;34338:40;34480:6;34468:10;34465:22;34444:18;34432:10;34429:34;34426:62;34423:88;;;34491:18;;:::i;:::-;34423:88;34531:10;34527:2;34520:22;34310:238;34267:281;;:::o;34554:233::-;34593:3;34616:24;34634:5;34616:24;:::i;:::-;34607:33;;34662:66;34655:5;34652:77;34649:103;;;34732:18;;:::i;:::-;34649:103;34779:1;34772:5;34768:13;34761:20;;34554:233;;;:::o;34793:180::-;34841:77;34838:1;34831:88;34938:4;34935:1;34928:15;34962:4;34959:1;34952:15;34979:180;35027:77;35024:1;35017:88;35124:4;35121:1;35114:15;35148:4;35145:1;35138:15;35165:180;35213:77;35210:1;35203:88;35310:4;35307:1;35300:15;35334:4;35331:1;35324:15;35351:180;35399:77;35396:1;35389:88;35496:4;35493:1;35486:15;35520:4;35517:1;35510:15;35537:183;35572:3;35610:1;35592:16;35589:23;35586:128;;;35648:1;35645;35642;35627:23;35670:34;35701:1;35695:8;35670:34;:::i;:::-;35663:41;;35586:128;35537:183;:::o;35726:117::-;35835:1;35832;35825:12;35849:117;35958:1;35955;35948:12;35972:117;36081:1;36078;36071:12;36095:117;36204:1;36201;36194:12;36218:117;36327:1;36324;36317:12;36341:117;36450:1;36447;36440:12;36464:102;36505:6;36556:2;36552:7;36547:2;36540:5;36536:14;36532:28;36522:38;;36464:102;;;:::o;36572:106::-;36616:8;36665:5;36660:3;36656:15;36635:36;;36572:106;;;:::o;36684:227::-;36824:34;36820:1;36812:6;36808:14;36801:58;36893:10;36888:2;36880:6;36876:15;36869:35;36684:227;:::o;36917:225::-;37057:34;37053:1;37045:6;37041:14;37034:58;37126:8;37121:2;37113:6;37109:15;37102:33;36917:225;:::o;37148:229::-;37288:34;37284:1;37276:6;37272:14;37265:58;37357:12;37352:2;37344:6;37340:15;37333:37;37148:229;:::o;37383:233::-;37523:34;37519:1;37511:6;37507:14;37500:58;37592:16;37587:2;37579:6;37575:15;37568:41;37383:233;:::o;37622:224::-;37762:34;37758:1;37750:6;37746:14;37739:58;37831:7;37826:2;37818:6;37814:15;37807:32;37622:224;:::o;37852:229::-;37992:34;37988:1;37980:6;37976:14;37969:58;38061:12;38056:2;38048:6;38044:15;38037:37;37852:229;:::o;38087:182::-;38227:34;38223:1;38215:6;38211:14;38204:58;38087:182;:::o;38275:227::-;38415:34;38411:1;38403:6;38399:14;38392:58;38484:10;38479:2;38471:6;38467:15;38460:35;38275:227;:::o;38508:228::-;38648:34;38644:1;38636:6;38632:14;38625:58;38717:11;38712:2;38704:6;38700:15;38693:36;38508:228;:::o;38742:::-;38882:34;38878:1;38870:6;38866:14;38859:58;38951:11;38946:2;38938:6;38934:15;38927:36;38742:228;:::o;38976:227::-;39116:34;39112:1;39104:6;39100:14;39093:58;39185:10;39180:2;39172:6;39168:15;39161:35;38976:227;:::o;39209:220::-;39349:34;39345:1;39337:6;39333:14;39326:58;39418:3;39413:2;39405:6;39401:15;39394:28;39209:220;:::o;39435:239::-;39575:34;39571:1;39563:6;39559:14;39552:58;39644:22;39639:2;39631:6;39627:15;39620:47;39435:239;:::o;39680:711::-;39719:3;39757:4;39739:16;39736:26;39733:39;;;39765:5;;39733:39;39794:20;;:::i;:::-;39869:1;39851:16;39847:24;39844:1;39838:4;39823:49;39902:4;39896:11;40001:16;39994:4;39986:6;39982:17;39979:39;39946:18;39938:6;39935:30;39919:113;39916:146;;;40047:5;;;;39916:146;40093:6;40087:4;40083:17;40129:3;40123:10;40156:18;40148:6;40145:30;40142:43;;;40178:5;;;;;;40142:43;40226:6;40219:4;40214:3;40210:14;40206:27;40285:1;40267:16;40263:24;40257:4;40253:35;40248:3;40245:44;40242:57;;;40292:5;;;;;;;40242:57;40309;40357:6;40351:4;40347:17;40339:6;40335:30;40329:4;40309:57;:::i;:::-;40382:3;40375:10;;39723:668;;;;;39680:711;;:::o;40397:122::-;40470:24;40488:5;40470:24;:::i;:::-;40463:5;40460:35;40450:63;;40509:1;40506;40499:12;40450:63;40397:122;:::o;40525:116::-;40595:21;40610:5;40595:21;:::i;:::-;40588:5;40585:32;40575:60;;40631:1;40628;40621:12;40575:60;40525:116;:::o;40647:120::-;40719:23;40736:5;40719:23;:::i;:::-;40712:5;40709:34;40699:62;;40757:1;40754;40747:12;40699:62;40647:120;:::o;40773:122::-;40846:24;40864:5;40846:24;:::i;:::-;40839:5;40836:35;40826:63;;40885:1;40882;40875:12;40826:63;40773:122;:::o

Swarm Source

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