ETH Price: $2,488.92 (-0.98%)

Token

MetaRuffy Land (MRLAND)
 

Overview

Max Total Supply

1,169 MRLAND

Holders

29

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
Meta Ruffy: Deployer
Balance
1 MRLAND
0x49273b37ad4bbb7b85c292a540f39e4cac9e6277
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LMNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.0;

/** RuffyWorld Land 
Designed & deployed by

MetaRuffy international FZCO
https://metaruffy.io
https://loobr.com
https://ruffyworld.com

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

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


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]


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

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


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

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


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

pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


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

pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]


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

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


// OpenZeppelin Contracts (last updated v4.5.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: balance query for the zero address");
        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: owner query for nonexistent token");
        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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public 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 owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        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: transfer caller is not 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: transfer caller is not 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) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, 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 a {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 a {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 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 {
                    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 {}
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


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

pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


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

pragma solidity ^0.8.0;


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File contracts/interfaces/IMNFT.sol



pragma solidity ^0.8.0;

interface IMNFT {
    function mint(uint256 _qty, address _to) external payable;
}


// File contracts/LMNFT.sol


pragma solidity ^0.8.0;




contract LMNFT is IMNFT, ERC721Enumerable, Ownable {
    using Strings for uint256;

    // Base Token URI
    string public baseURI;
    string public baseExtension = ".json";
    // MAX supply of collection
    uint256 public  MAX_SUPPLY;
    uint256 public mintPrice;
    uint256 public mrMintPrice;
    address payable public revenueAddress;
    uint256 private startTokenId = 15000;
    address public mrToken;

    constructor(
    string memory _name,
    string memory _symbol,
    uint256 _mintPrice, 
    uint256 _mrMintPrice,
    uint256 _startTokenId,
    address _mrToken,
    string memory _baseURL,
    address _revenueAddress ,
    uint256 _maxSupply)  ERC721(_name,_symbol) {

        startTokenId = _startTokenId;
        mintPrice = _mintPrice;
        mrMintPrice = _mrMintPrice;
        mrToken = _mrToken;
        baseURI = _baseURL;
        MAX_SUPPLY = _maxSupply;
        revenueAddress = payable(_revenueAddress);
    }

    /**************************
     ***** MINT FUNCTIONS *****
     *************************/
    function mint(uint256 _qty, address _to) external payable override   {
        require(totalSupply() + _qty <= MAX_SUPPLY, "NFT: out of stock");
        require(_to != address(0), "NFT: invalid address");
        require(msg.value >= _qty * mintPrice,"Price is not correct");
        revenueAddress.transfer(msg.value);

        for (uint256 i = 0; i < _qty; i++) {
            _mintWithStartTokenId(_to);
        }
    }

    function _mintWithStartTokenId(address to_) internal {
         _safeMint(to_, totalSupply() + startTokenId + 1);
    }

    function multiMint(address[] calldata _wallets) external  onlyOwner {
        require(_wallets.length > 0, "Input address list is empty");
        require(totalSupply() + _wallets.length <= MAX_SUPPLY, "NFT: max supply reached");

        for (uint256 i = 0; i < _wallets.length; i++) {
            require(_wallets[i] != address(0), "NFT: invalid address");
            _mintWithStartTokenId(_wallets[i]);
        }
    }

    function mintWithMR(uint256 _qty, address _to) external {
        uint256 totalPrice = mrMintPrice * _qty;
        require(IERC20(mrToken).allowance(msg.sender, address(this)) >= totalPrice, "Not enough allowance to spend MR Token");
        IERC20(mrToken).transferFrom(msg.sender, revenueAddress, totalPrice);
        for (uint256 i = 0; i < _qty; i++) {
            _mintWithStartTokenId(_to);
        }
    }

    function adminMint(uint256 _qty, address _to) external onlyOwner {
        require(_qty != 0, "NFT: minimum 1 nft");
        require(_to != address(0), "NFT: invalid address");
        require(totalSupply() + _qty <= MAX_SUPPLY, "NFT: max supply reached");

        for (uint256 i = 0; i < _qty; i++) {
            _mintWithStartTokenId(_to);
        }
    }

    /**************************
     ***** VIEW FUNCTIONS *****
     *************************/
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function tokenURI(uint256 _id) public view virtual override returns (string memory) {
        require(_exists(_id), "ERC721Metadata: URI query for nonexistent token");
        string memory currentBaseURI = _baseURI();
        return currentBaseURI;
          
    }

    function tokensOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 balance = balanceOf(_owner);
        uint256[] memory ids = new uint256[](balance);
        for (uint256 i = 0; i < balance; i++) {
            ids[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return ids;
    }

    function exists(uint256 _id) external view returns (bool) {
        return _exists(_id);
    }

    function setBaseURI(string memory _newBaseURI) external onlyOwner {
        baseURI = _newBaseURI;
    }

    function setMintPrice(uint256 _newPrice) external onlyOwner {
        mintPrice = _newPrice;
    }

     function setMRMintPrice(uint256 _newPrice) external onlyOwner {
        mrMintPrice = _newPrice;
    }

    function setMRToken(address _mrToken) public onlyOwner {
        mrToken = _mrToken;
    }

    function setRevenueAddress(address _rAdd) external onlyOwner {
        revenueAddress = payable(_rAdd);
    }
    function getMintPrice() external view returns (uint256) {
        return mintPrice;
    }
  

    function clearStuckTokens(IERC20 erc20) external onlyOwner {
        uint256 balance = erc20.balanceOf(address(this));
        erc20.transfer(msg.sender, balance);
    }
    function withdraw() public payable onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_mintPrice","type":"uint256"},{"internalType":"uint256","name":"_mrMintPrice","type":"uint256"},{"internalType":"uint256","name":"_startTokenId","type":"uint256"},{"internalType":"address","name":"_mrToken","type":"address"},{"internalType":"string","name":"_baseURL","type":"string"},{"internalType":"address","name":"_revenueAddress","type":"address"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"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"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"erc20","type":"address"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"mintWithMR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mrMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mrToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"multiMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"revenueAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMRMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mrToken","type":"address"}],"name":"setMRToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rAdd","type":"address"}],"name":"setRevenueAddress","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000275565b50613a986011553480156200006557600080fd5b50604051620055b4380380620055b483398181016040528101906200008b9190620003d1565b88888160009080519060200190620000a592919062000275565b508060019080519060200190620000be92919062000275565b505050620000e1620000d5620001a760201b60201c565b620001af60201b60201c565b8460118190555086600e8190555085600f8190555083601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b90805190602001906200014f92919062000275565b5080600d8190555081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505062000703565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028390620005e0565b90600052602060002090601f016020900481019282620002a75760008555620002f3565b82601f10620002c257805160ff1916838001178555620002f3565b82800160010185558215620002f3579182015b82811115620002f2578251825591602001919060010190620002d5565b5b50905062000302919062000306565b5090565b5b808211156200032157600081600090555060010162000307565b5090565b60006200033c620003368462000536565b6200050d565b9050828152602081018484840111156200035b576200035a620006af565b5b62000368848285620005aa565b509392505050565b6000815190506200038181620006cf565b92915050565b600082601f8301126200039f576200039e620006aa565b5b8151620003b184826020860162000325565b91505092915050565b600081519050620003cb81620006e9565b92915050565b60008060008060008060008060006101208a8c031215620003f757620003f6620006b9565b5b60008a015167ffffffffffffffff811115620004185762000417620006b4565b5b620004268c828d0162000387565b99505060208a015167ffffffffffffffff8111156200044a5762000449620006b4565b5b620004588c828d0162000387565b98505060406200046b8c828d01620003ba565b97505060606200047e8c828d01620003ba565b9650506080620004918c828d01620003ba565b95505060a0620004a48c828d0162000370565b94505060c08a015167ffffffffffffffff811115620004c857620004c7620006b4565b5b620004d68c828d0162000387565b93505060e0620004e98c828d0162000370565b925050610100620004fd8c828d01620003ba565b9150509295985092959850929598565b6000620005196200052c565b905062000527828262000616565b919050565b6000604051905090565b600067ffffffffffffffff8211156200055457620005536200067b565b5b6200055f82620006be565b9050602081019050919050565b6000620005798262000580565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620005ca578082015181840152602081019050620005ad565b83811115620005da576000848401525b50505050565b60006002820490506001821680620005f957607f821691505b6020821081141562000610576200060f6200064c565b5b50919050565b6200062182620006be565b810181811067ffffffffffffffff821117156200064357620006426200067b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006da816200056c565b8114620006e657600080fd5b50565b620006f481620005a0565b81146200070057600080fd5b50565b614ea180620007136000396000f3fe60806040526004361061023b5760003560e01c80636c0360eb1161012e578063a7f93ebd116100ab578063d91e0a6b1161006f578063d91e0a6b14610867578063e3700ae514610892578063e985e9c5146108bb578063f2fde38b146108f8578063f4a0a528146109215761023b565b8063a7f93ebd14610780578063b410908d146107ab578063b88d4fde146107d6578063c6682862146107ff578063c87b56dd1461082a5761023b565b806394bf804d116100f257806394bf804d146106bc57806395d89b41146106d8578063a22cb46514610703578063a73dc40d1461072c578063a7d5bc20146107575761023b565b80636c0360eb146105d557806370a0823114610600578063715018a61461063d5780638462151c146106545780638da5cb5b146106915761023b565b8063346cc7be116101bc5780634f558e79116101805780634f558e79146104ca5780634f6ccce71461050757806355f804b3146105445780636352211e1461056d5780636817c76c146105aa5761023b565b8063346cc7be1461041c5780633ccfd60b1461044557806342842e0e1461044f578063438098d01461047857806345338d63146104a15761023b565b806318160ddd1161020357806318160ddd1461033757806323b872dd146103625780632bc8bda61461038b5780632f745c59146103b457806332cb6b0c146103f15761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e55780630dc28efe1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613809565b61094a565b6040516102749190613f85565b60405180910390f35b34801561028957600080fd5b506102926109c4565b60405161029f9190613fa0565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906138d9565b610a56565b6040516102dc9190613e58565b60405180910390f35b3480156102f157600080fd5b5061030c6004803603810190610307919061374f565b610adb565b005b34801561031a57600080fd5b5061033560048036038101906103309190613933565b610bf3565b005b34801561034357600080fd5b5061034c610da6565b60405161035991906142e2565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613639565b610db3565b005b34801561039757600080fd5b506103b260048036038101906103ad91906138d9565b610e13565b005b3480156103c057600080fd5b506103db60048036038101906103d6919061374f565b610e99565b6040516103e891906142e2565b60405180910390f35b3480156103fd57600080fd5b50610406610f3e565b60405161041391906142e2565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613863565b610f44565b005b61044d6110df565b005b34801561045b57600080fd5b5061047660048036038101906104719190613639565b6111db565b005b34801561048457600080fd5b5061049f600480360381019061049a919061378f565b6111fb565b005b3480156104ad57600080fd5b506104c860048036038101906104c391906135cc565b611404565b005b3480156104d657600080fd5b506104f160048036038101906104ec91906138d9565b6114c4565b6040516104fe9190613f85565b60405180910390f35b34801561051357600080fd5b5061052e600480360381019061052991906138d9565b6114d6565b60405161053b91906142e2565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613890565b611547565b005b34801561057957600080fd5b50610594600480360381019061058f91906138d9565b6115dd565b6040516105a19190613e58565b60405180910390f35b3480156105b657600080fd5b506105bf61168f565b6040516105cc91906142e2565b60405180910390f35b3480156105e157600080fd5b506105ea611695565b6040516105f79190613fa0565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906135cc565b611723565b60405161063491906142e2565b60405180910390f35b34801561064957600080fd5b506106526117db565b005b34801561066057600080fd5b5061067b600480360381019061067691906135cc565b611863565b6040516106889190613f63565b60405180910390f35b34801561069d57600080fd5b506106a6611911565b6040516106b39190613e58565b60405180910390f35b6106d660048036038101906106d19190613933565b61193b565b005b3480156106e457600080fd5b506106ed611ae7565b6040516106fa9190613fa0565b60405180910390f35b34801561070f57600080fd5b5061072a6004803603810190610725919061370f565b611b79565b005b34801561073857600080fd5b50610741611b8f565b60405161074e9190613e58565b60405180910390f35b34801561076357600080fd5b5061077e600480360381019061077991906135cc565b611bb5565b005b34801561078c57600080fd5b50610795611c75565b6040516107a291906142e2565b60405180910390f35b3480156107b757600080fd5b506107c0611c7f565b6040516107cd9190613e73565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f8919061368c565b611ca5565b005b34801561080b57600080fd5b50610814611d07565b6040516108219190613fa0565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906138d9565b611d95565b60405161085e9190613fa0565b60405180910390f35b34801561087357600080fd5b5061087c611df4565b60405161088991906142e2565b60405180910390f35b34801561089e57600080fd5b506108b960048036038101906108b49190613933565b611dfa565b005b3480156108c757600080fd5b506108e260048036038101906108dd91906135f9565b611ffc565b6040516108ef9190613f85565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a91906135cc565b612090565b005b34801561092d57600080fd5b50610948600480360381019061094391906138d9565b612188565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109bd57506109bc8261220e565b5b9050919050565b6060600080546109d3906145f4565b80601f01602080910402602001604051908101604052809291908181526020018280546109ff906145f4565b8015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b5050505050905090565b6000610a61826122f0565b610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790614202565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae6826115dd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90614262565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7661235c565b73ffffffffffffffffffffffffffffffffffffffff161480610ba55750610ba481610b9f61235c565b611ffc565b5b610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90614142565b60405180910390fd5b610bee8383612364565b505050565b610bfb61235c565b73ffffffffffffffffffffffffffffffffffffffff16610c19611911565b73ffffffffffffffffffffffffffffffffffffffff1614610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6690614222565b60405180910390fd5b6000821415610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa906140a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a90613fc2565b60405180910390fd5b600d5482610d2f610da6565b610d399190614400565b1115610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614102565b60405180910390fd5b60005b82811015610da157610d8e8261241d565b8080610d9990614657565b915050610d7d565b505050565b6000600880549050905090565b610dc4610dbe61235c565b8261244a565b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90614282565b60405180910390fd5b610e0e838383612528565b505050565b610e1b61235c565b73ffffffffffffffffffffffffffffffffffffffff16610e39611911565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690614222565b60405180910390fd5b80600f8190555050565b6000610ea483611723565b8210610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90614002565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d5481565b610f4c61235c565b73ffffffffffffffffffffffffffffffffffffffff16610f6a611911565b73ffffffffffffffffffffffffffffffffffffffff1614610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790614222565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ffb9190613e58565b60206040518083038186803b15801561101357600080fd5b505afa158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b9190613906565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611088929190613f3a565b602060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da91906137dc565b505050565b6110e761235c565b73ffffffffffffffffffffffffffffffffffffffff16611105611911565b73ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614222565b60405180910390fd5b6000611165611911565b73ffffffffffffffffffffffffffffffffffffffff164760405161118890613e43565b60006040518083038185875af1925050503d80600081146111c5576040519150601f19603f3d011682016040523d82523d6000602084013e6111ca565b606091505b50509050806111d857600080fd5b50565b6111f683838360405180602001604052806000815250611ca5565b505050565b61120361235c565b73ffffffffffffffffffffffffffffffffffffffff16611221611911565b73ffffffffffffffffffffffffffffffffffffffff1614611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e90614222565b60405180910390fd5b600082829050116112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490613fe2565b60405180910390fd5b600d54828290506112cc610da6565b6112d69190614400565b1115611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90614102565b60405180910390fd5b60005b828290508110156113ff57600073ffffffffffffffffffffffffffffffffffffffff168383838181106113505761134f61472d565b5b905060200201602081019061136591906135cc565b73ffffffffffffffffffffffffffffffffffffffff1614156113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613fc2565b60405180910390fd5b6113ec8383838181106113d2576113d161472d565b5b90506020020160208101906113e791906135cc565b61241d565b80806113f790614657565b91505061131a565b505050565b61140c61235c565b73ffffffffffffffffffffffffffffffffffffffff1661142a611911565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614222565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006114cf826122f0565b9050919050565b60006114e0610da6565b8210611521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611518906142a2565b60405180910390fd5b600882815481106115355761153461472d565b5b90600052602060002001549050919050565b61154f61235c565b73ffffffffffffffffffffffffffffffffffffffff1661156d611911565b73ffffffffffffffffffffffffffffffffffffffff16146115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90614222565b60405180910390fd5b80600b90805190602001906115d992919061334b565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906141a2565b60405180910390fd5b80915050919050565b600e5481565b600b80546116a2906145f4565b80601f01602080910402602001604051908101604052809291908181526020018280546116ce906145f4565b801561171b5780601f106116f05761010080835404028352916020019161171b565b820191906000526020600020905b8154815290600101906020018083116116fe57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90614182565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117e361235c565b73ffffffffffffffffffffffffffffffffffffffff16611801611911565b73ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90614222565b60405180910390fd5b611861600061278f565b565b6060600061187083611723565b905060008167ffffffffffffffff81111561188e5761188d61475c565b5b6040519080825280602002602001820160405280156118bc5781602001602082028036833780820191505090505b50905060005b82811015611906576118d48582610e99565b8282815181106118e7576118e661472d565b5b60200260200101818152505080806118fe90614657565b9150506118c2565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5482611947610da6565b6119519190614400565b1115611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906142c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613fc2565b60405180910390fd5b600e5482611a109190614456565b341015611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990614162565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611aba573d6000803e3d6000fd5b5060005b82811015611ae257611acf8261241d565b8080611ada90614657565b915050611abe565b505050565b606060018054611af6906145f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611b22906145f4565b8015611b6f5780601f10611b4457610100808354040283529160200191611b6f565b820191906000526020600020905b815481529060010190602001808311611b5257829003601f168201915b5050505050905090565b611b8b611b8461235c565b8383612855565b5050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bbd61235c565b73ffffffffffffffffffffffffffffffffffffffff16611bdb611911565b73ffffffffffffffffffffffffffffffffffffffff1614611c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2890614222565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e54905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cb6611cb061235c565b8361244a565b611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90614282565b60405180910390fd5b611d01848484846129c2565b50505050565b600c8054611d14906145f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611d40906145f4565b8015611d8d5780601f10611d6257610100808354040283529160200191611d8d565b820191906000526020600020905b815481529060010190602001808311611d7057829003601f168201915b505050505081565b6060611da0826122f0565b611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690614242565b60405180910390fd5b6000611de9612a1e565b905080915050919050565b600f5481565b600082600f54611e0a9190614456565b905080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611e6a929190613e8e565b60206040518083038186803b158015611e8257600080fd5b505afa158015611e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eba9190613906565b1015611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef2906141e2565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611f7c93929190613eb7565b602060405180830381600087803b158015611f9657600080fd5b505af1158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fce91906137dc565b5060005b83811015611ff657611fe38361241d565b8080611fee90614657565b915050611fd2565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61209861235c565b73ffffffffffffffffffffffffffffffffffffffff166120b6611911565b73ffffffffffffffffffffffffffffffffffffffff161461210c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210390614222565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614042565b60405180910390fd5b6121858161278f565b50565b61219061235c565b73ffffffffffffffffffffffffffffffffffffffff166121ae611911565b73ffffffffffffffffffffffffffffffffffffffff1614612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614222565b60405180910390fd5b80600e8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122d957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122e957506122e882612ab0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123d7836115dd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61244781600160115461242e610da6565b6124389190614400565b6124429190614400565b612b1a565b50565b6000612455826122f0565b612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248b90614122565b60405180910390fd5b600061249f836115dd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061250e57508373ffffffffffffffffffffffffffffffffffffffff166124f684610a56565b73ffffffffffffffffffffffffffffffffffffffff16145b8061251f575061251e8185611ffc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612548826115dd565b73ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614062565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561260e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612605906140c2565b60405180910390fd5b612619838383612b38565b612624600082612364565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267491906144b0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126cb9190614400565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461278a838383612c4c565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb906140e2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129b59190613f85565b60405180910390a3505050565b6129cd848484612528565b6129d984848484612c51565b612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90614022565b60405180910390fd5b50505050565b6060600b8054612a2d906145f4565b80601f0160208091040260200160405190810160405280929190818152602001828054612a59906145f4565b8015612aa65780601f10612a7b57610100808354040283529160200191612aa6565b820191906000526020600020905b815481529060010190602001808311612a8957829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b34828260405180602001604052806000815250612de8565b5050565b612b43838383612e43565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b8657612b8181612e48565b612bc5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bc457612bc38382612e91565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c0857612c0381612ffe565b612c47565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c4657612c4582826130cf565b5b5b505050565b505050565b6000612c728473ffffffffffffffffffffffffffffffffffffffff1661314e565b15612ddb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c9b61235c565b8786866040518563ffffffff1660e01b8152600401612cbd9493929190613eee565b602060405180830381600087803b158015612cd757600080fd5b505af1925050508015612d0857506040513d601f19601f82011682018060405250810190612d059190613836565b60015b612d8b573d8060008114612d38576040519150601f19603f3d011682016040523d82523d6000602084013e612d3d565b606091505b50600081511415612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a90614022565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612de0565b600190505b949350505050565b612df28383613171565b612dff6000848484612c51565b612e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3590614022565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e9e84611723565b612ea891906144b0565b9050600060076000848152602001908152602001600020549050818114612f8d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061301291906144b0565b90506000600960008481526020019081526020016000205490506000600883815481106130425761304161472d565b5b9060005260206000200154905080600883815481106130645761306361472d565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130b3576130b26146fe565b5b6001900381819060005260206000200160009055905550505050565b60006130da83611723565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d8906141c2565b60405180910390fd5b6131ea816122f0565b1561322a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322190614082565b60405180910390fd5b61323660008383612b38565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132869190614400565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461334760008383612c4c565b5050565b828054613357906145f4565b90600052602060002090601f01602090048101928261337957600085556133c0565b82601f1061339257805160ff19168380011785556133c0565b828001600101855582156133c0579182015b828111156133bf5782518255916020019190600101906133a4565b5b5090506133cd91906133d1565b5090565b5b808211156133ea5760008160009055506001016133d2565b5090565b60006134016133fc84614322565b6142fd565b90508281526020810184848401111561341d5761341c61479a565b5b6134288482856145b2565b509392505050565b600061344361343e84614353565b6142fd565b90508281526020810184848401111561345f5761345e61479a565b5b61346a8482856145b2565b509392505050565b60008135905061348181614df8565b92915050565b60008083601f84011261349d5761349c614790565b5b8235905067ffffffffffffffff8111156134ba576134b961478b565b5b6020830191508360208202830111156134d6576134d5614795565b5b9250929050565b6000813590506134ec81614e0f565b92915050565b60008151905061350181614e0f565b92915050565b60008135905061351681614e26565b92915050565b60008151905061352b81614e26565b92915050565b600082601f83011261354657613545614790565b5b81356135568482602086016133ee565b91505092915050565b60008135905061356e81614e3d565b92915050565b600082601f83011261358957613588614790565b5b8135613599848260208601613430565b91505092915050565b6000813590506135b181614e54565b92915050565b6000815190506135c681614e54565b92915050565b6000602082840312156135e2576135e16147a4565b5b60006135f084828501613472565b91505092915050565b600080604083850312156136105761360f6147a4565b5b600061361e85828601613472565b925050602061362f85828601613472565b9150509250929050565b600080600060608486031215613652576136516147a4565b5b600061366086828701613472565b935050602061367186828701613472565b9250506040613682868287016135a2565b9150509250925092565b600080600080608085870312156136a6576136a56147a4565b5b60006136b487828801613472565b94505060206136c587828801613472565b93505060406136d6878288016135a2565b925050606085013567ffffffffffffffff8111156136f7576136f661479f565b5b61370387828801613531565b91505092959194509250565b60008060408385031215613726576137256147a4565b5b600061373485828601613472565b9250506020613745858286016134dd565b9150509250929050565b60008060408385031215613766576137656147a4565b5b600061377485828601613472565b9250506020613785858286016135a2565b9150509250929050565b600080602083850312156137a6576137a56147a4565b5b600083013567ffffffffffffffff8111156137c4576137c361479f565b5b6137d085828601613487565b92509250509250929050565b6000602082840312156137f2576137f16147a4565b5b6000613800848285016134f2565b91505092915050565b60006020828403121561381f5761381e6147a4565b5b600061382d84828501613507565b91505092915050565b60006020828403121561384c5761384b6147a4565b5b600061385a8482850161351c565b91505092915050565b600060208284031215613879576138786147a4565b5b60006138878482850161355f565b91505092915050565b6000602082840312156138a6576138a56147a4565b5b600082013567ffffffffffffffff8111156138c4576138c361479f565b5b6138d084828501613574565b91505092915050565b6000602082840312156138ef576138ee6147a4565b5b60006138fd848285016135a2565b91505092915050565b60006020828403121561391c5761391b6147a4565b5b600061392a848285016135b7565b91505092915050565b6000806040838503121561394a576139496147a4565b5b6000613958858286016135a2565b925050602061396985828601613472565b9150509250929050565b600061397f8383613e25565b60208301905092915050565b6139948161457c565b82525050565b6139a3816144f6565b82525050565b6139b2816144e4565b82525050565b60006139c382614394565b6139cd81856143c2565b93506139d883614384565b8060005b83811015613a095781516139f08882613973565b97506139fb836143b5565b9250506001810190506139dc565b5085935050505092915050565b613a1f81614508565b82525050565b6000613a308261439f565b613a3a81856143d3565b9350613a4a8185602086016145c1565b613a53816147a9565b840191505092915050565b6000613a69826143aa565b613a7381856143ef565b9350613a838185602086016145c1565b613a8c816147a9565b840191505092915050565b6000613aa46014836143ef565b9150613aaf826147ba565b602082019050919050565b6000613ac7601b836143ef565b9150613ad2826147e3565b602082019050919050565b6000613aea602b836143ef565b9150613af58261480c565b604082019050919050565b6000613b0d6032836143ef565b9150613b188261485b565b604082019050919050565b6000613b306026836143ef565b9150613b3b826148aa565b604082019050919050565b6000613b536025836143ef565b9150613b5e826148f9565b604082019050919050565b6000613b76601c836143ef565b9150613b8182614948565b602082019050919050565b6000613b996012836143ef565b9150613ba482614971565b602082019050919050565b6000613bbc6024836143ef565b9150613bc78261499a565b604082019050919050565b6000613bdf6019836143ef565b9150613bea826149e9565b602082019050919050565b6000613c026017836143ef565b9150613c0d82614a12565b602082019050919050565b6000613c25602c836143ef565b9150613c3082614a3b565b604082019050919050565b6000613c486038836143ef565b9150613c5382614a8a565b604082019050919050565b6000613c6b6014836143ef565b9150613c7682614ad9565b602082019050919050565b6000613c8e602a836143ef565b9150613c9982614b02565b604082019050919050565b6000613cb16029836143ef565b9150613cbc82614b51565b604082019050919050565b6000613cd46020836143ef565b9150613cdf82614ba0565b602082019050919050565b6000613cf76026836143ef565b9150613d0282614bc9565b604082019050919050565b6000613d1a602c836143ef565b9150613d2582614c18565b604082019050919050565b6000613d3d6020836143ef565b9150613d4882614c67565b602082019050919050565b6000613d60602f836143ef565b9150613d6b82614c90565b604082019050919050565b6000613d836021836143ef565b9150613d8e82614cdf565b604082019050919050565b6000613da66000836143e4565b9150613db182614d2e565b600082019050919050565b6000613dc96031836143ef565b9150613dd482614d31565b604082019050919050565b6000613dec602c836143ef565b9150613df782614d80565b604082019050919050565b6000613e0f6011836143ef565b9150613e1a82614dcf565b602082019050919050565b613e2e81614572565b82525050565b613e3d81614572565b82525050565b6000613e4e82613d99565b9150819050919050565b6000602082019050613e6d60008301846139a9565b92915050565b6000602082019050613e88600083018461399a565b92915050565b6000604082019050613ea360008301856139a9565b613eb060208301846139a9565b9392505050565b6000606082019050613ecc60008301866139a9565b613ed9602083018561398b565b613ee66040830184613e34565b949350505050565b6000608082019050613f0360008301876139a9565b613f1060208301866139a9565b613f1d6040830185613e34565b8181036060830152613f2f8184613a25565b905095945050505050565b6000604082019050613f4f60008301856139a9565b613f5c6020830184613e34565b9392505050565b60006020820190508181036000830152613f7d81846139b8565b905092915050565b6000602082019050613f9a6000830184613a16565b92915050565b60006020820190508181036000830152613fba8184613a5e565b905092915050565b60006020820190508181036000830152613fdb81613a97565b9050919050565b60006020820190508181036000830152613ffb81613aba565b9050919050565b6000602082019050818103600083015261401b81613add565b9050919050565b6000602082019050818103600083015261403b81613b00565b9050919050565b6000602082019050818103600083015261405b81613b23565b9050919050565b6000602082019050818103600083015261407b81613b46565b9050919050565b6000602082019050818103600083015261409b81613b69565b9050919050565b600060208201905081810360008301526140bb81613b8c565b9050919050565b600060208201905081810360008301526140db81613baf565b9050919050565b600060208201905081810360008301526140fb81613bd2565b9050919050565b6000602082019050818103600083015261411b81613bf5565b9050919050565b6000602082019050818103600083015261413b81613c18565b9050919050565b6000602082019050818103600083015261415b81613c3b565b9050919050565b6000602082019050818103600083015261417b81613c5e565b9050919050565b6000602082019050818103600083015261419b81613c81565b9050919050565b600060208201905081810360008301526141bb81613ca4565b9050919050565b600060208201905081810360008301526141db81613cc7565b9050919050565b600060208201905081810360008301526141fb81613cea565b9050919050565b6000602082019050818103600083015261421b81613d0d565b9050919050565b6000602082019050818103600083015261423b81613d30565b9050919050565b6000602082019050818103600083015261425b81613d53565b9050919050565b6000602082019050818103600083015261427b81613d76565b9050919050565b6000602082019050818103600083015261429b81613dbc565b9050919050565b600060208201905081810360008301526142bb81613ddf565b9050919050565b600060208201905081810360008301526142db81613e02565b9050919050565b60006020820190506142f76000830184613e34565b92915050565b6000614307614318565b90506143138282614626565b919050565b6000604051905090565b600067ffffffffffffffff82111561433d5761433c61475c565b5b614346826147a9565b9050602081019050919050565b600067ffffffffffffffff82111561436e5761436d61475c565b5b614377826147a9565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061440b82614572565b915061441683614572565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561444b5761444a6146a0565b5b828201905092915050565b600061446182614572565b915061446c83614572565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a5576144a46146a0565b5b828202905092915050565b60006144bb82614572565b91506144c683614572565b9250828210156144d9576144d86146a0565b5b828203905092915050565b60006144ef82614552565b9050919050565b600061450182614552565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061454b826144e4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145878261458e565b9050919050565b6000614599826145a0565b9050919050565b60006145ab82614552565b9050919050565b82818337600083830152505050565b60005b838110156145df5780820151818401526020810190506145c4565b838111156145ee576000848401525b50505050565b6000600282049050600182168061460c57607f821691505b602082108114156146205761461f6146cf565b5b50919050565b61462f826147a9565b810181811067ffffffffffffffff8211171561464e5761464d61475c565b5b80604052505050565b600061466282614572565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614695576146946146a0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e46543a20696e76616c69642061646472657373000000000000000000000000600082015250565b7f496e7075742061646472657373206c69737420697320656d7074790000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e46543a206d696e696d756d2031206e66740000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e46543a206d617820737570706c792072656163686564000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f5072696365206973206e6f7420636f7272656374000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f7420656e6f75676820616c6c6f77616e636520746f207370656e64204d5260008201527f20546f6b656e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e46543a206f7574206f662073746f636b000000000000000000000000000000600082015250565b614e01816144e4565b8114614e0c57600080fd5b50565b614e1881614508565b8114614e2357600080fd5b50565b614e2f81614514565b8114614e3a57600080fd5b50565b614e4681614540565b8114614e5157600080fd5b50565b614e5d81614572565b8114614e6857600080fd5b5056fea26469706673582212206098e8278d4c7e8fda3f8fec97fc48035cfc2419210d8bef1721b2632226ac6d64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000000000000000000000003a98000000000000000000000000a4cb3ef5f41a4d89d6fced22ea8a1c57957629aa00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000040f3fdae96b933eb6f487f3b6bb69b4b1017d3eb000000000000000000000000000000000000000000000000000000000000c350000000000000000000000000000000000000000000000000000000000000000e4d6574615275666679204c616e6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d524c414e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006268747470733a2f2f72756666792e6d7970696e6174612e636c6f75642f697066732f516d51774a5675394a65366f6677476d6f354d5744534c716133586262465375547548644c366a4b6f56615538642f6c616e646d657461646174612e6a736f6e000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80636c0360eb1161012e578063a7f93ebd116100ab578063d91e0a6b1161006f578063d91e0a6b14610867578063e3700ae514610892578063e985e9c5146108bb578063f2fde38b146108f8578063f4a0a528146109215761023b565b8063a7f93ebd14610780578063b410908d146107ab578063b88d4fde146107d6578063c6682862146107ff578063c87b56dd1461082a5761023b565b806394bf804d116100f257806394bf804d146106bc57806395d89b41146106d8578063a22cb46514610703578063a73dc40d1461072c578063a7d5bc20146107575761023b565b80636c0360eb146105d557806370a0823114610600578063715018a61461063d5780638462151c146106545780638da5cb5b146106915761023b565b8063346cc7be116101bc5780634f558e79116101805780634f558e79146104ca5780634f6ccce71461050757806355f804b3146105445780636352211e1461056d5780636817c76c146105aa5761023b565b8063346cc7be1461041c5780633ccfd60b1461044557806342842e0e1461044f578063438098d01461047857806345338d63146104a15761023b565b806318160ddd1161020357806318160ddd1461033757806323b872dd146103625780632bc8bda61461038b5780632f745c59146103b457806332cb6b0c146103f15761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e55780630dc28efe1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613809565b61094a565b6040516102749190613f85565b60405180910390f35b34801561028957600080fd5b506102926109c4565b60405161029f9190613fa0565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906138d9565b610a56565b6040516102dc9190613e58565b60405180910390f35b3480156102f157600080fd5b5061030c6004803603810190610307919061374f565b610adb565b005b34801561031a57600080fd5b5061033560048036038101906103309190613933565b610bf3565b005b34801561034357600080fd5b5061034c610da6565b60405161035991906142e2565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613639565b610db3565b005b34801561039757600080fd5b506103b260048036038101906103ad91906138d9565b610e13565b005b3480156103c057600080fd5b506103db60048036038101906103d6919061374f565b610e99565b6040516103e891906142e2565b60405180910390f35b3480156103fd57600080fd5b50610406610f3e565b60405161041391906142e2565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613863565b610f44565b005b61044d6110df565b005b34801561045b57600080fd5b5061047660048036038101906104719190613639565b6111db565b005b34801561048457600080fd5b5061049f600480360381019061049a919061378f565b6111fb565b005b3480156104ad57600080fd5b506104c860048036038101906104c391906135cc565b611404565b005b3480156104d657600080fd5b506104f160048036038101906104ec91906138d9565b6114c4565b6040516104fe9190613f85565b60405180910390f35b34801561051357600080fd5b5061052e600480360381019061052991906138d9565b6114d6565b60405161053b91906142e2565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613890565b611547565b005b34801561057957600080fd5b50610594600480360381019061058f91906138d9565b6115dd565b6040516105a19190613e58565b60405180910390f35b3480156105b657600080fd5b506105bf61168f565b6040516105cc91906142e2565b60405180910390f35b3480156105e157600080fd5b506105ea611695565b6040516105f79190613fa0565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906135cc565b611723565b60405161063491906142e2565b60405180910390f35b34801561064957600080fd5b506106526117db565b005b34801561066057600080fd5b5061067b600480360381019061067691906135cc565b611863565b6040516106889190613f63565b60405180910390f35b34801561069d57600080fd5b506106a6611911565b6040516106b39190613e58565b60405180910390f35b6106d660048036038101906106d19190613933565b61193b565b005b3480156106e457600080fd5b506106ed611ae7565b6040516106fa9190613fa0565b60405180910390f35b34801561070f57600080fd5b5061072a6004803603810190610725919061370f565b611b79565b005b34801561073857600080fd5b50610741611b8f565b60405161074e9190613e58565b60405180910390f35b34801561076357600080fd5b5061077e600480360381019061077991906135cc565b611bb5565b005b34801561078c57600080fd5b50610795611c75565b6040516107a291906142e2565b60405180910390f35b3480156107b757600080fd5b506107c0611c7f565b6040516107cd9190613e73565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f8919061368c565b611ca5565b005b34801561080b57600080fd5b50610814611d07565b6040516108219190613fa0565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906138d9565b611d95565b60405161085e9190613fa0565b60405180910390f35b34801561087357600080fd5b5061087c611df4565b60405161088991906142e2565b60405180910390f35b34801561089e57600080fd5b506108b960048036038101906108b49190613933565b611dfa565b005b3480156108c757600080fd5b506108e260048036038101906108dd91906135f9565b611ffc565b6040516108ef9190613f85565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a91906135cc565b612090565b005b34801561092d57600080fd5b50610948600480360381019061094391906138d9565b612188565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109bd57506109bc8261220e565b5b9050919050565b6060600080546109d3906145f4565b80601f01602080910402602001604051908101604052809291908181526020018280546109ff906145f4565b8015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b5050505050905090565b6000610a61826122f0565b610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790614202565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae6826115dd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90614262565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7661235c565b73ffffffffffffffffffffffffffffffffffffffff161480610ba55750610ba481610b9f61235c565b611ffc565b5b610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90614142565b60405180910390fd5b610bee8383612364565b505050565b610bfb61235c565b73ffffffffffffffffffffffffffffffffffffffff16610c19611911565b73ffffffffffffffffffffffffffffffffffffffff1614610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6690614222565b60405180910390fd5b6000821415610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa906140a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a90613fc2565b60405180910390fd5b600d5482610d2f610da6565b610d399190614400565b1115610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614102565b60405180910390fd5b60005b82811015610da157610d8e8261241d565b8080610d9990614657565b915050610d7d565b505050565b6000600880549050905090565b610dc4610dbe61235c565b8261244a565b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90614282565b60405180910390fd5b610e0e838383612528565b505050565b610e1b61235c565b73ffffffffffffffffffffffffffffffffffffffff16610e39611911565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690614222565b60405180910390fd5b80600f8190555050565b6000610ea483611723565b8210610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90614002565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d5481565b610f4c61235c565b73ffffffffffffffffffffffffffffffffffffffff16610f6a611911565b73ffffffffffffffffffffffffffffffffffffffff1614610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790614222565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ffb9190613e58565b60206040518083038186803b15801561101357600080fd5b505afa158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b9190613906565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611088929190613f3a565b602060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da91906137dc565b505050565b6110e761235c565b73ffffffffffffffffffffffffffffffffffffffff16611105611911565b73ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614222565b60405180910390fd5b6000611165611911565b73ffffffffffffffffffffffffffffffffffffffff164760405161118890613e43565b60006040518083038185875af1925050503d80600081146111c5576040519150601f19603f3d011682016040523d82523d6000602084013e6111ca565b606091505b50509050806111d857600080fd5b50565b6111f683838360405180602001604052806000815250611ca5565b505050565b61120361235c565b73ffffffffffffffffffffffffffffffffffffffff16611221611911565b73ffffffffffffffffffffffffffffffffffffffff1614611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e90614222565b60405180910390fd5b600082829050116112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490613fe2565b60405180910390fd5b600d54828290506112cc610da6565b6112d69190614400565b1115611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90614102565b60405180910390fd5b60005b828290508110156113ff57600073ffffffffffffffffffffffffffffffffffffffff168383838181106113505761134f61472d565b5b905060200201602081019061136591906135cc565b73ffffffffffffffffffffffffffffffffffffffff1614156113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613fc2565b60405180910390fd5b6113ec8383838181106113d2576113d161472d565b5b90506020020160208101906113e791906135cc565b61241d565b80806113f790614657565b91505061131a565b505050565b61140c61235c565b73ffffffffffffffffffffffffffffffffffffffff1661142a611911565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614222565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006114cf826122f0565b9050919050565b60006114e0610da6565b8210611521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611518906142a2565b60405180910390fd5b600882815481106115355761153461472d565b5b90600052602060002001549050919050565b61154f61235c565b73ffffffffffffffffffffffffffffffffffffffff1661156d611911565b73ffffffffffffffffffffffffffffffffffffffff16146115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90614222565b60405180910390fd5b80600b90805190602001906115d992919061334b565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906141a2565b60405180910390fd5b80915050919050565b600e5481565b600b80546116a2906145f4565b80601f01602080910402602001604051908101604052809291908181526020018280546116ce906145f4565b801561171b5780601f106116f05761010080835404028352916020019161171b565b820191906000526020600020905b8154815290600101906020018083116116fe57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90614182565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117e361235c565b73ffffffffffffffffffffffffffffffffffffffff16611801611911565b73ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90614222565b60405180910390fd5b611861600061278f565b565b6060600061187083611723565b905060008167ffffffffffffffff81111561188e5761188d61475c565b5b6040519080825280602002602001820160405280156118bc5781602001602082028036833780820191505090505b50905060005b82811015611906576118d48582610e99565b8282815181106118e7576118e661472d565b5b60200260200101818152505080806118fe90614657565b9150506118c2565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5482611947610da6565b6119519190614400565b1115611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906142c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613fc2565b60405180910390fd5b600e5482611a109190614456565b341015611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990614162565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611aba573d6000803e3d6000fd5b5060005b82811015611ae257611acf8261241d565b8080611ada90614657565b915050611abe565b505050565b606060018054611af6906145f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611b22906145f4565b8015611b6f5780601f10611b4457610100808354040283529160200191611b6f565b820191906000526020600020905b815481529060010190602001808311611b5257829003601f168201915b5050505050905090565b611b8b611b8461235c565b8383612855565b5050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bbd61235c565b73ffffffffffffffffffffffffffffffffffffffff16611bdb611911565b73ffffffffffffffffffffffffffffffffffffffff1614611c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2890614222565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e54905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cb6611cb061235c565b8361244a565b611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90614282565b60405180910390fd5b611d01848484846129c2565b50505050565b600c8054611d14906145f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611d40906145f4565b8015611d8d5780601f10611d6257610100808354040283529160200191611d8d565b820191906000526020600020905b815481529060010190602001808311611d7057829003601f168201915b505050505081565b6060611da0826122f0565b611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690614242565b60405180910390fd5b6000611de9612a1e565b905080915050919050565b600f5481565b600082600f54611e0a9190614456565b905080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611e6a929190613e8e565b60206040518083038186803b158015611e8257600080fd5b505afa158015611e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eba9190613906565b1015611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef2906141e2565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611f7c93929190613eb7565b602060405180830381600087803b158015611f9657600080fd5b505af1158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fce91906137dc565b5060005b83811015611ff657611fe38361241d565b8080611fee90614657565b915050611fd2565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61209861235c565b73ffffffffffffffffffffffffffffffffffffffff166120b6611911565b73ffffffffffffffffffffffffffffffffffffffff161461210c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210390614222565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614042565b60405180910390fd5b6121858161278f565b50565b61219061235c565b73ffffffffffffffffffffffffffffffffffffffff166121ae611911565b73ffffffffffffffffffffffffffffffffffffffff1614612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614222565b60405180910390fd5b80600e8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122d957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122e957506122e882612ab0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123d7836115dd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61244781600160115461242e610da6565b6124389190614400565b6124429190614400565b612b1a565b50565b6000612455826122f0565b612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248b90614122565b60405180910390fd5b600061249f836115dd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061250e57508373ffffffffffffffffffffffffffffffffffffffff166124f684610a56565b73ffffffffffffffffffffffffffffffffffffffff16145b8061251f575061251e8185611ffc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612548826115dd565b73ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614062565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561260e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612605906140c2565b60405180910390fd5b612619838383612b38565b612624600082612364565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267491906144b0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126cb9190614400565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461278a838383612c4c565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb906140e2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129b59190613f85565b60405180910390a3505050565b6129cd848484612528565b6129d984848484612c51565b612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90614022565b60405180910390fd5b50505050565b6060600b8054612a2d906145f4565b80601f0160208091040260200160405190810160405280929190818152602001828054612a59906145f4565b8015612aa65780601f10612a7b57610100808354040283529160200191612aa6565b820191906000526020600020905b815481529060010190602001808311612a8957829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b34828260405180602001604052806000815250612de8565b5050565b612b43838383612e43565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b8657612b8181612e48565b612bc5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bc457612bc38382612e91565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c0857612c0381612ffe565b612c47565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c4657612c4582826130cf565b5b5b505050565b505050565b6000612c728473ffffffffffffffffffffffffffffffffffffffff1661314e565b15612ddb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c9b61235c565b8786866040518563ffffffff1660e01b8152600401612cbd9493929190613eee565b602060405180830381600087803b158015612cd757600080fd5b505af1925050508015612d0857506040513d601f19601f82011682018060405250810190612d059190613836565b60015b612d8b573d8060008114612d38576040519150601f19603f3d011682016040523d82523d6000602084013e612d3d565b606091505b50600081511415612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a90614022565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612de0565b600190505b949350505050565b612df28383613171565b612dff6000848484612c51565b612e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3590614022565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e9e84611723565b612ea891906144b0565b9050600060076000848152602001908152602001600020549050818114612f8d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061301291906144b0565b90506000600960008481526020019081526020016000205490506000600883815481106130425761304161472d565b5b9060005260206000200154905080600883815481106130645761306361472d565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130b3576130b26146fe565b5b6001900381819060005260206000200160009055905550505050565b60006130da83611723565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d8906141c2565b60405180910390fd5b6131ea816122f0565b1561322a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322190614082565b60405180910390fd5b61323660008383612b38565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132869190614400565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461334760008383612c4c565b5050565b828054613357906145f4565b90600052602060002090601f01602090048101928261337957600085556133c0565b82601f1061339257805160ff19168380011785556133c0565b828001600101855582156133c0579182015b828111156133bf5782518255916020019190600101906133a4565b5b5090506133cd91906133d1565b5090565b5b808211156133ea5760008160009055506001016133d2565b5090565b60006134016133fc84614322565b6142fd565b90508281526020810184848401111561341d5761341c61479a565b5b6134288482856145b2565b509392505050565b600061344361343e84614353565b6142fd565b90508281526020810184848401111561345f5761345e61479a565b5b61346a8482856145b2565b509392505050565b60008135905061348181614df8565b92915050565b60008083601f84011261349d5761349c614790565b5b8235905067ffffffffffffffff8111156134ba576134b961478b565b5b6020830191508360208202830111156134d6576134d5614795565b5b9250929050565b6000813590506134ec81614e0f565b92915050565b60008151905061350181614e0f565b92915050565b60008135905061351681614e26565b92915050565b60008151905061352b81614e26565b92915050565b600082601f83011261354657613545614790565b5b81356135568482602086016133ee565b91505092915050565b60008135905061356e81614e3d565b92915050565b600082601f83011261358957613588614790565b5b8135613599848260208601613430565b91505092915050565b6000813590506135b181614e54565b92915050565b6000815190506135c681614e54565b92915050565b6000602082840312156135e2576135e16147a4565b5b60006135f084828501613472565b91505092915050565b600080604083850312156136105761360f6147a4565b5b600061361e85828601613472565b925050602061362f85828601613472565b9150509250929050565b600080600060608486031215613652576136516147a4565b5b600061366086828701613472565b935050602061367186828701613472565b9250506040613682868287016135a2565b9150509250925092565b600080600080608085870312156136a6576136a56147a4565b5b60006136b487828801613472565b94505060206136c587828801613472565b93505060406136d6878288016135a2565b925050606085013567ffffffffffffffff8111156136f7576136f661479f565b5b61370387828801613531565b91505092959194509250565b60008060408385031215613726576137256147a4565b5b600061373485828601613472565b9250506020613745858286016134dd565b9150509250929050565b60008060408385031215613766576137656147a4565b5b600061377485828601613472565b9250506020613785858286016135a2565b9150509250929050565b600080602083850312156137a6576137a56147a4565b5b600083013567ffffffffffffffff8111156137c4576137c361479f565b5b6137d085828601613487565b92509250509250929050565b6000602082840312156137f2576137f16147a4565b5b6000613800848285016134f2565b91505092915050565b60006020828403121561381f5761381e6147a4565b5b600061382d84828501613507565b91505092915050565b60006020828403121561384c5761384b6147a4565b5b600061385a8482850161351c565b91505092915050565b600060208284031215613879576138786147a4565b5b60006138878482850161355f565b91505092915050565b6000602082840312156138a6576138a56147a4565b5b600082013567ffffffffffffffff8111156138c4576138c361479f565b5b6138d084828501613574565b91505092915050565b6000602082840312156138ef576138ee6147a4565b5b60006138fd848285016135a2565b91505092915050565b60006020828403121561391c5761391b6147a4565b5b600061392a848285016135b7565b91505092915050565b6000806040838503121561394a576139496147a4565b5b6000613958858286016135a2565b925050602061396985828601613472565b9150509250929050565b600061397f8383613e25565b60208301905092915050565b6139948161457c565b82525050565b6139a3816144f6565b82525050565b6139b2816144e4565b82525050565b60006139c382614394565b6139cd81856143c2565b93506139d883614384565b8060005b83811015613a095781516139f08882613973565b97506139fb836143b5565b9250506001810190506139dc565b5085935050505092915050565b613a1f81614508565b82525050565b6000613a308261439f565b613a3a81856143d3565b9350613a4a8185602086016145c1565b613a53816147a9565b840191505092915050565b6000613a69826143aa565b613a7381856143ef565b9350613a838185602086016145c1565b613a8c816147a9565b840191505092915050565b6000613aa46014836143ef565b9150613aaf826147ba565b602082019050919050565b6000613ac7601b836143ef565b9150613ad2826147e3565b602082019050919050565b6000613aea602b836143ef565b9150613af58261480c565b604082019050919050565b6000613b0d6032836143ef565b9150613b188261485b565b604082019050919050565b6000613b306026836143ef565b9150613b3b826148aa565b604082019050919050565b6000613b536025836143ef565b9150613b5e826148f9565b604082019050919050565b6000613b76601c836143ef565b9150613b8182614948565b602082019050919050565b6000613b996012836143ef565b9150613ba482614971565b602082019050919050565b6000613bbc6024836143ef565b9150613bc78261499a565b604082019050919050565b6000613bdf6019836143ef565b9150613bea826149e9565b602082019050919050565b6000613c026017836143ef565b9150613c0d82614a12565b602082019050919050565b6000613c25602c836143ef565b9150613c3082614a3b565b604082019050919050565b6000613c486038836143ef565b9150613c5382614a8a565b604082019050919050565b6000613c6b6014836143ef565b9150613c7682614ad9565b602082019050919050565b6000613c8e602a836143ef565b9150613c9982614b02565b604082019050919050565b6000613cb16029836143ef565b9150613cbc82614b51565b604082019050919050565b6000613cd46020836143ef565b9150613cdf82614ba0565b602082019050919050565b6000613cf76026836143ef565b9150613d0282614bc9565b604082019050919050565b6000613d1a602c836143ef565b9150613d2582614c18565b604082019050919050565b6000613d3d6020836143ef565b9150613d4882614c67565b602082019050919050565b6000613d60602f836143ef565b9150613d6b82614c90565b604082019050919050565b6000613d836021836143ef565b9150613d8e82614cdf565b604082019050919050565b6000613da66000836143e4565b9150613db182614d2e565b600082019050919050565b6000613dc96031836143ef565b9150613dd482614d31565b604082019050919050565b6000613dec602c836143ef565b9150613df782614d80565b604082019050919050565b6000613e0f6011836143ef565b9150613e1a82614dcf565b602082019050919050565b613e2e81614572565b82525050565b613e3d81614572565b82525050565b6000613e4e82613d99565b9150819050919050565b6000602082019050613e6d60008301846139a9565b92915050565b6000602082019050613e88600083018461399a565b92915050565b6000604082019050613ea360008301856139a9565b613eb060208301846139a9565b9392505050565b6000606082019050613ecc60008301866139a9565b613ed9602083018561398b565b613ee66040830184613e34565b949350505050565b6000608082019050613f0360008301876139a9565b613f1060208301866139a9565b613f1d6040830185613e34565b8181036060830152613f2f8184613a25565b905095945050505050565b6000604082019050613f4f60008301856139a9565b613f5c6020830184613e34565b9392505050565b60006020820190508181036000830152613f7d81846139b8565b905092915050565b6000602082019050613f9a6000830184613a16565b92915050565b60006020820190508181036000830152613fba8184613a5e565b905092915050565b60006020820190508181036000830152613fdb81613a97565b9050919050565b60006020820190508181036000830152613ffb81613aba565b9050919050565b6000602082019050818103600083015261401b81613add565b9050919050565b6000602082019050818103600083015261403b81613b00565b9050919050565b6000602082019050818103600083015261405b81613b23565b9050919050565b6000602082019050818103600083015261407b81613b46565b9050919050565b6000602082019050818103600083015261409b81613b69565b9050919050565b600060208201905081810360008301526140bb81613b8c565b9050919050565b600060208201905081810360008301526140db81613baf565b9050919050565b600060208201905081810360008301526140fb81613bd2565b9050919050565b6000602082019050818103600083015261411b81613bf5565b9050919050565b6000602082019050818103600083015261413b81613c18565b9050919050565b6000602082019050818103600083015261415b81613c3b565b9050919050565b6000602082019050818103600083015261417b81613c5e565b9050919050565b6000602082019050818103600083015261419b81613c81565b9050919050565b600060208201905081810360008301526141bb81613ca4565b9050919050565b600060208201905081810360008301526141db81613cc7565b9050919050565b600060208201905081810360008301526141fb81613cea565b9050919050565b6000602082019050818103600083015261421b81613d0d565b9050919050565b6000602082019050818103600083015261423b81613d30565b9050919050565b6000602082019050818103600083015261425b81613d53565b9050919050565b6000602082019050818103600083015261427b81613d76565b9050919050565b6000602082019050818103600083015261429b81613dbc565b9050919050565b600060208201905081810360008301526142bb81613ddf565b9050919050565b600060208201905081810360008301526142db81613e02565b9050919050565b60006020820190506142f76000830184613e34565b92915050565b6000614307614318565b90506143138282614626565b919050565b6000604051905090565b600067ffffffffffffffff82111561433d5761433c61475c565b5b614346826147a9565b9050602081019050919050565b600067ffffffffffffffff82111561436e5761436d61475c565b5b614377826147a9565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061440b82614572565b915061441683614572565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561444b5761444a6146a0565b5b828201905092915050565b600061446182614572565b915061446c83614572565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a5576144a46146a0565b5b828202905092915050565b60006144bb82614572565b91506144c683614572565b9250828210156144d9576144d86146a0565b5b828203905092915050565b60006144ef82614552565b9050919050565b600061450182614552565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061454b826144e4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145878261458e565b9050919050565b6000614599826145a0565b9050919050565b60006145ab82614552565b9050919050565b82818337600083830152505050565b60005b838110156145df5780820151818401526020810190506145c4565b838111156145ee576000848401525b50505050565b6000600282049050600182168061460c57607f821691505b602082108114156146205761461f6146cf565b5b50919050565b61462f826147a9565b810181811067ffffffffffffffff8211171561464e5761464d61475c565b5b80604052505050565b600061466282614572565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614695576146946146a0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e46543a20696e76616c69642061646472657373000000000000000000000000600082015250565b7f496e7075742061646472657373206c69737420697320656d7074790000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e46543a206d696e696d756d2031206e66740000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e46543a206d617820737570706c792072656163686564000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f5072696365206973206e6f7420636f7272656374000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f7420656e6f75676820616c6c6f77616e636520746f207370656e64204d5260008201527f20546f6b656e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e46543a206f7574206f662073746f636b000000000000000000000000000000600082015250565b614e01816144e4565b8114614e0c57600080fd5b50565b614e1881614508565b8114614e2357600080fd5b50565b614e2f81614514565b8114614e3a57600080fd5b50565b614e4681614540565b8114614e5157600080fd5b50565b614e5d81614572565b8114614e6857600080fd5b5056fea26469706673582212206098e8278d4c7e8fda3f8fec97fc48035cfc2419210d8bef1721b2632226ac6d64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000000000000000000000003a98000000000000000000000000a4cb3ef5f41a4d89d6fced22ea8a1c57957629aa00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000040f3fdae96b933eb6f487f3b6bb69b4b1017d3eb000000000000000000000000000000000000000000000000000000000000c350000000000000000000000000000000000000000000000000000000000000000e4d6574615275666679204c616e6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d524c414e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006268747470733a2f2f72756666792e6d7970696e6174612e636c6f75642f697066732f516d51774a5675394a65366f6677476d6f354d5744534c716133586262465375547548644c366a4b6f56615538642f6c616e646d657461646174612e6a736f6e000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): MetaRuffy Land
