ETH Price: $3,117.28 (+0.27%)
Gas: 3 Gwei

Token

Primez NFT-1155 (PRM1155)
 

Overview

Max Total Supply

1,445 PRM1155

Holders

13

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xa062cc8b9cba04b11f51cdb633945a6f4d2444c5
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:
PrimezERC1155

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/**
 *Submitted for verification at Etherscan.io on 2022-07-01
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/[email protected]/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/[email protected]/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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/[email protected]/utils/Address.sol


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

pragma solidity ^0.8.0;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (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 be 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/[email protected]/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/[email protected]/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.6.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: balance query for the zero address");
        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 owner nor 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: transfer caller is not owner nor 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}.
     *
     * 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`
     *
     * 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}.
     *
     * 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 a {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 `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 _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/[email protected]/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: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Burnable.sol


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

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: Primez_ERC1155.sol


pragma solidity ^0.8.0;







contract PrimezERC1155 is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;
    // Token name
    string private _name;
    // Token symbol
    string private _symbol;

    string private baseUri;

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

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

    function uri(uint256 _tokenId) override public view returns (string memory) {
        return bytes(baseUri).length > 0 ? string(abi.encodePacked(baseUri, Strings.toString(_tokenId))) : "";
    } 

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    function mint(address account, uint256 id, uint256 amount)
        public
        onlyOwner
    {
        _mint(account, id, amount, "");
    }

    function mint(address account, uint256 amount) public onlyOwner {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        mint(account, tokenId, amount);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == msg.sender || isApprovedForAll(from, msg.sender),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount
    ) public {
        require(
            from == msg.sender || isApprovedForAll(from, msg.sender),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, "");
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }

    // The following functions are overrides required by Solidity.

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

    function currentTokenId() public view returns (uint256){
        return _tokenIdCounter.current() -1 ;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","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":"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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"}],"name":"safeTransferFrom","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162004c2b38038062004c2b8339818101604052810190620000379190620002bf565b604051806020016040528060008152506200005881620000b360201b60201c565b50620000796200006d620000cf60201b60201c565b620000d760201b60201c565b8160069080519060200190620000919291906200019d565b508060079080519060200190620000aa9291906200019d565b50505062000463565b8060029080519060200190620000cb9291906200019d565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ab90620003cf565b90600052602060002090601f016020900481019282620001cf57600085556200021b565b82601f10620001ea57805160ff19168380011785556200021b565b828001600101855582156200021b579182015b828111156200021a578251825591602001919060010190620001fd565b5b5090506200022a91906200022e565b5090565b5b80821115620002495760008160009055506001016200022f565b5090565b6000620002646200025e8462000366565b62000332565b9050828152602081018484840111156200027d57600080fd5b6200028a84828562000399565b509392505050565b600082601f830112620002a457600080fd5b8151620002b68482602086016200024d565b91505092915050565b60008060408385031215620002d357600080fd5b600083015167ffffffffffffffff811115620002ee57600080fd5b620002fc8582860162000292565b925050602083015167ffffffffffffffff8111156200031a57600080fd5b620003288582860162000292565b9150509250929050565b6000604051905081810181811067ffffffffffffffff821117156200035c576200035b62000434565b5b8060405250919050565b600067ffffffffffffffff82111562000384576200038362000434565b5b601f19601f8301169050602081019050919050565b60005b83811015620003b95780820151818401526020810190506200039c565b83811115620003c9576000848401525b50505050565b60006002820490506001821680620003e857607f821691505b60208210811415620003ff57620003fe62000405565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147b880620004736000396000f3fe608060405234801561001057600080fd5b50600436106101565760003560e01c80634f558e79116100c3578063a22cb4651161007c578063a22cb465146103ad578063bd85b039146103c9578063e985e9c5146103f9578063f242432a14610429578063f2fde38b14610445578063f5298aca1461046157610156565b80634f558e79146102ff5780636b20c4541461032f578063715018a61461034b578063731133e9146103555780638da5cb5b1461037157806395d89b411461038f57610156565b80630febdd49116101155780630febdd4914610243578063156e29f61461025f5780631f7fdffa1461027b5780632eb2c2d61461029757806340c10f19146102b35780634e1273f4146102cf57610156565b80629a9b7b1461015b578062fdd58e1461017957806301ffc9a7146101a957806302fe5305146101d957806306fdde03146101f55780630e89341c14610213575b600080fd5b61016361047d565b60405161017091906141bb565b60405180910390f35b610193600480360381019061018e91906133e8565b61049a565b6040516101a091906141bb565b60405180910390f35b6101c360048036038101906101be919061355a565b610563565b6040516101d09190613f7e565b60405180910390f35b6101f360048036038101906101ee91906135ac565b610645565b005b6101fd6106e4565b60405161020a9190613f99565b60405180910390f35b61022d600480360381019061022891906135ed565b610776565b60405161023a9190613f99565b60405180910390f35b61025d60048036038101906102589190613190565b6107d6565b005b61027960048036038101906102749190613424565b610877565b005b61029560048036038101906102909190613301565b610913565b005b6102b160048036038101906102ac91906130d1565b6109a1565b005b6102cd60048036038101906102c891906133e8565b610a42565b005b6102e960048036038101906102e491906134ee565b610ae6565b6040516102f69190613f25565b60405180910390f35b610319600480360381019061031491906135ed565b610c97565b6040516103269190613f7e565b60405180910390f35b61034960048036038101906103449190613282565b610cab565b005b610353610d48565b005b61036f600480360381019061036a9190613473565b610dd0565b005b610379610e5e565b6040516103869190613e48565b60405180910390f35b610397610e88565b6040516103a49190613f99565b60405180910390f35b6103c760048036038101906103c291906133ac565b610f1a565b005b6103e360048036038101906103de91906135ed565b610f30565b6040516103f091906141bb565b60405180910390f35b610413600480360381019061040e9190613095565b610f4d565b6040516104209190613f7e565b60405180910390f35b610443600480360381019061043e91906131f3565b610fe1565b005b61045f600480360381019061045a919061306c565b611074565b005b61047b60048036038101906104769190613424565b61116c565b005b6000600161048b6005611209565b6104959190614400565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050290613ffb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061062e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061063e575061063d82611217565b5b9050919050565b61064d611281565b73ffffffffffffffffffffffffffffffffffffffff1661066b610e5e565b73ffffffffffffffffffffffffffffffffffffffff16146106c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b8906140fb565b60405180910390fd5b80600890805190602001906106d7929190612d64565b506106e181611289565b50565b6060600680546106f3906144ea565b80601f016020809104026020016040519081016040528092919081815260200182805461071f906144ea565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b5050505050905090565b6060600060088054610787906144ea565b9050116107a357604051806020016040528060008152506107cf565b60086107ae836112a3565b6040516020016107bf929190613e24565b6040516020818303038152906040525b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061081657506108158433610f4d565b5b610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c9061405b565b60405180910390fd5b6108718484848460405180602001604052806000815250611450565b50505050565b61087f611281565b73ffffffffffffffffffffffffffffffffffffffff1661089d610e5e565b73ffffffffffffffffffffffffffffffffffffffff16146108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea906140fb565b60405180910390fd5b61090e838383604051806020016040528060008152506116ec565b505050565b61091b611281565b73ffffffffffffffffffffffffffffffffffffffff16610939610e5e565b73ffffffffffffffffffffffffffffffffffffffff161461098f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610986906140fb565b60405180910390fd5b61099b8484848461189d565b50505050565b6109a9611281565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109ef57506109ee856109e9611281565b610f4d565b5b610a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a259061409b565b60405180910390fd5b610a3b8585858585611b16565b5050505050565b610a4a611281565b73ffffffffffffffffffffffffffffffffffffffff16610a68610e5e565b73ffffffffffffffffffffffffffffffffffffffff1614610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906140fb565b60405180910390fd5b6000610aca6005611209565b9050610ad66005611e84565b610ae1838284610877565b505050565b60608151835114610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b239061415b565b60405180910390fd5b6000835167ffffffffffffffff811115610b6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b9d5781602001602082028036833780820191505090505b50905060005b8451811015610c8c57610c36858281518110610be8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161049a565b828281518110610c6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610c859061451c565b9050610ba3565b508091505092915050565b600080610ca383610f30565b119050919050565b610cb3611281565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610cf95750610cf883610cf3611281565b610f4d565b5b610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f9061405b565b60405180910390fd5b610d43838383611e9a565b505050565b610d50611281565b73ffffffffffffffffffffffffffffffffffffffff16610d6e610e5e565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb906140fb565b60405180910390fd5b610dce60006121b5565b565b610dd8611281565b73ffffffffffffffffffffffffffffffffffffffff16610df6610e5e565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906140fb565b60405180910390fd5b610e58848484846116ec565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e97906144ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec3906144ea565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b5050505050905090565b610f2c610f25611281565b838361227b565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061102157506110208533610f4d565b5b611060576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110579061405b565b60405180910390fd5b61106d8585858585611450565b5050505050565b61107c611281565b73ffffffffffffffffffffffffffffffffffffffff1661109a610e5e565b73ffffffffffffffffffffffffffffffffffffffff16146110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e7906140fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611160576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111579061401b565b60405180910390fd5b611169816121b5565b50565b611174611281565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806111ba57506111b9836111b4611281565b610f4d565b5b6111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f09061405b565b60405180910390fd5b6112048383836123e8565b505050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061129f929190612d64565b5050565b606060008214156112eb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061144b565b600082905060005b6000821461131d5780806113069061451c565b915050600a8261131691906143cf565b91506112f3565b60008167ffffffffffffffff81111561135f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113915781602001600182028036833780820191505090505b5090505b60008514611444576001826113aa9190614400565b9150600a856113b99190614565565b60306113c59190614379565b60f81b818381518110611401577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561143d91906143cf565b9450611395565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b79061407b565b60405180910390fd5b60006114ca611281565b905060006114d78561262f565b905060006114e48561262f565b90506114f48389898585896126f5565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906140db565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116409190614379565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516116bd9291906141d6565b60405180910390a46116d3848a8a86868a61270b565b6116e1848a8a8a8a8a612713565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561175c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117539061419b565b60405180910390fd5b6000611766611281565b905060006117738561262f565b905060006117808561262f565b9050611791836000898585896126f5565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f09190614379565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161186e9291906141d6565b60405180910390a46118858360008985858961270b565b61189483600089898989612713565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561190d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119049061419b565b60405180910390fd5b8151835114611951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119489061417b565b60405180910390fd5b600061195b611281565b905061196c816000878787876126f5565b60005b8451811015611a71578381815181106119b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000808784815181106119f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a579190614379565b925050819055508080611a699061451c565b91505061196f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ae9929190613f47565b60405180910390a4611b008160008787878761270b565b611b0f816000878787876128e3565b5050505050565b8151835114611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b519061417b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc19061407b565b60405180910390fd5b6000611bd4611281565b9050611be48187878787876126f5565b60005b8451811015611de1576000858281518110611c2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611c70577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d08906140db565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc69190614379565b9250508190555050505080611dda9061451c565b9050611be7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e58929190613f47565b60405180910390a4611e6e81878787878761270b565b611e7c8187878787876128e3565b505050505050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f01906140bb565b60405180910390fd5b8051825114611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f459061417b565b60405180910390fd5b6000611f58611281565b9050611f78818560008686604051806020016040528060008152506126f5565b60005b8351811015612111576000848281518110611fbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110612004577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c9061403b565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806121099061451c565b915050611f7b565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612189929190613f47565b60405180910390a46121af8185600086866040518060200160405280600081525061270b565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e19061413b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123db9190613f7e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f906140bb565b60405180910390fd5b6000612462611281565b9050600061246f8461262f565b9050600061247c8461262f565b905061249c838760008585604051806020016040528060008152506126f5565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a9061403b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516126009291906141d6565b60405180910390a46126268488600086866040518060200160405280600081525061270b565b50505050505050565b60606000600167ffffffffffffffff811115612674577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156126a25781602001602082028036833780820191505090505b50905082816000815181106126e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b612703868686868686612ab3565b505050505050565b505050505050565b6127328473ffffffffffffffffffffffffffffffffffffffff16612d1d565b156128db578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612778959493929190613ecb565b602060405180830381600087803b15801561279257600080fd5b505af19250505080156127c357506040513d601f19601f820116820180604052508101906127c09190613583565b60015b612852576127cf614670565b806127da5750612817565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e9190613f99565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284990613fbb565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146128d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d090613fdb565b60405180910390fd5b505b505050505050565b6129028473ffffffffffffffffffffffffffffffffffffffff16612d1d565b15612aab578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612948959493929190613e63565b602060405180830381600087803b15801561296257600080fd5b505af192505050801561299357506040513d601f19601f820116820180604052508101906129909190613583565b60015b612a225761299f614670565b806129aa57506129e7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129de9190613f99565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1990613fbb565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa090613fdb565b60405180910390fd5b505b505050505050565b612ac1868686868686612d5c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612bbf5760005b8351811015612bbd57828181518110612b3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160046000868481518110612b80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254612ba59190614379565b9250508190555080612bb69061451c565b9050612af9565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d155760005b8351811015612d13576000848281518110612c3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110612c80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006004600084815260200190815260200160002054905081811015612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061411b565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080612d0c9061451c565b9050612bf7565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b505050505050565b828054612d70906144ea565b90600052602060002090601f016020900481019282612d925760008555612dd9565b82601f10612dab57805160ff1916838001178555612dd9565b82800160010185558215612dd9579182015b82811115612dd8578251825591602001919060010190612dbd565b5b509050612de69190612dea565b5090565b5b80821115612e03576000816000905550600101612deb565b5090565b6000612e1a612e1584614230565b6141ff565b90508083825260208201905082856020860282011115612e3957600080fd5b60005b85811015612e695781612e4f8882612f5b565b845260208401935060208301925050600181019050612e3c565b5050509392505050565b6000612e86612e818461425c565b6141ff565b90508083825260208201905082856020860282011115612ea557600080fd5b60005b85811015612ed55781612ebb8882613057565b845260208401935060208301925050600181019050612ea8565b5050509392505050565b6000612ef2612eed84614288565b6141ff565b905082815260208101848484011115612f0a57600080fd5b612f158482856144a8565b509392505050565b6000612f30612f2b846142b8565b6141ff565b905082815260208101848484011115612f4857600080fd5b612f538482856144a8565b509392505050565b600081359050612f6a81614726565b92915050565b600082601f830112612f8157600080fd5b8135612f91848260208601612e07565b91505092915050565b600082601f830112612fab57600080fd5b8135612fbb848260208601612e73565b91505092915050565b600081359050612fd38161473d565b92915050565b600081359050612fe881614754565b92915050565b600081519050612ffd81614754565b92915050565b600082601f83011261301457600080fd5b8135613024848260208601612edf565b91505092915050565b600082601f83011261303e57600080fd5b813561304e848260208601612f1d565b91505092915050565b6000813590506130668161476b565b92915050565b60006020828403121561307e57600080fd5b600061308c84828501612f5b565b91505092915050565b600080604083850312156130a857600080fd5b60006130b685828601612f5b565b92505060206130c785828601612f5b565b9150509250929050565b600080600080600060a086880312156130e957600080fd5b60006130f788828901612f5b565b955050602061310888828901612f5b565b945050604086013567ffffffffffffffff81111561312557600080fd5b61313188828901612f9a565b935050606086013567ffffffffffffffff81111561314e57600080fd5b61315a88828901612f9a565b925050608086013567ffffffffffffffff81111561317757600080fd5b61318388828901613003565b9150509295509295909350565b600080600080608085870312156131a657600080fd5b60006131b487828801612f5b565b94505060206131c587828801612f5b565b93505060406131d687828801613057565b92505060606131e787828801613057565b91505092959194509250565b600080600080600060a0868803121561320b57600080fd5b600061321988828901612f5b565b955050602061322a88828901612f5b565b945050604061323b88828901613057565b935050606061324c88828901613057565b925050608086013567ffffffffffffffff81111561326957600080fd5b61327588828901613003565b9150509295509295909350565b60008060006060848603121561329757600080fd5b60006132a586828701612f5b565b935050602084013567ffffffffffffffff8111156132c257600080fd5b6132ce86828701612f9a565b925050604084013567ffffffffffffffff8111156132eb57600080fd5b6132f786828701612f9a565b9150509250925092565b6000806000806080858703121561331757600080fd5b600061332587828801612f5b565b945050602085013567ffffffffffffffff81111561334257600080fd5b61334e87828801612f9a565b935050604085013567ffffffffffffffff81111561336b57600080fd5b61337787828801612f9a565b925050606085013567ffffffffffffffff81111561339457600080fd5b6133a087828801613003565b91505092959194509250565b600080604083850312156133bf57600080fd5b60006133cd85828601612f5b565b92505060206133de85828601612fc4565b9150509250929050565b600080604083850312156133fb57600080fd5b600061340985828601612f5b565b925050602061341a85828601613057565b9150509250929050565b60008060006060848603121561343957600080fd5b600061344786828701612f5b565b935050602061345886828701613057565b925050604061346986828701613057565b9150509250925092565b6000806000806080858703121561348957600080fd5b600061349787828801612f5b565b94505060206134a887828801613057565b93505060406134b987828801613057565b925050606085013567ffffffffffffffff8111156134d657600080fd5b6134e287828801613003565b91505092959194509250565b6000806040838503121561350157600080fd5b600083013567ffffffffffffffff81111561351b57600080fd5b61352785828601612f70565b925050602083013567ffffffffffffffff81111561354457600080fd5b61355085828601612f9a565b9150509250929050565b60006020828403121561356c57600080fd5b600061357a84828501612fd9565b91505092915050565b60006020828403121561359557600080fd5b60006135a384828501612fee565b91505092915050565b6000602082840312156135be57600080fd5b600082013567ffffffffffffffff8111156135d857600080fd5b6135e48482850161302d565b91505092915050565b6000602082840312156135ff57600080fd5b600061360d84828501613057565b91505092915050565b60006136228383613e06565b60208301905092915050565b61363781614434565b82525050565b60006136488261430d565b613652818561433b565b935061365d836142e8565b8060005b8381101561368e5781516136758882613616565b97506136808361432e565b925050600181019050613661565b5085935050505092915050565b6136a481614446565b82525050565b60006136b582614318565b6136bf818561434c565b93506136cf8185602086016144b7565b6136d881614652565b840191505092915050565b60006136ee82614323565b6136f8818561435d565b93506137088185602086016144b7565b61371181614652565b840191505092915050565b600061372782614323565b613731818561436e565b93506137418185602086016144b7565b80840191505092915050565b6000815461375a816144ea565b613764818661436e565b9450600182166000811461377f5760018114613790576137c3565b60ff198316865281860193506137c3565b613799856142f8565b60005b838110156137bb5781548189015260018201915060208101905061379c565b838801955050505b50505092915050565b60006137d960348361435d565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b600061383f60288361435d565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138a5602b8361435d565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061390b60268361435d565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061397160248361435d565b91507f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139d760298361435d565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a3d60258361435d565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aa360328361435d565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613b0960238361435d565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b6f602a8361435d565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bd560208361435d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c1560288361435d565b91507f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008301527f616c537570706c790000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c7b60298361435d565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ce160298361435d565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d4760288361435d565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dad60218361435d565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b613e0f8161449e565b82525050565b613e1e8161449e565b82525050565b6000613e30828561374d565b9150613e3c828461371c565b91508190509392505050565b6000602082019050613e5d600083018461362e565b92915050565b600060a082019050613e78600083018861362e565b613e85602083018761362e565b8181036040830152613e97818661363d565b90508181036060830152613eab818561363d565b90508181036080830152613ebf81846136aa565b90509695505050505050565b600060a082019050613ee0600083018861362e565b613eed602083018761362e565b613efa6040830186613e15565b613f076060830185613e15565b8181036080830152613f1981846136aa565b90509695505050505050565b60006020820190508181036000830152613f3f818461363d565b905092915050565b60006040820190508181036000830152613f61818561363d565b90508181036020830152613f75818461363d565b90509392505050565b6000602082019050613f93600083018461369b565b92915050565b60006020820190508181036000830152613fb381846136e3565b905092915050565b60006020820190508181036000830152613fd4816137cc565b9050919050565b60006020820190508181036000830152613ff481613832565b9050919050565b6000602082019050818103600083015261401481613898565b9050919050565b60006020820190508181036000830152614034816138fe565b9050919050565b6000602082019050818103600083015261405481613964565b9050919050565b60006020820190508181036000830152614074816139ca565b9050919050565b6000602082019050818103600083015261409481613a30565b9050919050565b600060208201905081810360008301526140b481613a96565b9050919050565b600060208201905081810360008301526140d481613afc565b9050919050565b600060208201905081810360008301526140f481613b62565b9050919050565b6000602082019050818103600083015261411481613bc8565b9050919050565b6000602082019050818103600083015261413481613c08565b9050919050565b6000602082019050818103600083015261415481613c6e565b9050919050565b6000602082019050818103600083015261417481613cd4565b9050919050565b6000602082019050818103600083015261419481613d3a565b9050919050565b600060208201905081810360008301526141b481613da0565b9050919050565b60006020820190506141d06000830184613e15565b92915050565b60006040820190506141eb6000830185613e15565b6141f86020830184613e15565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561422657614225614623565b5b8060405250919050565b600067ffffffffffffffff82111561424b5761424a614623565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561427757614276614623565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156142a3576142a2614623565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156142d3576142d2614623565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143848261449e565b915061438f8361449e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143c4576143c3614596565b5b828201905092915050565b60006143da8261449e565b91506143e58361449e565b9250826143f5576143f46145c5565b5b828204905092915050565b600061440b8261449e565b91506144168361449e565b92508282101561442957614428614596565b5b828203905092915050565b600061443f8261447e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144d55780820151818401526020810190506144ba565b838111156144e4576000848401525b50505050565b6000600282049050600182168061450257607f821691505b60208210811415614516576145156145f4565b5b50919050565b60006145278261449e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455a57614559614596565b5b600182019050919050565b60006145708261449e565b915061457b8361449e565b92508261458b5761458a6145c5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d101561468057614723565b60046000803e614691600051614663565b6308c379a081146146a25750614723565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156146ce57505050614723565b808201805167ffffffffffffffff8111156146ed575050505050614723565b8060208301013d850181111561470857505050505050614723565b61471182614652565b60208401016040528296505050505050505b90565b61472f81614434565b811461473a57600080fd5b50565b61474681614446565b811461475157600080fd5b50565b61475d81614452565b811461476857600080fd5b50565b6147748161449e565b811461477f57600080fd5b5056fea2646970667358221220e922d5385cd046dec7562b252290374a35770f686cdfa2b31d1562a252243dff64736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f5072696d657a204e46542d313135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000750524d3131353500000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101565760003560e01c80634f558e79116100c3578063a22cb4651161007c578063a22cb465146103ad578063bd85b039146103c9578063e985e9c5146103f9578063f242432a14610429578063f2fde38b14610445578063f5298aca1461046157610156565b80634f558e79146102ff5780636b20c4541461032f578063715018a61461034b578063731133e9146103555780638da5cb5b1461037157806395d89b411461038f57610156565b80630febdd49116101155780630febdd4914610243578063156e29f61461025f5780631f7fdffa1461027b5780632eb2c2d61461029757806340c10f19146102b35780634e1273f4146102cf57610156565b80629a9b7b1461015b578062fdd58e1461017957806301ffc9a7146101a957806302fe5305146101d957806306fdde03146101f55780630e89341c14610213575b600080fd5b61016361047d565b60405161017091906141bb565b60405180910390f35b610193600480360381019061018e91906133e8565b61049a565b6040516101a091906141bb565b60405180910390f35b6101c360048036038101906101be919061355a565b610563565b6040516101d09190613f7e565b60405180910390f35b6101f360048036038101906101ee91906135ac565b610645565b005b6101fd6106e4565b60405161020a9190613f99565b60405180910390f35b61022d600480360381019061022891906135ed565b610776565b60405161023a9190613f99565b60405180910390f35b61025d60048036038101906102589190613190565b6107d6565b005b61027960048036038101906102749190613424565b610877565b005b61029560048036038101906102909190613301565b610913565b005b6102b160048036038101906102ac91906130d1565b6109a1565b005b6102cd60048036038101906102c891906133e8565b610a42565b005b6102e960048036038101906102e491906134ee565b610ae6565b6040516102f69190613f25565b60405180910390f35b610319600480360381019061031491906135ed565b610c97565b6040516103269190613f7e565b60405180910390f35b61034960048036038101906103449190613282565b610cab565b005b610353610d48565b005b61036f600480360381019061036a9190613473565b610dd0565b005b610379610e5e565b6040516103869190613e48565b60405180910390f35b610397610e88565b6040516103a49190613f99565b60405180910390f35b6103c760048036038101906103c291906133ac565b610f1a565b005b6103e360048036038101906103de91906135ed565b610f30565b6040516103f091906141bb565b60405180910390f35b610413600480360381019061040e9190613095565b610f4d565b6040516104209190613f7e565b60405180910390f35b610443600480360381019061043e91906131f3565b610fe1565b005b61045f600480360381019061045a919061306c565b611074565b005b61047b60048036038101906104769190613424565b61116c565b005b6000600161048b6005611209565b6104959190614400565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050290613ffb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061062e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061063e575061063d82611217565b5b9050919050565b61064d611281565b73ffffffffffffffffffffffffffffffffffffffff1661066b610e5e565b73ffffffffffffffffffffffffffffffffffffffff16146106c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b8906140fb565b60405180910390fd5b80600890805190602001906106d7929190612d64565b506106e181611289565b50565b6060600680546106f3906144ea565b80601f016020809104026020016040519081016040528092919081815260200182805461071f906144ea565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b5050505050905090565b6060600060088054610787906144ea565b9050116107a357604051806020016040528060008152506107cf565b60086107ae836112a3565b6040516020016107bf929190613e24565b6040516020818303038152906040525b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061081657506108158433610f4d565b5b610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c9061405b565b60405180910390fd5b6108718484848460405180602001604052806000815250611450565b50505050565b61087f611281565b73ffffffffffffffffffffffffffffffffffffffff1661089d610e5e565b73ffffffffffffffffffffffffffffffffffffffff16146108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea906140fb565b60405180910390fd5b61090e838383604051806020016040528060008152506116ec565b505050565b61091b611281565b73ffffffffffffffffffffffffffffffffffffffff16610939610e5e565b73ffffffffffffffffffffffffffffffffffffffff161461098f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610986906140fb565b60405180910390fd5b61099b8484848461189d565b50505050565b6109a9611281565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109ef57506109ee856109e9611281565b610f4d565b5b610a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a259061409b565b60405180910390fd5b610a3b8585858585611b16565b5050505050565b610a4a611281565b73ffffffffffffffffffffffffffffffffffffffff16610a68610e5e565b73ffffffffffffffffffffffffffffffffffffffff1614610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906140fb565b60405180910390fd5b6000610aca6005611209565b9050610ad66005611e84565b610ae1838284610877565b505050565b60608151835114610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b239061415b565b60405180910390fd5b6000835167ffffffffffffffff811115610b6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b9d5781602001602082028036833780820191505090505b50905060005b8451811015610c8c57610c36858281518110610be8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161049a565b828281518110610c6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610c859061451c565b9050610ba3565b508091505092915050565b600080610ca383610f30565b119050919050565b610cb3611281565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610cf95750610cf883610cf3611281565b610f4d565b5b610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f9061405b565b60405180910390fd5b610d43838383611e9a565b505050565b610d50611281565b73ffffffffffffffffffffffffffffffffffffffff16610d6e610e5e565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb906140fb565b60405180910390fd5b610dce60006121b5565b565b610dd8611281565b73ffffffffffffffffffffffffffffffffffffffff16610df6610e5e565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906140fb565b60405180910390fd5b610e58848484846116ec565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e97906144ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec3906144ea565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b5050505050905090565b610f2c610f25611281565b838361227b565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061102157506110208533610f4d565b5b611060576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110579061405b565b60405180910390fd5b61106d8585858585611450565b5050505050565b61107c611281565b73ffffffffffffffffffffffffffffffffffffffff1661109a610e5e565b73ffffffffffffffffffffffffffffffffffffffff16146110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e7906140fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611160576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111579061401b565b60405180910390fd5b611169816121b5565b50565b611174611281565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806111ba57506111b9836111b4611281565b610f4d565b5b6111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f09061405b565b60405180910390fd5b6112048383836123e8565b505050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061129f929190612d64565b5050565b606060008214156112eb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061144b565b600082905060005b6000821461131d5780806113069061451c565b915050600a8261131691906143cf565b91506112f3565b60008167ffffffffffffffff81111561135f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113915781602001600182028036833780820191505090505b5090505b60008514611444576001826113aa9190614400565b9150600a856113b99190614565565b60306113c59190614379565b60f81b818381518110611401577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561143d91906143cf565b9450611395565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b79061407b565b60405180910390fd5b60006114ca611281565b905060006114d78561262f565b905060006114e48561262f565b90506114f48389898585896126f5565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906140db565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116409190614379565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516116bd9291906141d6565b60405180910390a46116d3848a8a86868a61270b565b6116e1848a8a8a8a8a612713565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561175c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117539061419b565b60405180910390fd5b6000611766611281565b905060006117738561262f565b905060006117808561262f565b9050611791836000898585896126f5565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f09190614379565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161186e9291906141d6565b60405180910390a46118858360008985858961270b565b61189483600089898989612713565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561190d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119049061419b565b60405180910390fd5b8151835114611951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119489061417b565b60405180910390fd5b600061195b611281565b905061196c816000878787876126f5565b60005b8451811015611a71578381815181106119b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000808784815181106119f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a579190614379565b925050819055508080611a699061451c565b91505061196f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ae9929190613f47565b60405180910390a4611b008160008787878761270b565b611b0f816000878787876128e3565b5050505050565b8151835114611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b519061417b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc19061407b565b60405180910390fd5b6000611bd4611281565b9050611be48187878787876126f5565b60005b8451811015611de1576000858281518110611c2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611c70577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d08906140db565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc69190614379565b9250508190555050505080611dda9061451c565b9050611be7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e58929190613f47565b60405180910390a4611e6e81878787878761270b565b611e7c8187878787876128e3565b505050505050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f01906140bb565b60405180910390fd5b8051825114611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f459061417b565b60405180910390fd5b6000611f58611281565b9050611f78818560008686604051806020016040528060008152506126f5565b60005b8351811015612111576000848281518110611fbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110612004577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c9061403b565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806121099061451c565b915050611f7b565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612189929190613f47565b60405180910390a46121af8185600086866040518060200160405280600081525061270b565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e19061413b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123db9190613f7e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f906140bb565b60405180910390fd5b6000612462611281565b9050600061246f8461262f565b9050600061247c8461262f565b905061249c838760008585604051806020016040528060008152506126f5565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a9061403b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516126009291906141d6565b60405180910390a46126268488600086866040518060200160405280600081525061270b565b50505050505050565b60606000600167ffffffffffffffff811115612674577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156126a25781602001602082028036833780820191505090505b50905082816000815181106126e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b612703868686868686612ab3565b505050505050565b505050505050565b6127328473ffffffffffffffffffffffffffffffffffffffff16612d1d565b156128db578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612778959493929190613ecb565b602060405180830381600087803b15801561279257600080fd5b505af19250505080156127c357506040513d601f19601f820116820180604052508101906127c09190613583565b60015b612852576127cf614670565b806127da5750612817565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e9190613f99565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284990613fbb565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146128d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d090613fdb565b60405180910390fd5b505b505050505050565b6129028473ffffffffffffffffffffffffffffffffffffffff16612d1d565b15612aab578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612948959493929190613e63565b602060405180830381600087803b15801561296257600080fd5b505af192505050801561299357506040513d601f19601f820116820180604052508101906129909190613583565b60015b612a225761299f614670565b806129aa57506129e7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129de9190613f99565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1990613fbb565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa090613fdb565b60405180910390fd5b505b505050505050565b612ac1868686868686612d5c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612bbf5760005b8351811015612bbd57828181518110612b3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160046000868481518110612b80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254612ba59190614379565b9250508190555080612bb69061451c565b9050612af9565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d155760005b8351811015612d13576000848281518110612c3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110612c80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006004600084815260200190815260200160002054905081811015612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061411b565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080612d0c9061451c565b9050612bf7565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b505050505050565b828054612d70906144ea565b90600052602060002090601f016020900481019282612d925760008555612dd9565b82601f10612dab57805160ff1916838001178555612dd9565b82800160010185558215612dd9579182015b82811115612dd8578251825591602001919060010190612dbd565b5b509050612de69190612dea565b5090565b5b80821115612e03576000816000905550600101612deb565b5090565b6000612e1a612e1584614230565b6141ff565b90508083825260208201905082856020860282011115612e3957600080fd5b60005b85811015612e695781612e4f8882612f5b565b845260208401935060208301925050600181019050612e3c565b5050509392505050565b6000612e86612e818461425c565b6141ff565b90508083825260208201905082856020860282011115612ea557600080fd5b60005b85811015612ed55781612ebb8882613057565b845260208401935060208301925050600181019050612ea8565b5050509392505050565b6000612ef2612eed84614288565b6141ff565b905082815260208101848484011115612f0a57600080fd5b612f158482856144a8565b509392505050565b6000612f30612f2b846142b8565b6141ff565b905082815260208101848484011115612f4857600080fd5b612f538482856144a8565b509392505050565b600081359050612f6a81614726565b92915050565b600082601f830112612f8157600080fd5b8135612f91848260208601612e07565b91505092915050565b600082601f830112612fab57600080fd5b8135612fbb848260208601612e73565b91505092915050565b600081359050612fd38161473d565b92915050565b600081359050612fe881614754565b92915050565b600081519050612ffd81614754565b92915050565b600082601f83011261301457600080fd5b8135613024848260208601612edf565b91505092915050565b600082601f83011261303e57600080fd5b813561304e848260208601612f1d565b91505092915050565b6000813590506130668161476b565b92915050565b60006020828403121561307e57600080fd5b600061308c84828501612f5b565b91505092915050565b600080604083850312156130a857600080fd5b60006130b685828601612f5b565b92505060206130c785828601612f5b565b9150509250929050565b600080600080600060a086880312156130e957600080fd5b60006130f788828901612f5b565b955050602061310888828901612f5b565b945050604086013567ffffffffffffffff81111561312557600080fd5b61313188828901612f9a565b935050606086013567ffffffffffffffff81111561314e57600080fd5b61315a88828901612f9a565b925050608086013567ffffffffffffffff81111561317757600080fd5b61318388828901613003565b9150509295509295909350565b600080600080608085870312156131a657600080fd5b60006131b487828801612f5b565b94505060206131c587828801612f5b565b93505060406131d687828801613057565b92505060606131e787828801613057565b91505092959194509250565b600080600080600060a0868803121561320b57600080fd5b600061321988828901612f5b565b955050602061322a88828901612f5b565b945050604061323b88828901613057565b935050606061324c88828901613057565b925050608086013567ffffffffffffffff81111561326957600080fd5b61327588828901613003565b9150509295509295909350565b60008060006060848603121561329757600080fd5b60006132a586828701612f5b565b935050602084013567ffffffffffffffff8111156132c257600080fd5b6132ce86828701612f9a565b925050604084013567ffffffffffffffff8111156132eb57600080fd5b6132f786828701612f9a565b9150509250925092565b6000806000806080858703121561331757600080fd5b600061332587828801612f5b565b945050602085013567ffffffffffffffff81111561334257600080fd5b61334e87828801612f9a565b935050604085013567ffffffffffffffff81111561336b57600080fd5b61337787828801612f9a565b925050606085013567ffffffffffffffff81111561339457600080fd5b6133a087828801613003565b91505092959194509250565b600080604083850312156133bf57600080fd5b60006133cd85828601612f5b565b92505060206133de85828601612fc4565b9150509250929050565b600080604083850312156133fb57600080fd5b600061340985828601612f5b565b925050602061341a85828601613057565b9150509250929050565b60008060006060848603121561343957600080fd5b600061344786828701612f5b565b935050602061345886828701613057565b925050604061346986828701613057565b9150509250925092565b6000806000806080858703121561348957600080fd5b600061349787828801612f5b565b94505060206134a887828801613057565b93505060406134b987828801613057565b925050606085013567ffffffffffffffff8111156134d657600080fd5b6134e287828801613003565b91505092959194509250565b6000806040838503121561350157600080fd5b600083013567ffffffffffffffff81111561351b57600080fd5b61352785828601612f70565b925050602083013567ffffffffffffffff81111561354457600080fd5b61355085828601612f9a565b9150509250929050565b60006020828403121561356c57600080fd5b600061357a84828501612fd9565b91505092915050565b60006020828403121561359557600080fd5b60006135a384828501612fee565b91505092915050565b6000602082840312156135be57600080fd5b600082013567ffffffffffffffff8111156135d857600080fd5b6135e48482850161302d565b91505092915050565b6000602082840312156135ff57600080fd5b600061360d84828501613057565b91505092915050565b60006136228383613e06565b60208301905092915050565b61363781614434565b82525050565b60006136488261430d565b613652818561433b565b935061365d836142e8565b8060005b8381101561368e5781516136758882613616565b97506136808361432e565b925050600181019050613661565b5085935050505092915050565b6136a481614446565b82525050565b60006136b582614318565b6136bf818561434c565b93506136cf8185602086016144b7565b6136d881614652565b840191505092915050565b60006136ee82614323565b6136f8818561435d565b93506137088185602086016144b7565b61371181614652565b840191505092915050565b600061372782614323565b613731818561436e565b93506137418185602086016144b7565b80840191505092915050565b6000815461375a816144ea565b613764818661436e565b9450600182166000811461377f5760018114613790576137c3565b60ff198316865281860193506137c3565b613799856142f8565b60005b838110156137bb5781548189015260018201915060208101905061379c565b838801955050505b50505092915050565b60006137d960348361435d565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b600061383f60288361435d565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138a5602b8361435d565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061390b60268361435d565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061397160248361435d565b91507f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139d760298361435d565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a3d60258361435d565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aa360328361435d565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613b0960238361435d565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b6f602a8361435d565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bd560208361435d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c1560288361435d565b91507f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008301527f616c537570706c790000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c7b60298361435d565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ce160298361435d565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d4760288361435d565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dad60218361435d565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b613e0f8161449e565b82525050565b613e1e8161449e565b82525050565b6000613e30828561374d565b9150613e3c828461371c565b91508190509392505050565b6000602082019050613e5d600083018461362e565b92915050565b600060a082019050613e78600083018861362e565b613e85602083018761362e565b8181036040830152613e97818661363d565b90508181036060830152613eab818561363d565b90508181036080830152613ebf81846136aa565b90509695505050505050565b600060a082019050613ee0600083018861362e565b613eed602083018761362e565b613efa6040830186613e15565b613f076060830185613e15565b8181036080830152613f1981846136aa565b90509695505050505050565b60006020820190508181036000830152613f3f818461363d565b905092915050565b60006040820190508181036000830152613f61818561363d565b90508181036020830152613f75818461363d565b90509392505050565b6000602082019050613f93600083018461369b565b92915050565b60006020820190508181036000830152613fb381846136e3565b905092915050565b60006020820190508181036000830152613fd4816137cc565b9050919050565b60006020820190508181036000830152613ff481613832565b9050919050565b6000602082019050818103600083015261401481613898565b9050919050565b60006020820190508181036000830152614034816138fe565b9050919050565b6000602082019050818103600083015261405481613964565b9050919050565b60006020820190508181036000830152614074816139ca565b9050919050565b6000602082019050818103600083015261409481613a30565b9050919050565b600060208201905081810360008301526140b481613a96565b9050919050565b600060208201905081810360008301526140d481613afc565b9050919050565b600060208201905081810360008301526140f481613b62565b9050919050565b6000602082019050818103600083015261411481613bc8565b9050919050565b6000602082019050818103600083015261413481613c08565b9050919050565b6000602082019050818103600083015261415481613c6e565b9050919050565b6000602082019050818103600083015261417481613cd4565b9050919050565b6000602082019050818103600083015261419481613d3a565b9050919050565b600060208201905081810360008301526141b481613da0565b9050919050565b60006020820190506141d06000830184613e15565b92915050565b60006040820190506141eb6000830185613e15565b6141f86020830184613e15565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561422657614225614623565b5b8060405250919050565b600067ffffffffffffffff82111561424b5761424a614623565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561427757614276614623565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156142a3576142a2614623565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156142d3576142d2614623565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143848261449e565b915061438f8361449e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143c4576143c3614596565b5b828201905092915050565b60006143da8261449e565b91506143e58361449e565b9250826143f5576143f46145c5565b5b828204905092915050565b600061440b8261449e565b91506144168361449e565b92508282101561442957614428614596565b5b828203905092915050565b600061443f8261447e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144d55780820151818401526020810190506144ba565b838111156144e4576000848401525b50505050565b6000600282049050600182168061450257607f821691505b60208210811415614516576145156145f4565b5b50919050565b60006145278261449e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561455a57614559614596565b5b600182019050919050565b60006145708261449e565b915061457b8361449e565b92508261458b5761458a6145c5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d101561468057614723565b60046000803e614691600051614663565b6308c379a081146146a25750614723565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156146ce57505050614723565b808201805167ffffffffffffffff8111156146ed575050505050614723565b8060208301013d850181111561470857505050505050614723565b61471182614652565b60208401016040528296505050505050505b90565b61472f81614434565b811461473a57600080fd5b50565b61474681614446565b811461475157600080fd5b50565b61475d81614452565b811461476857600080fd5b50565b6147748161449e565b811461477f57600080fd5b5056fea2646970667358221220e922d5385cd046dec7562b252290374a35770f686cdfa2b31d1562a252243dff64736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f5072696d657a204e46542d313135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000750524d3131353500000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Primez NFT-1155
Arg [1] : symbol_ (string): PRM1155

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [3] : 5072696d657a204e46542d313135350000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 50524d3131353500000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45809:2941:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48637:110;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27139:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26162:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46245:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46574:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46369:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47711:350;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46937:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48069:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29078:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47093:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27536:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43476:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45377:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6311:103;;;:::i;:::-;;46760:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5660:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46665;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28133:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43265:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28360:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47306:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6569:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45048:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48637:110;48684:7;48737:1;48710:25;:15;:23;:25::i;:::-;:28;;;;:::i;:::-;48703:35;;48637:110;:::o;27139:231::-;27225:7;27272:1;27253:21;;:7;:21;;;;27245:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;27340:9;:13;27350:2;27340:13;;;;;;;;;;;:22;27354:7;27340:22;;;;;;;;;;;;;;;;27333:29;;27139:231;;;;:::o;26162:310::-;26264:4;26316:26;26301:41;;;:11;:41;;;;:110;;;;26374:37;26359:52;;;:11;:52;;;;26301:110;:163;;;;26428:36;26452:11;26428:23;:36::i;:::-;26301:163;26281:183;;26162:310;;;:::o;46245:116::-;5891:12;:10;:12::i;:::-;5880:23;;:7;:5;:7::i;:::-;:23;;;5872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46321:6:::1;46311:7;:16;;;;;;;;;;;;:::i;:::-;;46338:15;46346:6;46338:7;:15::i;:::-;46245:116:::0;:::o;46574:83::-;46611:13;46644:5;46637:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46574:83;:::o;46369:196::-;46430:13;46487:1;46469:7;46463:21;;;;;:::i;:::-;;;:25;:94;;;;;;;;;;;;;;;;;46515:7;46524:26;46541:8;46524:16;:26::i;:::-;46498:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46463:94;46456:101;;46369:196;;;:::o;47711:350::-;47882:10;47874:18;;:4;:18;;;:56;;;;47896:34;47913:4;47919:10;47896:16;:34::i;:::-;47874:56;47852:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;48010:43;48028:4;48034:2;48038;48042:6;48010:43;;;;;;;;;;;;:17;:43::i;:::-;47711:350;;;;:::o;46937:148::-;5891:12;:10;:12::i;:::-;5880:23;;:7;:5;:7::i;:::-;:23;;;5872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47047:30:::1;47053:7;47062:2;47066:6;47047:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;46937:148:::0;;;:::o;48069:191::-;5891:12;:10;:12::i;:::-;5880:23;;:7;:5;:7::i;:::-;:23;;;5872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48218:34:::1;48229:2;48233:3;48238:7;48247:4;48218:10;:34::i;:::-;48069:191:::0;;;;:::o;29078:442::-;29319:12;:10;:12::i;:::-;29311:20;;:4;:20;;;:60;;;;29335:36;29352:4;29358:12;:10;:12::i;:::-;29335:16;:36::i;:::-;29311:60;29289:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;29460:52;29483:4;29489:2;29493:3;29498:7;29507:4;29460:22;:52::i;:::-;29078:442;;;;;:::o;47093:205::-;5891:12;:10;:12::i;:::-;5880:23;;:7;:5;:7::i;:::-;:23;;;5872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47168:15:::1;47186:25;:15;:23;:25::i;:::-;47168:43;;47222:27;:15;:25;:27::i;:::-;47260:30;47265:7;47274;47283:6;47260:4;:30::i;:::-;5951:1;47093:205:::0;;:::o;27536:524::-;27692:16;27753:3;:10;27734:8;:15;:29;27726:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27822:30;27869:8;:15;27855:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27822:63;;27903:9;27898:122;27922:8;:15;27918:1;:19;27898:122;;;27978:30;27988:8;27997:1;27988:11;;;;;;;;;;;;;;;;;;;;;;28001:3;28005:1;28001:6;;;;;;;;;;;;;;;;;;;;;;27978:9;:30::i;:::-;27959:13;27973:1;27959:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;27939:3;;;;:::i;:::-;;;27898:122;;;;28039:13;28032:20;;;27536:524;;;;:::o;43476:122::-;43533:4;43589:1;43557:29;43583:2;43557:25;:29::i;:::-;:33;43550:40;;43476:122;;;:::o;45377:353::-;45553:12;:10;:12::i;:::-;45542:23;;:7;:23;;;:66;;;;45569:39;45586:7;45595:12;:10;:12::i;:::-;45569:16;:39::i;:::-;45542:66;45520:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;45690:32;45701:7;45710:3;45715:6;45690:10;:32::i;:::-;45377:353;;;:::o;6311:103::-;5891:12;:10;:12::i;:::-;5880:23;;:7;:5;:7::i;:::-;:23;;;5872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6376:30:::1;6403:1;6376:18;:30::i;:::-;6311:103::o:0;46760:169::-;5891:12;:10;:12::i;:::-;5880:23;;:7;:5;:7::i;:::-;:23;;;5872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46889:32:::1;46895:7;46904:2;46908:6;46916:4;46889:5;:32::i;:::-;46760:169:::0;;;;:::o;5660:87::-;5706:7;5733:6;;;;;;;;;;;5726:13;;5660:87;:::o;46665:::-;46704:13;46737:7;46730:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46665:87;:::o;28133:155::-;28228:52;28247:12;:10;:12::i;:::-;28261:8;28271;28228:18;:52::i;:::-;28133:155;;:::o;43265:113::-;43327:7;43354:12;:16;43367:2;43354:16;;;;;;;;;;;;43347:23;;43265:113;;;:::o;28360:168::-;28459:4;28483:18;:27;28502:7;28483:27;;;;;;;;;;;;;;;:37;28511:8;28483:37;;;;;;;;;;;;;;;;;;;;;;;;;28476:44;;28360:168;;;;:::o;47306:397::-;47522:10;47514:18;;:4;:18;;;:56;;;;47536:34;47553:4;47559:10;47536:16;:34::i;:::-;47514:56;47492:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;47650:45;47668:4;47674:2;47678;47682:6;47690:4;47650:17;:45::i;:::-;47306:397;;;;;:::o;6569:201::-;5891:12;:10;:12::i;:::-;5880:23;;:7;:5;:7::i;:::-;:23;;;5872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6678:1:::1;6658:22;;:8;:22;;;;6650:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6734:28;6753:8;6734:18;:28::i;:::-;6569:201:::0;:::o;45048:321::-;45199:12;:10;:12::i;:::-;45188:23;;:7;:23;;;:66;;;;45215:39;45232:7;45241:12;:10;:12::i;:::-;45215:16;:39::i;:::-;45188:66;45166:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;45336:25;45342:7;45351:2;45355:5;45336;:25::i;:::-;45048:321;;;:::o;3100:114::-;3165:7;3192;:14;;;3185:21;;3100:114;;;:::o;17431:157::-;17516:4;17555:25;17540:40;;;:11;:40;;;;17533:47;;17431:157;;;:::o;4378:98::-;4431:7;4458:10;4451:17;;4378:98;:::o;33306:88::-;33380:6;33373:4;:13;;;;;;;;;;;;:::i;:::-;;33306:88;:::o;469:723::-;525:13;755:1;746:5;:10;742:53;;;773:10;;;;;;;;;;;;;;;;;;;;;742:53;805:12;820:5;805:20;;836:14;861:78;876:1;868:4;:9;861:78;;894:8;;;;;:::i;:::-;;;;925:2;917:10;;;;;:::i;:::-;;;861:78;;;949:19;981:6;971:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;949:39;;999:154;1015:1;1006:5;:10;999:154;;1043:1;1033:11;;;;;:::i;:::-;;;1110:2;1102:5;:10;;;;:::i;:::-;1089:2;:24;;;;:::i;:::-;1076:39;;1059:6;1066;1059:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1139:2;1130:11;;;;;:::i;:::-;;;999:154;;;1177:6;1163:21;;;;;469:723;;;;:::o;29984:974::-;30186:1;30172:16;;:2;:16;;;;30164:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30243:16;30262:12;:10;:12::i;:::-;30243:31;;30285:20;30308:21;30326:2;30308:17;:21::i;:::-;30285:44;;30340:24;30367:25;30385:6;30367:17;:25::i;:::-;30340:52;;30405:60;30426:8;30436:4;30442:2;30446:3;30451:7;30460:4;30405:20;:60::i;:::-;30478:19;30500:9;:13;30510:2;30500:13;;;;;;;;;;;:19;30514:4;30500:19;;;;;;;;;;;;;;;;30478:41;;30553:6;30538:11;:21;;30530:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30678:6;30664:11;:20;30642:9;:13;30652:2;30642:13;;;;;;;;;;;:19;30656:4;30642:19;;;;;;;;;;;;;;;:42;;;;30727:6;30706:9;:13;30716:2;30706:13;;;;;;;;;;;:17;30720:2;30706:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30782:2;30751:46;;30776:4;30751:46;;30766:8;30751:46;;;30786:2;30790:6;30751:46;;;;;;;:::i;:::-;;;;;;;;30810:59;30830:8;30840:4;30846:2;30850:3;30855:7;30864:4;30810:19;:59::i;:::-;30882:68;30913:8;30923:4;30929:2;30933;30937:6;30945:4;30882:30;:68::i;:::-;29984:974;;;;;;;;;:::o;33780:729::-;33947:1;33933:16;;:2;:16;;;;33925:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34000:16;34019:12;:10;:12::i;:::-;34000:31;;34042:20;34065:21;34083:2;34065:17;:21::i;:::-;34042:44;;34097:24;34124:25;34142:6;34124:17;:25::i;:::-;34097:52;;34162:66;34183:8;34201:1;34205:2;34209:3;34214:7;34223:4;34162:20;:66::i;:::-;34262:6;34241:9;:13;34251:2;34241:13;;;;;;;;;;;:17;34255:2;34241:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;34321:2;34284:52;;34317:1;34284:52;;34299:8;34284:52;;;34325:2;34329:6;34284:52;;;;;;;:::i;:::-;;;;;;;;34349:65;34369:8;34387:1;34391:2;34395:3;34400:7;34409:4;34349:19;:65::i;:::-;34427:74;34458:8;34476:1;34480:2;34484;34488:6;34496:4;34427:30;:74::i;:::-;33780:729;;;;;;;:::o;34865:813::-;35057:1;35043:16;;:2;:16;;;;35035:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35130:7;:14;35116:3;:10;:28;35108:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35202:16;35221:12;:10;:12::i;:::-;35202:31;;35246:66;35267:8;35285:1;35289:2;35293:3;35298:7;35307:4;35246:20;:66::i;:::-;35330:9;35325:103;35349:3;:10;35345:1;:14;35325:103;;;35406:7;35414:1;35406:10;;;;;;;;;;;;;;;;;;;;;;35381:9;:17;35391:3;35395:1;35391:6;;;;;;;;;;;;;;;;;;;;;;35381:17;;;;;;;;;;;:21;35399:2;35381:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;35361:3;;;;;:::i;:::-;;;;35325:103;;;;35481:2;35445:53;;35477:1;35445:53;;35459:8;35445:53;;;35485:3;35490:7;35445:53;;;;;;;:::i;:::-;;;;;;;;35511:65;35531:8;35549:1;35553:2;35557:3;35562:7;35571:4;35511:19;:65::i;:::-;35589:81;35625:8;35643:1;35647:2;35651:3;35656:7;35665:4;35589:35;:81::i;:::-;34865:813;;;;;:::o;31316:1146::-;31543:7;:14;31529:3;:10;:28;31521:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31635:1;31621:16;;:2;:16;;;;31613:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31692:16;31711:12;:10;:12::i;:::-;31692:31;;31736:60;31757:8;31767:4;31773:2;31777:3;31782:7;31791:4;31736:20;:60::i;:::-;31814:9;31809:421;31833:3;:10;31829:1;:14;31809:421;;;31865:10;31878:3;31882:1;31878:6;;;;;;;;;;;;;;;;;;;;;;31865:19;;31899:14;31916:7;31924:1;31916:10;;;;;;;;;;;;;;;;;;;;;;31899:27;;31943:19;31965:9;:13;31975:2;31965:13;;;;;;;;;;;:19;31979:4;31965:19;;;;;;;;;;;;;;;;31943:41;;32022:6;32007:11;:21;;31999:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32155:6;32141:11;:20;32119:9;:13;32129:2;32119:13;;;;;;;;;;;:19;32133:4;32119:19;;;;;;;;;;;;;;;:42;;;;32212:6;32191:9;:13;32201:2;32191:13;;;;;;;;;;;:17;32205:2;32191:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31809:421;;;31845:3;;;;:::i;:::-;;;31809:421;;;;32277:2;32247:47;;32271:4;32247:47;;32261:8;32247:47;;;32281:3;32286:7;32247:47;;;;;;;:::i;:::-;;;;;;;;32307:59;32327:8;32337:4;32343:2;32347:3;32352:7;32361:4;32307:19;:59::i;:::-;32379:75;32415:8;32425:4;32431:2;32435:3;32440:7;32449:4;32379:35;:75::i;:::-;31316:1146;;;;;;:::o;3222:127::-;3329:1;3311:7;:14;;;:19;;;;;;;;;;;3222:127;:::o;36939:969::-;37107:1;37091:18;;:4;:18;;;;37083:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37182:7;:14;37168:3;:10;:28;37160:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37254:16;37273:12;:10;:12::i;:::-;37254:31;;37298:66;37319:8;37329:4;37343:1;37347:3;37352:7;37298:66;;;;;;;;;;;;:20;:66::i;:::-;37382:9;37377:373;37401:3;:10;37397:1;:14;37377:373;;;37433:10;37446:3;37450:1;37446:6;;;;;;;;;;;;;;;;;;;;;;37433:19;;37467:14;37484:7;37492:1;37484:10;;;;;;;;;;;;;;;;;;;;;;37467:27;;37511:19;37533:9;:13;37543:2;37533:13;;;;;;;;;;;:19;37547:4;37533:19;;;;;;;;;;;;;;;;37511:41;;37590:6;37575:11;:21;;37567:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37717:6;37703:11;:20;37681:9;:13;37691:2;37681:13;;;;;;;;;;;:19;37695:4;37681:19;;;;;;;;;;;;;;;:42;;;;37377:373;;;37413:3;;;;;:::i;:::-;;;;37377:373;;;;37805:1;37767:55;;37791:4;37767:55;;37781:8;37767:55;;;37809:3;37814:7;37767:55;;;;;;;:::i;:::-;;;;;;;;37835:65;37855:8;37865:4;37879:1;37883:3;37888:7;37835:65;;;;;;;;;;;;:19;:65::i;:::-;36939:969;;;;:::o;6930:191::-;7004:16;7023:6;;;;;;;;;;;7004:25;;7049:8;7040:6;;:17;;;;;;;;;;;;;;;;;;7104:8;7073:40;;7094:8;7073:40;;;;;;;;;;;;6930:191;;:::o;38050:331::-;38205:8;38196:17;;:5;:17;;;;38188:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38308:8;38270:18;:25;38289:5;38270:25;;;;;;;;;;;;;;;:35;38296:8;38270:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38354:8;38332:41;;38347:5;38332:41;;;38364:8;38332:41;;;;;;:::i;:::-;;;;;;;;38050:331;;;:::o;35928:808::-;36071:1;36055:18;;:4;:18;;;;36047:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36126:16;36145:12;:10;:12::i;:::-;36126:31;;36168:20;36191:21;36209:2;36191:17;:21::i;:::-;36168:44;;36223:24;36250:25;36268:6;36250:17;:25::i;:::-;36223:52;;36288:66;36309:8;36319:4;36333:1;36337:3;36342:7;36288:66;;;;;;;;;;;;:20;:66::i;:::-;36367:19;36389:9;:13;36399:2;36389:13;;;;;;;;;;;:19;36403:4;36389:19;;;;;;;;;;;;;;;;36367:41;;36442:6;36427:11;:21;;36419:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36561:6;36547:11;:20;36525:9;:13;36535:2;36525:13;;;;;;;;;;;:19;36539:4;36525:19;;;;;;;;;;;;;;;:42;;;;36635:1;36596:54;;36621:4;36596:54;;36611:8;36596:54;;;36639:2;36643:6;36596:54;;;;;;;:::i;:::-;;;;;;;;36663:65;36683:8;36693:4;36707:1;36711:3;36716:7;36663:65;;;;;;;;;;;;:19;:65::i;:::-;35928:808;;;;;;;:::o;42314:198::-;42380:16;42409:22;42448:1;42434:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42409:41;;42472:7;42461:5;42467:1;42461:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;42499:5;42492:12;;;42314:198;;;:::o;48338:291::-;48555:66;48582:8;48592:4;48598:2;48602:3;48607:7;48616:4;48555:26;:66::i;:::-;48338:291;;;;;;:::o;40513:220::-;;;;;;;:::o;40741:744::-;40956:15;:2;:13;;;:15::i;:::-;40952:526;;;41009:2;40992:38;;;41031:8;41041:4;41047:2;41051:6;41059:4;40992:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40988:479;;;;:::i;:::-;;;;;;;;41340:6;41333:14;;;;;;;;;;;:::i;:::-;;;;;;;;40988:479;41389:62;;;;;;;;;;:::i;:::-;;;;;;;;40988:479;41126:43;;;41114:55;;;:8;:55;;;;41110:154;;41194:50;;;;;;;;;;:::i;:::-;;;;;;;;41110:154;41065:214;40952:526;40741:744;;;;;;:::o;41493:813::-;41733:15;:2;:13;;;:15::i;:::-;41729:570;;;41786:2;41769:43;;;41813:8;41823:4;41829:3;41834:7;41843:4;41769:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41765:523;;;;:::i;:::-;;;;;;;;42161:6;42154:14;;;;;;;;;;;:::i;:::-;;;;;;;;41765:523;42210:62;;;;;;;;;;:::i;:::-;;;;;;;;41765:523;41942:48;;;41930:60;;;:8;:60;;;;41926:159;;42015:50;;;;;;;;;;:::i;:::-;;;;;;;;41926:159;41849:251;41729:570;41493:813;;;;;;:::o;43673:931::-;43912:66;43939:8;43949:4;43955:2;43959:3;43964:7;43973:4;43912:26;:66::i;:::-;44011:1;43995:18;;:4;:18;;;43991:160;;;44035:9;44030:110;44054:3;:10;44050:1;:14;44030:110;;;44114:7;44122:1;44114:10;;;;;;;;;;;;;;;;;;;;;;44090:12;:20;44103:3;44107:1;44103:6;;;;;;;;;;;;;;;;;;;;;;44090:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;44066:3;;;;:::i;:::-;;;44030:110;;;;43991:160;44181:1;44167:16;;:2;:16;;;44163:434;;;44205:9;44200:386;44224:3;:10;44220:1;:14;44200:386;;;44260:10;44273:3;44277:1;44273:6;;;;;;;;;;;;;;;;;;;;;;44260:19;;44298:14;44315:7;44323:1;44315:10;;;;;;;;;;;;;;;;;;;;;;44298:27;;44344:14;44361:12;:16;44374:2;44361:16;;;;;;;;;;;;44344:33;;44414:6;44404;:16;;44396:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44545:6;44536;:15;44517:12;:16;44530:2;44517:16;;;;;;;;;;;:34;;;;44200:386;;;44236:3;;;;:::i;:::-;;;44200:386;;;;44163:434;43673:931;;;;;;:::o;8367:326::-;8427:4;8684:1;8662:7;:12;;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;8655:30;;8367:326;;;:::o;39337:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2157:303::-;;2277:3;2270:4;2262:6;2258:17;2254:27;2244:2;;2295:1;2292;2285:12;2244:2;2335:6;2322:20;2360:94;2450:3;2442:6;2435:4;2427:6;2423:17;2360:94;:::i;:::-;2351:103;;2234:226;;;;;:::o;2483:303::-;;2603:3;2596:4;2588:6;2584:17;2580:27;2570:2;;2621:1;2618;2611:12;2570:2;2661:6;2648:20;2686:94;2776:3;2768:6;2761:4;2753:6;2749:17;2686:94;:::i;:::-;2677:103;;2560:226;;;;;:::o;2792:133::-;;2873:6;2860:20;2851:29;;2889:30;2913:5;2889:30;:::i;:::-;2841:84;;;;:::o;2931:137::-;;3014:6;3001:20;2992:29;;3030:32;3056:5;3030:32;:::i;:::-;2982:86;;;;:::o;3074:141::-;;3161:6;3155:13;3146:22;;3177:32;3203:5;3177:32;:::i;:::-;3136:79;;;;:::o;3234:271::-;;3338:3;3331:4;3323:6;3319:17;3315:27;3305:2;;3356:1;3353;3346:12;3305:2;3396:6;3383:20;3421:78;3495:3;3487:6;3480:4;3472:6;3468:17;3421:78;:::i;:::-;3412:87;;3295:210;;;;;:::o;3525:273::-;;3630:3;3623:4;3615:6;3611:17;3607:27;3597:2;;3648:1;3645;3638:12;3597:2;3688:6;3675:20;3713:79;3788:3;3780:6;3773:4;3765:6;3761:17;3713:79;:::i;:::-;3704:88;;3587:211;;;;;:::o;3804:139::-;;3888:6;3875:20;3866:29;;3904:33;3931:5;3904:33;:::i;:::-;3856:87;;;;:::o;3949:262::-;;4057:2;4045:9;4036:7;4032:23;4028:32;4025:2;;;4073:1;4070;4063:12;4025:2;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4015:196;;;;:::o;4217:407::-;;;4342:2;4330:9;4321:7;4317:23;4313:32;4310:2;;;4358:1;4355;4348:12;4310:2;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4300:324;;;;;:::o;4630:1241::-;;;;;;4865:3;4853:9;4844:7;4840:23;4836:33;4833:2;;;4882:1;4879;4872:12;4833:2;4925:1;4950:53;4995:7;4986:6;4975:9;4971:22;4950:53;:::i;:::-;4940:63;;4896:117;5052:2;5078:53;5123:7;5114:6;5103:9;5099:22;5078:53;:::i;:::-;5068:63;;5023:118;5208:2;5197:9;5193:18;5180:32;5239:18;5231:6;5228:30;5225:2;;;5271:1;5268;5261:12;5225:2;5299:78;5369:7;5360:6;5349:9;5345:22;5299:78;:::i;:::-;5289:88;;5151:236;5454:2;5443:9;5439:18;5426:32;5485:18;5477:6;5474:30;5471:2;;;5517:1;5514;5507:12;5471:2;5545:78;5615:7;5606:6;5595:9;5591:22;5545:78;:::i;:::-;5535:88;;5397:236;5700:3;5689:9;5685:19;5672:33;5732:18;5724:6;5721:30;5718:2;;;5764:1;5761;5754:12;5718:2;5792:62;5846:7;5837:6;5826:9;5822:22;5792:62;:::i;:::-;5782:72;;5643:221;4823:1048;;;;;;;;:::o;5877:698::-;;;;;6036:3;6024:9;6015:7;6011:23;6007:33;6004:2;;;6053:1;6050;6043:12;6004:2;6096:1;6121:53;6166:7;6157:6;6146:9;6142:22;6121:53;:::i;:::-;6111:63;;6067:117;6223:2;6249:53;6294:7;6285:6;6274:9;6270:22;6249:53;:::i;:::-;6239:63;;6194:118;6351:2;6377:53;6422:7;6413:6;6402:9;6398:22;6377:53;:::i;:::-;6367:63;;6322:118;6479:2;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6450:118;5994:581;;;;;;;:::o;6581:955::-;;;;;;6766:3;6754:9;6745:7;6741:23;6737:33;6734:2;;;6783:1;6780;6773:12;6734:2;6826:1;6851:53;6896:7;6887:6;6876:9;6872:22;6851:53;:::i;:::-;6841:63;;6797:117;6953:2;6979:53;7024:7;7015:6;7004:9;7000:22;6979:53;:::i;:::-;6969:63;;6924:118;7081:2;7107:53;7152:7;7143:6;7132:9;7128:22;7107:53;:::i;:::-;7097:63;;7052:118;7209:2;7235:53;7280:7;7271:6;7260:9;7256:22;7235:53;:::i;:::-;7225:63;;7180:118;7365:3;7354:9;7350:19;7337:33;7397:18;7389:6;7386:30;7383:2;;;7429:1;7426;7419:12;7383:2;7457:62;7511:7;7502:6;7491:9;7487:22;7457:62;:::i;:::-;7447:72;;7308:221;6724:812;;;;;;;;:::o;7542:838::-;;;;7734:2;7722:9;7713:7;7709:23;7705:32;7702:2;;;7750:1;7747;7740:12;7702:2;7793:1;7818:53;7863:7;7854:6;7843:9;7839:22;7818:53;:::i;:::-;7808:63;;7764:117;7948:2;7937:9;7933:18;7920:32;7979:18;7971:6;7968:30;7965:2;;;8011:1;8008;8001:12;7965:2;8039:78;8109:7;8100:6;8089:9;8085:22;8039:78;:::i;:::-;8029:88;;7891:236;8194:2;8183:9;8179:18;8166:32;8225:18;8217:6;8214:30;8211:2;;;8257:1;8254;8247:12;8211:2;8285:78;8355:7;8346:6;8335:9;8331:22;8285:78;:::i;:::-;8275:88;;8137:236;7692:688;;;;;:::o;8386:1095::-;;;;;8604:3;8592:9;8583:7;8579:23;8575:33;8572:2;;;8621:1;8618;8611:12;8572:2;8664:1;8689:53;8734:7;8725:6;8714:9;8710:22;8689:53;:::i;:::-;8679:63;;8635:117;8819:2;8808:9;8804:18;8791:32;8850:18;8842:6;8839:30;8836:2;;;8882:1;8879;8872:12;8836:2;8910:78;8980:7;8971:6;8960:9;8956:22;8910:78;:::i;:::-;8900:88;;8762:236;9065:2;9054:9;9050:18;9037:32;9096:18;9088:6;9085:30;9082:2;;;9128:1;9125;9118:12;9082:2;9156:78;9226:7;9217:6;9206:9;9202:22;9156:78;:::i;:::-;9146:88;;9008:236;9311:2;9300:9;9296:18;9283:32;9342:18;9334:6;9331:30;9328:2;;;9374:1;9371;9364:12;9328:2;9402:62;9456:7;9447:6;9436:9;9432:22;9402:62;:::i;:::-;9392:72;;9254:220;8562:919;;;;;;;:::o;9487:401::-;;;9609:2;9597:9;9588:7;9584:23;9580:32;9577:2;;;9625:1;9622;9615:12;9577:2;9668:1;9693:53;9738:7;9729:6;9718:9;9714:22;9693:53;:::i;:::-;9683:63;;9639:117;9795:2;9821:50;9863:7;9854:6;9843:9;9839:22;9821:50;:::i;:::-;9811:60;;9766:115;9567:321;;;;;:::o;9894:407::-;;;10019:2;10007:9;9998:7;9994:23;9990:32;9987:2;;;10035:1;10032;10025:12;9987:2;10078:1;10103:53;10148:7;10139:6;10128:9;10124:22;10103:53;:::i;:::-;10093:63;;10049:117;10205:2;10231:53;10276:7;10267:6;10256:9;10252:22;10231:53;:::i;:::-;10221:63;;10176:118;9977:324;;;;;:::o;10307:552::-;;;;10449:2;10437:9;10428:7;10424:23;10420:32;10417:2;;;10465:1;10462;10455:12;10417:2;10508:1;10533:53;10578:7;10569:6;10558:9;10554:22;10533:53;:::i;:::-;10523:63;;10479:117;10635:2;10661:53;10706:7;10697:6;10686:9;10682:22;10661:53;:::i;:::-;10651:63;;10606:118;10763:2;10789:53;10834:7;10825:6;10814:9;10810:22;10789:53;:::i;:::-;10779:63;;10734:118;10407:452;;;;;:::o;10865:809::-;;;;;11033:3;11021:9;11012:7;11008:23;11004:33;11001:2;;;11050:1;11047;11040:12;11001:2;11093:1;11118:53;11163:7;11154:6;11143:9;11139:22;11118:53;:::i;:::-;11108:63;;11064:117;11220:2;11246:53;11291:7;11282:6;11271:9;11267:22;11246:53;:::i;:::-;11236:63;;11191:118;11348:2;11374:53;11419:7;11410:6;11399:9;11395:22;11374:53;:::i;:::-;11364:63;;11319:118;11504:2;11493:9;11489:18;11476:32;11535:18;11527:6;11524:30;11521:2;;;11567:1;11564;11557:12;11521:2;11595:62;11649:7;11640:6;11629:9;11625:22;11595:62;:::i;:::-;11585:72;;11447:220;10991:683;;;;;;;:::o;11680:693::-;;;11855:2;11843:9;11834:7;11830:23;11826:32;11823:2;;;11871:1;11868;11861:12;11823:2;11942:1;11931:9;11927:17;11914:31;11972:18;11964:6;11961:30;11958:2;;;12004:1;12001;11994:12;11958:2;12032:78;12102:7;12093:6;12082:9;12078:22;12032:78;:::i;:::-;12022:88;;11885:235;12187:2;12176:9;12172:18;12159:32;12218:18;12210:6;12207:30;12204:2;;;12250:1;12247;12240:12;12204:2;12278:78;12348:7;12339:6;12328:9;12324:22;12278:78;:::i;:::-;12268:88;;12130:236;11813:560;;;;;:::o;12379:260::-;;12486:2;12474:9;12465:7;12461:23;12457:32;12454:2;;;12502:1;12499;12492:12;12454:2;12545:1;12570:52;12614:7;12605:6;12594:9;12590:22;12570:52;:::i;:::-;12560:62;;12516:116;12444:195;;;;:::o;12645:282::-;;12763:2;12751:9;12742:7;12738:23;12734:32;12731:2;;;12779:1;12776;12769:12;12731:2;12822:1;12847:63;12902:7;12893:6;12882:9;12878:22;12847:63;:::i;:::-;12837:73;;12793:127;12721:206;;;;:::o;12933:375::-;;13051:2;13039:9;13030:7;13026:23;13022:32;13019:2;;;13067:1;13064;13057:12;13019:2;13138:1;13127:9;13123:17;13110:31;13168:18;13160:6;13157:30;13154:2;;;13200:1;13197;13190:12;13154:2;13228:63;13283:7;13274:6;13263:9;13259:22;13228:63;:::i;:::-;13218:73;;13081:220;13009:299;;;;:::o;13314:262::-;;13422:2;13410:9;13401:7;13397:23;13393:32;13390:2;;;13438:1;13435;13428:12;13390:2;13481:1;13506:53;13551:7;13542:6;13531:9;13527:22;13506:53;:::i;:::-;13496:63;;13452:117;13380:196;;;;:::o;13582:179::-;;13672:46;13714:3;13706:6;13672:46;:::i;:::-;13750:4;13745:3;13741:14;13727:28;;13662:99;;;;:::o;13767:118::-;13854:24;13872:5;13854:24;:::i;:::-;13849:3;13842:37;13832:53;;:::o;13921:732::-;;14069:54;14117:5;14069:54;:::i;:::-;14139:86;14218:6;14213:3;14139:86;:::i;:::-;14132:93;;14249:56;14299:5;14249:56;:::i;:::-;14328:7;14359:1;14344:284;14369:6;14366:1;14363:13;14344:284;;;14445:6;14439:13;14472:63;14531:3;14516:13;14472:63;:::i;:::-;14465:70;;14558:60;14611:6;14558:60;:::i;:::-;14548:70;;14404:224;14391:1;14388;14384:9;14379:14;;14344:284;;;14348:14;14644:3;14637:10;;14045:608;;;;;;;:::o;14659:109::-;14740:21;14755:5;14740:21;:::i;:::-;14735:3;14728:34;14718:50;;:::o;14774:360::-;;14888:38;14920:5;14888:38;:::i;:::-;14942:70;15005:6;15000:3;14942:70;:::i;:::-;14935:77;;15021:52;15066:6;15061:3;15054:4;15047:5;15043:16;15021:52;:::i;:::-;15098:29;15120:6;15098:29;:::i;:::-;15093:3;15089:39;15082:46;;14864:270;;;;;:::o;15140:364::-;;15256:39;15289:5;15256:39;:::i;:::-;15311:71;15375:6;15370:3;15311:71;:::i;:::-;15304:78;;15391:52;15436:6;15431:3;15424:4;15417:5;15413:16;15391:52;:::i;:::-;15468:29;15490:6;15468:29;:::i;:::-;15463:3;15459:39;15452:46;;15232:272;;;;;:::o;15510:377::-;;15644:39;15677:5;15644:39;:::i;:::-;15699:89;15781:6;15776:3;15699:89;:::i;:::-;15692:96;;15797:52;15842:6;15837:3;15830:4;15823:5;15819:16;15797:52;:::i;:::-;15874:6;15869:3;15865:16;15858:23;;15620:267;;;;;:::o;15917:845::-;;16057:5;16051:12;16086:36;16112:9;16086:36;:::i;:::-;16138:89;16220:6;16215:3;16138:89;:::i;:::-;16131:96;;16258:1;16247:9;16243:17;16274:1;16269:137;;;;16420:1;16415:341;;;;16236:520;;16269:137;16353:4;16349:9;16338;16334:25;16329:3;16322:38;16389:6;16384:3;16380:16;16373:23;;16269:137;;16415:341;16482:38;16514:5;16482:38;:::i;:::-;16542:1;16556:154;16570:6;16567:1;16564:13;16556:154;;;16644:7;16638:14;16634:1;16629:3;16625:11;16618:35;16694:1;16685:7;16681:15;16670:26;;16592:4;16589:1;16585:12;16580:17;;16556:154;;;16739:6;16734:3;16730:16;16723:23;;16422:334;;16236:520;;16024:738;;;;;;:::o;16768:384::-;;16931:67;16995:2;16990:3;16931:67;:::i;:::-;16924:74;;17028:34;17024:1;17019:3;17015:11;17008:55;17094:22;17089:2;17084:3;17080:12;17073:44;17143:2;17138:3;17134:12;17127:19;;16914:238;;;:::o;17158:372::-;;17321:67;17385:2;17380:3;17321:67;:::i;:::-;17314:74;;17418:34;17414:1;17409:3;17405:11;17398:55;17484:10;17479:2;17474:3;17470:12;17463:32;17521:2;17516:3;17512:12;17505:19;;17304:226;;;:::o;17536:375::-;;17699:67;17763:2;17758:3;17699:67;:::i;:::-;17692:74;;17796:34;17792:1;17787:3;17783:11;17776:55;17862:13;17857:2;17852:3;17848:12;17841:35;17902:2;17897:3;17893:12;17886:19;;17682:229;;;:::o;17917:370::-;;18080:67;18144:2;18139:3;18080:67;:::i;:::-;18073:74;;18177:34;18173:1;18168:3;18164:11;18157:55;18243:8;18238:2;18233:3;18229:12;18222:30;18278:2;18273:3;18269:12;18262:19;;18063:224;;;:::o;18293:368::-;;18456:67;18520:2;18515:3;18456:67;:::i;:::-;18449:74;;18553:34;18549:1;18544:3;18540:11;18533:55;18619:6;18614:2;18609:3;18605:12;18598:28;18652:2;18647:3;18643:12;18636:19;;18439:222;;;:::o;18667:373::-;;18830:67;18894:2;18889:3;18830:67;:::i;:::-;18823:74;;18927:34;18923:1;18918:3;18914:11;18907:55;18993:11;18988:2;18983:3;18979:12;18972:33;19031:2;19026:3;19022:12;19015:19;;18813:227;;;:::o;19046:369::-;;19209:67;19273:2;19268:3;19209:67;:::i;:::-;19202:74;;19306:34;19302:1;19297:3;19293:11;19286:55;19372:7;19367:2;19362:3;19358:12;19351:29;19406:2;19401:3;19397:12;19390:19;;19192:223;;;:::o;19421:382::-;;19584:67;19648:2;19643:3;19584:67;:::i;:::-;19577:74;;19681:34;19677:1;19672:3;19668:11;19661:55;19747:20;19742:2;19737:3;19733:12;19726:42;19794:2;19789:3;19785:12;19778:19;;19567:236;;;:::o;19809:367::-;;19972:67;20036:2;20031:3;19972:67;:::i;:::-;19965:74;;20069:34;20065:1;20060:3;20056:11;20049:55;20135:5;20130:2;20125:3;20121:12;20114:27;20167:2;20162:3;20158:12;20151:19;;19955:221;;;:::o;20182:374::-;;20345:67;20409:2;20404:3;20345:67;:::i;:::-;20338:74;;20442:34;20438:1;20433:3;20429:11;20422:55;20508:12;20503:2;20498:3;20494:12;20487:34;20547:2;20542:3;20538:12;20531:19;;20328:228;;;:::o;20562:330::-;;20725:67;20789:2;20784:3;20725:67;:::i;:::-;20718:74;;20822:34;20818:1;20813:3;20809:11;20802:55;20883:2;20878:3;20874:12;20867:19;;20708:184;;;:::o;20898:372::-;;21061:67;21125:2;21120:3;21061:67;:::i;:::-;21054:74;;21158:34;21154:1;21149:3;21145:11;21138:55;21224:10;21219:2;21214:3;21210:12;21203:32;21261:2;21256:3;21252:12;21245:19;;21044:226;;;:::o;21276:373::-;;21439:67;21503:2;21498:3;21439:67;:::i;:::-;21432:74;;21536:34;21532:1;21527:3;21523:11;21516:55;21602:11;21597:2;21592:3;21588:12;21581:33;21640:2;21635:3;21631:12;21624:19;;21422:227;;;:::o;21655:373::-;;21818:67;21882:2;21877:3;21818:67;:::i;:::-;21811:74;;21915:34;21911:1;21906:3;21902:11;21895:55;21981:11;21976:2;21971:3;21967:12;21960:33;22019:2;22014:3;22010:12;22003:19;;21801:227;;;:::o;22034:372::-;;22197:67;22261:2;22256:3;22197:67;:::i;:::-;22190:74;;22294:34;22290:1;22285:3;22281:11;22274:55;22360:10;22355:2;22350:3;22346:12;22339:32;22397:2;22392:3;22388:12;22381:19;;22180:226;;;:::o;22412:365::-;;22575:67;22639:2;22634:3;22575:67;:::i;:::-;22568:74;;22672:34;22668:1;22663:3;22659:11;22652:55;22738:3;22733:2;22728:3;22724:12;22717:25;22768:2;22763:3;22759:12;22752:19;;22558:219;;;:::o;22783:108::-;22860:24;22878:5;22860:24;:::i;:::-;22855:3;22848:37;22838:53;;:::o;22897:118::-;22984:24;23002:5;22984:24;:::i;:::-;22979:3;22972:37;22962:53;;:::o;23021:429::-;;23220:92;23308:3;23299:6;23220:92;:::i;:::-;23213:99;;23329:95;23420:3;23411:6;23329:95;:::i;:::-;23322:102;;23441:3;23434:10;;23202:248;;;;;:::o;23456:222::-;;23587:2;23576:9;23572:18;23564:26;;23600:71;23668:1;23657:9;23653:17;23644:6;23600:71;:::i;:::-;23554:124;;;;:::o;23684:1053::-;;24045:3;24034:9;24030:19;24022:27;;24059:71;24127:1;24116:9;24112:17;24103:6;24059:71;:::i;:::-;24140:72;24208:2;24197:9;24193:18;24184:6;24140:72;:::i;:::-;24259:9;24253:4;24249:20;24244:2;24233:9;24229:18;24222:48;24287:108;24390:4;24381:6;24287:108;:::i;:::-;24279:116;;24442:9;24436:4;24432:20;24427:2;24416:9;24412:18;24405:48;24470:108;24573:4;24564:6;24470:108;:::i;:::-;24462:116;;24626:9;24620:4;24616:20;24610:3;24599:9;24595:19;24588:49;24654:76;24725:4;24716:6;24654:76;:::i;:::-;24646:84;;24012:725;;;;;;;;:::o;24743:751::-;;25004:3;24993:9;24989:19;24981:27;;25018:71;25086:1;25075:9;25071:17;25062:6;25018:71;:::i;:::-;25099:72;25167:2;25156:9;25152:18;25143:6;25099:72;:::i;:::-;25181;25249:2;25238:9;25234:18;25225:6;25181:72;:::i;:::-;25263;25331:2;25320:9;25316:18;25307:6;25263:72;:::i;:::-;25383:9;25377:4;25373:20;25367:3;25356:9;25352:19;25345:49;25411:76;25482:4;25473:6;25411:76;:::i;:::-;25403:84;;24971:523;;;;;;;;:::o;25500:373::-;;25681:2;25670:9;25666:18;25658:26;;25730:9;25724:4;25720:20;25716:1;25705:9;25701:17;25694:47;25758:108;25861:4;25852:6;25758:108;:::i;:::-;25750:116;;25648:225;;;;:::o;25879:634::-;;26138:2;26127:9;26123:18;26115:26;;26187:9;26181:4;26177:20;26173:1;26162:9;26158:17;26151:47;26215:108;26318:4;26309:6;26215:108;:::i;:::-;26207:116;;26370:9;26364:4;26360:20;26355:2;26344:9;26340:18;26333:48;26398:108;26501:4;26492:6;26398:108;:::i;:::-;26390:116;;26105:408;;;;;:::o;26519:210::-;;26644:2;26633:9;26629:18;26621:26;;26657:65;26719:1;26708:9;26704:17;26695:6;26657:65;:::i;:::-;26611:118;;;;:::o;26735:313::-;;26886:2;26875:9;26871:18;26863:26;;26935:9;26929:4;26925:20;26921:1;26910:9;26906:17;26899:47;26963:78;27036:4;27027:6;26963:78;:::i;:::-;26955:86;;26853:195;;;;:::o;27054:419::-;;27258:2;27247:9;27243:18;27235:26;;27307:9;27301:4;27297:20;27293:1;27282:9;27278:17;27271:47;27335:131;27461:4;27335:131;:::i;:::-;27327:139;;27225:248;;;:::o;27479:419::-;;27683:2;27672:9;27668:18;27660:26;;27732:9;27726:4;27722:20;27718:1;27707:9;27703:17;27696:47;27760:131;27886:4;27760:131;:::i;:::-;27752:139;;27650:248;;;:::o;27904:419::-;;28108:2;28097:9;28093:18;28085:26;;28157:9;28151:4;28147:20;28143:1;28132:9;28128:17;28121:47;28185:131;28311:4;28185:131;:::i;:::-;28177:139;;28075:248;;;:::o;28329:419::-;;28533:2;28522:9;28518:18;28510:26;;28582:9;28576:4;28572:20;28568:1;28557:9;28553:17;28546:47;28610:131;28736:4;28610:131;:::i;:::-;28602:139;;28500:248;;;:::o;28754:419::-;;28958:2;28947:9;28943:18;28935:26;;29007:9;29001:4;28997:20;28993:1;28982:9;28978:17;28971:47;29035:131;29161:4;29035:131;:::i;:::-;29027:139;;28925:248;;;:::o;29179:419::-;;29383:2;29372:9;29368:18;29360:26;;29432:9;29426:4;29422:20;29418:1;29407:9;29403:17;29396:47;29460:131;29586:4;29460:131;:::i;:::-;29452:139;;29350:248;;;:::o;29604:419::-;;29808:2;29797:9;29793:18;29785:26;;29857:9;29851:4;29847:20;29843:1;29832:9;29828:17;29821:47;29885:131;30011:4;29885:131;:::i;:::-;29877:139;;29775:248;;;:::o;30029:419::-;;30233:2;30222:9;30218:18;30210:26;;30282:9;30276:4;30272:20;30268:1;30257:9;30253:17;30246:47;30310:131;30436:4;30310:131;:::i;:::-;30302:139;;30200:248;;;:::o;30454:419::-;;30658:2;30647:9;30643:18;30635:26;;30707:9;30701:4;30697:20;30693:1;30682:9;30678:17;30671:47;30735:131;30861:4;30735:131;:::i;:::-;30727:139;;30625:248;;;:::o;30879:419::-;;31083:2;31072:9;31068:18;31060:26;;31132:9;31126:4;31122:20;31118:1;31107:9;31103:17;31096:47;31160:131;31286:4;31160:131;:::i;:::-;31152:139;;31050:248;;;:::o;31304:419::-;;31508:2;31497:9;31493:18;31485:26;;31557:9;31551:4;31547:20;31543:1;31532:9;31528:17;31521:47;31585:131;31711:4;31585:131;:::i;:::-;31577:139;;31475:248;;;:::o;31729:419::-;;31933:2;31922:9;31918:18;31910:26;;31982:9;31976:4;31972:20;31968:1;31957:9;31953:17;31946:47;32010:131;32136:4;32010:131;:::i;:::-;32002:139;;31900:248;;;:::o;32154:419::-;;32358:2;32347:9;32343:18;32335:26;;32407:9;32401:4;32397:20;32393:1;32382:9;32378:17;32371:47;32435:131;32561:4;32435:131;:::i;:::-;32427:139;;32325:248;;;:::o;32579:419::-;;32783:2;32772:9;32768:18;32760:26;;32832:9;32826:4;32822:20;32818:1;32807:9;32803:17;32796:47;32860:131;32986:4;32860:131;:::i;:::-;32852:139;;32750:248;;;:::o;33004:419::-;;33208:2;33197:9;33193:18;33185:26;;33257:9;33251:4;33247:20;33243:1;33232:9;33228:17;33221:47;33285:131;33411:4;33285:131;:::i;:::-;33277:139;;33175:248;;;:::o;33429:419::-;;33633:2;33622:9;33618:18;33610:26;;33682:9;33676:4;33672:20;33668:1;33657:9;33653:17;33646:47;33710:131;33836:4;33710:131;:::i;:::-;33702:139;;33600:248;;;:::o;33854:222::-;;33985:2;33974:9;33970:18;33962:26;;33998:71;34066:1;34055:9;34051:17;34042:6;33998:71;:::i;:::-;33952:124;;;;:::o;34082:332::-;;34241:2;34230:9;34226:18;34218:26;;34254:71;34322:1;34311:9;34307:17;34298:6;34254:71;:::i;:::-;34335:72;34403:2;34392:9;34388:18;34379:6;34335:72;:::i;:::-;34208:206;;;;;:::o;34420:283::-;;34486:2;34480:9;34470:19;;34528:4;34520:6;34516:17;34635:6;34623:10;34620:22;34599:18;34587:10;34584:34;34581:62;34578:2;;;34646:18;;:::i;:::-;34578:2;34686:10;34682:2;34675:22;34460:243;;;;:::o;34709:311::-;;34876:18;34868:6;34865:30;34862:2;;;34898:18;;:::i;:::-;34862:2;34948:4;34940:6;34936:17;34928:25;;35008:4;35002;34998:15;34990:23;;34791:229;;;:::o;35026:311::-;;35193:18;35185:6;35182:30;35179:2;;;35215:18;;:::i;:::-;35179:2;35265:4;35257:6;35253:17;35245:25;;35325:4;35319;35315:15;35307:23;;35108:229;;;:::o;35343:331::-;;35494:18;35486:6;35483:30;35480:2;;;35516:18;;:::i;:::-;35480:2;35601:4;35597:9;35590:4;35582:6;35578:17;35574:33;35566:41;;35662:4;35656;35652:15;35644:23;;35409:265;;;:::o;35680:332::-;;35832:18;35824:6;35821:30;35818:2;;;35854:18;;:::i;:::-;35818:2;35939:4;35935:9;35928:4;35920:6;35916:17;35912:33;35904:41;;36000:4;35994;35990:15;35982:23;;35747:265;;;:::o;36018:132::-;;36108:3;36100:11;;36138:4;36133:3;36129:14;36121:22;;36090:60;;;:::o;36156:141::-;;36228:3;36220:11;;36251:3;36248:1;36241:14;36285:4;36282:1;36272:18;36264:26;;36210:87;;;:::o;36303:114::-;;36404:5;36398:12;36388:22;;36377:40;;;:::o;36423:98::-;;36508:5;36502:12;36492:22;;36481:40;;;:::o;36527:99::-;;36613:5;36607:12;36597:22;;36586:40;;;:::o;36632:113::-;;36734:4;36729:3;36725:14;36717:22;;36707:38;;;:::o;36751:184::-;;36884:6;36879:3;36872:19;36924:4;36919:3;36915:14;36900:29;;36862:73;;;;:::o;36941:168::-;;37058:6;37053:3;37046:19;37098:4;37093:3;37089:14;37074:29;;37036:73;;;;:::o;37115:169::-;;37233:6;37228:3;37221:19;37273:4;37268:3;37264:14;37249:29;;37211:73;;;;:::o;37290:148::-;;37429:3;37414:18;;37404:34;;;;:::o;37444:305::-;;37503:20;37521:1;37503:20;:::i;:::-;37498:25;;37537:20;37555:1;37537:20;:::i;:::-;37532:25;;37691:1;37623:66;37619:74;37616:1;37613:81;37610:2;;;37697:18;;:::i;:::-;37610:2;37741:1;37738;37734:9;37727:16;;37488:261;;;;:::o;37755:185::-;;37812:20;37830:1;37812:20;:::i;:::-;37807:25;;37846:20;37864:1;37846:20;:::i;:::-;37841:25;;37885:1;37875:2;;37890:18;;:::i;:::-;37875:2;37932:1;37929;37925:9;37920:14;;37797:143;;;;:::o;37946:191::-;;38006:20;38024:1;38006:20;:::i;:::-;38001:25;;38040:20;38058:1;38040:20;:::i;:::-;38035:25;;38079:1;38076;38073:8;38070:2;;;38084:18;;:::i;:::-;38070:2;38129:1;38126;38122:9;38114:17;;37991:146;;;;:::o;38143:96::-;;38209:24;38227:5;38209:24;:::i;:::-;38198:35;;38188:51;;;:::o;38245:90::-;;38322:5;38315:13;38308:21;38297:32;;38287:48;;;:::o;38341:149::-;;38417:66;38410:5;38406:78;38395:89;;38385:105;;;:::o;38496:126::-;;38573:42;38566:5;38562:54;38551:65;;38541:81;;;:::o;38628:77::-;;38694:5;38683:16;;38673:32;;;:::o;38711:154::-;38795:6;38790:3;38785;38772:30;38857:1;38848:6;38843:3;38839:16;38832:27;38762:103;;;:::o;38871:307::-;38939:1;38949:113;38963:6;38960:1;38957:13;38949:113;;;39048:1;39043:3;39039:11;39033:18;39029:1;39024:3;39020:11;39013:39;38985:2;38982:1;38978:10;38973:15;;38949:113;;;39080:6;39077:1;39074:13;39071:2;;;39160:1;39151:6;39146:3;39142:16;39135:27;39071:2;38920:258;;;;:::o;39184:320::-;;39265:1;39259:4;39255:12;39245:22;;39312:1;39306:4;39302:12;39333:18;39323:2;;39389:4;39381:6;39377:17;39367:27;;39323:2;39451;39443:6;39440:14;39420:18;39417:38;39414:2;;;39470:18;;:::i;:::-;39414:2;39235:269;;;;:::o;39510:233::-;;39572:24;39590:5;39572:24;:::i;:::-;39563:33;;39618:66;39611:5;39608:77;39605:2;;;39688:18;;:::i;:::-;39605:2;39735:1;39728:5;39724:13;39717:20;;39553:190;;;:::o;39749:176::-;;39798:20;39816:1;39798:20;:::i;:::-;39793:25;;39832:20;39850:1;39832:20;:::i;:::-;39827:25;;39871:1;39861:2;;39876:18;;:::i;:::-;39861:2;39917:1;39914;39910:9;39905:14;;39783:142;;;;:::o;39931:180::-;39979:77;39976:1;39969:88;40076:4;40073:1;40066:15;40100:4;40097:1;40090:15;40117:180;40165:77;40162:1;40155:88;40262:4;40259:1;40252:15;40286:4;40283:1;40276:15;40303:180;40351:77;40348:1;40341:88;40448:4;40445:1;40438:15;40472:4;40469:1;40462:15;40489:180;40537:77;40534:1;40527:88;40634:4;40631:1;40624:15;40658:4;40655:1;40648:15;40675:102;;40767:2;40763:7;40758:2;40751:5;40747:14;40743:28;40733:38;;40723:54;;;:::o;40783:106::-;;40876:5;40871:3;40867:15;40846:36;;40836:53;;;:::o;40895:833::-;;40972:4;40954:16;40951:26;40948:2;;;40980:5;;40948:2;41018:1;41015;41012;40997:23;41040:34;41071:1;41065:8;41040:34;:::i;:::-;41101:10;41096:3;41093:19;41083:2;;41116:5;;;41083:2;41151;41145:9;41209:1;41191:16;41187:24;41184:1;41178:4;41163:49;41242:4;41236:11;41341:16;41334:4;41326:6;41322:17;41319:39;41286:18;41278:6;41275:30;41259:113;41256:2;;;41387:5;;;;;41256:2;41433:6;41427:4;41423:17;41469:3;41463:10;41496:18;41488:6;41485:30;41482:2;;;41518:5;;;;;;;41482:2;41566:6;41559:4;41554:3;41550:14;41546:27;41603:16;41597:4;41593:27;41588:3;41585:36;41582:2;;;41624:5;;;;;;;;41582:2;41672:29;41694:6;41672:29;:::i;:::-;41665:4;41660:3;41656:14;41652:50;41648:2;41641:62;41719:3;41712:10;;40938:790;;;;;;;;:::o;41734:122::-;41807:24;41825:5;41807:24;:::i;:::-;41800:5;41797:35;41787:2;;41846:1;41843;41836:12;41787:2;41777:79;:::o;41862:116::-;41932:21;41947:5;41932:21;:::i;:::-;41925:5;41922:32;41912:2;;41968:1;41965;41958:12;41912:2;41902:76;:::o;41984:120::-;42056:23;42073:5;42056:23;:::i;:::-;42049:5;42046:34;42036:2;;42094:1;42091;42084:12;42036:2;42026:78;:::o;42110:122::-;42183:24;42201:5;42183:24;:::i;:::-;42176:5;42173:35;42163:2;;42222:1;42219;42212:12;42163:2;42153:79;:::o

Swarm Source

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