POL Price: $0.428551 (+14.24%)
 

Overview

TokenID

884

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
MarvionVhNFTToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2023-07-13
*/

// SPDX-License-Identifier: MIT
// 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;
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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


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

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

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// contracts/MarvionVhNFTToken.sol
pragma solidity ^0.8.7;

contract MarvionVhNFTToken is ERC721, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor (string memory name, string memory symbol) ERC721("Marvion VhNFTs v1", "VhNFTs1"){}
    
    struct Item {
        uint256 id;
        address owner;
        string uri;
    }

    mapping (uint256 => Item) public Items;
    
    event createItemsEvent(uint256 nftId, string uri, uint256 itemId , address owner);

    function createItems(uint256[] memory nftId, string[] memory uris , address owner) public onlyOwner returns (uint[] memory){
        require(uris.length > 0, 'The uris is not valid');
        
        uint256[] memory newItems =  new uint[](uris.length);
      
        for(uint256 i = 0; i < uris.length; i++){
             _tokenIds.increment();
            uint256 newItemId = _tokenIds.current();
            _safeMint(owner, newItemId);
    
            Items[newItemId] = Item(newItemId, owner, uris[i]);
            
            newItems[i] = newItemId;
            
            emit createItemsEvent(nftId[i], uris[i], newItemId, owner);
        }
       

        return newItems;
    }
    

    function setApprovalForItems(address to, uint256[] memory tokenIds) public{
        require(tokenIds.length > 0, "The input data is incorrect");
        
        for(uint256 i = 0; i < tokenIds.length; i++){
            require(_isApprovedOrOwner(msg.sender, tokenIds[i]), "You are not owner of item");

            _approve(to, tokenIds[i]);
        }
    }

    function transfers(address[] memory froms, address[] memory tos, uint256[] memory tokenIds) public{
        require(froms.length == tos.length, "The input data is incorrect");
        require(tokenIds.length == tos.length, "The input data is incorrect");

        for(uint256 i = 0; i < froms.length; i++){
            require(_isApprovedOrOwner(msg.sender, tokenIds[i]), "You are not owner of item");

            _transfer(froms[i], tos[i], tokenIds[i]);
        }
    }
    

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

       return Items[tokenId].uri;
    }
}

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":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"createItemsEvent","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Items","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nftId","type":"uint256[]"},{"internalType":"string[]","name":"uris","type":"string[]"},{"internalType":"address","name":"owner","type":"address"}],"name":"createItems","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"setApprovalForItems","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"froms","type":"address[]"},{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"transfers","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162003a5e38038062003a5e8339818101604052810190620000379190620002fb565b6040518060400160405280601181526020017f4d617276696f6e2056684e4654732076310000000000000000000000000000008152506040518060400160405280600781526020017f56684e46547331000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620001cd565b508060019080519060200190620000d4929190620001cd565b505050620000f7620000eb620000ff60201b60201c565b6200010760201b60201c565b505062000504565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001db9062000415565b90600052602060002090601f016020900481019282620001ff57600085556200024b565b82601f106200021a57805160ff19168380011785556200024b565b828001600101855582156200024b579182015b828111156200024a5782518255916020019190600101906200022d565b5b5090506200025a91906200025e565b5090565b5b80821115620002795760008160009055506001016200025f565b5090565b6000620002946200028e84620003a9565b62000380565b905082815260208101848484011115620002b357620002b2620004e4565b5b620002c0848285620003df565b509392505050565b600082601f830112620002e057620002df620004df565b5b8151620002f28482602086016200027d565b91505092915050565b60008060408385031215620003155762000314620004ee565b5b600083015167ffffffffffffffff811115620003365762000335620004e9565b5b6200034485828601620002c8565b925050602083015167ffffffffffffffff811115620003685762000367620004e9565b5b6200037685828601620002c8565b9150509250929050565b60006200038c6200039f565b90506200039a82826200044b565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c757620003c6620004b0565b5b620003d282620004f3565b9050602081019050919050565b60005b83811015620003ff578082015181840152602081019050620003e2565b838111156200040f576000848401525b50505050565b600060028204905060018216806200042e57607f821691505b6020821081141562000445576200044462000481565b5b50919050565b6200045682620004f3565b810181811067ffffffffffffffff82111715620004785762000477620004b0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61354a80620005146000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063c87b56dd11610071578063c87b56dd1461032f578063dd3484451461035f578063e985e9c51461037b578063f2fde38b146103ab578063fd465134146103c75761012c565b8063715018a6146102b15780638da5cb5b146102bb57806395d89b41146102d9578063a22cb465146102f7578063b88d4fde146103135761012c565b8063217ab9d2116100f4578063217ab9d2146101fd57806323b872dd1461021957806342842e0e146102355780636352211e1461025157806370a08231146102815761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806317b47cc4146101cb575b600080fd5b61014b600480360381019061014691906124d2565b6103f7565b6040516101589190612959565b60405180910390f35b6101696104d9565b6040516101769190612974565b60405180910390f35b6101996004803603810190610194919061252c565b61056b565b6040516101a691906128d0565b60405180910390f35b6101c960048036038101906101c49190612360565b6105b1565b005b6101e560048036038101906101e0919061252c565b6106c9565b6040516101f493929190612bd1565b60405180910390f35b610217600480360381019061021291906123a0565b61079b565b005b610233600480360381019061022e91906121ee565b610904565b005b61024f600480360381019061024a91906121ee565b610964565b005b61026b6004803603810190610266919061252c565b610984565b60405161027891906128d0565b60405180910390f35b61029b60048036038101906102969190612181565b610a36565b6040516102a89190612bb6565b60405180910390f35b6102b9610aee565b005b6102c3610b02565b6040516102d091906128d0565b60405180910390f35b6102e1610b2c565b6040516102ee9190612974565b60405180910390f35b610311600480360381019061030c9190612320565b610bbe565b005b61032d60048036038101906103289190612241565b610bd4565b005b6103496004803603810190610344919061252c565b610c36565b6040516103569190612974565b60405180910390f35b610379600480360381019061037491906122c4565b610d26565b005b610395600480360381019061039091906121ae565b610e15565b6040516103a29190612959565b60405180910390f35b6103c560048036038101906103c09190612181565b610ea9565b005b6103e160048036038101906103dc9190612447565b610f2d565b6040516103ee9190612937565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104d257506104d182611177565b5b9050919050565b6060600080546104e890612f17565b80601f016020809104026020016040519081016040528092919081815260200182805461051490612f17565b80156105615780601f1061053657610100808354040283529160200191610561565b820191906000526020600020905b81548152906001019060200180831161054457829003601f168201915b5050505050905090565b6000610576826111e1565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105bc82610984565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490612b56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661064c61122c565b73ffffffffffffffffffffffffffffffffffffffff16148061067b575061067a8161067561122c565b610e15565b5b6106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190612ab6565b60405180910390fd5b6106c48383611234565b505050565b60086020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461071890612f17565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612f17565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905083565b81518351146107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d690612a16565b60405180910390fd5b8151815114610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90612a16565b60405180910390fd5b60005b83518110156108fe576108533383838151811061084657610845613021565b5b60200260200101516112ed565b610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990612a36565b60405180910390fd5b6108eb8482815181106108a8576108a7613021565b5b60200260200101518483815181106108c3576108c2613021565b5b60200260200101518484815181106108de576108dd613021565b5b6020026020010151611382565b80806108f690612f7a565b915050610826565b50505050565b61091561090f61122c565b826112ed565b610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90612b96565b60405180910390fd5b61095f838383611382565b505050565b61097f83838360405180602001604052806000815250610bd4565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490612b36565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90612a96565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610af66115e9565b610b006000611667565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b3b90612f17565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790612f17565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b5050505050905090565b610bd0610bc961122c565b838361172d565b5050565b610be5610bdf61122c565b836112ed565b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90612b96565b60405180910390fd5b610c308484848461189a565b50505050565b6060610c41826118f6565b610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790612b16565b60405180910390fd5b600860008381526020019081526020016000206002018054610ca190612f17565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90612f17565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b50505050509050919050565b6000815111610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612a16565b60405180910390fd5b60005b8151811015610e1057610d9a33838381518110610d8d57610d8c613021565b5b60200260200101516112ed565b610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612a36565b60405180910390fd5b610dfd83838381518110610df057610def613021565b5b6020026020010151611234565b8080610e0890612f7a565b915050610d6d565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610eb16115e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f18906129b6565b60405180910390fd5b610f2a81611667565b50565b6060610f376115e9565b6000835111610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290612b76565b60405180910390fd5b6000835167ffffffffffffffff811115610f9857610f97613050565b5b604051908082528060200260200182016040528015610fc65781602001602082028036833780820191505090505b50905060005b845181101561116b57610fdf6007611962565b6000610feb6007611978565b9050610ff78582611986565b60405180606001604052808281526020018673ffffffffffffffffffffffffffffffffffffffff16815260200187848151811061103757611036613021565b5b6020026020010151815250600860008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906110c2929190611d9d565b50905050808383815181106110da576110d9613021565b5b6020026020010181815250507f76bbebf8598c30d588fa6268dab08cd52e8a4b43b553c7843bdda7b53b47f67987838151811061111a57611119613021565b5b602002602001015187848151811061113557611134613021565b5b6020026020010151838860405161114f9493929190612c0f565b60405180910390a150808061116390612f7a565b915050610fcc565b50809150509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111ea816118f6565b611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612b36565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112a783610984565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112f983610984565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061133b575061133a8185610e15565b5b8061137957508373ffffffffffffffffffffffffffffffffffffffff166113618461056b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166113a282610984565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906129d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612a56565b60405180910390fd5b6114738383836119a4565b61147e600082611234565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ce9190612e2d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115259190612dd7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115e48383836119a9565b505050565b6115f161122c565b73ffffffffffffffffffffffffffffffffffffffff1661160f610b02565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90612af6565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390612a76565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188d9190612959565b60405180910390a3505050565b6118a5848484611382565b6118b1848484846119ae565b6118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790612996565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6119a0828260405180602001604052806000815250611b45565b5050565b505050565b505050565b60006119cf8473ffffffffffffffffffffffffffffffffffffffff16611ba0565b15611b38578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119f861122c565b8786866040518563ffffffff1660e01b8152600401611a1a94939291906128eb565b602060405180830381600087803b158015611a3457600080fd5b505af1925050508015611a6557506040513d601f19601f82011682018060405250810190611a6291906124ff565b60015b611ae8573d8060008114611a95576040519150601f19603f3d011682016040523d82523d6000602084013e611a9a565b606091505b50600081511415611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790612996565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b3d565b600190505b949350505050565b611b4f8383611bc3565b611b5c60008484846119ae565b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290612996565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90612ad6565b60405180910390fd5b611c3c816118f6565b15611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906129f6565b60405180910390fd5b611c88600083836119a4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cd89190612dd7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d99600083836119a9565b5050565b828054611da990612f17565b90600052602060002090601f016020900481019282611dcb5760008555611e12565b82601f10611de457805160ff1916838001178555611e12565b82800160010185558215611e12579182015b82811115611e11578251825591602001919060010190611df6565b5b509050611e1f9190611e23565b5090565b5b80821115611e3c576000816000905550600101611e24565b5090565b6000611e53611e4e84612c80565b612c5b565b90508083825260208201905082856020860282011115611e7657611e75613084565b5b60005b85811015611ea65781611e8c8882612032565b845260208401935060208301925050600181019050611e79565b5050509392505050565b6000611ec3611ebe84612cac565b612c5b565b90508083825260208201905082856020860282011115611ee657611ee5613084565b5b60005b85811015611f3457813567ffffffffffffffff811115611f0c57611f0b61307f565b5b808601611f19898261213e565b85526020850194506020840193505050600181019050611ee9565b5050509392505050565b6000611f51611f4c84612cd8565b612c5b565b90508083825260208201905082856020860282011115611f7457611f73613084565b5b60005b85811015611fa45781611f8a888261216c565b845260208401935060208301925050600181019050611f77565b5050509392505050565b6000611fc1611fbc84612d04565b612c5b565b905082815260208101848484011115611fdd57611fdc613089565b5b611fe8848285612ed5565b509392505050565b6000612003611ffe84612d35565b612c5b565b90508281526020810184848401111561201f5761201e613089565b5b61202a848285612ed5565b509392505050565b600081359050612041816134b8565b92915050565b600082601f83011261205c5761205b61307f565b5b813561206c848260208601611e40565b91505092915050565b600082601f83011261208a5761208961307f565b5b813561209a848260208601611eb0565b91505092915050565b600082601f8301126120b8576120b761307f565b5b81356120c8848260208601611f3e565b91505092915050565b6000813590506120e0816134cf565b92915050565b6000813590506120f5816134e6565b92915050565b60008151905061210a816134e6565b92915050565b600082601f8301126121255761212461307f565b5b8135612135848260208601611fae565b91505092915050565b600082601f8301126121535761215261307f565b5b8135612163848260208601611ff0565b91505092915050565b60008135905061217b816134fd565b92915050565b60006020828403121561219757612196613093565b5b60006121a584828501612032565b91505092915050565b600080604083850312156121c5576121c4613093565b5b60006121d385828601612032565b92505060206121e485828601612032565b9150509250929050565b60008060006060848603121561220757612206613093565b5b600061221586828701612032565b935050602061222686828701612032565b92505060406122378682870161216c565b9150509250925092565b6000806000806080858703121561225b5761225a613093565b5b600061226987828801612032565b945050602061227a87828801612032565b935050604061228b8782880161216c565b925050606085013567ffffffffffffffff8111156122ac576122ab61308e565b5b6122b887828801612110565b91505092959194509250565b600080604083850312156122db576122da613093565b5b60006122e985828601612032565b925050602083013567ffffffffffffffff81111561230a5761230961308e565b5b612316858286016120a3565b9150509250929050565b6000806040838503121561233757612336613093565b5b600061234585828601612032565b9250506020612356858286016120d1565b9150509250929050565b6000806040838503121561237757612376613093565b5b600061238585828601612032565b92505060206123968582860161216c565b9150509250929050565b6000806000606084860312156123b9576123b8613093565b5b600084013567ffffffffffffffff8111156123d7576123d661308e565b5b6123e386828701612047565b935050602084013567ffffffffffffffff8111156124045761240361308e565b5b61241086828701612047565b925050604084013567ffffffffffffffff8111156124315761243061308e565b5b61243d868287016120a3565b9150509250925092565b6000806000606084860312156124605761245f613093565b5b600084013567ffffffffffffffff81111561247e5761247d61308e565b5b61248a868287016120a3565b935050602084013567ffffffffffffffff8111156124ab576124aa61308e565b5b6124b786828701612075565b92505060406124c886828701612032565b9150509250925092565b6000602082840312156124e8576124e7613093565b5b60006124f6848285016120e6565b91505092915050565b60006020828403121561251557612514613093565b5b6000612523848285016120fb565b91505092915050565b60006020828403121561254257612541613093565b5b60006125508482850161216c565b91505092915050565b600061256583836128b2565b60208301905092915050565b61257a81612e61565b82525050565b600061258b82612d76565b6125958185612da4565b93506125a083612d66565b8060005b838110156125d15781516125b88882612559565b97506125c383612d97565b9250506001810190506125a4565b5085935050505092915050565b6125e781612e73565b82525050565b60006125f882612d81565b6126028185612db5565b9350612612818560208601612ee4565b61261b81613098565b840191505092915050565b600061263182612d8c565b61263b8185612dc6565b935061264b818560208601612ee4565b61265481613098565b840191505092915050565b600061266c603283612dc6565b9150612677826130a9565b604082019050919050565b600061268f602683612dc6565b915061269a826130f8565b604082019050919050565b60006126b2602583612dc6565b91506126bd82613147565b604082019050919050565b60006126d5601c83612dc6565b91506126e082613196565b602082019050919050565b60006126f8601b83612dc6565b9150612703826131bf565b602082019050919050565b600061271b601983612dc6565b9150612726826131e8565b602082019050919050565b600061273e602483612dc6565b915061274982613211565b604082019050919050565b6000612761601983612dc6565b915061276c82613260565b602082019050919050565b6000612784602983612dc6565b915061278f82613289565b604082019050919050565b60006127a7603e83612dc6565b91506127b2826132d8565b604082019050919050565b60006127ca602083612dc6565b91506127d582613327565b602082019050919050565b60006127ed602083612dc6565b91506127f882613350565b602082019050919050565b6000612810602f83612dc6565b915061281b82613379565b604082019050919050565b6000612833601883612dc6565b915061283e826133c8565b602082019050919050565b6000612856602183612dc6565b9150612861826133f1565b604082019050919050565b6000612879601583612dc6565b915061288482613440565b602082019050919050565b600061289c602e83612dc6565b91506128a782613469565b604082019050919050565b6128bb81612ecb565b82525050565b6128ca81612ecb565b82525050565b60006020820190506128e56000830184612571565b92915050565b60006080820190506129006000830187612571565b61290d6020830186612571565b61291a60408301856128c1565b818103606083015261292c81846125ed565b905095945050505050565b600060208201905081810360008301526129518184612580565b905092915050565b600060208201905061296e60008301846125de565b92915050565b6000602082019050818103600083015261298e8184612626565b905092915050565b600060208201905081810360008301526129af8161265f565b9050919050565b600060208201905081810360008301526129cf81612682565b9050919050565b600060208201905081810360008301526129ef816126a5565b9050919050565b60006020820190508181036000830152612a0f816126c8565b9050919050565b60006020820190508181036000830152612a2f816126eb565b9050919050565b60006020820190508181036000830152612a4f8161270e565b9050919050565b60006020820190508181036000830152612a6f81612731565b9050919050565b60006020820190508181036000830152612a8f81612754565b9050919050565b60006020820190508181036000830152612aaf81612777565b9050919050565b60006020820190508181036000830152612acf8161279a565b9050919050565b60006020820190508181036000830152612aef816127bd565b9050919050565b60006020820190508181036000830152612b0f816127e0565b9050919050565b60006020820190508181036000830152612b2f81612803565b9050919050565b60006020820190508181036000830152612b4f81612826565b9050919050565b60006020820190508181036000830152612b6f81612849565b9050919050565b60006020820190508181036000830152612b8f8161286c565b9050919050565b60006020820190508181036000830152612baf8161288f565b9050919050565b6000602082019050612bcb60008301846128c1565b92915050565b6000606082019050612be660008301866128c1565b612bf36020830185612571565b8181036040830152612c058184612626565b9050949350505050565b6000608082019050612c2460008301876128c1565b8181036020830152612c368186612626565b9050612c4560408301856128c1565b612c526060830184612571565b95945050505050565b6000612c65612c76565b9050612c718282612f49565b919050565b6000604051905090565b600067ffffffffffffffff821115612c9b57612c9a613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cc757612cc6613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cf357612cf2613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d1f57612d1e613050565b5b612d2882613098565b9050602081019050919050565b600067ffffffffffffffff821115612d5057612d4f613050565b5b612d5982613098565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612de282612ecb565b9150612ded83612ecb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2257612e21612fc3565b5b828201905092915050565b6000612e3882612ecb565b9150612e4383612ecb565b925082821015612e5657612e55612fc3565b5b828203905092915050565b6000612e6c82612eab565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f02578082015181840152602081019050612ee7565b83811115612f11576000848401525b50505050565b60006002820490506001821680612f2f57607f821691505b60208210811415612f4357612f42612ff2565b5b50919050565b612f5282613098565b810181811067ffffffffffffffff82111715612f7157612f70613050565b5b80604052505050565b6000612f8582612ecb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fb857612fb7612fc3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686520696e707574206461746120697320696e636f72726563740000000000600082015250565b7f596f7520617265206e6f74206f776e6572206f66206974656d00000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468652075726973206973206e6f742076616c69640000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6134c181612e61565b81146134cc57600080fd5b50565b6134d881612e73565b81146134e357600080fd5b50565b6134ef81612e7f565b81146134fa57600080fd5b50565b61350681612ecb565b811461351157600080fd5b5056fea264697066735822122025ba6c767b5f389613e16adacb2a29b1e38cb2dcbf0c7d56b09a01d7493f786464736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063c87b56dd11610071578063c87b56dd1461032f578063dd3484451461035f578063e985e9c51461037b578063f2fde38b146103ab578063fd465134146103c75761012c565b8063715018a6146102b15780638da5cb5b146102bb57806395d89b41146102d9578063a22cb465146102f7578063b88d4fde146103135761012c565b8063217ab9d2116100f4578063217ab9d2146101fd57806323b872dd1461021957806342842e0e146102355780636352211e1461025157806370a08231146102815761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806317b47cc4146101cb575b600080fd5b61014b600480360381019061014691906124d2565b6103f7565b6040516101589190612959565b60405180910390f35b6101696104d9565b6040516101769190612974565b60405180910390f35b6101996004803603810190610194919061252c565b61056b565b6040516101a691906128d0565b60405180910390f35b6101c960048036038101906101c49190612360565b6105b1565b005b6101e560048036038101906101e0919061252c565b6106c9565b6040516101f493929190612bd1565b60405180910390f35b610217600480360381019061021291906123a0565b61079b565b005b610233600480360381019061022e91906121ee565b610904565b005b61024f600480360381019061024a91906121ee565b610964565b005b61026b6004803603810190610266919061252c565b610984565b60405161027891906128d0565b60405180910390f35b61029b60048036038101906102969190612181565b610a36565b6040516102a89190612bb6565b60405180910390f35b6102b9610aee565b005b6102c3610b02565b6040516102d091906128d0565b60405180910390f35b6102e1610b2c565b6040516102ee9190612974565b60405180910390f35b610311600480360381019061030c9190612320565b610bbe565b005b61032d60048036038101906103289190612241565b610bd4565b005b6103496004803603810190610344919061252c565b610c36565b6040516103569190612974565b60405180910390f35b610379600480360381019061037491906122c4565b610d26565b005b610395600480360381019061039091906121ae565b610e15565b6040516103a29190612959565b60405180910390f35b6103c560048036038101906103c09190612181565b610ea9565b005b6103e160048036038101906103dc9190612447565b610f2d565b6040516103ee9190612937565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104d257506104d182611177565b5b9050919050565b6060600080546104e890612f17565b80601f016020809104026020016040519081016040528092919081815260200182805461051490612f17565b80156105615780601f1061053657610100808354040283529160200191610561565b820191906000526020600020905b81548152906001019060200180831161054457829003601f168201915b5050505050905090565b6000610576826111e1565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105bc82610984565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490612b56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661064c61122c565b73ffffffffffffffffffffffffffffffffffffffff16148061067b575061067a8161067561122c565b610e15565b5b6106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190612ab6565b60405180910390fd5b6106c48383611234565b505050565b60086020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461071890612f17565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612f17565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905083565b81518351146107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d690612a16565b60405180910390fd5b8151815114610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90612a16565b60405180910390fd5b60005b83518110156108fe576108533383838151811061084657610845613021565b5b60200260200101516112ed565b610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990612a36565b60405180910390fd5b6108eb8482815181106108a8576108a7613021565b5b60200260200101518483815181106108c3576108c2613021565b5b60200260200101518484815181106108de576108dd613021565b5b6020026020010151611382565b80806108f690612f7a565b915050610826565b50505050565b61091561090f61122c565b826112ed565b610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90612b96565b60405180910390fd5b61095f838383611382565b505050565b61097f83838360405180602001604052806000815250610bd4565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490612b36565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90612a96565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610af66115e9565b610b006000611667565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b3b90612f17565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790612f17565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b5050505050905090565b610bd0610bc961122c565b838361172d565b5050565b610be5610bdf61122c565b836112ed565b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90612b96565b60405180910390fd5b610c308484848461189a565b50505050565b6060610c41826118f6565b610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790612b16565b60405180910390fd5b600860008381526020019081526020016000206002018054610ca190612f17565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90612f17565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b50505050509050919050565b6000815111610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612a16565b60405180910390fd5b60005b8151811015610e1057610d9a33838381518110610d8d57610d8c613021565b5b60200260200101516112ed565b610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612a36565b60405180910390fd5b610dfd83838381518110610df057610def613021565b5b6020026020010151611234565b8080610e0890612f7a565b915050610d6d565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610eb16115e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f18906129b6565b60405180910390fd5b610f2a81611667565b50565b6060610f376115e9565b6000835111610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290612b76565b60405180910390fd5b6000835167ffffffffffffffff811115610f9857610f97613050565b5b604051908082528060200260200182016040528015610fc65781602001602082028036833780820191505090505b50905060005b845181101561116b57610fdf6007611962565b6000610feb6007611978565b9050610ff78582611986565b60405180606001604052808281526020018673ffffffffffffffffffffffffffffffffffffffff16815260200187848151811061103757611036613021565b5b6020026020010151815250600860008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906110c2929190611d9d565b50905050808383815181106110da576110d9613021565b5b6020026020010181815250507f76bbebf8598c30d588fa6268dab08cd52e8a4b43b553c7843bdda7b53b47f67987838151811061111a57611119613021565b5b602002602001015187848151811061113557611134613021565b5b6020026020010151838860405161114f9493929190612c0f565b60405180910390a150808061116390612f7a565b915050610fcc565b50809150509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111ea816118f6565b611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612b36565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112a783610984565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112f983610984565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061133b575061133a8185610e15565b5b8061137957508373ffffffffffffffffffffffffffffffffffffffff166113618461056b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166113a282610984565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906129d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612a56565b60405180910390fd5b6114738383836119a4565b61147e600082611234565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ce9190612e2d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115259190612dd7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115e48383836119a9565b505050565b6115f161122c565b73ffffffffffffffffffffffffffffffffffffffff1661160f610b02565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90612af6565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390612a76565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188d9190612959565b60405180910390a3505050565b6118a5848484611382565b6118b1848484846119ae565b6118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790612996565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6119a0828260405180602001604052806000815250611b45565b5050565b505050565b505050565b60006119cf8473ffffffffffffffffffffffffffffffffffffffff16611ba0565b15611b38578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119f861122c565b8786866040518563ffffffff1660e01b8152600401611a1a94939291906128eb565b602060405180830381600087803b158015611a3457600080fd5b505af1925050508015611a6557506040513d601f19601f82011682018060405250810190611a6291906124ff565b60015b611ae8573d8060008114611a95576040519150601f19603f3d011682016040523d82523d6000602084013e611a9a565b606091505b50600081511415611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790612996565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b3d565b600190505b949350505050565b611b4f8383611bc3565b611b5c60008484846119ae565b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290612996565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90612ad6565b60405180910390fd5b611c3c816118f6565b15611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906129f6565b60405180910390fd5b611c88600083836119a4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cd89190612dd7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d99600083836119a9565b5050565b828054611da990612f17565b90600052602060002090601f016020900481019282611dcb5760008555611e12565b82601f10611de457805160ff1916838001178555611e12565b82800160010185558215611e12579182015b82811115611e11578251825591602001919060010190611df6565b5b509050611e1f9190611e23565b5090565b5b80821115611e3c576000816000905550600101611e24565b5090565b6000611e53611e4e84612c80565b612c5b565b90508083825260208201905082856020860282011115611e7657611e75613084565b5b60005b85811015611ea65781611e8c8882612032565b845260208401935060208301925050600181019050611e79565b5050509392505050565b6000611ec3611ebe84612cac565b612c5b565b90508083825260208201905082856020860282011115611ee657611ee5613084565b5b60005b85811015611f3457813567ffffffffffffffff811115611f0c57611f0b61307f565b5b808601611f19898261213e565b85526020850194506020840193505050600181019050611ee9565b5050509392505050565b6000611f51611f4c84612cd8565b612c5b565b90508083825260208201905082856020860282011115611f7457611f73613084565b5b60005b85811015611fa45781611f8a888261216c565b845260208401935060208301925050600181019050611f77565b5050509392505050565b6000611fc1611fbc84612d04565b612c5b565b905082815260208101848484011115611fdd57611fdc613089565b5b611fe8848285612ed5565b509392505050565b6000612003611ffe84612d35565b612c5b565b90508281526020810184848401111561201f5761201e613089565b5b61202a848285612ed5565b509392505050565b600081359050612041816134b8565b92915050565b600082601f83011261205c5761205b61307f565b5b813561206c848260208601611e40565b91505092915050565b600082601f83011261208a5761208961307f565b5b813561209a848260208601611eb0565b91505092915050565b600082601f8301126120b8576120b761307f565b5b81356120c8848260208601611f3e565b91505092915050565b6000813590506120e0816134cf565b92915050565b6000813590506120f5816134e6565b92915050565b60008151905061210a816134e6565b92915050565b600082601f8301126121255761212461307f565b5b8135612135848260208601611fae565b91505092915050565b600082601f8301126121535761215261307f565b5b8135612163848260208601611ff0565b91505092915050565b60008135905061217b816134fd565b92915050565b60006020828403121561219757612196613093565b5b60006121a584828501612032565b91505092915050565b600080604083850312156121c5576121c4613093565b5b60006121d385828601612032565b92505060206121e485828601612032565b9150509250929050565b60008060006060848603121561220757612206613093565b5b600061221586828701612032565b935050602061222686828701612032565b92505060406122378682870161216c565b9150509250925092565b6000806000806080858703121561225b5761225a613093565b5b600061226987828801612032565b945050602061227a87828801612032565b935050604061228b8782880161216c565b925050606085013567ffffffffffffffff8111156122ac576122ab61308e565b5b6122b887828801612110565b91505092959194509250565b600080604083850312156122db576122da613093565b5b60006122e985828601612032565b925050602083013567ffffffffffffffff81111561230a5761230961308e565b5b612316858286016120a3565b9150509250929050565b6000806040838503121561233757612336613093565b5b600061234585828601612032565b9250506020612356858286016120d1565b9150509250929050565b6000806040838503121561237757612376613093565b5b600061238585828601612032565b92505060206123968582860161216c565b9150509250929050565b6000806000606084860312156123b9576123b8613093565b5b600084013567ffffffffffffffff8111156123d7576123d661308e565b5b6123e386828701612047565b935050602084013567ffffffffffffffff8111156124045761240361308e565b5b61241086828701612047565b925050604084013567ffffffffffffffff8111156124315761243061308e565b5b61243d868287016120a3565b9150509250925092565b6000806000606084860312156124605761245f613093565b5b600084013567ffffffffffffffff81111561247e5761247d61308e565b5b61248a868287016120a3565b935050602084013567ffffffffffffffff8111156124ab576124aa61308e565b5b6124b786828701612075565b92505060406124c886828701612032565b9150509250925092565b6000602082840312156124e8576124e7613093565b5b60006124f6848285016120e6565b91505092915050565b60006020828403121561251557612514613093565b5b6000612523848285016120fb565b91505092915050565b60006020828403121561254257612541613093565b5b60006125508482850161216c565b91505092915050565b600061256583836128b2565b60208301905092915050565b61257a81612e61565b82525050565b600061258b82612d76565b6125958185612da4565b93506125a083612d66565b8060005b838110156125d15781516125b88882612559565b97506125c383612d97565b9250506001810190506125a4565b5085935050505092915050565b6125e781612e73565b82525050565b60006125f882612d81565b6126028185612db5565b9350612612818560208601612ee4565b61261b81613098565b840191505092915050565b600061263182612d8c565b61263b8185612dc6565b935061264b818560208601612ee4565b61265481613098565b840191505092915050565b600061266c603283612dc6565b9150612677826130a9565b604082019050919050565b600061268f602683612dc6565b915061269a826130f8565b604082019050919050565b60006126b2602583612dc6565b91506126bd82613147565b604082019050919050565b60006126d5601c83612dc6565b91506126e082613196565b602082019050919050565b60006126f8601b83612dc6565b9150612703826131bf565b602082019050919050565b600061271b601983612dc6565b9150612726826131e8565b602082019050919050565b600061273e602483612dc6565b915061274982613211565b604082019050919050565b6000612761601983612dc6565b915061276c82613260565b602082019050919050565b6000612784602983612dc6565b915061278f82613289565b604082019050919050565b60006127a7603e83612dc6565b91506127b2826132d8565b604082019050919050565b60006127ca602083612dc6565b91506127d582613327565b602082019050919050565b60006127ed602083612dc6565b91506127f882613350565b602082019050919050565b6000612810602f83612dc6565b915061281b82613379565b604082019050919050565b6000612833601883612dc6565b915061283e826133c8565b602082019050919050565b6000612856602183612dc6565b9150612861826133f1565b604082019050919050565b6000612879601583612dc6565b915061288482613440565b602082019050919050565b600061289c602e83612dc6565b91506128a782613469565b604082019050919050565b6128bb81612ecb565b82525050565b6128ca81612ecb565b82525050565b60006020820190506128e56000830184612571565b92915050565b60006080820190506129006000830187612571565b61290d6020830186612571565b61291a60408301856128c1565b818103606083015261292c81846125ed565b905095945050505050565b600060208201905081810360008301526129518184612580565b905092915050565b600060208201905061296e60008301846125de565b92915050565b6000602082019050818103600083015261298e8184612626565b905092915050565b600060208201905081810360008301526129af8161265f565b9050919050565b600060208201905081810360008301526129cf81612682565b9050919050565b600060208201905081810360008301526129ef816126a5565b9050919050565b60006020820190508181036000830152612a0f816126c8565b9050919050565b60006020820190508181036000830152612a2f816126eb565b9050919050565b60006020820190508181036000830152612a4f8161270e565b9050919050565b60006020820190508181036000830152612a6f81612731565b9050919050565b60006020820190508181036000830152612a8f81612754565b9050919050565b60006020820190508181036000830152612aaf81612777565b9050919050565b60006020820190508181036000830152612acf8161279a565b9050919050565b60006020820190508181036000830152612aef816127bd565b9050919050565b60006020820190508181036000830152612b0f816127e0565b9050919050565b60006020820190508181036000830152612b2f81612803565b9050919050565b60006020820190508181036000830152612b4f81612826565b9050919050565b60006020820190508181036000830152612b6f81612849565b9050919050565b60006020820190508181036000830152612b8f8161286c565b9050919050565b60006020820190508181036000830152612baf8161288f565b9050919050565b6000602082019050612bcb60008301846128c1565b92915050565b6000606082019050612be660008301866128c1565b612bf36020830185612571565b8181036040830152612c058184612626565b9050949350505050565b6000608082019050612c2460008301876128c1565b8181036020830152612c368186612626565b9050612c4560408301856128c1565b612c526060830184612571565b95945050505050565b6000612c65612c76565b9050612c718282612f49565b919050565b6000604051905090565b600067ffffffffffffffff821115612c9b57612c9a613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cc757612cc6613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cf357612cf2613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d1f57612d1e613050565b5b612d2882613098565b9050602081019050919050565b600067ffffffffffffffff821115612d5057612d4f613050565b5b612d5982613098565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612de282612ecb565b9150612ded83612ecb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2257612e21612fc3565b5b828201905092915050565b6000612e3882612ecb565b9150612e4383612ecb565b925082821015612e5657612e55612fc3565b5b828203905092915050565b6000612e6c82612eab565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f02578082015181840152602081019050612ee7565b83811115612f11576000848401525b50505050565b60006002820490506001821680612f2f57607f821691505b60208210811415612f4357612f42612ff2565b5b50919050565b612f5282613098565b810181811067ffffffffffffffff82111715612f7157612f70613050565b5b80604052505050565b6000612f8582612ecb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fb857612fb7612fc3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686520696e707574206461746120697320696e636f72726563740000000000600082015250565b7f596f7520617265206e6f74206f776e6572206f66206974656d00000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468652075726973206973206e6f742076616c69640000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6134c181612e61565b81146134cc57600080fd5b50565b6134d881612e73565b81146134e357600080fd5b50565b6134ef81612e7f565b81146134fa57600080fd5b50565b61350681612ecb565b811461351157600080fd5b5056fea264697066735822122025ba6c767b5f389613e16adacb2a29b1e38cb2dcbf0c7d56b09a01d7493f786464736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string):
Arg [1] : symbol (string):

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38995:2292:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21699:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22626:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24139:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39334:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40577:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24839:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25246:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22337:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22068:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38115:103;;;:::i;:::-;;37467:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22795:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24382:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25502:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41072:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40203:366;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24608:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38373:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39475:714;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21699:305;21801:4;21853:25;21838:40;;;:11;:40;;;;:105;;;;21910:33;21895:48;;;:11;:48;;;;21838:105;:158;;;;21960:36;21984:11;21960:23;:36::i;:::-;21838:158;21818:178;;21699:305;;;:::o;22626:100::-;22680:13;22713:5;22706:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22626:100;:::o;24139:171::-;24215:7;24235:23;24250:7;24235:14;:23::i;:::-;24278:15;:24;24294:7;24278:24;;;;;;;;;;;;;;;;;;;;;24271:31;;24139:171;;;:::o;23656:417::-;23737:13;23753:23;23768:7;23753:14;:23::i;:::-;23737:39;;23801:5;23795:11;;:2;:11;;;;23787:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23895:5;23879:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23904:37;23921:5;23928:12;:10;:12::i;:::-;23904:16;:37::i;:::-;23879:62;23857:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;24044:21;24053:2;24057:7;24044:8;:21::i;:::-;23726:347;23656:417;;:::o;39334:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40577:481::-;40710:3;:10;40694:5;:12;:26;40686:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40790:3;:10;40771:8;:15;:29;40763:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40849:9;40845:206;40868:5;:12;40864:1;:16;40845:206;;;40909:43;40928:10;40940:8;40949:1;40940:11;;;;;;;;:::i;:::-;;;;;;;;40909:18;:43::i;:::-;40901:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40999:40;41009:5;41015:1;41009:8;;;;;;;;:::i;:::-;;;;;;;;41019:3;41023:1;41019:6;;;;;;;;:::i;:::-;;;;;;;;41027:8;41036:1;41027:11;;;;;;;;:::i;:::-;;;;;;;;40999:9;:40::i;:::-;40882:3;;;;;:::i;:::-;;;;40845:206;;;;40577:481;;;:::o;24839:336::-;25034:41;25053:12;:10;:12::i;:::-;25067:7;25034:18;:41::i;:::-;25026:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25139:28;25149:4;25155:2;25159:7;25139:9;:28::i;:::-;24839:336;;;:::o;25246:185::-;25384:39;25401:4;25407:2;25411:7;25384:39;;;;;;;;;;;;:16;:39::i;:::-;25246:185;;;:::o;22337:222::-;22409:7;22429:13;22445:7;:16;22453:7;22445:16;;;;;;;;;;;;;;;;;;;;;22429:32;;22497:1;22480:19;;:5;:19;;;;22472:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22546:5;22539:12;;;22337:222;;;:::o;22068:207::-;22140:7;22185:1;22168:19;;:5;:19;;;;22160:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22251:9;:16;22261:5;22251:16;;;;;;;;;;;;;;;;22244:23;;22068:207;;;:::o;38115:103::-;37353:13;:11;:13::i;:::-;38180:30:::1;38207:1;38180:18;:30::i;:::-;38115:103::o:0;37467:87::-;37513:7;37540:6;;;;;;;;;;;37533:13;;37467:87;:::o;22795:104::-;22851:13;22884:7;22877:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22795:104;:::o;24382:155::-;24477:52;24496:12;:10;:12::i;:::-;24510:8;24520;24477:18;:52::i;:::-;24382:155;;:::o;25502:323::-;25676:41;25695:12;:10;:12::i;:::-;25709:7;25676:18;:41::i;:::-;25668:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25779:38;25793:4;25799:2;25803:7;25812:4;25779:13;:38::i;:::-;25502:323;;;;:::o;41072:212::-;41137:13;41171:16;41179:7;41171;:16::i;:::-;41163:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41258:5;:14;41264:7;41258:14;;;;;;;;;;;:18;;41251:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41072:212;;;:::o;40203:366::-;40314:1;40296:8;:15;:19;40288:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;40372:9;40368:194;40391:8;:15;40387:1;:19;40368:194;;;40435:43;40454:10;40466:8;40475:1;40466:11;;;;;;;;:::i;:::-;;;;;;;;40435:18;:43::i;:::-;40427:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40525:25;40534:2;40538:8;40547:1;40538:11;;;;;;;;:::i;:::-;;;;;;;;40525:8;:25::i;:::-;40408:3;;;;;:::i;:::-;;;;40368:194;;;;40203:366;;:::o;24608:164::-;24705:4;24729:18;:25;24748:5;24729:25;;;;;;;;;;;;;;;:35;24755:8;24729:35;;;;;;;;;;;;;;;;;;;;;;;;;24722:42;;24608:164;;;;:::o;38373:201::-;37353:13;:11;:13::i;:::-;38482:1:::1;38462:22;;:8;:22;;;;38454:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38538:28;38557:8;38538:18;:28::i;:::-;38373:201:::0;:::o;39475:714::-;39584:13;37353;:11;:13::i;:::-;39631:1:::1;39617:4;:11;:15;39609:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;39679:25;39719:4;:11;39708:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39679:52;;39754:9;39750:395;39773:4;:11;39769:1;:15;39750:395;;;39806:21;:9;:19;:21::i;:::-;39842:17;39862:19;:9;:17;:19::i;:::-;39842:39;;39896:27;39906:5;39913:9;39896;:27::i;:::-;39963:31;;;;;;;;39968:9;39963:31;;;;39979:5;39963:31;;;;;;39986:4;39991:1;39986:7;;;;;;;;:::i;:::-;;;;;;;;39963:31;;::::0;39944:5:::1;:16;39950:9;39944:16;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;40037:9;40023:8;40032:1;40023:11;;;;;;;;:::i;:::-;;;;;;;:23;;;::::0;::::1;40080:53;40097:5;40103:1;40097:8;;;;;;;;:::i;:::-;;;;;;;;40107:4;40112:1;40107:7;;;;;;;;:::i;:::-;;;;;;;;40116:9;40127:5;40080:53;;;;;;;;;:::i;:::-;;;;;;;;39790:355;39786:3;;;;;:::i;:::-;;;;39750:395;;;;40173:8;40166:15;;;39475:714:::0;;;;;:::o;20204:157::-;20289:4;20328:25;20313:40;;;:11;:40;;;;20306:47;;20204:157;;;:::o;32114:135::-;32196:16;32204:7;32196;:16::i;:::-;32188:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32114:135;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;31393:174::-;31495:2;31468:15;:24;31484:7;31468:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31551:7;31547:2;31513:46;;31522:23;31537:7;31522:14;:23::i;:::-;31513:46;;;;;;;;;;;;31393:174;;:::o;27626:264::-;27719:4;27736:13;27752:23;27767:7;27752:14;:23::i;:::-;27736:39;;27805:5;27794:16;;:7;:16;;;:52;;;;27814:32;27831:5;27838:7;27814:16;:32::i;:::-;27794:52;:87;;;;27874:7;27850:31;;:20;27862:7;27850:11;:20::i;:::-;:31;;;27794:87;27786:96;;;27626:264;;;;:::o;30649:625::-;30808:4;30781:31;;:23;30796:7;30781:14;:23::i;:::-;:31;;;30773:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30887:1;30873:16;;:2;:16;;;;30865:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30943:39;30964:4;30970:2;30974:7;30943:20;:39::i;:::-;31047:29;31064:1;31068:7;31047:8;:29::i;:::-;31108:1;31089:9;:15;31099:4;31089:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31137:1;31120:9;:13;31130:2;31120:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31168:2;31149:7;:16;31157:7;31149:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31207:7;31203:2;31188:27;;31197:4;31188:27;;;;;;;;;;;;31228:38;31248:4;31254:2;31258:7;31228:19;:38::i;:::-;30649:625;;;:::o;37632:132::-;37707:12;:10;:12::i;:::-;37696:23;;:7;:5;:7::i;:::-;:23;;;37688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37632:132::o;38734:191::-;38808:16;38827:6;;;;;;;;;;;38808:25;;38853:8;38844:6;;:17;;;;;;;;;;;;;;;;;;38908:8;38877:40;;38898:8;38877:40;;;;;;;;;;;;38797:128;38734:191;:::o;31710:315::-;31865:8;31856:17;;:5;:17;;;;31848:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31952:8;31914:18;:25;31933:5;31914:25;;;;;;;;;;;;;;;:35;31940:8;31914:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31998:8;31976:41;;31991:5;31976:41;;;32008:8;31976:41;;;;;;:::i;:::-;;;;;;;;31710:315;;;:::o;26706:313::-;26862:28;26872:4;26878:2;26882:7;26862:9;:28::i;:::-;26909:47;26932:4;26938:2;26942:7;26951:4;26909:22;:47::i;:::-;26901:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26706:313;;;;:::o;27332:127::-;27397:4;27449:1;27421:30;;:7;:16;27429:7;27421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27414:37;;27332:127;;;:::o;35818:::-;35925:1;35907:7;:14;;;:19;;;;;;;;;;;35818:127;:::o;35696:114::-;35761:7;35788;:14;;;35781:21;;35696:114;;;:::o;28232:110::-;28308:26;28318:2;28322:7;28308:26;;;;;;;;;;;;:9;:26::i;:::-;28232:110;;:::o;34238:126::-;;;;:::o;34749:125::-;;;;:::o;32813:853::-;32967:4;32988:15;:2;:13;;;:15::i;:::-;32984:675;;;33040:2;33024:36;;;33061:12;:10;:12::i;:::-;33075:4;33081:7;33090:4;33024:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33020:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33282:1;33265:6;:13;:18;33261:328;;;33308:60;;;;;;;;;;:::i;:::-;;;;;;;;33261:328;33539:6;33533:13;33524:6;33520:2;33516:15;33509:38;33020:584;33156:41;;;33146:51;;;:6;:51;;;;33139:58;;;;;32984:675;33643:4;33636:11;;32813:853;;;;;;;:::o;28569:319::-;28698:18;28704:2;28708:7;28698:5;:18::i;:::-;28749:53;28780:1;28784:2;28788:7;28797:4;28749:22;:53::i;:::-;28727:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28569:319;;;:::o;11361:326::-;11421:4;11678:1;11656:7;:19;;;:23;11649:30;;11361:326;;;:::o;29224:439::-;29318:1;29304:16;;:2;:16;;;;29296:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29377:16;29385:7;29377;:16::i;:::-;29376:17;29368:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29439:45;29468:1;29472:2;29476:7;29439:20;:45::i;:::-;29514:1;29497:9;:13;29507:2;29497:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29545:2;29526:7;:16;29534:7;29526:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29590:7;29586:2;29565:33;;29582:1;29565:33;;;;;;;;;;;;29611:44;29639:1;29643:2;29647:7;29611:19;:44::i;:::-;29224:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;768:957::-;874:5;899:91;915:74;982:6;915:74;:::i;:::-;899:91;:::i;:::-;890:100;;1010:5;1039:6;1032:5;1025:21;1073:4;1066:5;1062:16;1055:23;;1099:6;1149:3;1141:4;1133:6;1129:17;1124:3;1120:27;1117:36;1114:143;;;1168:79;;:::i;:::-;1114:143;1281:1;1266:453;1291:6;1288:1;1285:13;1266:453;;;1373:3;1360:17;1409:18;1396:11;1393:35;1390:122;;;1431:79;;:::i;:::-;1390:122;1555:11;1547:6;1543:24;1593:47;1636:3;1624:10;1593:47;:::i;:::-;1588:3;1581:60;1670:4;1665:3;1661:14;1654:21;;1704:4;1699:3;1695:14;1688:21;;1326:393;;1313:1;1310;1306:9;1301:14;;1266:453;;;1270:14;880:845;;768:957;;;;;:::o;1748:722::-;1844:5;1869:81;1885:64;1942:6;1885:64;:::i;:::-;1869:81;:::i;:::-;1860:90;;1970:5;1999:6;1992:5;1985:21;2033:4;2026:5;2022:16;2015:23;;2059:6;2109:3;2101:4;2093:6;2089:17;2084:3;2080:27;2077:36;2074:143;;;2128:79;;:::i;:::-;2074:143;2241:1;2226:238;2251:6;2248:1;2245:13;2226:238;;;2319:3;2348:37;2381:3;2369:10;2348:37;:::i;:::-;2343:3;2336:50;2415:4;2410:3;2406:14;2399:21;;2449:4;2444:3;2440:14;2433:21;;2286:178;2273:1;2270;2266:9;2261:14;;2226:238;;;2230:14;1850:620;;1748:722;;;;;:::o;2476:410::-;2553:5;2578:65;2594:48;2635:6;2594:48;:::i;:::-;2578:65;:::i;:::-;2569:74;;2666:6;2659:5;2652:21;2704:4;2697:5;2693:16;2742:3;2733:6;2728:3;2724:16;2721:25;2718:112;;;2749:79;;:::i;:::-;2718:112;2839:41;2873:6;2868:3;2863;2839:41;:::i;:::-;2559:327;2476:410;;;;;:::o;2892:412::-;2970:5;2995:66;3011:49;3053:6;3011:49;:::i;:::-;2995:66;:::i;:::-;2986:75;;3084:6;3077:5;3070:21;3122:4;3115:5;3111:16;3160:3;3151:6;3146:3;3142:16;3139:25;3136:112;;;3167:79;;:::i;:::-;3136:112;3257:41;3291:6;3286:3;3281;3257:41;:::i;:::-;2976:328;2892:412;;;;;:::o;3310:139::-;3356:5;3394:6;3381:20;3372:29;;3410:33;3437:5;3410:33;:::i;:::-;3310:139;;;;:::o;3472:370::-;3543:5;3592:3;3585:4;3577:6;3573:17;3569:27;3559:122;;3600:79;;:::i;:::-;3559:122;3717:6;3704:20;3742:94;3832:3;3824:6;3817:4;3809:6;3805:17;3742:94;:::i;:::-;3733:103;;3549:293;3472:370;;;;:::o;3864:390::-;3945:5;3994:3;3987:4;3979:6;3975:17;3971:27;3961:122;;4002:79;;:::i;:::-;3961:122;4119:6;4106:20;4144:104;4244:3;4236:6;4229:4;4221:6;4217:17;4144:104;:::i;:::-;4135:113;;3951:303;3864:390;;;;:::o;4277:370::-;4348:5;4397:3;4390:4;4382:6;4378:17;4374:27;4364:122;;4405:79;;:::i;:::-;4364:122;4522:6;4509:20;4547:94;4637:3;4629:6;4622:4;4614:6;4610:17;4547:94;:::i;:::-;4538:103;;4354:293;4277:370;;;;:::o;4653:133::-;4696:5;4734:6;4721:20;4712:29;;4750:30;4774:5;4750:30;:::i;:::-;4653:133;;;;:::o;4792:137::-;4837:5;4875:6;4862:20;4853:29;;4891:32;4917:5;4891:32;:::i;:::-;4792:137;;;;:::o;4935:141::-;4991:5;5022:6;5016:13;5007:22;;5038:32;5064:5;5038:32;:::i;:::-;4935:141;;;;:::o;5095:338::-;5150:5;5199:3;5192:4;5184:6;5180:17;5176:27;5166:122;;5207:79;;:::i;:::-;5166:122;5324:6;5311:20;5349:78;5423:3;5415:6;5408:4;5400:6;5396:17;5349:78;:::i;:::-;5340:87;;5156:277;5095:338;;;;:::o;5453:340::-;5509:5;5558:3;5551:4;5543:6;5539:17;5535:27;5525:122;;5566:79;;:::i;:::-;5525:122;5683:6;5670:20;5708:79;5783:3;5775:6;5768:4;5760:6;5756:17;5708:79;:::i;:::-;5699:88;;5515:278;5453:340;;;;:::o;5799:139::-;5845:5;5883:6;5870:20;5861:29;;5899:33;5926:5;5899:33;:::i;:::-;5799:139;;;;:::o;5944:329::-;6003:6;6052:2;6040:9;6031:7;6027:23;6023:32;6020:119;;;6058:79;;:::i;:::-;6020:119;6178:1;6203:53;6248:7;6239:6;6228:9;6224:22;6203:53;:::i;:::-;6193:63;;6149:117;5944:329;;;;:::o;6279:474::-;6347:6;6355;6404:2;6392:9;6383:7;6379:23;6375:32;6372:119;;;6410:79;;:::i;:::-;6372:119;6530:1;6555:53;6600:7;6591:6;6580:9;6576:22;6555:53;:::i;:::-;6545:63;;6501:117;6657:2;6683:53;6728:7;6719:6;6708:9;6704:22;6683:53;:::i;:::-;6673:63;;6628:118;6279:474;;;;;:::o;6759:619::-;6836:6;6844;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:53;7225:7;7216:6;7205:9;7201:22;7180:53;:::i;:::-;7170:63;;7125:118;7282:2;7308:53;7353:7;7344:6;7333:9;7329:22;7308:53;:::i;:::-;7298:63;;7253:118;6759:619;;;;;:::o;7384:943::-;7479:6;7487;7495;7503;7552:3;7540:9;7531:7;7527:23;7523:33;7520:120;;;7559:79;;:::i;:::-;7520:120;7679:1;7704:53;7749:7;7740:6;7729:9;7725:22;7704:53;:::i;:::-;7694:63;;7650:117;7806:2;7832:53;7877:7;7868:6;7857:9;7853:22;7832:53;:::i;:::-;7822:63;;7777:118;7934:2;7960:53;8005:7;7996:6;7985:9;7981:22;7960:53;:::i;:::-;7950:63;;7905:118;8090:2;8079:9;8075:18;8062:32;8121:18;8113:6;8110:30;8107:117;;;8143:79;;:::i;:::-;8107:117;8248:62;8302:7;8293:6;8282:9;8278:22;8248:62;:::i;:::-;8238:72;;8033:287;7384:943;;;;;;;:::o;8333:684::-;8426:6;8434;8483:2;8471:9;8462:7;8458:23;8454:32;8451:119;;;8489:79;;:::i;:::-;8451:119;8609:1;8634:53;8679:7;8670:6;8659:9;8655:22;8634:53;:::i;:::-;8624:63;;8580:117;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;8333:684;;;;;:::o;9023:468::-;9088:6;9096;9145:2;9133:9;9124:7;9120:23;9116:32;9113:119;;;9151:79;;:::i;:::-;9113:119;9271:1;9296:53;9341:7;9332:6;9321:9;9317:22;9296:53;:::i;:::-;9286:63;;9242:117;9398:2;9424:50;9466:7;9457:6;9446:9;9442:22;9424:50;:::i;:::-;9414:60;;9369:115;9023:468;;;;;:::o;9497:474::-;9565:6;9573;9622:2;9610:9;9601:7;9597:23;9593:32;9590:119;;;9628:79;;:::i;:::-;9590:119;9748:1;9773:53;9818:7;9809:6;9798:9;9794:22;9773:53;:::i;:::-;9763:63;;9719:117;9875:2;9901:53;9946:7;9937:6;9926:9;9922:22;9901:53;:::i;:::-;9891:63;;9846:118;9497:474;;;;;:::o;9977:1249::-;10129:6;10137;10145;10194:2;10182:9;10173:7;10169:23;10165:32;10162:119;;;10200:79;;:::i;:::-;10162:119;10348:1;10337:9;10333:17;10320:31;10378:18;10370:6;10367:30;10364:117;;;10400:79;;:::i;:::-;10364:117;10505:78;10575:7;10566:6;10555:9;10551:22;10505:78;:::i;:::-;10495:88;;10291:302;10660:2;10649:9;10645:18;10632:32;10691:18;10683:6;10680:30;10677:117;;;10713:79;;:::i;:::-;10677:117;10818:78;10888:7;10879:6;10868:9;10864:22;10818:78;:::i;:::-;10808:88;;10603:303;10973:2;10962:9;10958:18;10945:32;11004:18;10996:6;10993:30;10990:117;;;11026:79;;:::i;:::-;10990:117;11131:78;11201:7;11192:6;11181:9;11177:22;11131:78;:::i;:::-;11121:88;;10916:303;9977:1249;;;;;:::o;11232:1059::-;11369:6;11377;11385;11434:2;11422:9;11413:7;11409:23;11405:32;11402:119;;;11440:79;;:::i;:::-;11402:119;11588:1;11577:9;11573:17;11560:31;11618:18;11610:6;11607:30;11604:117;;;11640:79;;:::i;:::-;11604:117;11745:78;11815:7;11806:6;11795:9;11791:22;11745:78;:::i;:::-;11735:88;;11531:302;11900:2;11889:9;11885:18;11872:32;11931:18;11923:6;11920:30;11917:117;;;11953:79;;:::i;:::-;11917:117;12058:88;12138:7;12129:6;12118:9;12114:22;12058:88;:::i;:::-;12048:98;;11843:313;12195:2;12221:53;12266:7;12257:6;12246:9;12242:22;12221:53;:::i;:::-;12211:63;;12166:118;11232:1059;;;;;:::o;12297:327::-;12355:6;12404:2;12392:9;12383:7;12379:23;12375:32;12372:119;;;12410:79;;:::i;:::-;12372:119;12530:1;12555:52;12599:7;12590:6;12579:9;12575:22;12555:52;:::i;:::-;12545:62;;12501:116;12297:327;;;;:::o;12630:349::-;12699:6;12748:2;12736:9;12727:7;12723:23;12719:32;12716:119;;;12754:79;;:::i;:::-;12716:119;12874:1;12899:63;12954:7;12945:6;12934:9;12930:22;12899:63;:::i;:::-;12889:73;;12845:127;12630:349;;;;:::o;12985:329::-;13044:6;13093:2;13081:9;13072:7;13068:23;13064:32;13061:119;;;13099:79;;:::i;:::-;13061:119;13219:1;13244:53;13289:7;13280:6;13269:9;13265:22;13244:53;:::i;:::-;13234:63;;13190:117;12985:329;;;;:::o;13320:179::-;13389:10;13410:46;13452:3;13444:6;13410:46;:::i;:::-;13488:4;13483:3;13479:14;13465:28;;13320:179;;;;:::o;13505:118::-;13592:24;13610:5;13592:24;:::i;:::-;13587:3;13580:37;13505:118;;:::o;13659:732::-;13778:3;13807:54;13855:5;13807:54;:::i;:::-;13877:86;13956:6;13951:3;13877:86;:::i;:::-;13870:93;;13987:56;14037:5;13987:56;:::i;:::-;14066:7;14097:1;14082:284;14107:6;14104:1;14101:13;14082:284;;;14183:6;14177:13;14210:63;14269:3;14254:13;14210:63;:::i;:::-;14203:70;;14296:60;14349:6;14296:60;:::i;:::-;14286:70;;14142:224;14129:1;14126;14122:9;14117:14;;14082:284;;;14086:14;14382:3;14375:10;;13783:608;;;13659:732;;;;:::o;14397:109::-;14478:21;14493:5;14478:21;:::i;:::-;14473:3;14466:34;14397:109;;:::o;14512:360::-;14598:3;14626:38;14658:5;14626:38;:::i;:::-;14680:70;14743:6;14738:3;14680:70;:::i;:::-;14673:77;;14759:52;14804:6;14799:3;14792:4;14785:5;14781:16;14759:52;:::i;:::-;14836:29;14858:6;14836:29;:::i;:::-;14831:3;14827:39;14820:46;;14602:270;14512:360;;;;:::o;14878:364::-;14966:3;14994:39;15027:5;14994:39;:::i;:::-;15049:71;15113:6;15108:3;15049:71;:::i;:::-;15042:78;;15129:52;15174:6;15169:3;15162:4;15155:5;15151:16;15129:52;:::i;:::-;15206:29;15228:6;15206:29;:::i;:::-;15201:3;15197:39;15190:46;;14970:272;14878:364;;;;:::o;15248:366::-;15390:3;15411:67;15475:2;15470:3;15411:67;:::i;:::-;15404:74;;15487:93;15576:3;15487:93;:::i;:::-;15605:2;15600:3;15596:12;15589:19;;15248:366;;;:::o;15620:::-;15762:3;15783:67;15847:2;15842:3;15783:67;:::i;:::-;15776:74;;15859:93;15948:3;15859:93;:::i;:::-;15977:2;15972:3;15968:12;15961:19;;15620:366;;;:::o;15992:::-;16134:3;16155:67;16219:2;16214:3;16155:67;:::i;:::-;16148:74;;16231:93;16320:3;16231:93;:::i;:::-;16349:2;16344:3;16340:12;16333:19;;15992:366;;;:::o;16364:::-;16506:3;16527:67;16591:2;16586:3;16527:67;:::i;:::-;16520:74;;16603:93;16692:3;16603:93;:::i;:::-;16721:2;16716:3;16712:12;16705:19;;16364:366;;;:::o;16736:::-;16878:3;16899:67;16963:2;16958:3;16899:67;:::i;:::-;16892:74;;16975:93;17064:3;16975:93;:::i;:::-;17093:2;17088:3;17084:12;17077:19;;16736:366;;;:::o;17108:::-;17250:3;17271:67;17335:2;17330:3;17271:67;:::i;:::-;17264:74;;17347:93;17436:3;17347:93;:::i;:::-;17465:2;17460:3;17456:12;17449:19;;17108:366;;;:::o;17480:::-;17622:3;17643:67;17707:2;17702:3;17643:67;:::i;:::-;17636:74;;17719:93;17808:3;17719:93;:::i;:::-;17837:2;17832:3;17828:12;17821:19;;17480:366;;;:::o;17852:::-;17994:3;18015:67;18079:2;18074:3;18015:67;:::i;:::-;18008:74;;18091:93;18180:3;18091:93;:::i;:::-;18209:2;18204:3;18200:12;18193:19;;17852:366;;;:::o;18224:::-;18366:3;18387:67;18451:2;18446:3;18387:67;:::i;:::-;18380:74;;18463:93;18552:3;18463:93;:::i;:::-;18581:2;18576:3;18572:12;18565:19;;18224:366;;;:::o;18596:::-;18738:3;18759:67;18823:2;18818:3;18759:67;:::i;:::-;18752:74;;18835:93;18924:3;18835:93;:::i;:::-;18953:2;18948:3;18944:12;18937:19;;18596:366;;;:::o;18968:::-;19110:3;19131:67;19195:2;19190:3;19131:67;:::i;:::-;19124:74;;19207:93;19296:3;19207:93;:::i;:::-;19325:2;19320:3;19316:12;19309:19;;18968:366;;;:::o;19340:::-;19482:3;19503:67;19567:2;19562:3;19503:67;:::i;:::-;19496:74;;19579:93;19668:3;19579:93;:::i;:::-;19697:2;19692:3;19688:12;19681:19;;19340:366;;;:::o;19712:::-;19854:3;19875:67;19939:2;19934:3;19875:67;:::i;:::-;19868:74;;19951:93;20040:3;19951:93;:::i;:::-;20069:2;20064:3;20060:12;20053:19;;19712:366;;;:::o;20084:::-;20226:3;20247:67;20311:2;20306:3;20247:67;:::i;:::-;20240:74;;20323:93;20412:3;20323:93;:::i;:::-;20441:2;20436:3;20432:12;20425:19;;20084:366;;;:::o;20456:::-;20598:3;20619:67;20683:2;20678:3;20619:67;:::i;:::-;20612:74;;20695:93;20784:3;20695:93;:::i;:::-;20813:2;20808:3;20804:12;20797:19;;20456:366;;;:::o;20828:::-;20970:3;20991:67;21055:2;21050:3;20991:67;:::i;:::-;20984:74;;21067:93;21156:3;21067:93;:::i;:::-;21185:2;21180:3;21176:12;21169:19;;20828:366;;;:::o;21200:::-;21342:3;21363:67;21427:2;21422:3;21363:67;:::i;:::-;21356:74;;21439:93;21528:3;21439:93;:::i;:::-;21557:2;21552:3;21548:12;21541:19;;21200:366;;;:::o;21572:108::-;21649:24;21667:5;21649:24;:::i;:::-;21644:3;21637:37;21572:108;;:::o;21686:118::-;21773:24;21791:5;21773:24;:::i;:::-;21768:3;21761:37;21686:118;;:::o;21810:222::-;21903:4;21941:2;21930:9;21926:18;21918:26;;21954:71;22022:1;22011:9;22007:17;21998:6;21954:71;:::i;:::-;21810:222;;;;:::o;22038:640::-;22233:4;22271:3;22260:9;22256:19;22248:27;;22285:71;22353:1;22342:9;22338:17;22329:6;22285:71;:::i;:::-;22366:72;22434:2;22423:9;22419:18;22410:6;22366:72;:::i;:::-;22448;22516:2;22505:9;22501:18;22492:6;22448:72;:::i;:::-;22567:9;22561:4;22557:20;22552:2;22541:9;22537:18;22530:48;22595:76;22666:4;22657:6;22595:76;:::i;:::-;22587:84;;22038:640;;;;;;;:::o;22684:373::-;22827:4;22865:2;22854:9;22850:18;22842:26;;22914:9;22908:4;22904:20;22900:1;22889:9;22885:17;22878:47;22942:108;23045:4;23036:6;22942:108;:::i;:::-;22934:116;;22684:373;;;;:::o;23063:210::-;23150:4;23188:2;23177:9;23173:18;23165:26;;23201:65;23263:1;23252:9;23248:17;23239:6;23201:65;:::i;:::-;23063:210;;;;:::o;23279:313::-;23392:4;23430:2;23419:9;23415:18;23407:26;;23479:9;23473:4;23469:20;23465:1;23454:9;23450:17;23443:47;23507:78;23580:4;23571:6;23507:78;:::i;:::-;23499:86;;23279:313;;;;:::o;23598:419::-;23764:4;23802:2;23791:9;23787:18;23779:26;;23851:9;23845:4;23841:20;23837:1;23826:9;23822:17;23815:47;23879:131;24005:4;23879:131;:::i;:::-;23871:139;;23598:419;;;:::o;24023:::-;24189:4;24227:2;24216:9;24212:18;24204:26;;24276:9;24270:4;24266:20;24262:1;24251:9;24247:17;24240:47;24304:131;24430:4;24304:131;:::i;:::-;24296:139;;24023:419;;;:::o;24448:::-;24614:4;24652:2;24641:9;24637:18;24629:26;;24701:9;24695:4;24691:20;24687:1;24676:9;24672:17;24665:47;24729:131;24855:4;24729:131;:::i;:::-;24721:139;;24448:419;;;:::o;24873:::-;25039:4;25077:2;25066:9;25062:18;25054:26;;25126:9;25120:4;25116:20;25112:1;25101:9;25097:17;25090:47;25154:131;25280:4;25154:131;:::i;:::-;25146:139;;24873:419;;;:::o;25298:::-;25464:4;25502:2;25491:9;25487:18;25479:26;;25551:9;25545:4;25541:20;25537:1;25526:9;25522:17;25515:47;25579:131;25705:4;25579:131;:::i;:::-;25571:139;;25298:419;;;:::o;25723:::-;25889:4;25927:2;25916:9;25912:18;25904:26;;25976:9;25970:4;25966:20;25962:1;25951:9;25947:17;25940:47;26004:131;26130:4;26004:131;:::i;:::-;25996:139;;25723:419;;;:::o;26148:::-;26314:4;26352:2;26341:9;26337:18;26329:26;;26401:9;26395:4;26391:20;26387:1;26376:9;26372:17;26365:47;26429:131;26555:4;26429:131;:::i;:::-;26421:139;;26148:419;;;:::o;26573:::-;26739:4;26777:2;26766:9;26762:18;26754:26;;26826:9;26820:4;26816:20;26812:1;26801:9;26797:17;26790:47;26854:131;26980:4;26854:131;:::i;:::-;26846:139;;26573:419;;;:::o;26998:::-;27164:4;27202:2;27191:9;27187:18;27179:26;;27251:9;27245:4;27241:20;27237:1;27226:9;27222:17;27215:47;27279:131;27405:4;27279:131;:::i;:::-;27271:139;;26998:419;;;:::o;27423:::-;27589:4;27627:2;27616:9;27612:18;27604:26;;27676:9;27670:4;27666:20;27662:1;27651:9;27647:17;27640:47;27704:131;27830:4;27704:131;:::i;:::-;27696:139;;27423:419;;;:::o;27848:::-;28014:4;28052:2;28041:9;28037:18;28029:26;;28101:9;28095:4;28091:20;28087:1;28076:9;28072:17;28065:47;28129:131;28255:4;28129:131;:::i;:::-;28121:139;;27848:419;;;:::o;28273:::-;28439:4;28477:2;28466:9;28462:18;28454:26;;28526:9;28520:4;28516:20;28512:1;28501:9;28497:17;28490:47;28554:131;28680:4;28554:131;:::i;:::-;28546:139;;28273:419;;;:::o;28698:::-;28864:4;28902:2;28891:9;28887:18;28879:26;;28951:9;28945:4;28941:20;28937:1;28926:9;28922:17;28915:47;28979:131;29105:4;28979:131;:::i;:::-;28971:139;;28698:419;;;:::o;29123:::-;29289:4;29327:2;29316:9;29312:18;29304:26;;29376:9;29370:4;29366:20;29362:1;29351:9;29347:17;29340:47;29404:131;29530:4;29404:131;:::i;:::-;29396:139;;29123:419;;;:::o;29548:::-;29714:4;29752:2;29741:9;29737:18;29729:26;;29801:9;29795:4;29791:20;29787:1;29776:9;29772:17;29765:47;29829:131;29955:4;29829:131;:::i;:::-;29821:139;;29548:419;;;:::o;29973:::-;30139:4;30177:2;30166:9;30162:18;30154:26;;30226:9;30220:4;30216:20;30212:1;30201:9;30197:17;30190:47;30254:131;30380:4;30254:131;:::i;:::-;30246:139;;29973:419;;;:::o;30398:::-;30564:4;30602:2;30591:9;30587:18;30579:26;;30651:9;30645:4;30641:20;30637:1;30626:9;30622:17;30615:47;30679:131;30805:4;30679:131;:::i;:::-;30671:139;;30398:419;;;:::o;30823:222::-;30916:4;30954:2;30943:9;30939:18;30931:26;;30967:71;31035:1;31024:9;31020:17;31011:6;30967:71;:::i;:::-;30823:222;;;;:::o;31051:533::-;31220:4;31258:2;31247:9;31243:18;31235:26;;31271:71;31339:1;31328:9;31324:17;31315:6;31271:71;:::i;:::-;31352:72;31420:2;31409:9;31405:18;31396:6;31352:72;:::i;:::-;31471:9;31465:4;31461:20;31456:2;31445:9;31441:18;31434:48;31499:78;31572:4;31563:6;31499:78;:::i;:::-;31491:86;;31051:533;;;;;;:::o;31590:644::-;31787:4;31825:3;31814:9;31810:19;31802:27;;31839:71;31907:1;31896:9;31892:17;31883:6;31839:71;:::i;:::-;31957:9;31951:4;31947:20;31942:2;31931:9;31927:18;31920:48;31985:78;32058:4;32049:6;31985:78;:::i;:::-;31977:86;;32073:72;32141:2;32130:9;32126:18;32117:6;32073:72;:::i;:::-;32155;32223:2;32212:9;32208:18;32199:6;32155:72;:::i;:::-;31590:644;;;;;;;:::o;32240:129::-;32274:6;32301:20;;:::i;:::-;32291:30;;32330:33;32358:4;32350:6;32330:33;:::i;:::-;32240:129;;;:::o;32375:75::-;32408:6;32441:2;32435:9;32425:19;;32375:75;:::o;32456:311::-;32533:4;32623:18;32615:6;32612:30;32609:56;;;32645:18;;:::i;:::-;32609:56;32695:4;32687:6;32683:17;32675:25;;32755:4;32749;32745:15;32737:23;;32456:311;;;:::o;32773:321::-;32860:4;32950:18;32942:6;32939:30;32936:56;;;32972:18;;:::i;:::-;32936:56;33022:4;33014:6;33010:17;33002:25;;33082:4;33076;33072:15;33064:23;;32773:321;;;:::o;33100:311::-;33177:4;33267:18;33259:6;33256:30;33253:56;;;33289:18;;:::i;:::-;33253:56;33339:4;33331:6;33327:17;33319:25;;33399:4;33393;33389:15;33381:23;;33100:311;;;:::o;33417:307::-;33478:4;33568:18;33560:6;33557:30;33554:56;;;33590:18;;:::i;:::-;33554:56;33628:29;33650:6;33628:29;:::i;:::-;33620:37;;33712:4;33706;33702:15;33694:23;;33417:307;;;:::o;33730:308::-;33792:4;33882:18;33874:6;33871:30;33868:56;;;33904:18;;:::i;:::-;33868:56;33942:29;33964:6;33942:29;:::i;:::-;33934:37;;34026:4;34020;34016:15;34008:23;;33730:308;;;:::o;34044:132::-;34111:4;34134:3;34126:11;;34164:4;34159:3;34155:14;34147:22;;34044:132;;;:::o;34182:114::-;34249:6;34283:5;34277:12;34267:22;;34182:114;;;:::o;34302:98::-;34353:6;34387:5;34381:12;34371:22;;34302:98;;;:::o;34406:99::-;34458:6;34492:5;34486:12;34476:22;;34406:99;;;:::o;34511:113::-;34581:4;34613;34608:3;34604:14;34596:22;;34511:113;;;:::o;34630:184::-;34729:11;34763:6;34758:3;34751:19;34803:4;34798:3;34794:14;34779:29;;34630:184;;;;:::o;34820:168::-;34903:11;34937:6;34932:3;34925:19;34977:4;34972:3;34968:14;34953:29;;34820:168;;;;:::o;34994:169::-;35078:11;35112:6;35107:3;35100:19;35152:4;35147:3;35143:14;35128:29;;34994:169;;;;:::o;35169:305::-;35209:3;35228:20;35246:1;35228:20;:::i;:::-;35223:25;;35262:20;35280:1;35262:20;:::i;:::-;35257:25;;35416:1;35348:66;35344:74;35341:1;35338:81;35335:107;;;35422:18;;:::i;:::-;35335:107;35466:1;35463;35459:9;35452:16;;35169:305;;;;:::o;35480:191::-;35520:4;35540:20;35558:1;35540:20;:::i;:::-;35535:25;;35574:20;35592:1;35574:20;:::i;:::-;35569:25;;35613:1;35610;35607:8;35604:34;;;35618:18;;:::i;:::-;35604:34;35663:1;35660;35656:9;35648:17;;35480:191;;;;:::o;35677:96::-;35714:7;35743:24;35761:5;35743:24;:::i;:::-;35732:35;;35677:96;;;:::o;35779:90::-;35813:7;35856:5;35849:13;35842:21;35831:32;;35779:90;;;:::o;35875:149::-;35911:7;35951:66;35944:5;35940:78;35929:89;;35875:149;;;:::o;36030:126::-;36067:7;36107:42;36100:5;36096:54;36085:65;;36030:126;;;:::o;36162:77::-;36199:7;36228:5;36217:16;;36162:77;;;:::o;36245:154::-;36329:6;36324:3;36319;36306:30;36391:1;36382:6;36377:3;36373:16;36366:27;36245:154;;;:::o;36405:307::-;36473:1;36483:113;36497:6;36494:1;36491:13;36483:113;;;36582:1;36577:3;36573:11;36567:18;36563:1;36558:3;36554:11;36547:39;36519:2;36516:1;36512:10;36507:15;;36483:113;;;36614:6;36611:1;36608:13;36605:101;;;36694:1;36685:6;36680:3;36676:16;36669:27;36605:101;36454:258;36405:307;;;:::o;36718:320::-;36762:6;36799:1;36793:4;36789:12;36779:22;;36846:1;36840:4;36836:12;36867:18;36857:81;;36923:4;36915:6;36911:17;36901:27;;36857:81;36985:2;36977:6;36974:14;36954:18;36951:38;36948:84;;;37004:18;;:::i;:::-;36948:84;36769:269;36718:320;;;:::o;37044:281::-;37127:27;37149:4;37127:27;:::i;:::-;37119:6;37115:40;37257:6;37245:10;37242:22;37221:18;37209:10;37206:34;37203:62;37200:88;;;37268:18;;:::i;:::-;37200:88;37308:10;37304:2;37297:22;37087:238;37044:281;;:::o;37331:233::-;37370:3;37393:24;37411:5;37393:24;:::i;:::-;37384:33;;37439:66;37432:5;37429:77;37426:103;;;37509:18;;:::i;:::-;37426:103;37556:1;37549:5;37545:13;37538:20;;37331:233;;;:::o;37570:180::-;37618:77;37615:1;37608:88;37715:4;37712:1;37705:15;37739:4;37736:1;37729:15;37756:180;37804:77;37801:1;37794:88;37901:4;37898:1;37891:15;37925:4;37922:1;37915:15;37942:180;37990:77;37987:1;37980:88;38087:4;38084:1;38077:15;38111:4;38108:1;38101:15;38128:180;38176:77;38173:1;38166:88;38273:4;38270:1;38263:15;38297:4;38294:1;38287:15;38314:117;38423:1;38420;38413:12;38437:117;38546:1;38543;38536:12;38560:117;38669:1;38666;38659:12;38683:117;38792:1;38789;38782:12;38806:117;38915:1;38912;38905:12;38929:102;38970:6;39021:2;39017:7;39012:2;39005:5;39001:14;38997:28;38987:38;;38929:102;;;:::o;39037:237::-;39177:34;39173:1;39165:6;39161:14;39154:58;39246:20;39241:2;39233:6;39229:15;39222:45;39037:237;:::o;39280:225::-;39420:34;39416:1;39408:6;39404:14;39397:58;39489:8;39484:2;39476:6;39472:15;39465:33;39280:225;:::o;39511:224::-;39651:34;39647:1;39639:6;39635:14;39628:58;39720:7;39715:2;39707:6;39703:15;39696:32;39511:224;:::o;39741:178::-;39881:30;39877:1;39869:6;39865:14;39858:54;39741:178;:::o;39925:177::-;40065:29;40061:1;40053:6;40049:14;40042:53;39925:177;:::o;40108:175::-;40248:27;40244:1;40236:6;40232:14;40225:51;40108:175;:::o;40289:223::-;40429:34;40425:1;40417:6;40413:14;40406:58;40498:6;40493:2;40485:6;40481:15;40474:31;40289:223;:::o;40518:175::-;40658:27;40654:1;40646:6;40642:14;40635:51;40518:175;:::o;40699:228::-;40839:34;40835:1;40827:6;40823:14;40816:58;40908:11;40903:2;40895:6;40891:15;40884:36;40699:228;:::o;40933:249::-;41073:34;41069:1;41061:6;41057:14;41050:58;41142:32;41137:2;41129:6;41125:15;41118:57;40933:249;:::o;41188:182::-;41328:34;41324:1;41316:6;41312:14;41305:58;41188:182;:::o;41376:::-;41516:34;41512:1;41504:6;41500:14;41493:58;41376:182;:::o;41564:234::-;41704:34;41700:1;41692:6;41688:14;41681:58;41773:17;41768:2;41760:6;41756:15;41749:42;41564:234;:::o;41804:174::-;41944:26;41940:1;41932:6;41928:14;41921:50;41804:174;:::o;41984:220::-;42124:34;42120:1;42112:6;42108:14;42101:58;42193:3;42188:2;42180:6;42176:15;42169:28;41984:220;:::o;42210:171::-;42350:23;42346:1;42338:6;42334:14;42327:47;42210:171;:::o;42387:233::-;42527:34;42523:1;42515:6;42511:14;42504:58;42596:16;42591:2;42583:6;42579:15;42572:41;42387:233;:::o;42626:122::-;42699:24;42717:5;42699:24;:::i;:::-;42692:5;42689:35;42679:63;;42738:1;42735;42728:12;42679:63;42626:122;:::o;42754:116::-;42824:21;42839:5;42824:21;:::i;:::-;42817:5;42814:32;42804:60;;42860:1;42857;42850:12;42804:60;42754:116;:::o;42876:120::-;42948:23;42965:5;42948:23;:::i;:::-;42941:5;42938:34;42928:62;;42986:1;42983;42976:12;42928:62;42876:120;:::o;43002:122::-;43075:24;43093:5;43075:24;:::i;:::-;43068:5;43065:35;43055:63;;43114:1;43111;43104:12;43055:63;43002:122;:::o

Swarm Source

ipfs://25ba6c767b5f389613e16adacb2a29b1e38cb2dcbf0c7d56b09a01d7493f7864
Loading...
Loading
[ 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.