Arg [1] : _symbol (string): MRLAND
Arg [2] : _mintPrice (uint256): 200000000000000000
Arg [3] : _mrMintPrice (uint256): 10000000000000000000000000
Arg [4] : _startTokenId (uint256): 15000
Arg [5] : _mrToken (address): 0xa4Cb3ef5f41a4D89D6FCed22ea8a1C57957629Aa
Arg [6] : _baseURL (string): https://ruffy.mypinata.cloud/ipfs/QmQwJVu9Je6ofwGmo5MWDSLqa3XbbFSuTuHdL6jKoVaU8d/landmetadata.json
Arg [7] : _revenueAddress (address): 0x40F3fdAe96B933EB6F487F3B6bb69b4B1017D3Eb
Arg [8] : _maxSupply (uint256): 50000

-----Encoded View---------------
18 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Arg [3] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [5] : 000000000000000000000000a4cb3ef5f41a4d89d6fced22ea8a1c57957629aa
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [7] : 00000000000000000000000040f3fdae96b933eb6f487f3b6bb69b4b1017d3eb
Arg [8] : 000000000000000000000000000000000000000000000000000000000000c350
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [10] : 4d6574615275666679204c616e64000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [12] : 4d524c414e440000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000062
Arg [14] : 68747470733a2f2f72756666792e6d7970696e6174612e636c6f75642f697066
Arg [15] : 732f516d51774a5675394a65366f6677476d6f354d5744534c71613358626246
Arg [16] : 5375547548644c366a4b6f56615538642f6c616e646d657461646174612e6a73
Arg [17] : 6f6e000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

