Token MiniVerse Market

 

Overview ERC-1155

Total Supply:
0 MvMarket

Holders:
142 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MiniMarket

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 185 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-23
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol



pragma solidity ^0.8.0;


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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol



pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol



pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

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

        _burn(account, id, value);
    }

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

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

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

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

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

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

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}
/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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

pragma solidity ^0.8.0;

interface IFusion {
    function fusionLevelCheck(uint256 tokenId) external returns(uint256 level);
}

interface IOwner {
      function ownerOf(uint256 tokenId) external returns (address);
  }


contract MiniMarket is ERC1155Supply, Ownable, ReentrancyGuard {
  using SafeERC20 for IERC20;
  string public name;
  string public symbol;
  uint256 public constant MiniCandy = 0;
  uint256 public constant unBlacklist = 1;
  uint256 public constant jobLvlUp = 2;
  uint256 public constant fusionLvlUp1 = 3;
  uint256 public constant fusionLvlUp2 = 4;
  uint256 public constant fusionLvlUp3 = 5;
  uint256 public constant fusionLvlUp4 = 6;
  IERC20 public MvGLD;
  address public MiniFren;
  address public Chilla;
  address public Guinea;
  address public Land;
  mapping(uint => string) public tokenURI;
  mapping(uint256 => mapping(uint256 => bool)) public claimedFusion;
  mapping (uint256 => uint256) public genesisLevelChilla;
  mapping (uint256 => uint256) public genesisLevelGuinea;
  mapping (uint256 => uint256) public genesisLevelLand;
  constructor(IERC20 _MvGLD, address _MiniFren, address _Chilla, address _Guinea, address _Land) ERC1155("") {
    name = "MiniVerse Market";
    symbol = "MvMarket";
    MvGLD = _MvGLD;
    MiniFren = _MiniFren;
    Chilla = _Chilla;
    Guinea = _Guinea;
    Land = _Land;
  }

    function burnNew(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

  function ownerMint(address _to, uint256 _id, uint _amount) public onlyOwner {
    _mint(_to, _id, _amount, "");
  }
  function mintMiniCandy(uint256 _amount) public nonReentrant()  {
     MvGLD.safeTransferFrom(msg.sender, address(this), 6 ether * _amount);
    _mint(msg.sender, MiniCandy, _amount, "");
  }

  function mintUnBlacklist(uint256 _amount) public nonReentrant()  {
     MvGLD.safeTransferFrom(msg.sender, address(this), 10 ether * _amount);
    _mint(msg.sender, unBlacklist, _amount, "");
  }

   function mintJobLevelUp(uint256 _amount) public nonReentrant()  {
     MvGLD.safeTransferFrom(msg.sender, address(this), 20 ether * _amount);
    _mint(msg.sender, jobLvlUp, _amount, "");
  }

   function mintFusionLevelUp(uint256 _tokenId) public nonReentrant()  {
     require(IOwner(MiniFren).ownerOf(_tokenId) == msg.sender, "Not tokenId owner");

     if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 1){
     require(claimedFusion[_tokenId][1] == false, "Already Claimed Level 1");
     claimedFusion[_tokenId][1] =  true;
     _mint(msg.sender, fusionLvlUp1, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 2){
     require(claimedFusion[_tokenId][2] == false, "Already Claimed Level 2");
     claimedFusion[_tokenId][2] =  true;
     _mint(msg.sender, fusionLvlUp1, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 3){
     require(claimedFusion[_tokenId][3] == false, "Already Claimed Level 3");
     claimedFusion[_tokenId][3] =  true;
     _mint(msg.sender, fusionLvlUp2, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 4){
     require(claimedFusion[_tokenId][4] == false, "Already Claimed Level 4");
     claimedFusion[_tokenId][4] =  true;
     _mint(msg.sender, fusionLvlUp2, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 5){
     require(claimedFusion[_tokenId][5] == false, "Already Claimed Level 5");
     claimedFusion[_tokenId][5] =  true;
     _mint(msg.sender, fusionLvlUp3, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 6){
     require(claimedFusion[_tokenId][6] == false, "Already Claimed Level 6");
     claimedFusion[_tokenId][6] =  true;
     _mint(msg.sender, fusionLvlUp3, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 7){
     require(claimedFusion[_tokenId][7] == false, "Already Claimed Level 7");
     claimedFusion[_tokenId][7] =  true;
     _mint(msg.sender, fusionLvlUp3, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 8){
     require(claimedFusion[_tokenId][8] == false, "Already Claimed Level 8");
     claimedFusion[_tokenId][8] =  true;
     _mint(msg.sender, fusionLvlUp3, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 9){
     require(claimedFusion[_tokenId][9] == false, "Already Claimed Level 9");
     claimedFusion[_tokenId][9] =  true;
     _mint(msg.sender, fusionLvlUp4, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 10){
     require(claimedFusion[_tokenId][10] == false, "Already Claimed Level 10");
     claimedFusion[_tokenId][10] =  true;
     _mint(msg.sender, fusionLvlUp4, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 11){
     require(claimedFusion[_tokenId][11] == false, "Already Claimed Level 11");
     claimedFusion[_tokenId][11] =  true;
     _mint(msg.sender, fusionLvlUp4, 1, "");
     }else if(IFusion(MiniFren).fusionLevelCheck(_tokenId) == 12){
     require(claimedFusion[_tokenId][12] == false, "Already Claimed Level 12");
     claimedFusion[_tokenId][12] =  true;
     _mint(msg.sender, fusionLvlUp4, 1, "");
     }else{
     revert("Reverted Not Fused");
     }
 }

 function genesisLevelUpChilla(uint256 _tokenId) internal  {
     require(IOwner(Chilla).ownerOf(_tokenId) == msg.sender, "Not tokenId owner");
     if (genesisLevelChilla[_tokenId] == 12){
      revert("Max Level");
     }else if (genesisLevelChilla[_tokenId] < 2) {
      lootBurn(msg.sender, fusionLvlUp1, 1);
      genesisLevelChilla[_tokenId]++;
     }else if (genesisLevelChilla[_tokenId] < 4) {
      lootBurn(msg.sender, fusionLvlUp2, 1);
      genesisLevelChilla[_tokenId]++;
     }else if (genesisLevelChilla[_tokenId] < 8) {
      lootBurn(msg.sender, fusionLvlUp3, 1);
      genesisLevelChilla[_tokenId]++;
     }else {
      lootBurn(msg.sender, fusionLvlUp4, 1);
      genesisLevelChilla[_tokenId]++;
     }
 }

   function genesisLevelUpChillaInterface(uint256 _tokenId) public nonReentrant  {
     genesisLevelUpChilla(_tokenId);
 }

  function genesisLevelUpGuinea(uint256 _tokenId) internal {
     require(IOwner(Guinea).ownerOf(_tokenId) == msg.sender, "Not tokenId owner");
     if (genesisLevelGuinea[_tokenId] == 12){
      revert("Max Level");
     }else if (genesisLevelGuinea[_tokenId] < 2) {
      lootBurn(msg.sender, fusionLvlUp1, 1);
      genesisLevelGuinea[_tokenId]++;
     }else if (genesisLevelGuinea[_tokenId] < 4) {
      lootBurn(msg.sender, fusionLvlUp2, 1);
      genesisLevelGuinea[_tokenId]++;
     }else if (genesisLevelGuinea[_tokenId] < 8) {
      lootBurn(msg.sender, fusionLvlUp3, 1);
      genesisLevelGuinea[_tokenId]++;
     }else {
      lootBurn(msg.sender, fusionLvlUp4, 1);
      genesisLevelGuinea[_tokenId]++;
     }
 }

 function genesisLevelUpGuineaInterface(uint256 _tokenId) public nonReentrant  {
     genesisLevelUpGuinea(_tokenId);
 }

  function genesisLevelUpLand(uint256 _tokenId) internal {
     require(IOwner(Land).ownerOf(_tokenId) == msg.sender, "Not tokenId owner");
     if (genesisLevelLand[_tokenId] == 3){
      revert("Max Level");
     }else {
      lootBurn(msg.sender, fusionLvlUp1, 1);
      genesisLevelLand[_tokenId]++;
     }
 }

 function genesisLevelUpLandInterface(uint256 _tokenId) public nonReentrant  {
     genesisLevelUpLand(_tokenId);
 }

  function lootBurn(address owner, uint256 _id, uint _amount) public  {
    burnNew(owner, _id, _amount);
  }

  

// view

  function uri(uint _id) public override view returns (string memory) {
    return tokenURI[_id];
  }

  function fusionClaimed(uint256 _tokenId, uint256 _level) public view returns (bool){
      return claimedFusion[_tokenId][_level];
  }

  function genesisLevelCheckChilla(uint256 tokenId) public view returns(uint256 level){
     return genesisLevelChilla[tokenId];
  }

  function genesisLevelCheckGuinea(uint256 tokenId) public view returns(uint256 level){
     return genesisLevelGuinea[tokenId];
  }

  function genesisLevelCheckLand(uint256 tokenId) public view returns(uint256 level){
     return genesisLevelLand[tokenId];
  }

// only owner

 function setURI(uint _id, string memory _uri) external onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

  function setFren(address _address) external onlyOwner {
      MiniFren = _address;
  }

  function setChilla(address _address) external onlyOwner {
      Chilla = _address;
  }

  function setGuinea(address _address) external onlyOwner {
      Guinea = _address;
  }

  function setLand(address _address) external onlyOwner {
      Land = _address;
  }

   function setMvGld(IERC20 _address) external onlyOwner {
      MvGLD = _address;
  }

  function levelGuineaMaster(uint256 tokenId, uint256 level) public onlyOwner{ 
       genesisLevelGuinea[tokenId] = level;
   }

   function levelChillaMaster(uint256 tokenId, uint256 level) public onlyOwner{ 
       genesisLevelChilla[tokenId] = level;
   }

    function levelLandMaster(uint256 tokenId, uint256 level) public onlyOwner{ 
       genesisLevelLand[tokenId] = level;
   }
 
  function withdrawTokens(address _erc20Address, uint256 _amount) external onlyOwner() {
    IERC20(_erc20Address).safeTransfer(msg.sender, _amount);
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_MvGLD","type":"address"},{"internalType":"address","name":"_MiniFren","type":"address"},{"internalType":"address","name":"_Chilla","type":"address"},{"internalType":"address","name":"_Guinea","type":"address"},{"internalType":"address","name":"_Land","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"Chilla","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Guinea","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Land","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MiniCandy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MiniFren","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MvGLD","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedFusion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_level","type":"uint256"}],"name":"fusionClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"genesisLevelCheckChilla","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"genesisLevelCheckGuinea","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"genesisLevelCheckLand","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"genesisLevelChilla","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"genesisLevelGuinea","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"genesisLevelLand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"genesisLevelUpChillaInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"genesisLevelUpGuineaInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"genesisLevelUpLandInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jobLvlUp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"levelChillaMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"levelGuineaMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"levelLandMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lootBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mintFusionLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintJobLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintMiniCandy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintUnBlacklist","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setChilla","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setFren","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setGuinea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_address","type":"address"}],"name":"setMvGld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unBlacklist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200413f3803806200413f83398101604081905262000034916200023f565b6040805160208101909152600081526200004e816200012e565b506200005a3362000147565b60016005556040805180820190915260108082526f135a5b9a55995c9cd94813585c9ad95d60821b6020909201918252620000989160069162000199565b5060408051808201909152600880825267135d93585c9ad95d60c21b6020909201918252620000ca9160079162000199565b50600880546001600160a01b03199081166001600160a01b039788161790915560098054821695871695909517909455600a8054851693861693909317909255600b80548416918516919091179055600c8054909216921691909117905562000315565b80516200014390600290602084019062000199565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001a790620002bf565b90600052602060002090601f016020900481019282620001cb576000855562000216565b82601f10620001e657805160ff191683800117855562000216565b8280016001018555821562000216579182015b8281111562000216578251825591602001919060010190620001f9565b506200022492915062000228565b5090565b5b8082111562000224576000815560010162000229565b600080600080600060a086880312156200025857600080fd5b85516200026581620002fc565b60208701519095506200027881620002fc565b60408701519094506200028b81620002fc565b60608701519093506200029e81620002fc565b6080870151909250620002b181620002fc565b809150509295509295909350565b600181811c90821680620002d457607f821691505b60208210811415620002f657634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03811681146200031257600080fd5b50565b613e1a80620003256000396000f3fe608060405234801561001057600080fd5b50600436106102f75760003560e01c8063853e917e11610193578063cb724273116100e4578063e0b361a311610092578063e0b361a314610719578063e4510a6d1461072c578063e694085a1461073f578063e985e9c514610752578063f242432a1461078e578063f2fde38b146107a1578063f86c872c146107b457600080fd5b8063cb724273146106a8578063ce65851f146106bb578063d162bb02146106c3578063d1cefc54146106d6578063d472cc91146106de578063d4d35a0e146106f1578063d6d6439b146106f957600080fd5b8063a3a1946111610141578063a3a19461146105f9578063af4218dc14610627578063b177bad814610647578063bd85b0391461064f578063c4eecf9f1461066f578063c57a746514610682578063c87b56dd1461069557600080fd5b8063853e917e1461057f578063862440e21461059f5780638ae91f82146105b25780638da5cb5b146105c557806395d89b41146105d65780639f065499146105de578063a22cb465146105e657600080fd5b8063388b9fe01161024d57806369f58533116101fb57806369f58533146104f8578063715018a61461050b57806371d3d0091461051357806376aa23d21461052657806376e351611461053957806381d9e0cf14610559578063844705c61461056c57600080fd5b8063388b9fe0146104625780633b5828fc1461047557806343015eb214610488578063440ea2871461049b5780634e1273f4146104a35780634f558e79146104c35780635bbf351e146104e557600080fd5b806315ca897f116102aa57806315ca897f146103c057806329b548ab146103d35780632d0d0578146103f35780632eb2c2d61461040657806330ab78be146104195780633597c7ac1461044757806337012df51461045a57600080fd5b8062fdd58e146102fc57806301f909c41461032257806301ffc9a71461034d57806306b091f91461037057806306fdde03146103855780630e89341c1461039a57806313d5118a146103ad575b600080fd5b61030f61030a366004613640565b6107d4565b6040519081526020015b60405180910390f35b600954610335906001600160a01b031681565b6040516001600160a01b039091168152602001610319565b61036061035b366004613791565b61086b565b6040519015158152602001610319565b61038361037e366004613640565b6108bd565b005b61038d6108ff565b60405161031991906139cc565b61038d6103a83660046137cb565b61098d565b6103836103bb3660046137cb565b610a2f565b600c54610335906001600160a01b031681565b61030f6103e13660046137cb565b60106020526000908152604090205481565b600a54610335906001600160a01b031681565b6103836104143660046134fb565b610a68565b61036061042736600461384e565b600e60209081526000928352604080842090915290825290205460ff1681565b6103836104553660046137cb565b610aff565b61030f600481565b61038361047036600461366c565b611a3b565b610383610483366004613488565b611a85565b600854610335906001600160a01b031681565b61030f600281565b6104b66104b13660046136a1565b611ad1565b604051610319919061398b565b6103606104d13660046137cb565b600090815260036020526040902054151590565b6103836104f336600461384e565b611bfb565b61038361050636600461384e565b611c37565b610383611c73565b610383610521366004613488565b611ca9565b600b54610335906001600160a01b031681565b61030f6105473660046137cb565b6000908152600f602052604090205490565b610383610567366004613488565b611cf5565b61038361057a3660046137cb565b611d41565b61030f61058d3660046137cb565b60009081526011602052604090205490565b6103836105ad3660046137fd565b611db1565b6103836105c03660046137cb565b611e37565b6004546001600160a01b0316610335565b61038d611e92565b61030f600381565b6103836105f4366004613612565b611e9f565b61036061060736600461384e565b6000918252600e6020908152604080842092845291905290205460ff1690565b61030f6106353660046137cb565b60116020526000908152604090205481565b61030f600081565b61030f61065d3660046137cb565b60009081526003602052604090205490565b61038361067d366004613488565b611eaa565b6103836106903660046137cb565b611ef6565b61038d6106a33660046137cb565b611f27565b6103836106b636600461366c565b611f40565b61030f600581565b6103836106d136600461384e565b611f4b565b61030f600681565b6103836106ec3660046137cb565b611f87565b61030f600181565b61030f6107073660046137cb565b600f6020526000908152604090205481565b61038361072736600461366c565b611fe2565b61038361073a3660046137cb565b612025565b61038361074d366004613488565b612056565b6103606107603660046134c2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61038361079c3660046135a9565b6120a2565b6103836107af366004613488565b6120e7565b61030f6107c23660046137cb565b60009081526010602052604090205490565b60006001600160a01b0383166108455760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061089c57506001600160e01b031982166303a24d0760e21b145b806108b757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6004546001600160a01b031633146108e75760405162461bcd60e51b815260040161083c90613b4d565b6108fb6001600160a01b0383163383612182565b5050565b6006805461090c90613c40565b80601f016020809104026020016040519081016040528092919081815260200182805461093890613c40565b80156109855780601f1061095a57610100808354040283529160200191610985565b820191906000526020600020905b81548152906001019060200180831161096857829003601f168201915b505050505081565b6000818152600d602052604090208054606091906109aa90613c40565b80601f01602080910402602001604051908101604052809291908181526020018280546109d690613c40565b8015610a235780601f106109f857610100808354040283529160200191610a23565b820191906000526020600020905b815481529060010190602001808311610a0657829003601f168201915b50505050509050919050565b60026005541415610a525760405162461bcd60e51b815260040161083c90613b82565b6002600555610a60816121e5565b506001600555565b6001600160a01b038516331480610a845750610a848533610760565b610aeb5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161083c565b610af885858585856122e7565b5050505050565b60026005541415610b225760405162461bcd60e51b815260040161083c90613b82565b60026005556009546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b158015610b6d57600080fd5b505af1158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba591906134a5565b6001600160a01b031614610bcb5760405162461bcd60e51b815260040161083c90613a27565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4991906137e4565b60011415610cfb576000818152600e602090815260408083206001845290915290205460ff1615610cb65760405162461bcd60e51b8152602060048201526017602482015276416c726561647920436c61696d6564204c6576656c203160481b604482015260640161083c565b6000818152600e602090815260408083206001808552908352818420805460ff1916821790558151928301909152918152610cf6913391600391906124d2565b610a60565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b158015610d4157600080fd5b505af1158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7991906137e4565b60021415610e28576000818152600e602090815260408083206002845290915290205460ff1615610de65760405162461bcd60e51b815260206004820152601760248201527620b63932b0b23c9021b630b4b6b2b2102632bb32b6101960491b604482015260640161083c565b6000818152600e60209081526040808320600284528252808320805460ff191660019081179091558151928301909152918152610cf6913391600391906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b158015610e6e57600080fd5b505af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea691906137e4565b60031415610f55576000818152600e602090815260408083206003845290915290205460ff1615610f135760405162461bcd60e51b8152602060048201526017602482015276416c726561647920436c61696d6564204c6576656c203360481b604482015260640161083c565b6000818152600e60209081526040808320600384528252808320805460ff191660019081179091558151928301909152918152610cf6913391600491906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd391906137e4565b60041415611083576000818152600e602090815260408083206004845290915290205460ff16156110405760405162461bcd60e51b8152602060048201526017602482015276105b1c9958591e4810db185a5b59590813195d995b080d604a1b604482015260640161083c565b6000818152600e602090815260408083206004808552908352818420805460ff191660019081179091558251938401909252928252610cf69233929091906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b1580156110c957600080fd5b505af11580156110dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110191906137e4565b600514156111b1576000818152600e602090815260408083206005845290915290205460ff161561116e5760405162461bcd60e51b8152602060048201526017602482015276416c726561647920436c61696d6564204c6576656c203560481b604482015260640161083c565b6000818152600e602090815260408083206005808552908352818420805460ff191660019081179091558251938401909252928252610cf69233929091906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b1580156111f757600080fd5b505af115801561120b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122f91906137e4565b600614156112de576000818152600e602090815260408083206006845290915290205460ff161561129c5760405162461bcd60e51b815260206004820152601760248201527620b63932b0b23c9021b630b4b6b2b2102632bb32b6101b60491b604482015260640161083c565b6000818152600e60209081526040808320600684528252808320805460ff191660019081179091558151928301909152918152610cf6913391600591906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b15801561132457600080fd5b505af1158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c91906137e4565b6007141561140b576000818152600e602090815260408083206007845290915290205460ff16156113c95760405162461bcd60e51b8152602060048201526017602482015276416c726561647920436c61696d6564204c6576656c203760481b604482015260640161083c565b6000818152600e60209081526040808320600784528252808320805460ff191660019081179091558151928301909152918152610cf6913391600591906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b15801561145157600080fd5b505af1158015611465573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148991906137e4565b60081415611538576000818152600e602090815260408083206008845290915290205460ff16156114f65760405162461bcd60e51b8152602060048201526017602482015276082d8e4cac2c8f24086d8c2d2dacac84098caeccad8407604b1b604482015260640161083c565b6000818152600e60209081526040808320600884528252808320805460ff191660019081179091558151928301909152918152610cf6913391600591906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b15801561157e57600080fd5b505af1158015611592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b691906137e4565b60091415611665576000818152600e602090815260408083206009845290915290205460ff16156116235760405162461bcd60e51b8152602060048201526017602482015276416c726561647920436c61696d6564204c6576656c203960481b604482015260640161083c565b6000818152600e60209081526040808320600984528252808320805460ff191660019081179091558151928301909152918152610cf6913391600691906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b1580156116ab57600080fd5b505af11580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e391906137e4565b600a1415611798576000818152600e60209081526040808320600a845290915290205460ff16156117565760405162461bcd60e51b815260206004820152601860248201527f416c726561647920436c61696d6564204c6576656c2031300000000000000000604482015260640161083c565b6000818152600e60209081526040808320600a84528252808320805460ff191660019081179091558151928301909152918152610cf6913391600691906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b1580156117de57600080fd5b505af11580156117f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181691906137e4565b600b14156118cb576000818152600e60209081526040808320600b845290915290205460ff16156118895760405162461bcd60e51b815260206004820152601860248201527f416c726561647920436c61696d6564204c6576656c2031310000000000000000604482015260640161083c565b6000818152600e60209081526040808320600b84528252808320805460ff191660019081179091558151928301909152918152610cf6913391600691906124d2565b600954604051635d83d7df60e11b8152600481018390526001600160a01b039091169063bb07afbe90602401602060405180830381600087803b15801561191157600080fd5b505af1158015611925573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194991906137e4565b600c14156119fe576000818152600e60209081526040808320600c845290915290205460ff16156119bc5760405162461bcd60e51b815260206004820152601860248201527f416c726561647920436c61696d6564204c6576656c2031320000000000000000604482015260640161083c565b6000818152600e60209081526040808320600c84528252808320805460ff191660019081179091558151928301909152918152610cf6913391600691906124d2565b60405162461bcd60e51b815260206004820152601260248201527114995d995c9d195908139bdd08119d5cd95960721b604482015260640161083c565b6004546001600160a01b03163314611a655760405162461bcd60e51b815260040161083c90613b4d565b611a80838383604051806020016040528060008152506124d2565b505050565b6004546001600160a01b03163314611aaf5760405162461bcd60e51b815260040161083c90613b4d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60608151835114611b365760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161083c565b6000835167ffffffffffffffff811115611b5257611b52613cef565b604051908082528060200260200182016040528015611b7b578160200160208202803683370190505b50905060005b8451811015611bf357611bc6858281518110611b9f57611b9f613cd9565b6020026020010151858381518110611bb957611bb9613cd9565b60200260200101516107d4565b828281518110611bd857611bd8613cd9565b6020908102919091010152611bec81613ca8565b9050611b81565b509392505050565b6004546001600160a01b03163314611c255760405162461bcd60e51b815260040161083c90613b4d565b6000918252600f602052604090912055565b6004546001600160a01b03163314611c615760405162461bcd60e51b815260040161083c90613b4d565b60009182526011602052604090912055565b6004546001600160a01b03163314611c9d5760405162461bcd60e51b815260040161083c90613b4d565b611ca760006125e2565b565b6004546001600160a01b03163314611cd35760405162461bcd60e51b815260040161083c90613b4d565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314611d1f5760405162461bcd60e51b815260040161083c90613b4d565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60026005541415611d645760405162461bcd60e51b815260040161083c90613b82565b6002600555611d953330611d81846801158e460913d00000613bf5565b6008546001600160a01b0316929190612634565b610a6033600283604051806020016040528060008152506124d2565b6004546001600160a01b03163314611ddb5760405162461bcd60e51b815260040161083c90613b4d565b6000828152600d602090815260409091208251611dfa928401906132fa565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051611e2b91906139cc565b60405180910390a25050565b60026005541415611e5a5760405162461bcd60e51b815260040161083c90613b82565b6002600555611e763330611d8184678ac7230489e80000613bf5565b610a6033600183604051806020016040528060008152506124d2565b6007805461090c90613c40565b6108fb338383612672565b6004546001600160a01b03163314611ed45760405162461bcd60e51b815260040161083c90613b4d565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60026005541415611f195760405162461bcd60e51b815260040161083c90613b82565b6002600555610a6081612753565b600d602052600090815260409020805461090c90613c40565b611a80838383611fe2565b6004546001600160a01b03163314611f755760405162461bcd60e51b815260040161083c90613b4d565b60009182526010602052604090912055565b60026005541415611faa5760405162461bcd60e51b815260040161083c90613b82565b6002600555611fc63330611d81846753444835ec580000613bf5565b610a6033600083604051806020016040528060008152506124d2565b6001600160a01b038316331480611ffe5750611ffe8333610760565b61201a5760405162461bcd60e51b815260040161083c90613a52565b611a808383836128b9565b600260055414156120485760405162461bcd60e51b815260040161083c90613b82565b6002600555610a6081612a32565b6004546001600160a01b031633146120805760405162461bcd60e51b815260040161083c90613b4d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0385163314806120be57506120be8533610760565b6120da5760405162461bcd60e51b815260040161083c90613a52565b610af88585858585612b98565b6004546001600160a01b031633146121115760405162461bcd60e51b815260040161083c90613b4d565b6001600160a01b0381166121765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161083c565b61217f816125e2565b50565b6040516001600160a01b038316602482015260448101829052611a8090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612cb5565b600c546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b15801561222b57600080fd5b505af115801561223f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226391906134a5565b6001600160a01b0316146122895760405162461bcd60e51b815260040161083c90613a27565b600081815260116020526040902054600314156122b85760405162461bcd60e51b815260040161083c90613a9b565b6122c53360036001611f40565b60008181526011602052604081208054916122df83613ca8565b919050555050565b81518351146123495760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161083c565b6001600160a01b03841661236f5760405162461bcd60e51b815260040161083c90613abe565b3361237e818787878787612d87565b60005b845181101561246457600085828151811061239e5761239e613cd9565b6020026020010151905060008583815181106123bc576123bc613cd9565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561240c5760405162461bcd60e51b815260040161083c90613b03565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612449908490613bdd565b925050819055505050508061245d90613ca8565b9050612381565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124b492919061399e565b60405180910390a46124ca818787878787612f00565b505050505050565b6001600160a01b0384166125325760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161083c565b33612552816000876125438861306b565b61254c8861306b565b87612d87565b6000848152602081815260408083206001600160a01b038916845290915281208054859290612582908490613bdd565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610af8816000878787876130b6565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038085166024830152831660448201526064810182905261266c9085906323b872dd60e01b906084016121ae565b50505050565b816001600160a01b0316836001600160a01b031614156126e65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161083c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600a546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b15801561279957600080fd5b505af11580156127ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d191906134a5565b6001600160a01b0316146127f75760405162461bcd60e51b815260040161083c90613a27565b6000818152600f6020526040902054600c14156128265760405162461bcd60e51b815260040161083c90613a9b565b6000818152600f6020526040902054600211156128645761284a3360036001611f40565b6000818152600f602052604081208054916122df83613ca8565b6000818152600f6020526040902054600411156128885761284a3360046001611f40565b6000818152600f6020526040902054600811156128ac5761284a3360056001611f40565b61284a3360066001611f40565b6001600160a01b03831661291b5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161083c565b3361294a8185600061292c8761306b565b6129358761306b565b60405180602001604052806000815250612d87565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156129c75760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161083c565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b600b546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b158015612a7857600080fd5b505af1158015612a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab091906134a5565b6001600160a01b031614612ad65760405162461bcd60e51b815260040161083c90613a27565b600081815260106020526040902054600c1415612b055760405162461bcd60e51b815260040161083c90613a9b565b60008181526010602052604090205460021115612b4357612b293360036001611f40565b60008181526010602052604081208054916122df83613ca8565b60008181526010602052604090205460041115612b6757612b293360046001611f40565b60008181526010602052604090205460081115612b8b57612b293360056001611f40565b612b293360066001611f40565b6001600160a01b038416612bbe5760405162461bcd60e51b815260040161083c90613abe565b33612bce8187876125438861306b565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015612c0f5760405162461bcd60e51b815260040161083c90613b03565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290612c4c908490613bdd565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612cac8288888888886130b6565b50505050505050565b6000612d0a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131809092919063ffffffff16565b805190915015611a805780806020019051810190612d289190613774565b611a805760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161083c565b6001600160a01b038516612e0e5760005b8351811015612e0c57828181518110612db357612db3613cd9565b602002602001015160036000868481518110612dd157612dd1613cd9565b602002602001015181526020019081526020016000206000828254612df69190613bdd565b90915550612e05905081613ca8565b9050612d98565b505b6001600160a01b0384166124ca5760005b8351811015612cac576000848281518110612e3c57612e3c613cd9565b602002602001015190506000848381518110612e5a57612e5a613cd9565b6020026020010151905060006003600084815260200190815260200160002054905081811015612edd5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161083c565b60009283526003602052604090922091039055612ef981613ca8565b9050612e1f565b6001600160a01b0384163b156124ca5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612f4490899089908890889088906004016138f3565b602060405180830381600087803b158015612f5e57600080fd5b505af1925050508015612f8e575060408051601f3d908101601f19168201909252612f8b918101906137ae565b60015b61303b57612f9a613d05565b806308c379a01415612fd45750612faf613d21565b80612fba5750612fd6565b8060405162461bcd60e51b815260040161083c91906139cc565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161083c565b6001600160e01b0319811663bc197c8160e01b14612cac5760405162461bcd60e51b815260040161083c906139df565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106130a5576130a5613cd9565b602090810291909101015292915050565b6001600160a01b0384163b156124ca5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906130fa9089908990889088908890600401613951565b602060405180830381600087803b15801561311457600080fd5b505af1925050508015613144575060408051601f3d908101601f19168201909252613141918101906137ae565b60015b61315057612f9a613d05565b6001600160e01b0319811663f23a6e6160e01b14612cac5760405162461bcd60e51b815260040161083c906139df565b606061318f8484600085613199565b90505b9392505050565b6060824710156131fa5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161083c565b843b6132485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161083c565b600080866001600160a01b0316858760405161326491906138d7565b60006040518083038185875af1925050503d80600081146132a1576040519150601f19603f3d011682016040523d82523d6000602084013e6132a6565b606091505b50915091506132b68282866132c1565b979650505050505050565b606083156132d0575081613192565b8251156132e05782518084602001fd5b8160405162461bcd60e51b815260040161083c91906139cc565b82805461330690613c40565b90600052602060002090601f016020900481019282613328576000855561336e565b82601f1061334157805160ff191683800117855561336e565b8280016001018555821561336e579182015b8281111561336e578251825591602001919060010190613353565b5061337a92915061337e565b5090565b5b8082111561337a576000815560010161337f565b600067ffffffffffffffff8311156133ad576133ad613cef565b6040516133c4601f8501601f191660200182613c7b565b8091508381528484840111156133d957600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261340257600080fd5b8135602061340f82613bb9565b60405161341c8282613c7b565b8381528281019150858301600585901b8701840188101561343c57600080fd5b60005b8581101561345b5781358452928401929084019060010161343f565b5090979650505050505050565b600082601f83011261347957600080fd5b61319283833560208501613393565b60006020828403121561349a57600080fd5b813561319281613dab565b6000602082840312156134b757600080fd5b815161319281613dab565b600080604083850312156134d557600080fd5b82356134e081613dab565b915060208301356134f081613dab565b809150509250929050565b600080600080600060a0868803121561351357600080fd5b853561351e81613dab565b9450602086013561352e81613dab565b9350604086013567ffffffffffffffff8082111561354b57600080fd5b61355789838a016133f1565b9450606088013591508082111561356d57600080fd5b61357989838a016133f1565b9350608088013591508082111561358f57600080fd5b5061359c88828901613468565b9150509295509295909350565b600080600080600060a086880312156135c157600080fd5b85356135cc81613dab565b945060208601356135dc81613dab565b93506040860135925060608601359150608086013567ffffffffffffffff81111561360657600080fd5b61359c88828901613468565b6000806040838503121561362557600080fd5b823561363081613dab565b915060208301356134f081613dc0565b6000806040838503121561365357600080fd5b823561365e81613dab565b946020939093013593505050565b60008060006060848603121561368157600080fd5b833561368c81613dab565b95602085013595506040909401359392505050565b600080604083850312156136b457600080fd5b823567ffffffffffffffff808211156136cc57600080fd5b818501915085601f8301126136e057600080fd5b813560206136ed82613bb9565b6040516136fa8282613c7b565b8381528281019150858301600585901b870184018b101561371a57600080fd5b600096505b8487101561374657803561373281613dab565b83526001969096019591830191830161371f565b509650508601359250508082111561375d57600080fd5b5061376a858286016133f1565b9150509250929050565b60006020828403121561378657600080fd5b815161319281613dc0565b6000602082840312156137a357600080fd5b813561319281613dce565b6000602082840312156137c057600080fd5b815161319281613dce565b6000602082840312156137dd57600080fd5b5035919050565b6000602082840312156137f657600080fd5b5051919050565b6000806040838503121561381057600080fd5b82359150602083013567ffffffffffffffff81111561382e57600080fd5b8301601f8101851361383f57600080fd5b61376a85823560208401613393565b6000806040838503121561386157600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156138a057815187529582019590820190600101613884565b509495945050505050565b600081518084526138c3816020860160208601613c14565b601f01601f19169290920160200192915050565b600082516138e9818460208701613c14565b9190910192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061391f90830186613870565b82810360608401526139318186613870565b9050828103608084015261394581856138ab565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906132b6908301846138ab565b6020815260006131926020830184613870565b6040815260006139b16040830185613870565b82810360208401526139c38185613870565b95945050505050565b60208152600061319260208301846138ab565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252601190820152702737ba103a37b5b2b724b21037bbb732b960791b604082015260600190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526009908201526813585e0813195d995b60ba1b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600067ffffffffffffffff821115613bd357613bd3613cef565b5060051b60200190565b60008219821115613bf057613bf0613cc3565b500190565b6000816000190483118215151615613c0f57613c0f613cc3565b500290565b60005b83811015613c2f578181015183820152602001613c17565b8381111561266c5750506000910152565b600181811c90821680613c5457607f821691505b60208210811415613c7557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715613ca157613ca1613cef565b6040525050565b6000600019821415613cbc57613cbc613cc3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115613d1e5760046000803e5060005160e01c5b90565b600060443d1015613d2f5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613d5f57505050505090565b8285019150815181811115613d775750505050505090565b843d8701016020828501011115613d915750505050505090565b613da060208286010187613c7b565b509095945050505050565b6001600160a01b038116811461217f57600080fd5b801515811461217f57600080fd5b6001600160e01b03198116811461217f57600080fdfea2646970667358221220fc10df2e4799d222782c0474faf7f12303462627cc583c17b2f5e5a6d431de0364736f6c63430008070033000000000000000000000000a608b11d3671d3dc7bd45bfcd220fdcaa0d23351000000000000000000000000a608b11d3671d3dc7bd45bfcd220fdcaa0d23351000000000000000000000000c2750650cae36385e791bb0f32e9ce568a0c66bd000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58000000000000000000000000c1e87be1055509081ea73a0fd5d3d70f6573dc99

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

000000000000000000000000a608b11d3671d3dc7bd45bfcd220fdcaa0d23351000000000000000000000000a608b11d3671d3dc7bd45bfcd220fdcaa0d23351000000000000000000000000c2750650cae36385e791bb0f32e9ce568a0c66bd000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58000000000000000000000000c1e87be1055509081ea73a0fd5d3d70f6573dc99

-----Decoded View---------------
Arg [0] : _MvGLD (address): 0xa608b11d3671d3dc7bd45bfcd220fdcaa0d23351
Arg [1] : _MiniFren (address): 0xa608b11d3671d3dc7bd45bfcd220fdcaa0d23351
Arg [2] : _Chilla (address): 0xc2750650cae36385e791bb0f32e9ce568a0c66bd
Arg [3] : _Guinea (address): 0xec2e4e100b26015dc7dee337b4dc5decfe28db58
Arg [4] : _Land (address): 0xc1e87be1055509081ea73a0fd5d3d70f6573dc99

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000a608b11d3671d3dc7bd45bfcd220fdcaa0d23351
Arg [1] : 000000000000000000000000a608b11d3671d3dc7bd45bfcd220fdcaa0d23351
Arg [2] : 000000000000000000000000c2750650cae36385e791bb0f32e9ce568a0c66bd
Arg [3] : 000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58
Arg [4] : 000000000000000000000000c1e87be1055509081ea73a0fd5d3d70f6573dc99


Deployed ByteCode Sourcemap

48525:9409:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22800:231;;;;;;:::i;:::-;;:::i;:::-;;;26790:25:1;;;26778:2;26763:18;22800:231:0;;;;;;;;49003:23;;;;;-1:-1:-1;;;;;49003:23:0;;;;;;-1:-1:-1;;;;;9872:32:1;;;9854:51;;9842:2;9827:18;49003:23:0;9708:203:1;21823:310:0;;;;;;:::i;:::-;;:::i;:::-;;;12872:14:1;;12865:22;12847:41;;12835:2;12820:18;21823:310:0;12707:187:1;57776:153:0;;;;;;:::i;:::-;;:::i;:::-;;48624:18;;;:::i;:::-;;;;;;;:::i;56105:101::-;;;;;;:::i;:::-;;:::i;55850:117::-;;;;;;:::i;:::-;;:::i;49083:19::-;;;;;-1:-1:-1;;;;;49083:19:0;;;49280:54;;;;;;:::i;:::-;;;;;;;;;;;;;;49031:21;;;;;-1:-1:-1;;;;;49031:21:0;;;24739:442;;;;;;:::i;:::-;;:::i;49151:65::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;50744:3032;;;;;;:::i;:::-;;:::i;48844:40::-;;48883:1;48844:40;;50018:117;;;;;;:::i;:::-;;:::i;57098:88::-;;;;;;:::i;:::-;;:::i;48979:19::-;;;;;-1:-1:-1;;;;;48979:19:0;;;48758:36;;48793:1;48758:36;;23197:524;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37971:122::-;;;;;;:::i;:::-;38028:4;37849:16;;;:12;:16;;;;;;-1:-1:-1;;;37971:122:0;57509:128;;;;;;:::i;:::-;;:::i;57645:124::-;;;;;;:::i;:::-;;:::i;2527:103::-;;;:::i;57004:88::-;;;;;;:::i;:::-;;:::i;49057:21::-;;;;;-1:-1:-1;;;;;49057:21:0;;;56354:132;;;;;;:::i;:::-;56424:13;56453:27;;;:18;:27;;;;;;;56354:132;57192:84;;;;;;:::i;:::-;;:::i;50543:194::-;;;;;;:::i;:::-;;:::i;56630:128::-;;;;;;:::i;:::-;56698:13;56727:25;;;:16;:25;;;;;;;56630:128;56780:124;;;;;;:::i;:::-;;:::i;50338:198::-;;;;;;:::i;:::-;;:::i;1876:87::-;1949:6;;-1:-1:-1;;;;;1949:6:0;1876:87;;48647:20;;;:::i;48799:40::-;;48838:1;48799:40;;23794:155;;;;;;:::i;:::-;;:::i;56212:136::-;;;;;;:::i;:::-;56290:4;56311:23;;;:13;:23;;;;;;;;:31;;;;;;;;;;;;56212:136;49339:52;;;;;;:::i;:::-;;;;;;;;;;;;;;48672:37;;48708:1;48672:37;;37760:113;;;;;;:::i;:::-;37822:7;37849:16;;;:12;:16;;;;;;;37760:113;57283:85;;;;;;:::i;:::-;;:::i;54528:121::-;;;;;;:::i;:::-;;:::i;49107:39::-;;;;;;:::i;:::-;;:::i;55973:109::-;;;;;;:::i;:::-;;:::i;48889:40::-;;48928:1;48889:40;;57374:128;;;;;;:::i;:::-;;:::i;48934:40::-;;48973:1;48934:40;;50139:193;;;;;;:::i;:::-;;:::i;48714:39::-;;48752:1;48714:39;;49221:54;;;;;;:::i;:::-;;;;;;;;;;;;;;49688:324;;;;;;:::i;:::-;;:::i;55399:121::-;;;;;;:::i;:::-;;:::i;56910:88::-;;;;;;:::i;:::-;;:::i;24021:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24144:27:0;;;24120:4;24144:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24021:168;24261:401;;;;;;:::i;:::-;;:::i;2785:201::-;;;;;;:::i;:::-;;:::i;56492:132::-;;;;;;:::i;:::-;56562:13;56591:27;;;:18;:27;;;;;;;56492:132;22800:231;22886:7;-1:-1:-1;;;;;22914:21:0;;22906:77;;;;-1:-1:-1;;;22906:77:0;;15430:2:1;22906:77:0;;;15412:21:1;15469:2;15449:18;;;15442:30;15508:34;15488:18;;;15481:62;-1:-1:-1;;;15559:18:1;;;15552:41;15610:19;;22906:77:0;;;;;;;;;-1:-1:-1;23001:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23001:22:0;;;;;;;;;;;;22800:231::o;21823:310::-;21925:4;-1:-1:-1;;;;;;21962:41:0;;-1:-1:-1;;;21962:41:0;;:110;;-1:-1:-1;;;;;;;22020:52:0;;-1:-1:-1;;;22020:52:0;21962:110;:163;;;-1:-1:-1;;;;;;;;;;13356:40:0;;;22089:36;21942:183;21823:310;-1:-1:-1;;21823:310:0:o;57776:153::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;57868:55:::1;-1:-1:-1::0;;;;;57868:34:0;::::1;57903:10;57915:7:::0;57868:34:::1;:55::i;:::-;57776:153:::0;;:::o;48624:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56105:101::-;56187:13;;;;:8;:13;;;;;56180:20;;56158:13;;56187;56180:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56105:101;;;:::o;55850:117::-;44604:1;45202:7;;:19;;45194:63;;;;-1:-1:-1;;;45194:63:0;;;;;;;:::i;:::-;44604:1;45335:7;:18;55934:28:::1;55953:8:::0;55934:18:::1;:28::i;:::-;-1:-1:-1::0;44560:1:0;45514:7;:22;55850:117::o;24739:442::-;-1:-1:-1;;;;;24972:20:0;;682:10;24972:20;;:60;;-1:-1:-1;24996:36:0;25013:4;682:10;24021:168;:::i;24996:36::-;24950:160;;;;-1:-1:-1;;;24950:160:0;;19974:2:1;24950:160:0;;;19956:21:1;20013:2;19993:18;;;19986:30;20052:34;20032:18;;;20025:62;-1:-1:-1;;;20103:18:1;;;20096:48;20161:19;;24950:160:0;19772:414:1;24950:160:0;25121:52;25144:4;25150:2;25154:3;25159:7;25168:4;25121:22;:52::i;:::-;24739:442;;;;;:::o;50744:3032::-;44604:1;45202:7;;:19;;45194:63;;;;-1:-1:-1;;;45194:63:0;;;;;;;:::i;:::-;44604:1;45335:7;:18;50835:8:::1;::::0;50828:34:::1;::::0;-1:-1:-1;;;50828:34:0;;::::1;::::0;::::1;26790:25:1::0;;;50866:10:0::1;::::0;-1:-1:-1;;;;;50835:8:0::1;::::0;50828:24:::1;::::0;26763:18:1;;50828:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50828:48:0::1;;50820:78;;;;-1:-1:-1::0;;;50820:78:0::1;;;;;;;:::i;:::-;50919:8;::::0;50911:44:::1;::::0;-1:-1:-1;;;50911:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;50919:8:0;;::::1;::::0;50911:34:::1;::::0;26763:18:1;;50911:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50959:1;50911:49;50908:2864;;;50977:23;::::0;;;:13:::1;:23;::::0;;;;;;;51001:1:::1;50977:26:::0;;;;;;;;::::1;;:35;50969:71;;;::::0;-1:-1:-1;;;50969:71:0;;23381:2:1;50969:71:0::1;::::0;::::1;23363:21:1::0;23420:2;23400:18;;;23393:30;-1:-1:-1;;;23439:18:1;;;23432:53;23502:18;;50969:71:0::1;23179:347:1::0;50969:71:0::1;51048:23;::::0;;;:13:::1;:23;::::0;;;;;;;51078:4:::1;51048:26:::0;;;;;;;;;:34;;-1:-1:-1;;51048:34:0::1;::::0;::::1;::::0;;51090:38;;;;::::1;::::0;;;;;;::::1;::::0;51096:10:::1;::::0;48838:1:::1;::::0;51078:4;51090:5:::1;:38::i;:::-;50908:2864;;;51153:8;::::0;51145:44:::1;::::0;-1:-1:-1;;;51145:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;51153:8:0;;::::1;::::0;51145:34:::1;::::0;26763:18:1;;51145:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51193:1;51145:49;51142:2630;;;51211:23;::::0;;;:13:::1;:23;::::0;;;;;;;51235:1:::1;51211:26:::0;;;;;;;;::::1;;:35;51203:71;;;::::0;-1:-1:-1;;;51203:71:0;;18160:2:1;51203:71:0::1;::::0;::::1;18142:21:1::0;18199:2;18179:18;;;18172:30;-1:-1:-1;;;18218:18:1;;;18211:53;18281:18;;51203:71:0::1;17958:347:1::0;51203:71:0::1;51282:23;::::0;;;:13:::1;:23;::::0;;;;;;;51306:1:::1;51282:26:::0;;;;;;;:34;;-1:-1:-1;;51282:34:0::1;51312:4;51282:34:::0;;::::1;::::0;;;51324:38;;;;::::1;::::0;;;;;;::::1;::::0;51330:10:::1;::::0;48838:1:::1;::::0;51312:4;51324:5:::1;:38::i;51142:2630::-;51387:8;::::0;51379:44:::1;::::0;-1:-1:-1;;;51379:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;51387:8:0;;::::1;::::0;51379:34:::1;::::0;26763:18:1;;51379:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51427:1;51379:49;51376:2396;;;51445:23;::::0;;;:13:::1;:23;::::0;;;;;;;51469:1:::1;51445:26:::0;;;;;;;;::::1;;:35;51437:71;;;::::0;-1:-1:-1;;;51437:71:0;;18512:2:1;51437:71:0::1;::::0;::::1;18494:21:1::0;18551:2;18531:18;;;18524:30;-1:-1:-1;;;18570:18:1;;;18563:53;18633:18;;51437:71:0::1;18310:347:1::0;51437:71:0::1;51516:23;::::0;;;:13:::1;:23;::::0;;;;;;;51540:1:::1;51516:26:::0;;;;;;;:34;;-1:-1:-1;;51516:34:0::1;51546:4;51516:34:::0;;::::1;::::0;;;51558:38;;;;::::1;::::0;;;;;;::::1;::::0;51564:10:::1;::::0;48883:1:::1;::::0;51546:4;51558:5:::1;:38::i;51376:2396::-;51621:8;::::0;51613:44:::1;::::0;-1:-1:-1;;;51613:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;51621:8:0;;::::1;::::0;51613:34:::1;::::0;26763:18:1;;51613:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51661:1;51613:49;51610:2162;;;51679:23;::::0;;;:13:::1;:23;::::0;;;;;;;51703:1:::1;51679:26:::0;;;;;;;;::::1;;:35;51671:71;;;::::0;-1:-1:-1;;;51671:71:0;;19216:2:1;51671:71:0::1;::::0;::::1;19198:21:1::0;19255:2;19235:18;;;19228:30;-1:-1:-1;;;19274:18:1;;;19267:53;19337:18;;51671:71:0::1;19014:347:1::0;51671:71:0::1;51750:23;::::0;;;:13:::1;:23;::::0;;;;;;;51774:1:::1;51750:26:::0;;;;;;;;;:34;;-1:-1:-1;;51750:34:0::1;51780:4;51750:34:::0;;::::1;::::0;;;51792:38;;;;::::1;::::0;;;;;;::::1;::::0;51798:10:::1;::::0;51774:1;;51780:4;51792:5:::1;:38::i;51610:2162::-;51855:8;::::0;51847:44:::1;::::0;-1:-1:-1;;;51847:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;51855:8:0;;::::1;::::0;51847:34:::1;::::0;26763:18:1;;51847:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51895:1;51847:49;51844:1928;;;51913:23;::::0;;;:13:::1;:23;::::0;;;;;;;51937:1:::1;51913:26:::0;;;;;;;;::::1;;:35;51905:71;;;::::0;-1:-1:-1;;;51905:71:0;;22259:2:1;51905:71:0::1;::::0;::::1;22241:21:1::0;22298:2;22278:18;;;22271:30;-1:-1:-1;;;22317:18:1;;;22310:53;22380:18;;51905:71:0::1;22057:347:1::0;51905:71:0::1;51984:23;::::0;;;:13:::1;:23;::::0;;;;;;;52008:1:::1;51984:26:::0;;;;;;;;;:34;;-1:-1:-1;;51984:34:0::1;52014:4;51984:34:::0;;::::1;::::0;;;52026:38;;;;::::1;::::0;;;;;;::::1;::::0;52032:10:::1;::::0;52008:1;;52014:4;52026:5:::1;:38::i;51844:1928::-;52089:8;::::0;52081:44:::1;::::0;-1:-1:-1;;;52081:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;52089:8:0;;::::1;::::0;52081:34:::1;::::0;26763:18:1;;52081:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52129:1;52081:49;52078:1694;;;52147:23;::::0;;;:13:::1;:23;::::0;;;;;;;52171:1:::1;52147:26:::0;;;;;;;;::::1;;:35;52139:71;;;::::0;-1:-1:-1;;;52139:71:0;;18864:2:1;52139:71:0::1;::::0;::::1;18846:21:1::0;18903:2;18883:18;;;18876:30;-1:-1:-1;;;18922:18:1;;;18915:53;18985:18;;52139:71:0::1;18662:347:1::0;52139:71:0::1;52218:23;::::0;;;:13:::1;:23;::::0;;;;;;;52242:1:::1;52218:26:::0;;;;;;;:34;;-1:-1:-1;;52218:34:0::1;52248:4;52218:34:::0;;::::1;::::0;;;52260:38;;;;::::1;::::0;;;;;;::::1;::::0;52266:10:::1;::::0;48928:1:::1;::::0;52248:4;52260:5:::1;:38::i;52078:1694::-;52323:8;::::0;52315:44:::1;::::0;-1:-1:-1;;;52315:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;52323:8:0;;::::1;::::0;52315:34:::1;::::0;26763:18:1;;52315:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52363:1;52315:49;52312:1460;;;52381:23;::::0;;;:13:::1;:23;::::0;;;;;;;52405:1:::1;52381:26:::0;;;;;;;;::::1;;:35;52373:71;;;::::0;-1:-1:-1;;;52373:71:0;;17401:2:1;52373:71:0::1;::::0;::::1;17383:21:1::0;17440:2;17420:18;;;17413:30;-1:-1:-1;;;17459:18:1;;;17452:53;17522:18;;52373:71:0::1;17199:347:1::0;52373:71:0::1;52452:23;::::0;;;:13:::1;:23;::::0;;;;;;;52476:1:::1;52452:26:::0;;;;;;;:34;;-1:-1:-1;;52452:34:0::1;52482:4;52452:34:::0;;::::1;::::0;;;52494:38;;;;::::1;::::0;;;;;;::::1;::::0;52500:10:::1;::::0;48928:1:::1;::::0;52482:4;52494:5:::1;:38::i;52312:1460::-;52557:8;::::0;52549:44:::1;::::0;-1:-1:-1;;;52549:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;52557:8:0;;::::1;::::0;52549:34:::1;::::0;26763:18:1;;52549:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52597:1;52549:49;52546:1226;;;52615:23;::::0;;;:13:::1;:23;::::0;;;;;;;52639:1:::1;52615:26:::0;;;;;;;;::::1;;:35;52607:71;;;::::0;-1:-1:-1;;;52607:71:0;;20740:2:1;52607:71:0::1;::::0;::::1;20722:21:1::0;20779:2;20759:18;;;20752:30;-1:-1:-1;;;20798:18:1;;;20791:53;20861:18;;52607:71:0::1;20538:347:1::0;52607:71:0::1;52686:23;::::0;;;:13:::1;:23;::::0;;;;;;;52710:1:::1;52686:26:::0;;;;;;;:34;;-1:-1:-1;;52686:34:0::1;52716:4;52686:34:::0;;::::1;::::0;;;52728:38;;;;::::1;::::0;;;;;;::::1;::::0;52734:10:::1;::::0;48928:1:::1;::::0;52716:4;52728:5:::1;:38::i;52546:1226::-;52791:8;::::0;52783:44:::1;::::0;-1:-1:-1;;;52783:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;52791:8:0;;::::1;::::0;52783:34:::1;::::0;26763:18:1;;52783:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52831:1;52783:49;52780:992;;;52849:23;::::0;;;:13:::1;:23;::::0;;;;;;;52873:1:::1;52849:26:::0;;;;;;;;::::1;;:35;52841:71;;;::::0;-1:-1:-1;;;52841:71:0;;21092:2:1;52841:71:0::1;::::0;::::1;21074:21:1::0;21131:2;21111:18;;;21104:30;-1:-1:-1;;;21150:18:1;;;21143:53;21213:18;;52841:71:0::1;20890:347:1::0;52841:71:0::1;52920:23;::::0;;;:13:::1;:23;::::0;;;;;;;52944:1:::1;52920:26:::0;;;;;;;:34;;-1:-1:-1;;52920:34:0::1;52950:4;52920:34:::0;;::::1;::::0;;;52962:38;;;;::::1;::::0;;;;;;::::1;::::0;52968:10:::1;::::0;48973:1:::1;::::0;52950:4;52962:5:::1;:38::i;52780:992::-;53025:8;::::0;53017:44:::1;::::0;-1:-1:-1;;;53017:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;53025:8:0;;::::1;::::0;53017:34:::1;::::0;26763:18:1;;53017:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53065:2;53017:50;53014:758;;;53084:23;::::0;;;:13:::1;:23;::::0;;;;;;;53108:2:::1;53084:27:::0;;;;;;;;::::1;;:36;53076:73;;;::::0;-1:-1:-1;;;53076:73:0;;13969:2:1;53076:73:0::1;::::0;::::1;13951:21:1::0;14008:2;13988:18;;;13981:30;14047:26;14027:18;;;14020:54;14091:18;;53076:73:0::1;13767:348:1::0;53076:73:0::1;53157:23;::::0;;;:13:::1;:23;::::0;;;;;;;53181:2:::1;53157:27:::0;;;;;;;:35;;-1:-1:-1;;53157:35:0::1;53188:4;53157:35:::0;;::::1;::::0;;;53200:38;;;;::::1;::::0;;;;;;::::1;::::0;53206:10:::1;::::0;48973:1:::1;::::0;53188:4;53200:5:::1;:38::i;53014:758::-;53263:8;::::0;53255:44:::1;::::0;-1:-1:-1;;;53255:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;53263:8:0;;::::1;::::0;53255:34:::1;::::0;26763:18:1;;53255:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53303:2;53255:50;53252:520;;;53322:23;::::0;;;:13:::1;:23;::::0;;;;;;;53346:2:::1;53322:27:::0;;;;;;;;::::1;;:36;53314:73;;;::::0;-1:-1:-1;;;53314:73:0;;15077:2:1;53314:73:0::1;::::0;::::1;15059:21:1::0;15116:2;15096:18;;;15089:30;15155:26;15135:18;;;15128:54;15199:18;;53314:73:0::1;14875:348:1::0;53314:73:0::1;53395:23;::::0;;;:13:::1;:23;::::0;;;;;;;53419:2:::1;53395:27:::0;;;;;;;:35;;-1:-1:-1;;53395:35:0::1;53426:4;53395:35:::0;;::::1;::::0;;;53438:38;;;;::::1;::::0;;;;;;::::1;::::0;53444:10:::1;::::0;48973:1:::1;::::0;53426:4;53438:5:::1;:38::i;53252:520::-;53501:8;::::0;53493:44:::1;::::0;-1:-1:-1;;;53493:44:0;;::::1;::::0;::::1;26790:25:1::0;;;-1:-1:-1;;;;;53501:8:0;;::::1;::::0;53493:34:::1;::::0;26763:18:1;;53493:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53541:2;53493:50;53490:282;;;53560:23;::::0;;;:13:::1;:23;::::0;;;;;;;53584:2:::1;53560:27:::0;;;;;;;;::::1;;:36;53552:73;;;::::0;-1:-1:-1;;;53552:73:0;;25322:2:1;53552:73:0::1;::::0;::::1;25304:21:1::0;25361:2;25341:18;;;25334:30;25400:26;25380:18;;;25373:54;25444:18;;53552:73:0::1;25120:348:1::0;53552:73:0::1;53633:23;::::0;;;:13:::1;:23;::::0;;;;;;;53657:2:::1;53633:27:::0;;;;;;;:35;;-1:-1:-1;;53633:35:0::1;53664:4;53633:35:::0;;::::1;::::0;;;53676:38;;;;::::1;::::0;;;;;;::::1;::::0;53682:10:::1;::::0;48973:1:::1;::::0;53664:4;53676:5:::1;:38::i;53490:282::-;53735:28;::::0;-1:-1:-1;;;53735:28:0;;20393:2:1;53735:28:0::1;::::0;::::1;20375:21:1::0;20432:2;20412:18;;;20405:30;-1:-1:-1;;;20451:18:1;;;20444:48;20509:18;;53735:28:0::1;20191:342:1::0;50018:117:0;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;50101:28:::1;50107:3;50112;50117:7;50101:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;50018:117:::0;;;:::o;57098:88::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;57163:6:::1;:17:::0;;-1:-1:-1;;;;;;57163:17:0::1;-1:-1:-1::0;;;;;57163:17:0;;;::::1;::::0;;;::::1;::::0;;57098:88::o;23197:524::-;23353:16;23414:3;:10;23395:8;:15;:29;23387:83;;;;-1:-1:-1;;;23387:83:0;;24912:2:1;23387:83:0;;;24894:21:1;24951:2;24931:18;;;24924:30;24990:34;24970:18;;;24963:62;-1:-1:-1;;;25041:18:1;;;25034:39;25090:19;;23387:83:0;24710:405:1;23387:83:0;23483:30;23530:8;:15;23516:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23516:30:0;;23483:63;;23564:9;23559:122;23583:8;:15;23579:1;:19;23559:122;;;23639:30;23649:8;23658:1;23649:11;;;;;;;;:::i;:::-;;;;;;;23662:3;23666:1;23662:6;;;;;;;;:::i;:::-;;;;;;;23639:9;:30::i;:::-;23620:13;23634:1;23620:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;23600:3;;;:::i;:::-;;;23559:122;;;-1:-1:-1;23700:13:0;23197:524;-1:-1:-1;;;23197:524:0:o;57509:128::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;57595:27:::1;::::0;;;:18:::1;:27;::::0;;;;;:35;57509:128::o;57645:124::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;57729:25:::1;::::0;;;:16:::1;:25;::::0;;;;;:33;57645:124::o;2527:103::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;2592:30:::1;2619:1;2592:18;:30::i;:::-;2527:103::o:0;57004:88::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;57069:6:::1;:17:::0;;-1:-1:-1;;;;;;57069:17:0::1;-1:-1:-1::0;;;;;57069:17:0;;;::::1;::::0;;;::::1;::::0;;57004:88::o;57192:84::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;57255:4:::1;:15:::0;;-1:-1:-1;;;;;;57255:15:0::1;-1:-1:-1::0;;;;;57255:15:0;;;::::1;::::0;;;::::1;::::0;;57192:84::o;50543:194::-;44604:1;45202:7;;:19;;45194:63;;;;-1:-1:-1;;;45194:63:0;;;;;;;:::i;:::-;44604:1;45335:7;:18;50615:69:::1;50638:10;50658:4;50665:18;50676:7:::0;50665:8:::1;:18;:::i;:::-;50615:5;::::0;-1:-1:-1;;;;;50615:5:0::1;::::0;:69;;:22:::1;:69::i;:::-;50691:40;50697:10;48793:1;50719:7;50691:40;;;;;;;;;;;::::0;:5:::1;:40::i;56780:124::-:0;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;56852:13:::1;::::0;;;:8:::1;:13;::::0;;;;;;;:20;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;56894:3;56884:14;56888:4;56884:14;;;;;;:::i;:::-;;;;;;;;56780:124:::0;;:::o;50338:198::-;44604:1;45202:7;;:19;;45194:63;;;;-1:-1:-1;;;45194:63:0;;;;;;;:::i;:::-;44604:1;45335:7;:18;50411:69:::1;50434:10;50454:4;50461:18;50472:7:::0;50461:8:::1;:18;:::i;50411:69::-;50487:43;50493:10;48752:1;50518:7;50487:43;;;;;;;;;;;::::0;:5:::1;:43::i;48647:20::-:0;;;;;;;:::i;23794:155::-;23889:52;682:10;23922:8;23932;23889:18;:52::i;57283:85::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;57346:5:::1;:16:::0;;-1:-1:-1;;;;;;57346:16:0::1;-1:-1:-1::0;;;;;57346:16:0;;;::::1;::::0;;;::::1;::::0;;57283:85::o;54528:121::-;44604:1;45202:7;;:19;;45194:63;;;;-1:-1:-1;;;45194:63:0;;;;;;;:::i;:::-;44604:1;45335:7;:18;54614:30:::1;54635:8:::0;54614:20:::1;:30::i;49107:39::-:0;;;;;;;;;;;;;;;;:::i;55973:109::-;56048:28;56056:5;56063:3;56068:7;56048;:28::i;57374:128::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;57460:27:::1;::::0;;;:18:::1;:27;::::0;;;;;:35;57374:128::o;50139:193::-;44604:1;45202:7;;:19;;45194:63;;;;-1:-1:-1;;;45194:63:0;;;;;;;:::i;:::-;44604:1;45335:7;:18;50210:68:::1;50233:10;50253:4;50260:17;50270:7:::0;50260::::1;:17;:::i;50210:68::-;50285:41;50291:10;48708:1;50314:7;50285:41;;;;;;;;;;;::::0;:5:::1;:41::i;49688:324::-:0;-1:-1:-1;;;;;49831:23:0;;682:10;49831:23;;:66;;-1:-1:-1;49858:39:0;49875:7;682:10;24021:168;:::i;49858:39::-;49809:157;;;;-1:-1:-1;;;49809:157:0;;;;;;;:::i;:::-;49979:25;49985:7;49994:2;49998:5;49979;:25::i;55399:121::-;44604:1;45202:7;;:19;;45194:63;;;;-1:-1:-1;;;45194:63:0;;;;;;;:::i;:::-;44604:1;45335:7;:18;55485:30:::1;55506:8:::0;55485:20:::1;:30::i;56910:88::-:0;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;56973:8:::1;:19:::0;;-1:-1:-1;;;;;;56973:19:0::1;-1:-1:-1::0;;;;;56973:19:0;;;::::1;::::0;;;::::1;::::0;;56910:88::o;24261:401::-;-1:-1:-1;;;;;24469:20:0;;682:10;24469:20;;:60;;-1:-1:-1;24493:36:0;24510:4;682:10;24021:168;:::i;24493:36::-;24447:151;;;;-1:-1:-1;;;24447:151:0;;;;;;;:::i;:::-;24609:45;24627:4;24633:2;24637;24641:6;24649:4;24609:17;:45::i;2785:201::-;1949:6;;-1:-1:-1;;;;;1949:6:0;682:10;2096:23;2088:68;;;;-1:-1:-1;;;2088:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2874:22:0;::::1;2866:73;;;::::0;-1:-1:-1;;;2866:73:0;;15842:2:1;2866:73:0::1;::::0;::::1;15824:21:1::0;15881:2;15861:18;;;15854:30;15920:34;15900:18;;;15893:62;-1:-1:-1;;;15971:18:1;;;15964:36;16017:19;;2866:73:0::1;15640:402:1::0;2866:73:0::1;2950:28;2969:8;2950:18;:28::i;:::-;2785:201:::0;:::o;39630:211::-;39774:58;;-1:-1:-1;;;;;11884:32:1;;39774:58:0;;;11866:51:1;11933:18;;;11926:34;;;39747:86:0;;39767:5;;-1:-1:-1;;;39797:23:0;11839:18:1;;39774:58:0;;;;-1:-1:-1;;39774:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;39774:58:0;-1:-1:-1;;;;;;39774:58:0;;;;;;;;;;39747:19;:86::i;55526:319::-;55604:4;;55597:30;;-1:-1:-1;;;55597:30:0;;;;;26790:25:1;;;55631:10:0;;-1:-1:-1;;;;;55604:4:0;;55597:20;;26763:18:1;;55597:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;55597:44:0;;55589:74;;;;-1:-1:-1;;;55589:74:0;;;;;;;:::i;:::-;55675:26;;;;:16;:26;;;;;;55705:1;55675:31;55671:170;;;55716:19;;-1:-1:-1;;;55716:19:0;;;;;;;:::i;55671:170::-;55758:37;55767:10;48838:1;55793;55758:8;:37::i;:::-;55804:26;;;;:16;:26;;;;;:28;;;;;;:::i;:::-;;;;;;55526:319;:::o;26823:1074::-;27050:7;:14;27036:3;:10;:28;27028:81;;;;-1:-1:-1;;;27028:81:0;;25675:2:1;27028:81:0;;;25657:21:1;25714:2;25694:18;;;25687:30;25753:34;25733:18;;;25726:62;-1:-1:-1;;;25804:18:1;;;25797:38;25852:19;;27028:81:0;25473:404:1;27028:81:0;-1:-1:-1;;;;;27128:16:0;;27120:66;;;;-1:-1:-1;;;27120:66:0;;;;;;;:::i;:::-;682:10;27243:60;682:10;27274:4;27280:2;27284:3;27289:7;27298:4;27243:20;:60::i;:::-;27321:9;27316:421;27340:3;:10;27336:1;:14;27316:421;;;27372:10;27385:3;27389:1;27385:6;;;;;;;;:::i;:::-;;;;;;;27372:19;;27406:14;27423:7;27431:1;27423:10;;;;;;;;:::i;:::-;;;;;;;;;;;;27450:19;27472:13;;;;;;;;;;-1:-1:-1;;;;;27472:19:0;;;;;;;;;;;;27423:10;;-1:-1:-1;27514:21:0;;;;27506:76;;;;-1:-1:-1;;;27506:76:0;;;;;;;:::i;:::-;27626:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27626:19:0;;;;;;;;;;27648:20;;;27626:42;;27698:17;;;;;;;:27;;27648:20;;27626:9;27698:27;;27648:20;;27698:27;:::i;:::-;;;;;;;;27357:380;;;27352:3;;;;:::i;:::-;;;27316:421;;;;27784:2;-1:-1:-1;;;;;27754:47:0;27778:4;-1:-1:-1;;;;;27754:47:0;27768:8;-1:-1:-1;;;;;27754:47:0;;27788:3;27793:7;27754:47;;;;;;;:::i;:::-;;;;;;;;27814:75;27850:8;27860:4;27866:2;27870:3;27875:7;27884:4;27814:35;:75::i;:::-;27017:880;26823:1074;;;;;:::o;29215:569::-;-1:-1:-1;;;;;29368:16:0;;29360:62;;;;-1:-1:-1;;;29360:62:0;;26084:2:1;29360:62:0;;;26066:21:1;26123:2;26103:18;;;26096:30;26162:34;26142:18;;;26135:62;-1:-1:-1;;;26213:18:1;;;26206:31;26254:19;;29360:62:0;25882:397:1;29360:62:0;682:10;29479:102;682:10;29435:16;29522:2;29526:21;29544:2;29526:17;:21::i;:::-;29549:25;29567:6;29549:17;:25::i;:::-;29576:4;29479:20;:102::i;:::-;29594:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29594:17:0;;;;;;;;;:27;;29615:6;;29594:9;:27;;29615:6;;29594:27;:::i;:::-;;;;-1:-1:-1;;29637:52:0;;;27000:25:1;;;27056:2;27041:18;;27034:34;;;-1:-1:-1;;;;;29637:52:0;;;;29670:1;;29637:52;;;;;;26973:18:1;29637:52:0;;;;;;;29702:74;29733:8;29751:1;29755:2;29759;29763:6;29771:4;29702:30;:74::i;3146:191::-;3239:6;;;-1:-1:-1;;;;;3256:17:0;;;-1:-1:-1;;;;;;3256:17:0;;;;;;;3289:40;;3239:6;;;3256:17;3239:6;;3289:40;;3220:16;;3289:40;3209:128;3146:191;:::o;39849:248::-;40020:68;;-1:-1:-1;;;;;11005:15:1;;;40020:68:0;;;10987:34:1;11057:15;;11037:18;;;11030:43;11089:18;;;11082:34;;;39993:96:0;;40013:5;;-1:-1:-1;;;40043:27:0;10922:18:1;;40020:68:0;10747:375:1;39993:96:0;39849:248;;;;:::o;33009:331::-;33164:8;-1:-1:-1;;;;;33155:17:0;:5;-1:-1:-1;;;;;33155:17:0;;;33147:71;;;;-1:-1:-1;;;33147:71:0;;24091:2:1;33147:71:0;;;24073:21:1;24130:2;24110:18;;;24103:30;24169:34;24149:18;;;24142:62;-1:-1:-1;;;24220:18:1;;;24213:39;24269:19;;33147:71:0;23889:405:1;33147:71:0;-1:-1:-1;;;;;33229:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33229:46:0;;;;;;;;;;33291:41;;12847::1;;;33291::0;;12820:18:1;33291:41:0;;;;;;;33009:331;;;:::o;53781:740::-;53862:6;;53855:32;;-1:-1:-1;;;53855:32:0;;;;;26790:25:1;;;53891:10:0;;-1:-1:-1;;;;;53862:6:0;;53855:22;;26763:18:1;;53855:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53855:46:0;;53847:76;;;;-1:-1:-1;;;53847:76:0;;;;;;;:::i;:::-;53935:28;;;;:18;:28;;;;;;53967:2;53935:34;53931:586;;;53979:19;;-1:-1:-1;;;53979:19:0;;;;;;;:::i;53931:586::-;54016:28;;;;:18;:28;;;;;;54047:1;-1:-1:-1;54012:505:0;;;54059:37;54068:10;48838:1;54094;54059:8;:37::i;:::-;54105:28;;;;:18;:28;;;;;:30;;;;;;:::i;54012:505::-;54153:28;;;;:18;:28;;;;;;54184:1;-1:-1:-1;54149:368:0;;;54196:37;54205:10;48883:1;54231;54196:8;:37::i;54149:368::-;54290:28;;;;:18;:28;;;;;;54321:1;-1:-1:-1;54286:231:0;;;54333:37;54342:10;48928:1;54368;54333:8;:37::i;54286:231::-;54432:37;54441:10;48973:1;54467;54432:8;:37::i;31125:648::-;-1:-1:-1;;;;;31252:18:0;;31244:66;;;;-1:-1:-1;;;31244:66:0;;21444:2:1;31244:66:0;;;21426:21:1;21483:2;21463:18;;;21456:30;21522:34;21502:18;;;21495:62;-1:-1:-1;;;21573:18:1;;;21566:33;21616:19;;31244:66:0;21242:399:1;31244:66:0;682:10;31367:102;682:10;31398:4;31323:16;31416:21;31434:2;31416:17;:21::i;:::-;31439:25;31457:6;31439:17;:25::i;:::-;31367:102;;;;;;;;;;;;:20;:102::i;:::-;31482:19;31504:13;;;;;;;;;;;-1:-1:-1;;;;;31504:19:0;;;;;;;;;;31542:21;;;;31534:70;;;;-1:-1:-1;;;31534:70:0;;16249:2:1;31534:70:0;;;16231:21:1;16288:2;16268:18;;;16261:30;16327:34;16307:18;;;16300:62;-1:-1:-1;;;16378:18:1;;;16371:34;16422:19;;31534:70:0;16047:400:1;31534:70:0;31640:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31640:19:0;;;;;;;;;;;;31662:20;;;31640:42;;31711:54;;27000:25:1;;;27041:18;;;27034:34;;;31640:19:0;;31711:54;;;;;;26973:18:1;31711:54:0;;;;;;;31233:540;;31125:648;;;:::o;54655:739::-;54735:6;;54728:32;;-1:-1:-1;;;54728:32:0;;;;;26790:25:1;;;54764:10:0;;-1:-1:-1;;;;;54735:6:0;;54728:22;;26763:18:1;;54728:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;54728:46:0;;54720:76;;;;-1:-1:-1;;;54720:76:0;;;;;;;:::i;:::-;54808:28;;;;:18;:28;;;;;;54840:2;54808:34;54804:586;;;54852:19;;-1:-1:-1;;;54852:19:0;;;;;;;:::i;54804:586::-;54889:28;;;;:18;:28;;;;;;54920:1;-1:-1:-1;54885:505:0;;;54932:37;54941:10;48838:1;54967;54932:8;:37::i;:::-;54978:28;;;;:18;:28;;;;;:30;;;;;;:::i;54885:505::-;55026:28;;;;:18;:28;;;;;;55057:1;-1:-1:-1;55022:368:0;;;55069:37;55078:10;48883:1;55104;55069:8;:37::i;55022:368::-;55163:28;;;;:18;:28;;;;;;55194:1;-1:-1:-1;55159:231:0;;;55206:37;55215:10;48928:1;55241;55206:8;:37::i;55159:231::-;55305:37;55314:10;48973:1;55340;55305:8;:37::i;25645:820::-;-1:-1:-1;;;;;25833:16:0;;25825:66;;;;-1:-1:-1;;;25825:66:0;;;;;;;:::i;:::-;682:10;25948:96;682:10;25979:4;25985:2;25989:21;26007:2;25989:17;:21::i;25948:96::-;26057:19;26079:13;;;;;;;;;;;-1:-1:-1;;;;;26079:19:0;;;;;;;;;;26117:21;;;;26109:76;;;;-1:-1:-1;;;26109:76:0;;;;;;;:::i;:::-;26221:9;:13;;;;;;;;;;;-1:-1:-1;;;;;26221:19:0;;;;;;;;;;26243:20;;;26221:42;;26285:17;;;;;;;:27;;26243:20;;26221:9;26285:27;;26243:20;;26285:27;:::i;:::-;;;;-1:-1:-1;;26330:46:0;;;27000:25:1;;;27056:2;27041:18;;27034:34;;;-1:-1:-1;;;;;26330:46:0;;;;;;;;;;;;;;26973:18:1;26330:46:0;;;;;;;26389:68;26420:8;26430:4;26436:2;26440;26444:6;26452:4;26389:30;:68::i;:::-;25814:651;;25645:820;;;;;:::o;42203:716::-;42627:23;42653:69;42681:4;42653:69;;;;;;;;;;;;;;;;;42661:5;-1:-1:-1;;;;;42653:27:0;;;:69;;;;;:::i;:::-;42737:17;;42627:95;;-1:-1:-1;42737:21:0;42733:179;;42834:10;42823:30;;;;;;;;;;;;:::i;:::-;42815:85;;;;-1:-1:-1;;;42815:85:0;;24501:2:1;42815:85:0;;;24483:21:1;24540:2;24520:18;;;24513:30;24579:34;24559:18;;;24552:62;-1:-1:-1;;;24630:18:1;;;24623:40;24680:19;;42815:85:0;24299:406:1;38168:931:0;-1:-1:-1;;;;;38490:18:0;;38486:160;;38530:9;38525:110;38549:3;:10;38545:1;:14;38525:110;;;38609:7;38617:1;38609:10;;;;;;;;:::i;:::-;;;;;;;38585:12;:20;38598:3;38602:1;38598:6;;;;;;;;:::i;:::-;;;;;;;38585:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;38561:3:0;;-1:-1:-1;38561:3:0;;:::i;:::-;;;38525:110;;;;38486:160;-1:-1:-1;;;;;38662:16:0;;38658:434;;38700:9;38695:386;38719:3;:10;38715:1;:14;38695:386;;;38755:10;38768:3;38772:1;38768:6;;;;;;;;:::i;:::-;;;;;;;38755:19;;38793:14;38810:7;38818:1;38810:10;;;;;;;;:::i;:::-;;;;;;;38793:27;;38839:14;38856:12;:16;38869:2;38856:16;;;;;;;;;;;;38839:33;;38909:6;38899;:16;;38891:69;;;;-1:-1:-1;;;38891:69:0;;22972:2:1;38891:69:0;;;22954:21:1;23011:2;22991:18;;;22984:30;23050:34;23030:18;;;23023:62;-1:-1:-1;;;23101:18:1;;;23094:38;23149:19;;38891:69:0;22770:404:1;38891:69:0;39012:16;;;;:12;:16;;;;;;39031:15;;39012:34;;38731:3;;;:::i;:::-;;;38695:386;;35277:813;-1:-1:-1;;;;;35517:13:0;;4486:20;4534:8;35513:570;;35553:79;;-1:-1:-1;;;35553:79:0;;-1:-1:-1;;;;;35553:43:0;;;;;:79;;35597:8;;35607:4;;35613:3;;35618:7;;35627:4;;35553:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35553:79:0;;;;;;;;-1:-1:-1;;35553:79:0;;;;;;;;;;;;:::i;:::-;;;35549:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35945:6;35938:14;;-1:-1:-1;;;35938:14:0;;;;;;;;:::i;35549:523::-;;;35994:62;;-1:-1:-1;;;35994:62:0;;13548:2:1;35994:62:0;;;13530:21:1;13587:2;13567:18;;;13560:30;13626:34;13606:18;;;13599:62;-1:-1:-1;;;13677:18:1;;;13670:50;13737:19;;35994:62:0;13346:416:1;35549:523:0;-1:-1:-1;;;;;;35714:60:0;;-1:-1:-1;;;35714:60:0;35710:159;;35799:50;;-1:-1:-1;;;35799:50:0;;;;;;;:::i;36098:198::-;36218:16;;;36232:1;36218:16;;;;;;;;;36164;;36193:22;;36218:16;;;;;;;;;;;;-1:-1:-1;36218:16:0;36193:41;;36256:7;36245:5;36251:1;36245:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;36283:5;36098:198;-1:-1:-1;;36098:198:0:o;34525:744::-;-1:-1:-1;;;;;34740:13:0;;4486:20;4534:8;34736:526;;34776:72;;-1:-1:-1;;;34776:72:0;;-1:-1:-1;;;;;34776:38:0;;;;;:72;;34815:8;;34825:4;;34831:2;;34835:6;;34843:4;;34776:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34776:72:0;;;;;;;;-1:-1:-1;;34776:72:0;;;;;;;;;;;;:::i;:::-;;;34772:479;;;;:::i;:::-;-1:-1:-1;;;;;;34898:55:0;;-1:-1:-1;;;34898:55:0;34894:154;;34978:50;;-1:-1:-1;;;34978:50:0;;;;;;;:::i;6969:229::-;7106:12;7138:52;7160:6;7168:4;7174:1;7177:12;7138:21;:52::i;:::-;7131:59;;6969:229;;;;;;:::o;8089:510::-;8259:12;8317:5;8292:21;:30;;8284:81;;;;-1:-1:-1;;;8284:81:0;;17753:2:1;8284:81:0;;;17735:21:1;17792:2;17772:18;;;17765:30;17831:34;17811:18;;;17804:62;-1:-1:-1;;;17882:18:1;;;17875:36;17928:19;;8284:81:0;17551:402:1;8284:81:0;4486:20;;8376:60;;;;-1:-1:-1;;;8376:60:0;;23733:2:1;8376:60:0;;;23715:21:1;23772:2;23752:18;;;23745:30;23811:31;23791:18;;;23784:59;23860:18;;8376:60:0;23531:353:1;8376:60:0;8450:12;8464:23;8491:6;-1:-1:-1;;;;;8491:11:0;8510:5;8517:4;8491:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8449:73;;;;8540:51;8557:7;8566:10;8578:12;8540:16;:51::i;:::-;8533:58;8089:510;-1:-1:-1;;;;;;;8089:510:0:o;10775:712::-;10925:12;10954:7;10950:530;;;-1:-1:-1;10985:10:0;10978:17;;10950:530;11099:17;;:21;11095:374;;11297:10;11291:17;11358:15;11345:10;11341:2;11337:19;11330:44;11095:374;11440:12;11433:20;;-1:-1:-1;;;11433:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:735::-;541:5;594:3;587:4;579:6;575:17;571:27;561:55;;612:1;609;602:12;561:55;648:6;635:20;674:4;697:43;737:2;697:43;:::i;:::-;769:2;763:9;781:31;809:2;801:6;781:31;:::i;:::-;847:18;;;881:15;;;;-1:-1:-1;916:15:1;;;966:1;962:10;;;950:23;;946:32;;943:41;-1:-1:-1;940:61:1;;;997:1;994;987:12;940:61;1019:1;1029:163;1043:2;1040:1;1037:9;1029:163;;;1100:17;;1088:30;;1138:12;;;;1170;;;;1061:1;1054:9;1029:163;;;-1:-1:-1;1210:6:1;;487:735;-1:-1:-1;;;;;;;487:735:1:o;1227:220::-;1269:5;1322:3;1315:4;1307:6;1303:17;1299:27;1289:55;;1340:1;1337;1330:12;1289:55;1362:79;1437:3;1428:6;1415:20;1408:4;1400:6;1396:17;1362:79;:::i;1452:247::-;1511:6;1564:2;1552:9;1543:7;1539:23;1535:32;1532:52;;;1580:1;1577;1570:12;1532:52;1619:9;1606:23;1638:31;1663:5;1638:31;:::i;1704:251::-;1774:6;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1875:9;1869:16;1894:31;1919:5;1894:31;:::i;1960:388::-;2028:6;2036;2089:2;2077:9;2068:7;2064:23;2060:32;2057:52;;;2105:1;2102;2095:12;2057:52;2144:9;2131:23;2163:31;2188:5;2163:31;:::i;:::-;2213:5;-1:-1:-1;2270:2:1;2255:18;;2242:32;2283:33;2242:32;2283:33;:::i;:::-;2335:7;2325:17;;;1960:388;;;;;:::o;2353:1071::-;2507:6;2515;2523;2531;2539;2592:3;2580:9;2571:7;2567:23;2563:33;2560:53;;;2609:1;2606;2599:12;2560:53;2648:9;2635:23;2667:31;2692:5;2667:31;:::i;:::-;2717:5;-1:-1:-1;2774:2:1;2759:18;;2746:32;2787:33;2746:32;2787:33;:::i;:::-;2839:7;-1:-1:-1;2897:2:1;2882:18;;2869:32;2920:18;2950:14;;;2947:34;;;2977:1;2974;2967:12;2947:34;3000:61;3053:7;3044:6;3033:9;3029:22;3000:61;:::i;:::-;2990:71;;3114:2;3103:9;3099:18;3086:32;3070:48;;3143:2;3133:8;3130:16;3127:36;;;3159:1;3156;3149:12;3127:36;3182:63;3237:7;3226:8;3215:9;3211:24;3182:63;:::i;:::-;3172:73;;3298:3;3287:9;3283:19;3270:33;3254:49;;3328:2;3318:8;3315:16;3312:36;;;3344:1;3341;3334:12;3312:36;;3367:51;3410:7;3399:8;3388:9;3384:24;3367:51;:::i;:::-;3357:61;;;2353:1071;;;;;;;;:::o;3429:734::-;3533:6;3541;3549;3557;3565;3618:3;3606:9;3597:7;3593:23;3589:33;3586:53;;;3635:1;3632;3625:12;3586:53;3674:9;3661:23;3693:31;3718:5;3693:31;:::i;:::-;3743:5;-1:-1:-1;3800:2:1;3785:18;;3772:32;3813:33;3772:32;3813:33;:::i;:::-;3865:7;-1:-1:-1;3919:2:1;3904:18;;3891:32;;-1:-1:-1;3970:2:1;3955:18;;3942:32;;-1:-1:-1;4025:3:1;4010:19;;3997:33;4053:18;4042:30;;4039:50;;;4085:1;4082;4075:12;4039:50;4108:49;4149:7;4140:6;4129:9;4125:22;4108:49;:::i;4168:382::-;4233:6;4241;4294:2;4282:9;4273:7;4269:23;4265:32;4262:52;;;4310:1;4307;4300:12;4262:52;4349:9;4336:23;4368:31;4393:5;4368:31;:::i;:::-;4418:5;-1:-1:-1;4475:2:1;4460:18;;4447:32;4488:30;4447:32;4488:30;:::i;4555:315::-;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4739:9;4726:23;4758:31;4783:5;4758:31;:::i;:::-;4808:5;4860:2;4845:18;;;;4832:32;;-1:-1:-1;;;4555:315:1:o;4875:383::-;4952:6;4960;4968;5021:2;5009:9;5000:7;4996:23;4992:32;4989:52;;;5037:1;5034;5027:12;4989:52;5076:9;5063:23;5095:31;5120:5;5095:31;:::i;:::-;5145:5;5197:2;5182:18;;5169:32;;-1:-1:-1;5248:2:1;5233:18;;;5220:32;;4875:383;-1:-1:-1;;;4875:383:1:o;5263:1288::-;5381:6;5389;5442:2;5430:9;5421:7;5417:23;5413:32;5410:52;;;5458:1;5455;5448:12;5410:52;5498:9;5485:23;5527:18;5568:2;5560:6;5557:14;5554:34;;;5584:1;5581;5574:12;5554:34;5622:6;5611:9;5607:22;5597:32;;5667:7;5660:4;5656:2;5652:13;5648:27;5638:55;;5689:1;5686;5679:12;5638:55;5725:2;5712:16;5747:4;5770:43;5810:2;5770:43;:::i;:::-;5842:2;5836:9;5854:31;5882:2;5874:6;5854:31;:::i;:::-;5920:18;;;5954:15;;;;-1:-1:-1;5989:11:1;;;6031:1;6027:10;;;6019:19;;6015:28;;6012:41;-1:-1:-1;6009:61:1;;;6066:1;6063;6056:12;6009:61;6088:1;6079:10;;6098:238;6112:2;6109:1;6106:9;6098:238;;;6183:3;6170:17;6200:31;6225:5;6200:31;:::i;:::-;6244:18;;6130:1;6123:9;;;;;6282:12;;;;6314;;6098:238;;;-1:-1:-1;6355:6:1;-1:-1:-1;;6399:18:1;;6386:32;;-1:-1:-1;;6430:16:1;;;6427:36;;;6459:1;6456;6449:12;6427:36;;6482:63;6537:7;6526:8;6515:9;6511:24;6482:63;:::i;:::-;6472:73;;;5263:1288;;;;;:::o;6556:245::-;6623:6;6676:2;6664:9;6655:7;6651:23;6647:32;6644:52;;;6692:1;6689;6682:12;6644:52;6724:9;6718:16;6743:28;6765:5;6743:28;:::i;6806:245::-;6864:6;6917:2;6905:9;6896:7;6892:23;6888:32;6885:52;;;6933:1;6930;6923:12;6885:52;6972:9;6959:23;6991:30;7015:5;6991:30;:::i;7056:249::-;7125:6;7178:2;7166:9;7157:7;7153:23;7149:32;7146:52;;;7194:1;7191;7184:12;7146:52;7226:9;7220:16;7245:30;7269:5;7245:30;:::i;7577:180::-;7636:6;7689:2;7677:9;7668:7;7664:23;7660:32;7657:52;;;7705:1;7702;7695:12;7657:52;-1:-1:-1;7728:23:1;;7577:180;-1:-1:-1;7577:180:1:o;7762:184::-;7832:6;7885:2;7873:9;7864:7;7860:23;7856:32;7853:52;;;7901:1;7898;7891:12;7853:52;-1:-1:-1;7924:16:1;;7762:184;-1:-1:-1;7762:184:1:o;7951:518::-;8029:6;8037;8090:2;8078:9;8069:7;8065:23;8061:32;8058:52;;;8106:1;8103;8096:12;8058:52;8142:9;8129:23;8119:33;;8203:2;8192:9;8188:18;8175:32;8230:18;8222:6;8219:30;8216:50;;;8262:1;8259;8252:12;8216:50;8285:22;;8338:4;8330:13;;8326:27;-1:-1:-1;8316:55:1;;8367:1;8364;8357:12;8316:55;8390:73;8455:7;8450:2;8437:16;8432:2;8428;8424:11;8390:73;:::i;8474:248::-;8542:6;8550;8603:2;8591:9;8582:7;8578:23;8574:32;8571:52;;;8619:1;8616;8609:12;8571:52;-1:-1:-1;;8642:23:1;;;8712:2;8697:18;;;8684:32;;-1:-1:-1;8474:248:1:o;8727:435::-;8780:3;8818:5;8812:12;8845:6;8840:3;8833:19;8871:4;8900:2;8895:3;8891:12;8884:19;;8937:2;8930:5;8926:14;8958:1;8968:169;8982:6;8979:1;8976:13;8968:169;;;9043:13;;9031:26;;9077:12;;;;9112:15;;;;9004:1;8997:9;8968:169;;;-1:-1:-1;9153:3:1;;8727:435;-1:-1:-1;;;;;8727:435:1:o;9167:257::-;9208:3;9246:5;9240:12;9273:6;9268:3;9261:19;9289:63;9345:6;9338:4;9333:3;9329:14;9322:4;9315:5;9311:16;9289:63;:::i;:::-;9406:2;9385:15;-1:-1:-1;;9381:29:1;9372:39;;;;9413:4;9368:50;;9167:257;-1:-1:-1;;9167:257:1:o;9429:274::-;9558:3;9596:6;9590:13;9612:53;9658:6;9653:3;9646:4;9638:6;9634:17;9612:53;:::i;:::-;9681:16;;;;;9429:274;-1:-1:-1;;9429:274:1:o;9916:826::-;-1:-1:-1;;;;;10313:15:1;;;10295:34;;10365:15;;10360:2;10345:18;;10338:43;10275:3;10412:2;10397:18;;10390:31;;;10238:4;;10444:57;;10481:19;;10473:6;10444:57;:::i;:::-;10549:9;10541:6;10537:22;10532:2;10521:9;10517:18;10510:50;10583:44;10620:6;10612;10583:44;:::i;:::-;10569:58;;10676:9;10668:6;10664:22;10658:3;10647:9;10643:19;10636:51;10704:32;10729:6;10721;10704:32;:::i;:::-;10696:40;9916:826;-1:-1:-1;;;;;;;;9916:826:1:o;11127:560::-;-1:-1:-1;;;;;11424:15:1;;;11406:34;;11476:15;;11471:2;11456:18;;11449:43;11523:2;11508:18;;11501:34;;;11566:2;11551:18;;11544:34;;;11386:3;11609;11594:19;;11587:32;;;11349:4;;11636:45;;11661:19;;11653:6;11636:45;:::i;11971:261::-;12150:2;12139:9;12132:21;12113:4;12170:56;12222:2;12211:9;12207:18;12199:6;12170:56;:::i;12237:465::-;12494:2;12483:9;12476:21;12457:4;12520:56;12572:2;12561:9;12557:18;12549:6;12520:56;:::i;:::-;12624:9;12616:6;12612:22;12607:2;12596:9;12592:18;12585:50;12652:44;12689:6;12681;12652:44;:::i;:::-;12644:52;12237:465;-1:-1:-1;;;;;12237:465:1:o;13122:219::-;13271:2;13260:9;13253:21;13234:4;13291:44;13331:2;13320:9;13316:18;13308:6;13291:44;:::i;14120:404::-;14322:2;14304:21;;;14361:2;14341:18;;;14334:30;14400:34;14395:2;14380:18;;14373:62;-1:-1:-1;;;14466:2:1;14451:18;;14444:38;14514:3;14499:19;;14120:404::o;14529:341::-;14731:2;14713:21;;;14770:2;14750:18;;;14743:30;-1:-1:-1;;;14804:2:1;14789:18;;14782:47;14861:2;14846:18;;14529:341::o;16452:405::-;16654:2;16636:21;;;16693:2;16673:18;;;16666:30;16732:34;16727:2;16712:18;;16705:62;-1:-1:-1;;;16798:2:1;16783:18;;16776:39;16847:3;16832:19;;16452:405::o;16862:332::-;17064:2;17046:21;;;17103:1;17083:18;;;17076:29;-1:-1:-1;;;17136:2:1;17121:18;;17114:39;17185:2;17170:18;;16862:332::o;19366:401::-;19568:2;19550:21;;;19607:2;19587:18;;;19580:30;19646:34;19641:2;19626:18;;19619:62;-1:-1:-1;;;19712:2:1;19697:18;;19690:35;19757:3;19742:19;;19366:401::o;21646:406::-;21848:2;21830:21;;;21887:2;21867:18;;;21860:30;21926:34;21921:2;21906:18;;21899:62;-1:-1:-1;;;21992:2:1;21977:18;;21970:40;22042:3;22027:19;;21646:406::o;22409:356::-;22611:2;22593:21;;;22630:18;;;22623:30;22689:34;22684:2;22669:18;;22662:62;22756:2;22741:18;;22409:356::o;26284:355::-;26486:2;26468:21;;;26525:2;26505:18;;;26498:30;26564:33;26559:2;26544:18;;26537:61;26630:2;26615:18;;26284:355::o;27079:183::-;27139:4;27172:18;27164:6;27161:30;27158:56;;;27194:18;;:::i;:::-;-1:-1:-1;27239:1:1;27235:14;27251:4;27231:25;;27079:183::o;27267:128::-;27307:3;27338:1;27334:6;27331:1;27328:13;27325:39;;;27344:18;;:::i;:::-;-1:-1:-1;27380:9:1;;27267:128::o;27400:168::-;27440:7;27506:1;27502;27498:6;27494:14;27491:1;27488:21;27483:1;27476:9;27469:17;27465:45;27462:71;;;27513:18;;:::i;:::-;-1:-1:-1;27553:9:1;;27400:168::o;27573:258::-;27645:1;27655:113;27669:6;27666:1;27663:13;27655:113;;;27745:11;;;27739:18;27726:11;;;27719:39;27691:2;27684:10;27655:113;;;27786:6;27783:1;27780:13;27777:48;;;-1:-1:-1;;27821:1:1;27803:16;;27796:27;27573:258::o;27836:380::-;27915:1;27911:12;;;;27958;;;27979:61;;28033:4;28025:6;28021:17;28011:27;;27979:61;28086:2;28078:6;28075:14;28055:18;28052:38;28049:161;;;28132:10;28127:3;28123:20;28120:1;28113:31;28167:4;28164:1;28157:15;28195:4;28192:1;28185:15;28049:161;;27836:380;;;:::o;28221:249::-;28331:2;28312:13;;-1:-1:-1;;28308:27:1;28296:40;;28366:18;28351:34;;28387:22;;;28348:62;28345:88;;;28413:18;;:::i;:::-;28449:2;28442:22;-1:-1:-1;;28221:249:1:o;28475:135::-;28514:3;-1:-1:-1;;28535:17:1;;28532:43;;;28555:18;;:::i;:::-;-1:-1:-1;28602:1:1;28591:13;;28475:135::o;28615:127::-;28676:10;28671:3;28667:20;28664:1;28657:31;28707:4;28704:1;28697:15;28731:4;28728:1;28721:15;28747:127;28808:10;28803:3;28799:20;28796:1;28789:31;28839:4;28836:1;28829:15;28863:4;28860:1;28853:15;28879:127;28940:10;28935:3;28931:20;28928:1;28921:31;28971:4;28968:1;28961:15;28995:4;28992:1;28985:15;29011:179;29046:3;29088:1;29070:16;29067:23;29064:120;;;29134:1;29131;29128;29113:23;-1:-1:-1;29171:1:1;29165:8;29160:3;29156:18;29064:120;29011:179;:::o;29195:671::-;29234:3;29276:4;29258:16;29255:26;29252:39;;;29195:671;:::o;29252:39::-;29318:2;29312:9;-1:-1:-1;;29383:16:1;29379:25;;29376:1;29312:9;29355:50;29434:4;29428:11;29458:16;29493:18;29564:2;29557:4;29549:6;29545:17;29542:25;29537:2;29529:6;29526:14;29523:45;29520:58;;;29571:5;;;;;29195:671;:::o;29520:58::-;29608:6;29602:4;29598:17;29587:28;;29644:3;29638:10;29671:2;29663:6;29660:14;29657:27;;;29677:5;;;;;;29195:671;:::o;29657:27::-;29761:2;29742:16;29736:4;29732:27;29728:36;29721:4;29712:6;29707:3;29703:16;29699:27;29696:69;29693:82;;;29768:5;;;;;;29195:671;:::o;29693:82::-;29784:57;29835:4;29826:6;29818;29814:19;29810:30;29804:4;29784:57;:::i;:::-;-1:-1:-1;29857:3:1;;29195:671;-1:-1:-1;;;;;29195:671:1:o;29871:131::-;-1:-1:-1;;;;;29946:31:1;;29936:42;;29926:70;;29992:1;29989;29982:12;30007:118;30093:5;30086:13;30079:21;30072:5;30069:32;30059:60;;30115:1;30112;30105:12;30130:131;-1:-1:-1;;;;;;30204:32:1;;30194:43;;30184:71;;30251:1;30248;30241:12

Swarm Source

ipfs://fc10df2e4799d222782c0474faf7f12303462627cc583c17b2f5e5a6d431de03
Loading