48721:4800:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39455:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25183:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26742:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26265:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51237:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40095:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27492:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52763:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39763:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48941:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53195:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53373:145;;;:::i;:::-;;27902:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50372:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52975:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52436:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40285:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52540:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24877:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48974:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48836:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24607:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2679:103;;;;;;;;;;;;;:::i;:::-;;52105:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2028:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49805:430;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25352:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27035:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49125:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52875:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53092:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49038:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28158:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48864:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51826:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49005:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50810:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27261:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2937:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52654:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39455:224;39557:4;39596:35;39581:50;;;:11;:50;;;;:90;;;;39635:36;39659:11;39635:23;:36::i;:::-;39581:90;39574:97;;39455:224;;;:::o;25183:100::-;25237:13;25270:5;25263:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25183:100;:::o;26742:221::-;26818:7;26846:16;26854:7;26846;:16::i;:::-;26838:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26931:15;:24;26947:7;26931:24;;;;;;;;;;;;;;;;;;;;;26924:31;;26742:221;;;:::o;26265:411::-;26346:13;26362:23;26377:7;26362:14;:23::i;:::-;26346:39;;26410:5;26404:11;;:2;:11;;;;26396:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26504:5;26488:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26513:37;26530:5;26537:12;:10;:12::i;:::-;26513:16;:37::i;:::-;26488:62;26466:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26647:21;26656:2;26660:7;26647:8;:21::i;:::-;26335:341;26265:411;;:::o;51237:366::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51329:1:::1;51321:4;:9;;51313:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;51387:1;51372:17;;:3;:17;;;;51364:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;51457:10;;51449:4;51433:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:34;;51425:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51513:9;51508:88;51532:4;51528:1;:8;51508:88;;;51558:26;51580:3;51558:21;:26::i;:::-;51538:3;;;;;:::i;:::-;;;;51508:88;;;;51237:366:::0;;:::o;40095:113::-;40156:7;40183:10;:17;;;;40176:24;;40095:113;:::o;27492:339::-;27687:41;27706:12;:10;:12::i;:::-;27720:7;27687:18;:41::i;:::-;27679:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27795:28;27805:4;27811:2;27815:7;27795:9;:28::i;:::-;27492:339;;;:::o;52763:104::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52850:9:::1;52836:11;:23;;;;52763:104:::0;:::o;39763:256::-;39860:7;39896:23;39913:5;39896:16;:23::i;:::-;39888:5;:31;39880:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39985:12;:19;39998:5;39985:19;;;;;;;;;;;;;;;:26;40005:5;39985:26;;;;;;;;;;;;39978:33;;39763:256;;;;:::o;48941:26::-;;;;:::o;53195:172::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53265:15:::1;53283:5;:15;;;53307:4;53283:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53265:48;;53324:5;:14;;;53339:10;53351:7;53324:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53254:113;53195:172:::0;:::o;53373:145::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53426:7:::1;53447;:5;:7::i;:::-;53439:21;;53468;53439:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53425:69;;;53509:2;53501:11;;;::::0;::::1;;53418:100;53373:145::o:0;27902:185::-;28040:39;28057:4;28063:2;28067:7;28040:39;;;;;;;;;;;;:16;:39::i;:::-;27902:185;;;:::o;50372:430::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50477:1:::1;50459:8;;:15;;:19;50451:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;50564:10;;50545:8;;:15;;50529:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:45;;50521:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50620:9;50615:180;50639:8;;:15;;50635:1;:19;50615:180;;;50707:1;50684:25;;:8;;50693:1;50684:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:25;;;;50676:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;50749:34;50771:8;;50780:1;50771:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50749:21;:34::i;:::-;50656:3;;;;;:::i;:::-;;;;50615:180;;;;50372:430:::0;;:::o;52975:111::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53072:5:::1;53047:14;;:31;;;;;;;;;;;;;;;;;;52975:111:::0;:::o;52436:96::-;52488:4;52512:12;52520:3;52512:7;:12::i;:::-;52505:19;;52436:96;;;:::o;40285:233::-;40360:7;40396:30;:28;:30::i;:::-;40388:5;:38;40380:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40493:10;40504:5;40493:17;;;;;;;;:::i;:::-;;;;;;;;;;40486:24;;40285:233;;;:::o;52540:106::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52627:11:::1;52617:7;:21;;;;;;;;;;;;:::i;:::-;;52540:106:::0;:::o;24877:239::-;24949:7;24969:13;24985:7;:16;24993:7;24985:16;;;;;;;;;;;;;;;;;;;;;24969:32;;25037:1;25020:19;;:5;:19;;;;25012:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25103:5;25096:12;;;24877:239;;;:::o;48974:24::-;;;;:::o;48836:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24607:208::-;24679:7;24724:1;24707:19;;:5;:19;;;;24699:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24791:9;:16;24801:5;24791:16;;;;;;;;;;;;;;;;24784:23;;24607:208;;;:::o;2679:103::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2744:30:::1;2771:1;2744:18;:30::i;:::-;2679:103::o:0;52105:323::-;52165:16;52194:15;52212:17;52222:6;52212:9;:17::i;:::-;52194:35;;52240:20;52277:7;52263:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52240:45;;52301:9;52296:104;52320:7;52316:1;:11;52296:104;;;52358:30;52378:6;52386:1;52358:19;:30::i;:::-;52349:3;52353:1;52349:6;;;;;;;;:::i;:::-;;;;;;;:39;;;;;52329:3;;;;;:::i;:::-;;;;52296:104;;;;52417:3;52410:10;;;;52105:323;;;:::o;2028:87::-;2074:7;2101:6;;;;;;;;;;;2094:13;;2028:87;:::o;49805:430::-;49917:10;;49909:4;49893:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:34;;49885:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49983:1;49968:17;;:3;:17;;;;49960:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;50049:9;;50042:4;:16;;;;:::i;:::-;50029:9;:29;;50021:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;50093:14;;;;;;;;;;;:23;;:34;50117:9;50093:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50145:9;50140:88;50164:4;50160:1;:8;50140:88;;;50190:26;50212:3;50190:21;:26::i;:::-;50170:3;;;;;:::i;:::-;;;;50140:88;;;;49805:430;;:::o;25352:104::-;25408:13;25441:7;25434:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25352:104;:::o;27035:155::-;27130:52;27149:12;:10;:12::i;:::-;27163:8;27173;27130:18;:52::i;:::-;27035:155;;:::o;49125:22::-;;;;;;;;;;;;;:::o;52875:92::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52951:8:::1;52941:7;;:18;;;;;;;;;;;;;;;;;;52875:92:::0;:::o;53092:91::-;53139:7;53166:9;;53159:16;;53092:91;:::o;49038:37::-;;;;;;;;;;;;;:::o;28158:328::-;28333:41;28352:12;:10;:12::i;:::-;28366:7;28333:18;:41::i;:::-;28325:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28439:39;28453:4;28459:2;28463:7;28472:5;28439:13;:39::i;:::-;28158:328;;;;:::o;48864:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51826:271::-;51895:13;51929:12;51937:3;51929:7;:12::i;:::-;51921:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;52004:28;52035:10;:8;:10::i;:::-;52004:41;;52063:14;52056:21;;;51826:271;;;:::o;49005:26::-;;;;:::o;50810:419::-;50877:18;50912:4;50898:11;;:18;;;;:::i;:::-;50877:39;;50991:10;50942:7;;;;;;;;;;;50935:25;;;50961:10;50981:4;50935:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;50927:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;51062:7;;;;;;;;;;;51055:28;;;51084:10;51096:14;;;;;;;;;;;51112:10;51055:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51139:9;51134:88;51158:4;51154:1;:8;51134:88;;;51184:26;51206:3;51184:21;:26::i;:::-;51164:3;;;;;:::i;:::-;;;;51134:88;;;;50866:363;50810:419;;:::o;27261:164::-;27358:4;27382:18;:25;27401:5;27382:25;;;;;;;;;;;;;;;:35;27408:8;27382:35;;;;;;;;;;;;;;;;;;;;;;;;;27375:42;;27261:164;;;;:::o;2937:201::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3046:1:::1;3026:22;;:8;:22;;;;3018:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3102:28;3121:8;3102:18;:28::i;:::-;2937:201:::0;:::o;52654:100::-;2259:12;:10;:12::i;:::-;2248:23;;:7;:5;:7::i;:::-;:23;;;2240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52737:9:::1;52725;:21;;;;52654:100:::0;:::o;24238:305::-;24340:4;24392:25;24377:40;;;:11;:40;;;;:105;;;;24449:33;24434:48;;;:11;:48;;;;24377:105;:158;;;;24499:36;24523:11;24499:23;:36::i;:::-;24377:158;24357:178;;24238:305;;;:::o;29996:127::-;30061:4;30113:1;30085:30;;:7;:16;30093:7;30085:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30078:37;;29996:127;;;:::o;746:98::-;799:7;826:10;819:17;;746:98;:::o;34142:174::-;34244:2;34217:15;:24;34233:7;34217:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34300:7;34296:2;34262:46;;34271:23;34286:7;34271:14;:23::i;:::-;34262:46;;;;;;;;;;;;34142:174;;:::o;50243:121::-;50308:48;50318:3;50354:1;50339:12;;50323:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:32;;;;:::i;:::-;50308:9;:48::i;:::-;50243:121;:::o;30290:348::-;30383:4;30408:16;30416:7;30408;:16::i;:::-;30400:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30484:13;30500:23;30515:7;30500:14;:23::i;:::-;30484:39;;30553:5;30542:16;;:7;:16;;;:51;;;;30586:7;30562:31;;:20;30574:7;30562:11;:20::i;:::-;:31;;;30542:51;:87;;;;30597:32;30614:5;30621:7;30597:16;:32::i;:::-;30542:87;30534:96;;;30290:348;;;;:::o;33399:625::-;33558:4;33531:31;;:23;33546:7;33531:14;:23::i;:::-;:31;;;33523:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33637:1;33623:16;;:2;:16;;;;33615:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33693:39;33714:4;33720:2;33724:7;33693:20;:39::i;:::-;33797:29;33814:1;33818:7;33797:8;:29::i;:::-;33858:1;33839:9;:15;33849:4;33839:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33887:1;33870:9;:13;33880:2;33870:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33918:2;33899:7;:16;33907:7;33899:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33957:7;33953:2;33938:27;;33947:4;33938:27;;;;;;;;;;;;33978:38;33998:4;34004:2;34008:7;33978:19;:38::i;:::-;33399:625;;;:::o;3298:191::-;3372:16;3391:6;;;;;;;;;;;3372:25;;3417:8;3408:6;;:17;;;;;;;;;;;;;;;;;;3472:8;3441:40;;3462:8;3441:40;;;;;;;;;;;;3361:128;3298:191;:::o;34458:315::-;34613:8;34604:17;;:5;:17;;;;34596:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34700:8;34662:18;:25;34681:5;34662:25;;;;;;;;;;;;;;;:35;34688:8;34662:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34746:8;34724:41;;34739:5;34724:41;;;34756:8;34724:41;;;;;;:::i;:::-;;;;;;;;34458:315;;;:::o;29368:::-;29525:28;29535:4;29541:2;29545:7;29525:9;:28::i;:::-;29572:48;29595:4;29601:2;29605:7;29614:5;29572:22;:48::i;:::-;29564:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29368:315;;;;:::o;51710:108::-;51770:13;51803:7;51796:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51710:108;:::o;22661:157::-;22746:4;22785:25;22770:40;;;:11;:40;;;;22763:47;;22661:157;;;:::o;30980:110::-;31056:26;31066:2;31070:7;31056:26;;;;;;;;;;;;:9;:26::i;:::-;30980:110;;:::o;41131:589::-;41275:45;41302:4;41308:2;41312:7;41275:26;:45::i;:::-;41353:1;41337:18;;:4;:18;;;41333:187;;;41372:40;41404:7;41372:31;:40::i;:::-;41333:187;;;41442:2;41434:10;;:4;:10;;;41430:90;;41461:47;41494:4;41500:7;41461:32;:47::i;:::-;41430:90;41333:187;41548:1;41534:16;;:2;:16;;;41530:183;;;41567:45;41604:7;41567:36;:45::i;:::-;41530:183;;;41640:4;41634:10;;:2;:10;;;41630:83;;41661:40;41689:2;41693:7;41661:27;:40::i;:::-;41630:83;41530:183;41131:589;;;:::o;37220:125::-;;;;:::o;35338:799::-;35493:4;35514:15;:2;:13;;;:15::i;:::-;35510:620;;;35566:2;35550:36;;;35587:12;:10;:12::i;:::-;35601:4;35607:7;35616:5;35550:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35546:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35809:1;35792:6;:13;:18;35788:272;;;35835:60;;;;;;;;;;:::i;:::-;;;;;;;;35788:272;36010:6;36004:13;35995:6;35991:2;35987:15;35980:38;35546:529;35683:41;;;35673:51;;;:6;:51;;;;35666:58;;;;;35510:620;36114:4;36107:11;;35338:799;;;;;;;:::o;31317:321::-;31447:18;31453:2;31457:7;31447:5;:18::i;:::-;31498:54;31529:1;31533:2;31537:7;31546:5;31498:22;:54::i;:::-;31476:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31317:321;;;:::o;36709:126::-;;;;:::o;42443:164::-;42547:10;:17;;;;42520:15;:24;42536:7;42520:24;;;;;;;;;;;:44;;;;42575:10;42591:7;42575:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42443:164;:::o;43234:988::-;43500:22;43550:1;43525:22;43542:4;43525:16;:22::i;:::-;:26;;;;:::i;:::-;43500:51;;43562:18;43583:17;:26;43601:7;43583:26;;;;;;;;;;;;43562:47;;43730:14;43716:10;:28;43712:328;;43761:19;43783:12;:18;43796:4;43783:18;;;;;;;;;;;;;;;:34;43802:14;43783:34;;;;;;;;;;;;43761:56;;43867:11;43834:12;:18;43847:4;43834:18;;;;;;;;;;;;;;;:30;43853:10;43834:30;;;;;;;;;;;:44;;;;43984:10;43951:17;:30;43969:11;43951:30;;;;;;;;;;;:43;;;;43746:294;43712:328;44136:17;:26;44154:7;44136:26;;;;;;;;;;;44129:33;;;44180:12;:18;44193:4;44180:18;;;;;;;;;;;;;;;:34;44199:14;44180:34;;;;;;;;;;;44173:41;;;43315:907;;43234:988;;:::o;44517:1079::-;44770:22;44815:1;44795:10;:17;;;;:21;;;;:::i;:::-;44770:46;;44827:18;44848:15;:24;44864:7;44848:24;;;;;;;;;;;;44827:45;;45199:19;45221:10;45232:14;45221:26;;;;;;;;:::i;:::-;;;;;;;;;;45199:48;;45285:11;45260:10;45271;45260:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45396:10;45365:15;:28;45381:11;45365:28;;;;;;;;;;;:41;;;;45537:15;:24;45553:7;45537:24;;;;;;;;;;;45530:31;;;45572:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44588:1008;;;44517:1079;:::o;42021:221::-;42106:14;42123:20;42140:2;42123:16;:20::i;:::-;42106:37;;42181:7;42154:12;:16;42167:2;42154:16;;;;;;;;;;;;;;;:24;42171:6;42154:24;;;;;;;;;;;:34;;;;42228:6;42199:17;:26;42217:7;42199:26;;;;;;;;;;;:35;;;;42095:147;42021:221;;:::o;12388:326::-;12448:4;12705:1;12683:7;:19;;;:23;12676:30;;12388:326;;;:::o;31974:439::-;32068:1;32054:16;;:2;:16;;;;32046:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32127:16;32135:7;32127;:16::i;:::-;32126:17;32118:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32189:45;32218:1;32222:2;32226:7;32189:20;:45::i;:::-;32264:1;32247:9;:13;32257:2;32247:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32295:2;32276:7;:16;32284:7;32276:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32340:7;32336:2;32315:33;;32332:1;32315:33;;;;;;;;;;;;32361:44;32389:1;32393:2;32397:7;32361:19;:44::i;:::-;31974:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1770:5;1801:6;1795:13;1786:22;;1817:30;1841:5;1817:30;:::i;:::-;1716:137;;;;:::o;1859:::-;1904:5;1942:6;1929:20;1920:29;;1958:32;1984:5;1958:32;:::i;:::-;1859:137;;;;:::o;2002:141::-;2058:5;2089:6;2083:13;2074:22;;2105:32;2131:5;2105:32;:::i;:::-;2002:141;;;;:::o;2162:338::-;2217:5;2266:3;2259:4;2251:6;2247:17;2243:27;2233:122;;2274:79;;:::i;:::-;2233:122;2391:6;2378:20;2416:78;2490:3;2482:6;2475:4;2467:6;2463:17;2416:78;:::i;:::-;2407:87;;2223:277;2162:338;;;;:::o;2506:169::-;2567:5;2605:6;2592:20;2583:29;;2621:48;2663:5;2621:48;:::i;:::-;2506:169;;;;:::o;2695:340::-;2751:5;2800:3;2793:4;2785:6;2781:17;2777:27;2767:122;;2808:79;;:::i;:::-;2767:122;2925:6;2912:20;2950:79;3025:3;3017:6;3010:4;3002:6;2998:17;2950:79;:::i;:::-;2941:88;;2757:278;2695:340;;;;:::o;3041:139::-;3087:5;3125:6;3112:20;3103:29;;3141:33;3168:5;3141:33;:::i;:::-;3041:139;;;;:::o;3186:143::-;3243:5;3274:6;3268:13;3259:22;;3290:33;3317:5;3290:33;:::i;:::-;3186:143;;;;:::o;3335:329::-;3394:6;3443:2;3431:9;3422:7;3418:23;3414:32;3411:119;;;3449:79;;:::i;:::-;3411:119;3569:1;3594:53;3639:7;3630:6;3619:9;3615:22;3594:53;:::i;:::-;3584:63;;3540:117;3335:329;;;;:::o;3670:474::-;3738:6;3746;3795:2;3783:9;3774:7;3770:23;3766:32;3763:119;;;3801:79;;:::i;:::-;3763:119;3921:1;3946:53;3991:7;3982:6;3971:9;3967:22;3946:53;:::i;:::-;3936:63;;3892:117;4048:2;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4019:118;3670:474;;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:943::-;4870:6;4878;4886;4894;4943:3;4931:9;4922:7;4918:23;4914:33;4911:120;;;4950:79;;:::i;:::-;4911:120;5070:1;5095:53;5140:7;5131:6;5120:9;5116:22;5095:53;:::i;:::-;5085:63;;5041:117;5197:2;5223:53;5268:7;5259:6;5248:9;5244:22;5223:53;:::i;:::-;5213:63;;5168:118;5325:2;5351:53;5396:7;5387:6;5376:9;5372:22;5351:53;:::i;:::-;5341:63;;5296:118;5481:2;5470:9;5466:18;5453:32;5512:18;5504:6;5501:30;5498:117;;;5534:79;;:::i;:::-;5498:117;5639:62;5693:7;5684:6;5673:9;5669:22;5639:62;:::i;:::-;5629:72;;5424:287;4775:943;;;;;;;:::o;5724:468::-;5789:6;5797;5846:2;5834:9;5825:7;5821:23;5817:32;5814:119;;;5852:79;;:::i;:::-;5814:119;5972:1;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5943:117;6099:2;6125:50;6167:7;6158:6;6147:9;6143:22;6125:50;:::i;:::-;6115:60;;6070:115;5724:468;;;;;:::o;6198:474::-;6266:6;6274;6323:2;6311:9;6302:7;6298:23;6294:32;6291:119;;;6329:79;;:::i;:::-;6291:119;6449:1;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6420:117;6576:2;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6547:118;6198:474;;;;;:::o;6678:559::-;6764:6;6772;6821:2;6809:9;6800:7;6796:23;6792:32;6789:119;;;6827:79;;:::i;:::-;6789:119;6975:1;6964:9;6960:17;6947:31;7005:18;6997:6;6994:30;6991:117;;;7027:79;;:::i;:::-;6991:117;7140:80;7212:7;7203:6;7192:9;7188:22;7140:80;:::i;:::-;7122:98;;;;6918:312;6678:559;;;;;:::o;7243:345::-;7310:6;7359:2;7347:9;7338:7;7334:23;7330:32;7327:119;;;7365:79;;:::i;:::-;7327:119;7485:1;7510:61;7563:7;7554:6;7543:9;7539:22;7510:61;:::i;:::-;7500:71;;7456:125;7243:345;;;;:::o;7594:327::-;7652:6;7701:2;7689:9;7680:7;7676:23;7672:32;7669:119;;;7707:79;;:::i;:::-;7669:119;7827:1;7852:52;7896:7;7887:6;7876:9;7872:22;7852:52;:::i;:::-;7842:62;;7798:116;7594:327;;;;:::o;7927:349::-;7996:6;8045:2;8033:9;8024:7;8020:23;8016:32;8013:119;;;8051:79;;:::i;:::-;8013:119;8171:1;8196:63;8251:7;8242:6;8231:9;8227:22;8196:63;:::i;:::-;8186:73;;8142:127;7927:349;;;;:::o;8282:359::-;8356:6;8405:2;8393:9;8384:7;8380:23;8376:32;8373:119;;;8411:79;;:::i;:::-;8373:119;8531:1;8556:68;8616:7;8607:6;8596:9;8592:22;8556:68;:::i;:::-;8546:78;;8502:132;8282:359;;;;:::o;8647:509::-;8716:6;8765:2;8753:9;8744:7;8740:23;8736:32;8733:119;;;8771:79;;:::i;:::-;8733:119;8919:1;8908:9;8904:17;8891:31;8949:18;8941:6;8938:30;8935:117;;;8971:79;;:::i;:::-;8935:117;9076:63;9131:7;9122:6;9111:9;9107:22;9076:63;:::i;:::-;9066:73;;8862:287;8647:509;;;;:::o;9162:329::-;9221:6;9270:2;9258:9;9249:7;9245:23;9241:32;9238:119;;;9276:79;;:::i;:::-;9238:119;9396:1;9421:53;9466:7;9457:6;9446:9;9442:22;9421:53;:::i;:::-;9411:63;;9367:117;9162:329;;;;:::o;9497:351::-;9567:6;9616:2;9604:9;9595:7;9591:23;9587:32;9584:119;;;9622:79;;:::i;:::-;9584:119;9742:1;9767:64;9823:7;9814:6;9803:9;9799:22;9767:64;:::i;:::-;9757:74;;9713:128;9497:351;;;;:::o;9854:474::-;9922:6;9930;9979:2;9967:9;9958:7;9954:23;9950:32;9947:119;;;9985:79;;:::i;:::-;9947:119;10105:1;10130:53;10175:7;10166:6;10155:9;10151:22;10130:53;:::i;:::-;10120:63;;10076:117;10232:2;10258:53;10303:7;10294:6;10283:9;10279:22;10258:53;:::i;:::-;10248:63;;10203:118;9854:474;;;;;:::o;10334:179::-;10403:10;10424:46;10466:3;10458:6;10424:46;:::i;:::-;10502:4;10497:3;10493:14;10479:28;;10334:179;;;;:::o;10519:147::-;10614:45;10653:5;10614:45;:::i;:::-;10609:3;10602:58;10519:147;;:::o;10672:142::-;10775:32;10801:5;10775:32;:::i;:::-;10770:3;10763:45;10672:142;;:::o;10820:118::-;10907:24;10925:5;10907:24;:::i;:::-;10902:3;10895:37;10820:118;;:::o;10974:732::-;11093:3;11122:54;11170:5;11122:54;:::i;:::-;11192:86;11271:6;11266:3;11192:86;:::i;:::-;11185:93;;11302:56;11352:5;11302:56;:::i;:::-;11381:7;11412:1;11397:284;11422:6;11419:1;11416:13;11397:284;;;11498:6;11492:13;11525:63;11584:3;11569:13;11525:63;:::i;:::-;11518:70;;11611:60;11664:6;11611:60;:::i;:::-;11601:70;;11457:224;11444:1;11441;11437:9;11432:14;;11397:284;;;11401:14;11697:3;11690:10;;11098:608;;;10974:732;;;;:::o;11712:109::-;11793:21;11808:5;11793:21;:::i;:::-;11788:3;11781:34;11712:109;;:::o;11827:360::-;11913:3;11941:38;11973:5;11941:38;:::i;:::-;11995:70;12058:6;12053:3;11995:70;:::i;:::-;11988:77;;12074:52;12119:6;12114:3;12107:4;12100:5;12096:16;12074:52;:::i;:::-;12151:29;12173:6;12151:29;:::i;:::-;12146:3;12142:39;12135:46;;11917:270;11827:360;;;;:::o;12193:364::-;12281:3;12309:39;12342:5;12309:39;:::i;:::-;12364:71;12428:6;12423:3;12364:71;:::i;:::-;12357:78;;12444:52;12489:6;12484:3;12477:4;12470:5;12466:16;12444:52;:::i;:::-;12521:29;12543:6;12521:29;:::i;:::-;12516:3;12512:39;12505:46;;12285:272;12193:364;;;;:::o;12563:366::-;12705:3;12726:67;12790:2;12785:3;12726:67;:::i;:::-;12719:74;;12802:93;12891:3;12802:93;:::i;:::-;12920:2;12915:3;12911:12;12904:19;;12563:366;;;:::o;12935:::-;13077:3;13098:67;13162:2;13157:3;13098:67;:::i;:::-;13091:74;;13174:93;13263:3;13174:93;:::i;:::-;13292:2;13287:3;13283:12;13276:19;;12935:366;;;:::o;13307:::-;13449:3;13470:67;13534:2;13529:3;13470:67;:::i;:::-;13463:74;;13546:93;13635:3;13546:93;:::i;:::-;13664:2;13659:3;13655:12;13648:19;;13307:366;;;:::o;13679:::-;13821:3;13842:67;13906:2;13901:3;13842:67;:::i;:::-;13835:74;;13918:93;14007:3;13918:93;:::i;:::-;14036:2;14031:3;14027:12;14020:19;;13679:366;;;:::o;14051:::-;14193:3;14214:67;14278:2;14273:3;14214:67;:::i;:::-;14207:74;;14290:93;14379:3;14290:93;:::i;:::-;14408:2;14403:3;14399:12;14392:19;;14051:366;;;:::o;14423:::-;14565:3;14586:67;14650:2;14645:3;14586:67;:::i;:::-;14579:74;;14662:93;14751:3;14662:93;:::i;:::-;14780:2;14775:3;14771:12;14764:19;;14423:366;;;:::o;14795:::-;14937:3;14958:67;15022:2;15017:3;14958:67;:::i;:::-;14951:74;;15034:93;15123:3;15034:93;:::i;:::-;15152:2;15147:3;15143:12;15136:19;;14795:366;;;:::o;15167:::-;15309:3;15330:67;15394:2;15389:3;15330:67;:::i;:::-;15323:74;;15406:93;15495:3;15406:93;:::i;:::-;15524:2;15519:3;15515:12;15508:19;;15167:366;;;:::o;15539:::-;15681:3;15702:67;15766:2;15761:3;15702:67;:::i;:::-;15695:74;;15778:93;15867:3;15778:93;:::i;:::-;15896:2;15891:3;15887:12;15880:19;;15539:366;;;:::o;15911:::-;16053:3;16074:67;16138:2;16133:3;16074:67;:::i;:::-;16067:74;;16150:93;16239:3;16150:93;:::i;:::-;16268:2;16263:3;16259:12;16252:19;;15911:366;;;:::o;16283:::-;16425:3;16446:67;16510:2;16505:3;16446:67;:::i;:::-;16439:74;;16522:93;16611:3;16522:93;:::i;:::-;16640:2;16635:3;16631:12;16624:19;;16283:366;;;:::o;16655:::-;16797:3;16818:67;16882:2;16877:3;16818:67;:::i;:::-;16811:74;;16894:93;16983:3;16894:93;:::i;:::-;17012:2;17007:3;17003:12;16996:19;;16655:366;;;:::o;17027:::-;17169:3;17190:67;17254:2;17249:3;17190:67;:::i;:::-;17183:74;;17266:93;17355:3;17266:93;:::i;:::-;17384:2;17379:3;17375:12;17368:19;;17027:366;;;:::o;17399:::-;17541:3;17562:67;17626:2;17621:3;17562:67;:::i;:::-;17555:74;;17638:93;17727:3;17638:93;:::i;:::-;17756:2;17751:3;17747:12;17740:19;;17399:366;;;:::o;17771:::-;17913:3;17934:67;17998:2;17993:3;17934:67;:::i;:::-;17927:74;;18010:93;18099:3;18010:93;:::i;:::-;18128:2;18123:3;18119:12;18112:19;;17771:366;;;:::o;18143:::-;18285:3;18306:67;18370:2;18365:3;18306:67;:::i;:::-;18299:74;;18382:93;18471:3;18382:93;:::i;:::-;18500:2;18495:3;18491:12;18484:19;;18143:366;;;:::o;18515:::-;18657:3;18678:67;18742:2;18737:3;18678:67;:::i;:::-;18671:74;;18754:93;18843:3;18754:93;:::i;:::-;18872:2;18867:3;18863:12;18856:19;;18515:366;;;:::o;18887:::-;19029:3;19050:67;19114:2;19109:3;19050:67;:::i;:::-;19043:74;;19126:93;19215:3;19126:93;:::i;:::-;19244:2;19239:3;19235:12;19228:19;;18887:366;;;:::o;19259:::-;19401:3;19422:67;19486:2;19481:3;19422:67;:::i;:::-;19415:74;;19498:93;19587:3;19498:93;:::i;:::-;19616:2;19611:3;19607:12;19600:19;;19259:366;;;:::o;19631:::-;19773:3;19794:67;19858:2;19853:3;19794:67;:::i;:::-;19787:74;;19870:93;19959:3;19870:93;:::i;:::-;19988:2;19983:3;19979:12;19972:19;;19631:366;;;:::o;20003:::-;20145:3;20166:67;20230:2;20225:3;20166:67;:::i;:::-;20159:74;;20242:93;20331:3;20242:93;:::i;:::-;20360:2;20355:3;20351:12;20344:19;;20003:366;;;:::o;20375:::-;20517:3;20538:67;20602:2;20597:3;20538:67;:::i;:::-;20531:74;;20614:93;20703:3;20614:93;:::i;:::-;20732:2;20727:3;20723:12;20716:19;;20375:366;;;:::o;20747:398::-;20906:3;20927:83;21008:1;21003:3;20927:83;:::i;:::-;20920:90;;21019:93;21108:3;21019:93;:::i;:::-;21137:1;21132:3;21128:11;21121:18;;20747:398;;;:::o;21151:366::-;21293:3;21314:67;21378:2;21373:3;21314:67;:::i;:::-;21307:74;;21390:93;21479:3;21390:93;:::i;:::-;21508:2;21503:3;21499:12;21492:19;;21151:366;;;:::o;21523:::-;21665:3;21686:67;21750:2;21745:3;21686:67;:::i;:::-;21679:74;;21762:93;21851:3;21762:93;:::i;:::-;21880:2;21875:3;21871:12;21864:19;;21523:366;;;:::o;21895:::-;22037:3;22058:67;22122:2;22117:3;22058:67;:::i;:::-;22051:74;;22134:93;22223:3;22134:93;:::i;:::-;22252:2;22247:3;22243:12;22236:19;;21895:366;;;:::o;22267:108::-;22344:24;22362:5;22344:24;:::i;:::-;22339:3;22332:37;22267:108;;:::o;22381:118::-;22468:24;22486:5;22468:24;:::i;:::-;22463:3;22456:37;22381:118;;:::o;22505:379::-;22689:3;22711:147;22854:3;22711:147;:::i;:::-;22704:154;;22875:3;22868:10;;22505:379;;;:::o;22890:222::-;22983:4;23021:2;23010:9;23006:18;22998:26;;23034:71;23102:1;23091:9;23087:17;23078:6;23034:71;:::i;:::-;22890:222;;;;:::o;23118:254::-;23227:4;23265:2;23254:9;23250:18;23242:26;;23278:87;23362:1;23351:9;23347:17;23338:6;23278:87;:::i;:::-;23118:254;;;;:::o;23378:332::-;23499:4;23537:2;23526:9;23522:18;23514:26;;23550:71;23618:1;23607:9;23603:17;23594:6;23550:71;:::i;:::-;23631:72;23699:2;23688:9;23684:18;23675:6;23631:72;:::i;:::-;23378:332;;;;;:::o;23716:458::-;23873:4;23911:2;23900:9;23896:18;23888:26;;23924:71;23992:1;23981:9;23977:17;23968:6;23924:71;:::i;:::-;24005:80;24081:2;24070:9;24066:18;24057:6;24005:80;:::i;:::-;24095:72;24163:2;24152:9;24148:18;24139:6;24095:72;:::i;:::-;23716:458;;;;;;:::o;24180:640::-;24375:4;24413:3;24402:9;24398:19;24390:27;;24427:71;24495:1;24484:9;24480:17;24471:6;24427:71;:::i;:::-;24508:72;24576:2;24565:9;24561:18;24552:6;24508:72;:::i;:::-;24590;24658:2;24647:9;24643:18;24634:6;24590:72;:::i;:::-;24709:9;24703:4;24699:20;24694:2;24683:9;24679:18;24672:48;24737:76;24808:4;24799:6;24737:76;:::i;:::-;24729:84;;24180:640;;;;;;;:::o;24826:332::-;24947:4;24985:2;24974:9;24970:18;24962:26;;24998:71;25066:1;25055:9;25051:17;25042:6;24998:71;:::i;:::-;25079:72;25147:2;25136:9;25132:18;25123:6;25079:72;:::i;:::-;24826:332;;;;;:::o;25164:373::-;25307:4;25345:2;25334:9;25330:18;25322:26;;25394:9;25388:4;25384:20;25380:1;25369:9;25365:17;25358:47;25422:108;25525:4;25516:6;25422:108;:::i;:::-;25414:116;;25164:373;;;;:::o;25543:210::-;25630:4;25668:2;25657:9;25653:18;25645:26;;25681:65;25743:1;25732:9;25728:17;25719:6;25681:65;:::i;:::-;25543:210;;;;:::o;25759:313::-;25872:4;25910:2;25899:9;25895:18;25887:26;;25959:9;25953:4;25949:20;25945:1;25934:9;25930:17;25923:47;25987:78;26060:4;26051:6;25987:78;:::i;:::-;25979:86;;25759:313;;;;:::o;26078:419::-;26244:4;26282:2;26271:9;26267:18;26259:26;;26331:9;26325:4;26321:20;26317:1;26306:9;26302:17;26295:47;26359:131;26485:4;26359:131;:::i;:::-;26351:139;;26078:419;;;:::o;26503:::-;26669:4;26707:2;26696:9;26692:18;26684:26;;26756:9;26750:4;26746:20;26742:1;26731:9;26727:17;26720:47;26784:131;26910:4;26784:131;:::i;:::-;26776:139;;26503:419;;;:::o;26928:::-;27094:4;27132:2;27121:9;27117:18;27109:26;;27181:9;27175:4;27171:20;27167:1;27156:9;27152:17;27145:47;27209:131;27335:4;27209:131;:::i;:::-;27201:139;;26928:419;;;:::o;27353:::-;27519:4;27557:2;27546:9;27542:18;27534:26;;27606:9;27600:4;27596:20;27592:1;27581:9;27577:17;27570:47;27634:131;27760:4;27634:131;:::i;:::-;27626:139;;27353:419;;;:::o;27778:::-;27944:4;27982:2;27971:9;27967:18;27959:26;;28031:9;28025:4;28021:20;28017:1;28006:9;28002:17;27995:47;28059:131;28185:4;28059:131;:::i;:::-;28051:139;;27778:419;;;:::o;28203:::-;28369:4;28407:2;28396:9;28392:18;28384:26;;28456:9;28450:4;28446:20;28442:1;28431:9;28427:17;28420:47;28484:131;28610:4;28484:131;:::i;:::-;28476:139;;28203:419;;;:::o;28628:::-;28794:4;28832:2;28821:9;28817:18;28809:26;;28881:9;28875:4;28871:20;28867:1;28856:9;28852:17;28845:47;28909:131;29035:4;28909:131;:::i;:::-;28901:139;;28628:419;;;:::o;29053:::-;29219:4;29257:2;29246:9;29242:18;29234:26;;29306:9;29300:4;29296:20;29292:1;29281:9;29277:17;29270:47;29334:131;29460:4;29334:131;:::i;:::-;29326:139;;29053:419;;;:::o;29478:::-;29644:4;29682:2;29671:9;29667:18;29659:26;;29731:9;29725:4;29721:20;29717:1;29706:9;29702:17;29695:47;29759:131;29885:4;29759:131;:::i;:::-;29751:139;;29478:419;;;:::o;29903:::-;30069:4;30107:2;30096:9;30092:18;30084:26;;30156:9;30150:4;30146:20;30142:1;30131:9;30127:17;30120:47;30184:131;30310:4;30184:131;:::i;:::-;30176:139;;29903:419;;;:::o;30328:::-;30494:4;30532:2;30521:9;30517:18;30509:26;;30581:9;30575:4;30571:20;30567:1;30556:9;30552:17;30545:47;30609:131;30735:4;30609:131;:::i;:::-;30601:139;;30328:419;;;:::o;30753:::-;30919:4;30957:2;30946:9;30942:18;30934:26;;31006:9;31000:4;30996:20;30992:1;30981:9;30977:17;30970:47;31034:131;31160:4;31034:131;:::i;:::-;31026:139;;30753:419;;;:::o;31178:::-;31344:4;31382:2;31371:9;31367:18;31359:26;;31431:9;31425:4;31421:20;31417:1;31406:9;31402:17;31395:47;31459:131;31585:4;31459:131;:::i;:::-;31451:139;;31178:419;;;:::o;31603:::-;31769:4;31807:2;31796:9;31792:18;31784:26;;31856:9;31850:4;31846:20;31842:1;31831:9;31827:17;31820:47;31884:131;32010:4;31884:131;:::i;:::-;31876:139;;31603:419;;;:::o;32028:::-;32194:4;32232:2;32221:9;32217:18;32209:26;;32281:9;32275:4;32271:20;32267:1;32256:9;32252:17;32245:47;32309:131;32435:4;32309:131;:::i;:::-;32301:139;;32028:419;;;:::o;32453:::-;32619:4;32657:2;32646:9;32642:18;32634:26;;32706:9;32700:4;32696:20;32692:1;32681:9;32677:17;32670:47;32734:131;32860:4;32734:131;:::i;:::-;32726:139;;32453:419;;;:::o;32878:::-;33044:4;33082:2;33071:9;33067:18;33059:26;;33131:9;33125:4;33121:20;33117:1;33106:9;33102:17;33095:47;33159:131;33285:4;33159:131;:::i;:::-;33151:139;;32878:419;;;:::o;33303:::-;33469:4;33507:2;33496:9;33492:18;33484:26;;33556:9;33550:4;33546:20;33542:1;33531:9;33527:17;33520:47;33584:131;33710:4;33584:131;:::i;:::-;33576:139;;33303:419;;;:::o;33728:::-;33894:4;33932:2;33921:9;33917:18;33909:26;;33981:9;33975:4;33971:20;33967:1;33956:9;33952:17;33945:47;34009:131;34135:4;34009:131;:::i;:::-;34001:139;;33728:419;;;:::o;34153:::-;34319:4;34357:2;34346:9;34342:18;34334:26;;34406:9;34400:4;34396:20;34392:1;34381:9;34377:17;34370:47;34434:131;34560:4;34434:131;:::i;:::-;34426:139;;34153:419;;;:::o;34578:::-;34744:4;34782:2;34771:9;34767:18;34759:26;;34831:9;34825:4;34821:20;34817:1;34806:9;34802:17;34795:47;34859:131;34985:4;34859:131;:::i;:::-;34851:139;;34578:419;;;:::o;35003:::-;35169:4;35207:2;35196:9;35192:18;35184:26;;35256:9;35250:4;35246:20;35242:1;35231:9;35227:17;35220:47;35284:131;35410:4;35284:131;:::i;:::-;35276:139;;35003:419;;;:::o;35428:::-;35594:4;35632:2;35621:9;35617:18;35609:26;;35681:9;35675:4;35671:20;35667:1;35656:9;35652:17;35645:47;35709:131;35835:4;35709:131;:::i;:::-;35701:139;;35428:419;;;:::o;35853:::-;36019:4;36057:2;36046:9;36042:18;36034:26;;36106:9;36100:4;36096:20;36092:1;36081:9;36077:17;36070:47;36134:131;36260:4;36134:131;:::i;:::-;36126:139;;35853:419;;;:::o;36278:::-;36444:4;36482:2;36471:9;36467:18;36459:26;;36531:9;36525:4;36521:20;36517:1;36506:9;36502:17;36495:47;36559:131;36685:4;36559:131;:::i;:::-;36551:139;;36278:419;;;:::o;36703:222::-;36796:4;36834:2;36823:9;36819:18;36811:26;;36847:71;36915:1;36904:9;36900:17;36891:6;36847:71;:::i;:::-;36703:222;;;;:::o;36931:129::-;36965:6;36992:20;;:::i;:::-;36982:30;;37021:33;37049:4;37041:6;37021:33;:::i;:::-;36931:129;;;:::o;37066:75::-;37099:6;37132:2;37126:9;37116:19;;37066:75;:::o;37147:307::-;37208:4;37298:18;37290:6;37287:30;37284:56;;;37320:18;;:::i;:::-;37284:56;37358:29;37380:6;37358:29;:::i;:::-;37350:37;;37442:4;37436;37432:15;37424:23;;37147:307;;;:::o;37460:308::-;37522:4;37612:18;37604:6;37601:30;37598:56;;;37634:18;;:::i;:::-;37598:56;37672:29;37694:6;37672:29;:::i;:::-;37664:37;;37756:4;37750;37746:15;37738:23;;37460:308;;;:::o;37774:132::-;37841:4;37864:3;37856:11;;37894:4;37889:3;37885:14;37877:22;;37774:132;;;:::o;37912:114::-;37979:6;38013:5;38007:12;37997:22;;37912:114;;;:::o;38032:98::-;38083:6;38117:5;38111:12;38101:22;;38032:98;;;:::o;38136:99::-;38188:6;38222:5;38216:12;38206:22;;38136:99;;;:::o;38241:113::-;38311:4;38343;38338:3;38334:14;38326:22;;38241:113;;;:::o;38360:184::-;38459:11;38493:6;38488:3;38481:19;38533:4;38528:3;38524:14;38509:29;;38360:184;;;;:::o;38550:168::-;38633:11;38667:6;38662:3;38655:19;38707:4;38702:3;38698:14;38683:29;;38550:168;;;;:::o;38724:147::-;38825:11;38862:3;38847:18;;38724:147;;;;:::o;38877:169::-;38961:11;38995:6;38990:3;38983:19;39035:4;39030:3;39026:14;39011:29;;38877:169;;;;:::o;39052:305::-;39092:3;39111:20;39129:1;39111:20;:::i;:::-;39106:25;;39145:20;39163:1;39145:20;:::i;:::-;39140:25;;39299:1;39231:66;39227:74;39224:1;39221:81;39218:107;;;39305:18;;:::i;:::-;39218:107;39349:1;39346;39342:9;39335:16;;39052:305;;;;:::o;39363:348::-;39403:7;39426:20;39444:1;39426:20;:::i;:::-;39421:25;;39460:20;39478:1;39460:20;:::i;:::-;39455:25;;39648:1;39580:66;39576:74;39573:1;39570:81;39565:1;39558:9;39551:17;39547:105;39544:131;;;39655:18;;:::i;:::-;39544:131;39703:1;39700;39696:9;39685:20;;39363:348;;;;:::o;39717:191::-;39757:4;39777:20;39795:1;39777:20;:::i;:::-;39772:25;;39811:20;39829:1;39811:20;:::i;:::-;39806:25;;39850:1;39847;39844:8;39841:34;;;39855:18;;:::i;:::-;39841:34;39900:1;39897;39893:9;39885:17;;39717:191;;;;:::o;39914:96::-;39951:7;39980:24;39998:5;39980:24;:::i;:::-;39969:35;;39914:96;;;:::o;40016:104::-;40061:7;40090:24;40108:5;40090:24;:::i;:::-;40079:35;;40016:104;;;:::o;40126:90::-;40160:7;40203:5;40196:13;40189:21;40178:32;;40126:90;;;:::o;40222:149::-;40258:7;40298:66;40291:5;40287:78;40276:89;;40222:149;;;:::o;40377:111::-;40429:7;40458:24;40476:5;40458:24;:::i;:::-;40447:35;;40377:111;;;:::o;40494:126::-;40531:7;40571:42;40564:5;40560:54;40549:65;;40494:126;;;:::o;40626:77::-;40663:7;40692:5;40681:16;;40626:77;;;:::o;40709:134::-;40767:9;40800:37;40831:5;40800:37;:::i;:::-;40787:50;;40709:134;;;:::o;40849:126::-;40899:9;40932:37;40963:5;40932:37;:::i;:::-;40919:50;;40849:126;;;:::o;40981:113::-;41031:9;41064:24;41082:5;41064:24;:::i;:::-;41051:37;;40981:113;;;:::o;41100:154::-;41184:6;41179:3;41174;41161:30;41246:1;41237:6;41232:3;41228:16;41221:27;41100:154;;;:::o;41260:307::-;41328:1;41338:113;41352:6;41349:1;41346:13;41338:113;;;41437:1;41432:3;41428:11;41422:18;41418:1;41413:3;41409:11;41402:39;41374:2;41371:1;41367:10;41362:15;;41338:113;;;41469:6;41466:1;41463:13;41460:101;;;41549:1;41540:6;41535:3;41531:16;41524:27;41460:101;41309:258;41260:307;;;:::o;41573:320::-;41617:6;41654:1;41648:4;41644:12;41634:22;;41701:1;41695:4;41691:12;41722:18;41712:81;;41778:4;41770:6;41766:17;41756:27;;41712:81;41840:2;41832:6;41829:14;41809:18;41806:38;41803:84;;;41859:18;;:::i;:::-;41803:84;41624:269;41573:320;;;:::o;41899:281::-;41982:27;42004:4;41982:27;:::i;:::-;41974:6;41970:40;42112:6;42100:10;42097:22;42076:18;42064:10;42061:34;42058:62;42055:88;;;42123:18;;:::i;:::-;42055:88;42163:10;42159:2;42152:22;41942:238;41899:281;;:::o;42186:233::-;42225:3;42248:24;42266:5;42248:24;:::i;:::-;42239:33;;42294:66;42287:5;42284:77;42281:103;;;42364:18;;:::i;:::-;42281:103;42411:1;42404:5;42400:13;42393:20;;42186:233;;;:::o;42425:180::-;42473:77;42470:1;42463:88;42570:4;42567:1;42560:15;42594:4;42591:1;42584:15;42611:180;42659:77;42656:1;42649:88;42756:4;42753:1;42746:15;42780:4;42777:1;42770:15;42797:180;42845:77;42842:1;42835:88;42942:4;42939:1;42932:15;42966:4;42963:1;42956:15;42983:180;43031:77;43028:1;43021:88;43128:4;43125:1;43118:15;43152:4;43149:1;43142:15;43169:180;43217:77;43214:1;43207:88;43314:4;43311:1;43304:15;43338:4;43335:1;43328:15;43355:117;43464:1;43461;43454:12;43478:117;43587:1;43584;43577:12;43601:117;43710:1;43707;43700:12;43724:117;43833:1;43830;43823:12;43847:117;43956:1;43953;43946:12;43970:117;44079:1;44076;44069:12;44093:102;44134:6;44185:2;44181:7;44176:2;44169:5;44165:14;44161:28;44151:38;;44093:102;;;:::o;44201:170::-;44341:22;44337:1;44329:6;44325:14;44318:46;44201:170;:::o;44377:177::-;44517:29;44513:1;44505:6;44501:14;44494:53;44377:177;:::o;44560:230::-;44700:34;44696:1;44688:6;44684:14;44677:58;44769:13;44764:2;44756:6;44752:15;44745:38;44560:230;:::o;44796:237::-;44936:34;44932:1;44924:6;44920:14;44913:58;45005:20;45000:2;44992:6;44988:15;44981:45;44796:237;:::o;45039:225::-;45179:34;45175:1;45167:6;45163:14;45156:58;45248:8;45243:2;45235:6;45231:15;45224:33;45039:225;:::o;45270:224::-;45410:34;45406:1;45398:6;45394:14;45387:58;45479:7;45474:2;45466:6;45462:15;45455:32;45270:224;:::o;45500:178::-;45640:30;45636:1;45628:6;45624:14;45617:54;45500:178;:::o;45684:168::-;45824:20;45820:1;45812:6;45808:14;45801:44;45684:168;:::o;45858:223::-;45998:34;45994:1;45986:6;45982:14;45975:58;46067:6;46062:2;46054:6;46050:15;46043:31;45858:223;:::o;46087:175::-;46227:27;46223:1;46215:6;46211:14;46204:51;46087:175;:::o;46268:173::-;46408:25;46404:1;46396:6;46392:14;46385:49;46268:173;:::o;46447:231::-;46587:34;46583:1;46575:6;46571:14;46564:58;46656:14;46651:2;46643:6;46639:15;46632:39;46447:231;:::o;46684:243::-;46824:34;46820:1;46812:6;46808:14;46801:58;46893:26;46888:2;46880:6;46876:15;46869:51;46684:243;:::o;46933:170::-;47073:22;47069:1;47061:6;47057:14;47050:46;46933:170;:::o;47109:229::-;47249:34;47245:1;47237:6;47233:14;47226:58;47318:12;47313:2;47305:6;47301:15;47294:37;47109:229;:::o;47344:228::-;47484:34;47480:1;47472:6;47468:14;47461:58;47553:11;47548:2;47540:6;47536:15;47529:36;47344:228;:::o;47578:182::-;47718:34;47714:1;47706:6;47702:14;47695:58;47578:182;:::o;47766:225::-;47906:34;47902:1;47894:6;47890:14;47883:58;47975:8;47970:2;47962:6;47958:15;47951:33;47766:225;:::o;47997:231::-;48137:34;48133:1;48125:6;48121:14;48114:58;48206:14;48201:2;48193:6;48189:15;48182:39;47997:231;:::o;48234:182::-;48374:34;48370:1;48362:6;48358:14;48351:58;48234:182;:::o;48422:234::-;48562:34;48558:1;48550:6;48546:14;48539:58;48631:17;48626:2;48618:6;48614:15;48607:42;48422:234;:::o;48662:220::-;48802:34;48798:1;48790:6;48786:14;48779:58;48871:3;48866:2;48858:6;48854:15;48847:28;48662:220;:::o;48888:114::-;;:::o;49008:236::-;49148:34;49144:1;49136:6;49132:14;49125:58;49217:19;49212:2;49204:6;49200:15;49193:44;49008:236;:::o;49250:231::-;49390:34;49386:1;49378:6;49374:14;49367:58;49459:14;49454:2;49446:6;49442:15;49435:39;49250:231;:::o;49487:167::-;49627:19;49623:1;49615:6;49611:14;49604:43;49487:167;:::o;49660:122::-;49733:24;49751:5;49733:24;:::i;:::-;49726:5;49723:35;49713:63;;49772:1;49769;49762:12;49713:63;49660:122;:::o;49788:116::-;49858:21;49873:5;49858:21;:::i;:::-;49851:5;49848:32;49838:60;;49894:1;49891;49884:12;49838:60;49788:116;:::o;49910:120::-;49982:23;49999:5;49982:23;:::i;:::-;49975:5;49972:34;49962:62;;50020:1;50017;50010:12;49962:62;49910:120;:::o;50036:152::-;50124:39;50157:5;50124:39;:::i;:::-;50117:5;50114:50;50104:78;;50178:1;50175;50168:12;50104:78;50036:152;:::o;50194:122::-;50267:24;50285:5;50267:24;:::i;:::-;50260:5;50257:35;50247:63;;50306:1;50303;50296:12;50247:63;50194:122;:::o

Swarm Source

ipfs://6098e8278d4c7e8fda3f8fec97fc48035cfc2419210d8bef1721b2632226ac6d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.