ETH Price: $3,065.96 (+0.94%)
Gas: 4 Gwei

Token

 

Overview

Max Total Supply

517

Holders

406

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x30202cc3d9593f3511924c0192cd101bd393738e
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FyatLuxWorld

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol

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

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts v4.4.1 (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;
    }
}

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/access/Ownable.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}

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

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

pragma solidity ^0.8.0;

/**
 * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
 *
 * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
 * stuck.
 *
 * @dev _Available since v3.1._
 */
contract ERC1155Holder is ERC1155Receiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol

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

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File: contracts/ERC1155Metadata.sol

pragma solidity ^0.8.0;

// via https://github.com/arcadeum/multi-token-standard/blob/master/contracts/tokens/ERC1155/ERC1155Metadata.sol


/**
 * @notice Contract that handles metadata related methods.
 * @dev Methods assume a deterministic generation of URI based on token IDs.
 *      Methods also assume that URI uses hex representation of token IDs.
 */
contract ERC1155Metadata {

  using Strings for uint256;

  // URI's default URI prefix
  string internal baseMetadataURI;
  event URI(string _uri, uint256 indexed _id);

  /***********************************|
  |     Metadata Public Function s    |
  |__________________________________*/

  /**
   * @notice A distinct Uniform Resource Identifier (URI) for a given token.
   * @dev URIs are defined in RFC 3986.
   *      URIs are assumed to be deterministically generated based on token ID
   *      Token IDs are assumed to be represented in their hex format in URIs
   * @return URI string
   */
  function uri(uint256 _id) public view returns (string memory) {
    return string(abi.encodePacked(baseMetadataURI, _id.toString(), ".json"));
  }


  /***********************************|
  |    Metadata Internal Functions    |
  |__________________________________*/

  /**
   * @notice Will emit default URI log event for corresponding token _id
   * @param _tokenIDs Array of IDs of tokens to log default URI
   */
  function _logURIs(uint256[] memory _tokenIDs) internal {
    string memory baseURL = baseMetadataURI;
    string memory tokenURI;

    for (uint256 i = 0; i < _tokenIDs.length; i++) {
      tokenURI = string(abi.encodePacked(baseURL, _tokenIDs[i].toString(), ".json"));
      emit URI(tokenURI, _tokenIDs[i]);
    }
  }

  /**
   * @notice Will update the base URL of token's URI
   * @param _newBaseMetadataURI New base URL of token's URI
   */
  function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal {
    baseMetadataURI = _newBaseMetadataURI;
  }

}

// File: contracts/FyatLuxWorld.sol

pragma solidity ^0.8.0;







contract FyatLuxWorld is ERC1155, ERC1155Holder, Ownable {

    using Strings for uint256;

    string private _contractURI = '';

    // A certain collection how much is it priced for.
    mapping(uint256 => uint256) editionToPrice;

    // Is a collection open for minting.
    mapping(uint256 => bool) editionToAvailability;

    // Is edition open.
    mapping(uint256 => bool) isOpenEdition;

    // If not open, what's the max supply.
    mapping(uint256 => uint256) editionAvailableSupply;

    // Edition to Merkle Tree Root for gating.
    mapping(uint256 => bytes32) editionToRoot;

    // Is the edition gated for Whitelists or Claims.
    mapping(uint256 => bool) isEditionGated;

    // How much can someone buy of a certain edition?
    mapping(uint256 => uint256) editionToMaxAllowance;

    // How much has been minted of a specific  edition.
    mapping(uint256 => uint256) editionMinted;

    mapping(uint256 => string) editionToURI;

    // How much has been minted of a specific edition by a specific member.
    mapping(uint256 => mapping(address => uint256)) editionToTally;

    // Next available edition id.
    uint256 private availableEditionId = 1;

    constructor(string memory uri) ERC1155(uri) {}

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, ERC1155Receiver) returns (bool) {
        return ERC1155.supportsInterface(interfaceId) || ERC1155Receiver.supportsInterface(interfaceId);
    }

    function uri(uint256 id) public view virtual override returns (string memory) {
        return editionToURI[id];
    }

        // Set base URI for editions.
    function setURI(uint256 edition, string memory newURI) public onlyOwner {
        editionToURI[edition] = newURI;
    }

    function getEditionMaxAllowance(uint256 edition) public view returns(uint256) {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        return editionToMaxAllowance[edition];
    }

    function getEditionPrice(uint256 edition) public view returns (uint256) {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        return editionToPrice[edition];
    }

    function getTotalMinted(uint256 edition) public view returns (uint256) {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        return editionMinted[edition];
    }

    function getEditionSize(uint256 edition) public view returns (uint256) {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        return editionAvailableSupply[edition];
    }

    function getIsEditionGated(uint256 edition) public view returns (bool) {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        return isEditionGated[edition];
    }

    function getIsOpenEdition(uint256 edition) public view returns (bool) {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        return isOpenEdition[edition];
    }

    function getIsEditionAvailable(uint256 edition) public view returns (bool) {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        return editionToAvailability[edition];
    }

    function getLatestEdition() public view returns (uint256) {
        return (availableEditionId - 1);
    }

    function getRoot(uint256 edition) external onlyOwner view returns (bytes32) {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        return editionToRoot[edition];
    }

    // Create a new edition with unlimited supply.
    function addOpenEdition(string memory editionURI, uint256 price, bool isGated, uint256 maxAllowance) public onlyOwner {
        editionToURI[availableEditionId] = editionURI;
        editionToPrice[availableEditionId] = price;
        editionToAvailability[availableEditionId] = true;
        isOpenEdition[availableEditionId] = true;
        isEditionGated[availableEditionId] = isGated;
        editionToMaxAllowance[availableEditionId] = maxAllowance;
        availableEditionId = availableEditionId + 1;
    }

    // Create a new edition with limited supply.
    function addLimitedEdition(string memory editionURI, uint256 price, uint256 size, bool isGated, uint256 maxAllowance) public onlyOwner {
        require(size > 0, 'Edition size must be non-zero.');
        editionToURI[availableEditionId] = editionURI;
        editionToPrice[availableEditionId] = price;
        editionToAvailability[availableEditionId] = true;
        isOpenEdition[availableEditionId] = false;
        isEditionGated[availableEditionId] = isGated;
        editionAvailableSupply[availableEditionId] = size;
        editionToMaxAllowance[availableEditionId] = maxAllowance;
        availableEditionId = availableEditionId + 1;
    }

    function mintEdition(uint256 edition, uint256 quantity) public onlyOwner {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        require(isOpenEdition[edition] || (editionMinted[edition] + quantity <= editionAvailableSupply[edition]), 'Mint would exceed availability.');
        editionMinted[edition] = editionMinted[edition] + quantity;
        _mint(msg.sender, edition, quantity, "");
    }

    // Change the price for an edition.
    function updateEditionPrice(uint256 edition, uint256 price) public onlyOwner {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        editionToPrice[edition] = price;
    }

    // Change the max size of existing edition.
    function updateEditionSize(uint256 edition, uint256 newSize) public onlyOwner {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        require(!isOpenEdition[edition], 'Edition must not be open.');
        editionAvailableSupply[edition] = newSize;
    }

    // Set Merkle Root to gated edition.
    function setEditionGate(uint256 edition, bytes32 newRoot) public onlyOwner {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        editionToRoot[edition] = newRoot;
    }

    function setEditionMaxAllowance(uint256 edition, uint256 allowance) public onlyOwner {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        editionToMaxAllowance[edition] = allowance;
    }

    // Set edition to be gated.
    function setIsGated(uint256 edition, bool isGated) public onlyOwner {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        isEditionGated[edition] = isGated;
    }

    // Get editions locked in contract.
    function withdrawItems(uint256 edition, uint256 quantity) public onlyOwner {
        require(balanceOf(address(this), edition) >= quantity,'No such amount of edition available for withdrawal.');
        _safeTransferFrom(address(this), msg.sender, edition, quantity, "");
    }

    // Withdraw funds to deployer wallet.
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    // Send some goodies to lucky person.
    function gift(uint256 edition, address member, uint256 quantity) public onlyOwner {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        require(isOpenEdition[edition] || (editionMinted[edition] + quantity <= editionAvailableSupply[edition]), 'No such amount of edition available for withdrawal.');
        editionMinted[edition] = editionMinted[edition] + quantity;
        _mint(member, edition, quantity, "");
    }

    // Make edition available for purchase.
    function setEditionIsAvailable(uint256 edition, bool isAvailable) public onlyOwner {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        editionToAvailability[edition] = isAvailable;
    }

    // Buy a part of the Fyat Lux World.
    function purchaseOpenEdition(uint256 edition, uint256 quantity, bytes32[] calldata proof) public payable {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        require(isOpenEdition[edition], 'Edition must be open.');
        require(editionToAvailability[edition], 'Edition must be available.');
        require(editionToPrice[edition] * quantity <= msg.value, 'ETH amount is not sufficient');
        require(!isEditionGated[edition] || (MerkleProof.verify(proof, editionToRoot[edition], keccak256(abi.encodePacked(msg.sender)))), 'The Gate has stopped you.');
        require(editionToMaxAllowance[edition] == 0 || (editionToMaxAllowance[edition] > 0 && editionToTally[edition][msg.sender] + quantity <= editionToMaxAllowance[edition]), 'Asked for too many');
        editionToTally[edition][msg.sender] =  editionToTally[edition][msg.sender] + quantity;
        editionMinted[edition] = editionMinted[edition] + quantity;
        _mint(msg.sender, edition, quantity, "");
    }

    // Buy a part of the Fyat Lux World.
    function purchaseLimitedEdition(uint256 edition, uint256 quantity, bytes32[] calldata proof) public payable {
        require(edition > 0 && edition < availableEditionId, 'Edition must exist');
        require(!isOpenEdition[edition], 'Edition must be closed.');
        require(editionToAvailability[edition],"Edition must be available.");
        require(editionToPrice[edition] * quantity <= msg.value, 'ETH amount is not sufficient');
        require(((editionMinted[edition] + quantity) <= editionAvailableSupply[edition]), 'No supply available to meet the order.');
        require(!isEditionGated[edition] || (MerkleProof.verify(proof, editionToRoot[edition], keccak256(abi.encodePacked(msg.sender)))), 'The Gate has stopped you.');
        require(editionToMaxAllowance[edition] == 0 || (editionToMaxAllowance[edition] > 0 && editionToTally[edition][msg.sender] + quantity <= editionToMaxAllowance[edition]), 'Asked for too many');
        editionMinted[edition] = editionMinted[edition] + quantity;
        editionToTally[edition][msg.sender] =  editionToTally[edition][msg.sender] + quantity;
        _mint(msg.sender, edition, quantity, "");
    }

    function contractURI() public view returns (string memory) {
        return _contractURI;
    }

    function setContractURI(string calldata URI) external onlyOwner {
        _contractURI = URI;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"string","name":"editionURI","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"bool","name":"isGated","type":"bool"},{"internalType":"uint256","name":"maxAllowance","type":"uint256"}],"name":"addLimitedEdition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"editionURI","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"isGated","type":"bool"},{"internalType":"uint256","name":"maxAllowance","type":"uint256"}],"name":"addOpenEdition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"}],"name":"getEditionMaxAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"}],"name":"getEditionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"}],"name":"getEditionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"}],"name":"getIsEditionAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"}],"name":"getIsEditionGated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"}],"name":"getIsOpenEdition","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestEdition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"}],"name":"getRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"}],"name":"getTotalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"address","name":"member","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"gift","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":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintEdition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"purchaseLimitedEdition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"purchaseOpenEdition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"setEditionGate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"bool","name":"isAvailable","type":"bool"}],"name":"setEditionIsAvailable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"uint256","name":"allowance","type":"uint256"}],"name":"setEditionMaxAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"bool","name":"isGated","type":"bool"}],"name":"setIsGated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"string","name":"newURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updateEditionPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"uint256","name":"newSize","type":"uint256"}],"name":"updateEditionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"edition","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"withdrawItems","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600490805190602001906200002b92919062000188565b506001600f553480156200003e57600080fd5b5060405162006391380380620063918339818101604052810190620000649190620002aa565b8062000076816200009e60201b60201c565b50620000976200008b620000ba60201b60201c565b620000c260201b60201c565b506200045f565b8060029080519060200190620000b692919062000188565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001969062000384565b90600052602060002090601f016020900481019282620001ba576000855562000206565b82601f10620001d557805160ff191683800117855562000206565b8280016001018555821562000206579182015b8281111562000205578251825591602001919060010190620001e8565b5b50905062000215919062000219565b5090565b5b80821115620002345760008160009055506001016200021a565b5090565b60006200024f620002498462000318565b620002ef565b9050828152602081018484840111156200026857600080fd5b620002758482856200034e565b509392505050565b600082601f8301126200028f57600080fd5b8151620002a184826020860162000238565b91505092915050565b600060208284031215620002bd57600080fd5b600082015167ffffffffffffffff811115620002d857600080fd5b620002e6848285016200027d565b91505092915050565b6000620002fb6200030e565b9050620003098282620003ba565b919050565b6000604051905090565b600067ffffffffffffffff8211156200033657620003356200041f565b5b62000341826200044e565b9050602081019050919050565b60005b838110156200036e57808201518184015260208101905062000351565b838111156200037e576000848401525b50505050565b600060028204905060018216806200039d57607f821691505b60208210811415620003b457620003b3620003f0565b5b50919050565b620003c5826200044e565b810181811067ffffffffffffffff82111715620003e757620003e66200041f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615f22806200046f6000396000f3fe60806040526004361061022f5760003560e01c8063862440e21161012e578063c84bda94116100ab578063f05c1db41161006f578063f05c1db414610872578063f23a6e61146108af578063f242432a146108ec578063f2fde38b14610915578063fd4c1eb81461093e5761022f565b8063c84bda9414610753578063c88355b414610790578063e8a3d485146107cd578063e985e9c5146107f8578063ed26e34e146108355761022f565b80639b24b3b0116100f25780639b24b3b01461064a5780639e0fd99814610687578063a22cb465146106b0578063abf1df6b146106d9578063bc197c81146107165761022f565b8063862440e2146105885780638da5cb5b146105b1578063938e3d7b146105dc578063972fc25e1461060557806398092661146106215761022f565b80633466dcfc116101bc5780634af53db0116101805780634af53db0146104a55780634e1273f4146104e257806350d0c8201461051f578063715018a6146105485780637c2f39f71461055f5761022f565b80633466dcfc146103ea5780633b5e5e81146104135780633ccfd60b1461043c57806347069b8c1461045357806347eeb2401461047c5761022f565b806316fe7bed1161020357806316fe7bed146103285780632450f18514610351578063257eb6451461037c5780632cd71f35146103a55780632eb2c2d6146103c15761022f565b8062fdd58e1461023457806301ffc9a7146102715780630e89341c146102ae57806313adccda146102eb575b600080fd5b34801561024057600080fd5b5061025b6004803603810190610256919061450f565b610967565b60405161026891906152ec565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906145b7565b610a30565b6040516102a59190614f59565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190614758565b610a52565b6040516102e29190614faa565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190614758565b610af7565b60405161031f9190614f59565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a91906147d0565b610b70565b005b34801561035d57600080fd5b50610366610c6b565b60405161037391906152ec565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906147d0565b610c81565b005b6103bf60048036038101906103ba91906148d8565b610d7c565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190614385565b6111cf565b005b3480156103f657600080fd5b50610411600480360381019061040c91906146c9565b611270565b005b34801561041f57600080fd5b5061043a6004803603810190610435919061489c565b61144c565b005b34801561044857600080fd5b50610451611534565b005b34801561045f57600080fd5b5061047a6004803603810190610475919061480c565b6115ff565b005b34801561048857600080fd5b506104a3600480360381019061049e919061489c565b6116e7565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190614758565b6117cf565b6040516104d99190614f59565b60405180910390f35b3480156104ee57600080fd5b506105096004803603810190610504919061454b565b611848565b6040516105169190614f00565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190614781565b6119f9565b005b34801561055457600080fd5b5061055d611bb7565b005b34801561056b57600080fd5b506105866004803603810190610581919061489c565b611c3f565b005b34801561059457600080fd5b506105af60048036038101906105aa9190614848565b611dfc565b005b3480156105bd57600080fd5b506105c6611ea4565b6040516105d39190614e23565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190614609565b611ece565b005b61061f600480360381019061061a91906148d8565b611f60565b005b34801561062d57600080fd5b506106486004803603810190610643919061489c565b612428565b005b34801561065657600080fd5b50610671600480360381019061066c9190614758565b612571565b60405161067e9190614f74565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a9919061489c565b61265a565b005b3480156106bc57600080fd5b506106d760048036038101906106d291906144d3565b612742565b005b3480156106e557600080fd5b5061070060048036038101906106fb9190614758565b612758565b60405161070d91906152ec565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190614385565b6127c4565b60405161074a9190614f8f565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190614758565b6127d9565b6040516107879190614f59565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190614758565b612852565b6040516107c491906152ec565b60405180910390f35b3480156107d957600080fd5b506107e26128be565b6040516107ef9190614faa565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190614349565b612950565b60405161082c9190614f59565b60405180910390f35b34801561084157600080fd5b5061085c60048036038101906108579190614758565b6129e4565b60405161086991906152ec565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190614758565b612a50565b6040516108a691906152ec565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190614444565b612abc565b6040516108e39190614f8f565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190614444565b612ad1565b005b34801561092157600080fd5b5061093c60048036038101906109379190614320565b612b72565b005b34801561094a57600080fd5b506109656004803603810190610960919061464e565b612c6a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf9061504c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610a3b82612de8565b80610a4b5750610a4a82612eca565b5b9050919050565b6060600d60008381526020019081526020016000208054610a7290615624565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90615624565b8015610aeb5780601f10610ac057610100808354040283529160200191610aeb565b820191906000526020600020905b815481529060010190602001808311610ace57829003601f168201915b50505050509050919050565b60008082118015610b095750600f5482105b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f9061524c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900460ff169050919050565b610b78612f44565b73ffffffffffffffffffffffffffffffffffffffff16610b96611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be39061520c565b60405180910390fd5b600082118015610bfd5750600f5482105b610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c339061524c565b60405180910390fd5b806006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006001600f54610c7c9190615530565b905090565b610c89612f44565b73ffffffffffffffffffffffffffffffffffffffff16610ca7611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf49061520c565b60405180910390fd5b600082118015610d0e5750600f5482105b610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d449061524c565b60405180910390fd5b80600a600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600084118015610d8d5750600f5484105b610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc39061524c565b60405180910390fd5b6007600085815260200190815260200160002060009054906101000a900460ff16610e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e239061500c565b60405180910390fd5b6006600085815260200190815260200160002060009054906101000a900460ff16610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e839061502c565b60405180910390fd5b34836005600087815260200190815260200160002054610eac91906154d6565b1115610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906150ac565b60405180910390fd5b600a600085815260200190815260200160002060009054906101000a900460ff161580610f9b5750610f9a828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600960008781526020019081526020016000205433604051602001610f7f9190614e08565b60405160208183030381529060405280519060200120612f4c565b5b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd19061518c565b60405180910390fd5b6000600b600086815260200190815260200160002054148061108957506000600b6000868152602001908152602001600020541180156110885750600b60008581526020019081526020016000205483600e600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110859190615480565b11155b5b6110c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bf906151ec565b60405180910390fd5b82600e600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111249190615480565b600e600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600c6000868152602001908152602001600020546111979190615480565b600c6000868152602001908152602001600020819055506111c933858560405180602001604052806000815250612f63565b50505050565b6111d7612f44565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061121d575061121c85611217612f44565b612950565b5b61125c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112539061512c565b60405180910390fd5b61126985858585856130f9565b5050505050565b611278612f44565b73ffffffffffffffffffffffffffffffffffffffff16611296611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e39061520c565b60405180910390fd5b6000831161132f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113269061522c565b60405180910390fd5b84600d6000600f5481526020019081526020016000209080519060200190611358929190613ee9565b508360056000600f54815260200190815260200160002081905550600160066000600f54815260200190815260200160002060006101000a81548160ff021916908315150217905550600060076000600f54815260200190815260200160002060006101000a81548160ff02191690831515021790555081600a6000600f54815260200190815260200160002060006101000a81548160ff0219169083151502179055508260086000600f5481526020019081526020016000208190555080600b6000600f548152602001908152602001600020819055506001600f5461143f9190615480565b600f819055505050505050565b611454612f44565b73ffffffffffffffffffffffffffffffffffffffff16611472611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf9061520c565b60405180910390fd5b806114d33084610967565b1015611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b906150cc565b60405180910390fd5b6115303033848460405180602001604052806000815250613459565b5050565b61153c612f44565b73ffffffffffffffffffffffffffffffffffffffff1661155a611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a79061520c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115fb573d6000803e3d6000fd5b5050565b611607612f44565b73ffffffffffffffffffffffffffffffffffffffff16611625611ea4565b73ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116729061520c565b60405180910390fd5b60008211801561168c5750600f5482105b6116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c29061524c565b60405180910390fd5b8060096000848152602001908152602001600020819055505050565b6116ef612f44565b73ffffffffffffffffffffffffffffffffffffffff1661170d611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a9061520c565b60405180910390fd5b6000821180156117745750600f5482105b6117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117aa9061524c565b60405180910390fd5b80600b6000848152602001908152602001600020819055505050565b600080821180156117e15750600f5482105b611820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118179061524c565b60405180910390fd5b600a600083815260200190815260200160002060009054906101000a900460ff169050919050565b6060815183511461188e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118859061528c565b60405180910390fd5b6000835167ffffffffffffffff8111156118d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118ff5781602001602082028036833780820191505090505b50905060005b84518110156119ee5761199885828151811061194a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061198b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610967565b8282815181106119d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806119e790615687565b9050611905565b508091505092915050565b611a01612f44565b73ffffffffffffffffffffffffffffffffffffffff16611a1f611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c9061520c565b60405180910390fd5b600083118015611a865750600f5483105b611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061524c565b60405180910390fd5b6007600084815260200190815260200160002060009054906101000a900460ff1680611b225750600860008481526020019081526020016000205481600c600086815260200190815260200160002054611b1f9190615480565b11155b611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906150cc565b60405180910390fd5b80600c600085815260200190815260200160002054611b809190615480565b600c600085815260200190815260200160002081905550611bb282848360405180602001604052806000815250612f63565b505050565b611bbf612f44565b73ffffffffffffffffffffffffffffffffffffffff16611bdd611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9061520c565b60405180910390fd5b611c3d60006136db565b565b611c47612f44565b73ffffffffffffffffffffffffffffffffffffffff16611c65611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb29061520c565b60405180910390fd5b600082118015611ccc5750600f5482105b611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061524c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900460ff1680611d685750600860008381526020019081526020016000205481600c600085815260200190815260200160002054611d659190615480565b11155b611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e906151ac565b60405180910390fd5b80600c600084815260200190815260200160002054611dc69190615480565b600c600084815260200190815260200160002081905550611df833838360405180602001604052806000815250612f63565b5050565b611e04612f44565b73ffffffffffffffffffffffffffffffffffffffff16611e22611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f9061520c565b60405180910390fd5b80600d60008481526020019081526020016000209080519060200190611e9f929190613ee9565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ed6612f44565b73ffffffffffffffffffffffffffffffffffffffff16611ef4611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f419061520c565b60405180910390fd5b818160049190611f5b929190613f6f565b505050565b600084118015611f715750600f5484105b611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa79061524c565b60405180910390fd5b6007600085815260200190815260200160002060009054906101000a900460ff1615612011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612008906150ec565b60405180910390fd5b6006600085815260200190815260200160002060009054906101000a900460ff16612071576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120689061502c565b60405180910390fd5b3483600560008781526020019081526020016000205461209191906154d6565b11156120d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c9906150ac565b60405180910390fd5b600860008581526020019081526020016000205483600c6000878152602001908152602001600020546121059190615480565b1115612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d9061514c565b60405180910390fd5b600a600085815260200190815260200160002060009054906101000a900460ff1615806121f457506121f3828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506009600087815260200190815260200160002054336040516020016121d89190614e08565b60405160208183030381529060405280519060200120612f4c565b5b612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a9061518c565b60405180910390fd5b6000600b60008681526020019081526020016000205414806122e257506000600b6000868152602001908152602001600020541180156122e15750600b60008581526020019081526020016000205483600e600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122de9190615480565b11155b5b612321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612318906151ec565b60405180910390fd5b82600c6000868152602001908152602001600020546123409190615480565b600c60008681526020019081526020016000208190555082600e600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b39190615480565b600e600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061242233858560405180602001604052806000815250612f63565b50505050565b612430612f44565b73ffffffffffffffffffffffffffffffffffffffff1661244e611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146124a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249b9061520c565b60405180910390fd5b6000821180156124b55750600f5482105b6124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb9061524c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900460ff1615612555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254c9061516c565b60405180910390fd5b8060086000848152602001908152602001600020819055505050565b600061257b612f44565b73ffffffffffffffffffffffffffffffffffffffff16612599611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e69061520c565b60405180910390fd5b6000821180156126005750600f5482105b61263f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126369061524c565b60405180910390fd5b60096000838152602001908152602001600020549050919050565b612662612f44565b73ffffffffffffffffffffffffffffffffffffffff16612680611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd9061520c565b60405180910390fd5b6000821180156126e75750600f5482105b612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d9061524c565b60405180910390fd5b8060056000848152602001908152602001600020819055505050565b61275461274d612f44565b83836137a1565b5050565b6000808211801561276a5750600f5482105b6127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a09061524c565b60405180910390fd5b60086000838152602001908152602001600020549050919050565b600063bc197c8160e01b905095945050505050565b600080821180156127eb5750600f5482105b61282a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128219061524c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900460ff169050919050565b600080821180156128645750600f5482105b6128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a9061524c565b60405180910390fd5b60056000838152602001908152602001600020549050919050565b6060600480546128cd90615624565b80601f01602080910402602001604051908101604052809291908181526020018280546128f990615624565b80156129465780601f1061291b57610100808354040283529160200191612946565b820191906000526020600020905b81548152906001019060200180831161292957829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080821180156129f65750600f5482105b612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c9061524c565b60405180910390fd5b600c6000838152602001908152602001600020549050919050565b60008082118015612a625750600f5482105b612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a989061524c565b60405180910390fd5b600b6000838152602001908152602001600020549050919050565b600063f23a6e6160e01b905095945050505050565b612ad9612f44565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612b1f5750612b1e85612b19612f44565b612950565b5b612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b559061508c565b60405180910390fd5b612b6b8585858585613459565b5050505050565b612b7a612f44565b73ffffffffffffffffffffffffffffffffffffffff16612b98611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614612bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be59061520c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c559061506c565b60405180910390fd5b612c67816136db565b50565b612c72612f44565b73ffffffffffffffffffffffffffffffffffffffff16612c90611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614612ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdd9061520c565b60405180910390fd5b83600d6000600f5481526020019081526020016000209080519060200190612d0f929190613ee9565b508260056000600f54815260200190815260200160002081905550600160066000600f54815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600f54815260200190815260200160002060006101000a81548160ff02191690831515021790555081600a6000600f54815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b6000600f548152602001908152602001600020819055506001600f54612ddc9190615480565b600f8190555050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612eb357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ec35750612ec28261390e565b5b9050919050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f3d5750612f3c82612de8565b5b9050919050565b600033905090565b600082612f598584613978565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca906152cc565b60405180910390fd5b6000612fdd612f44565b9050612ffe81600087612fef88613a13565b612ff888613a13565b87613ad9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461305d9190615480565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516130db929190615307565b60405180910390a46130f281600087878787613ae1565b5050505050565b815183511461313d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613134906152ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a49061510c565b60405180910390fd5b60006131b7612f44565b90506131c7818787878787613ad9565b60005b84518110156133c457600085828151811061320e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110613253577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132eb906151cc565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133a99190615480565b92505081905550505050806133bd90615687565b90506131ca565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161343b929190614f22565b60405180910390a4613451818787878787613cc8565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c09061510c565b60405180910390fd5b60006134d3612f44565b90506134f38187876134e488613a13565b6134ed88613a13565b87613ad9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561358a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613581906151cc565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461363f9190615480565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516136bc929190615307565b60405180910390a46136d2828888888888613ae1565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613810576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138079061526c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516139019190614f59565b60405180910390a3505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008082905060005b8451811015613a085760008582815181106139c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116139e7576139e08382613eaf565b92506139f4565b6139f18184613eaf565b92505b508080613a0090615687565b915050613981565b508091505092915050565b60606000600167ffffffffffffffff811115613a58577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613a865781602001602082028036833780820191505090505b5090508281600081518110613ac4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b613b008473ffffffffffffffffffffffffffffffffffffffff16613ec6565b15613cc0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613b46959493929190614ea6565b602060405180830381600087803b158015613b6057600080fd5b505af1925050508015613b9157506040513d601f19601f82011682018060405250810190613b8e91906145e0565b60015b613c3757613b9d615781565b806308c379a01415613bfa5750613bb2615de3565b80613bbd5750613bfc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf19190614faa565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2e90614fcc565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb590614fec565b60405180910390fd5b505b505050505050565b613ce78473ffffffffffffffffffffffffffffffffffffffff16613ec6565b15613ea7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401613d2d959493929190614e3e565b602060405180830381600087803b158015613d4757600080fd5b505af1925050508015613d7857506040513d601f19601f82011682018060405250810190613d7591906145e0565b60015b613e1e57613d84615781565b806308c379a01415613de15750613d99615de3565b80613da45750613de3565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd89190614faa565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1590614fcc565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e9c90614fec565b60405180910390fd5b505b505050505050565b600082600052816020526040600020905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613ef590615624565b90600052602060002090601f016020900481019282613f175760008555613f5e565b82601f10613f3057805160ff1916838001178555613f5e565b82800160010185558215613f5e579182015b82811115613f5d578251825591602001919060010190613f42565b5b509050613f6b9190613ff5565b5090565b828054613f7b90615624565b90600052602060002090601f016020900481019282613f9d5760008555613fe4565b82601f10613fb657803560ff1916838001178555613fe4565b82800160010185558215613fe4579182015b82811115613fe3578235825591602001919060010190613fc8565b5b509050613ff19190613ff5565b5090565b5b8082111561400e576000816000905550600101613ff6565b5090565b600061402561402084615355565b615330565b9050808382526020820190508285602086028201111561404457600080fd5b60005b85811015614074578161405a8882614166565b845260208401935060208301925050600181019050614047565b5050509392505050565b600061409161408c84615381565b615330565b905080838252602082019050828560208602820111156140b057600080fd5b60005b858110156140e057816140c6888261430b565b8452602084019350602083019250506001810190506140b3565b5050509392505050565b60006140fd6140f8846153ad565b615330565b90508281526020810184848401111561411557600080fd5b6141208482856155e2565b509392505050565b600061413b614136846153de565b615330565b90508281526020810184848401111561415357600080fd5b61415e8482856155e2565b509392505050565b60008135905061417581615e79565b92915050565b600082601f83011261418c57600080fd5b813561419c848260208601614012565b91505092915050565b60008083601f8401126141b757600080fd5b8235905067ffffffffffffffff8111156141d057600080fd5b6020830191508360208202830111156141e857600080fd5b9250929050565b600082601f83011261420057600080fd5b813561421084826020860161407e565b91505092915050565b60008135905061422881615e90565b92915050565b60008135905061423d81615ea7565b92915050565b60008135905061425281615ebe565b92915050565b60008151905061426781615ebe565b92915050565b600082601f83011261427e57600080fd5b813561428e8482602086016140ea565b91505092915050565b60008083601f8401126142a957600080fd5b8235905067ffffffffffffffff8111156142c257600080fd5b6020830191508360018202830111156142da57600080fd5b9250929050565b600082601f8301126142f257600080fd5b8135614302848260208601614128565b91505092915050565b60008135905061431a81615ed5565b92915050565b60006020828403121561433257600080fd5b600061434084828501614166565b91505092915050565b6000806040838503121561435c57600080fd5b600061436a85828601614166565b925050602061437b85828601614166565b9150509250929050565b600080600080600060a0868803121561439d57600080fd5b60006143ab88828901614166565b95505060206143bc88828901614166565b945050604086013567ffffffffffffffff8111156143d957600080fd5b6143e5888289016141ef565b935050606086013567ffffffffffffffff81111561440257600080fd5b61440e888289016141ef565b925050608086013567ffffffffffffffff81111561442b57600080fd5b6144378882890161426d565b9150509295509295909350565b600080600080600060a0868803121561445c57600080fd5b600061446a88828901614166565b955050602061447b88828901614166565b945050604061448c8882890161430b565b935050606061449d8882890161430b565b925050608086013567ffffffffffffffff8111156144ba57600080fd5b6144c68882890161426d565b9150509295509295909350565b600080604083850312156144e657600080fd5b60006144f485828601614166565b925050602061450585828601614219565b9150509250929050565b6000806040838503121561452257600080fd5b600061453085828601614166565b92505060206145418582860161430b565b9150509250929050565b6000806040838503121561455e57600080fd5b600083013567ffffffffffffffff81111561457857600080fd5b6145848582860161417b565b925050602083013567ffffffffffffffff8111156145a157600080fd5b6145ad858286016141ef565b9150509250929050565b6000602082840312156145c957600080fd5b60006145d784828501614243565b91505092915050565b6000602082840312156145f257600080fd5b600061460084828501614258565b91505092915050565b6000806020838503121561461c57600080fd5b600083013567ffffffffffffffff81111561463657600080fd5b61464285828601614297565b92509250509250929050565b6000806000806080858703121561466457600080fd5b600085013567ffffffffffffffff81111561467e57600080fd5b61468a878288016142e1565b945050602061469b8782880161430b565b93505060406146ac87828801614219565b92505060606146bd8782880161430b565b91505092959194509250565b600080600080600060a086880312156146e157600080fd5b600086013567ffffffffffffffff8111156146fb57600080fd5b614707888289016142e1565b95505060206147188882890161430b565b94505060406147298882890161430b565b935050606061473a88828901614219565b925050608061474b8882890161430b565b9150509295509295909350565b60006020828403121561476a57600080fd5b60006147788482850161430b565b91505092915050565b60008060006060848603121561479657600080fd5b60006147a48682870161430b565b93505060206147b586828701614166565b92505060406147c68682870161430b565b9150509250925092565b600080604083850312156147e357600080fd5b60006147f18582860161430b565b925050602061480285828601614219565b9150509250929050565b6000806040838503121561481f57600080fd5b600061482d8582860161430b565b925050602061483e8582860161422e565b9150509250929050565b6000806040838503121561485b57600080fd5b60006148698582860161430b565b925050602083013567ffffffffffffffff81111561488657600080fd5b614892858286016142e1565b9150509250929050565b600080604083850312156148af57600080fd5b60006148bd8582860161430b565b92505060206148ce8582860161430b565b9150509250929050565b600080600080606085870312156148ee57600080fd5b60006148fc8782880161430b565b945050602061490d8782880161430b565b935050604085013567ffffffffffffffff81111561492a57600080fd5b614936878288016141a5565b925092505092959194509250565b60006149508383614dea565b60208301905092915050565b61496581615564565b82525050565b61497c61497782615564565b6156d0565b82525050565b600061498d8261541f565b614997818561544d565b93506149a28361540f565b8060005b838110156149d35781516149ba8882614944565b97506149c583615440565b9250506001810190506149a6565b5085935050505092915050565b6149e981615576565b82525050565b6149f881615582565b82525050565b614a078161558c565b82525050565b6000614a188261542a565b614a22818561545e565b9350614a328185602086016155f1565b614a3b816157a3565b840191505092915050565b6000614a5182615435565b614a5b818561546f565b9350614a6b8185602086016155f1565b614a74816157a3565b840191505092915050565b6000614a8c60348361546f565b9150614a97826157ce565b604082019050919050565b6000614aaf60288361546f565b9150614aba8261581d565b604082019050919050565b6000614ad260158361546f565b9150614add8261586c565b602082019050919050565b6000614af5601a8361546f565b9150614b0082615895565b602082019050919050565b6000614b18602b8361546f565b9150614b23826158be565b604082019050919050565b6000614b3b60268361546f565b9150614b468261590d565b604082019050919050565b6000614b5e60298361546f565b9150614b698261595c565b604082019050919050565b6000614b81601c8361546f565b9150614b8c826159ab565b602082019050919050565b6000614ba460338361546f565b9150614baf826159d4565b604082019050919050565b6000614bc760178361546f565b9150614bd282615a23565b602082019050919050565b6000614bea60258361546f565b9150614bf582615a4c565b604082019050919050565b6000614c0d60328361546f565b9150614c1882615a9b565b604082019050919050565b6000614c3060268361546f565b9150614c3b82615aea565b604082019050919050565b6000614c5360198361546f565b9150614c5e82615b39565b602082019050919050565b6000614c7660198361546f565b9150614c8182615b62565b602082019050919050565b6000614c99601f8361546f565b9150614ca482615b8b565b602082019050919050565b6000614cbc602a8361546f565b9150614cc782615bb4565b604082019050919050565b6000614cdf60128361546f565b9150614cea82615c03565b602082019050919050565b6000614d0260208361546f565b9150614d0d82615c2c565b602082019050919050565b6000614d25601e8361546f565b9150614d3082615c55565b602082019050919050565b6000614d4860128361546f565b9150614d5382615c7e565b602082019050919050565b6000614d6b60298361546f565b9150614d7682615ca7565b604082019050919050565b6000614d8e60298361546f565b9150614d9982615cf6565b604082019050919050565b6000614db160288361546f565b9150614dbc82615d45565b604082019050919050565b6000614dd460218361546f565b9150614ddf82615d94565b604082019050919050565b614df3816155d8565b82525050565b614e02816155d8565b82525050565b6000614e14828461496b565b60148201915081905092915050565b6000602082019050614e38600083018461495c565b92915050565b600060a082019050614e53600083018861495c565b614e60602083018761495c565b8181036040830152614e728186614982565b90508181036060830152614e868185614982565b90508181036080830152614e9a8184614a0d565b90509695505050505050565b600060a082019050614ebb600083018861495c565b614ec8602083018761495c565b614ed56040830186614df9565b614ee26060830185614df9565b8181036080830152614ef48184614a0d565b90509695505050505050565b60006020820190508181036000830152614f1a8184614982565b905092915050565b60006040820190508181036000830152614f3c8185614982565b90508181036020830152614f508184614982565b90509392505050565b6000602082019050614f6e60008301846149e0565b92915050565b6000602082019050614f8960008301846149ef565b92915050565b6000602082019050614fa460008301846149fe565b92915050565b60006020820190508181036000830152614fc48184614a46565b905092915050565b60006020820190508181036000830152614fe581614a7f565b9050919050565b6000602082019050818103600083015261500581614aa2565b9050919050565b6000602082019050818103600083015261502581614ac5565b9050919050565b6000602082019050818103600083015261504581614ae8565b9050919050565b6000602082019050818103600083015261506581614b0b565b9050919050565b6000602082019050818103600083015261508581614b2e565b9050919050565b600060208201905081810360008301526150a581614b51565b9050919050565b600060208201905081810360008301526150c581614b74565b9050919050565b600060208201905081810360008301526150e581614b97565b9050919050565b6000602082019050818103600083015261510581614bba565b9050919050565b6000602082019050818103600083015261512581614bdd565b9050919050565b6000602082019050818103600083015261514581614c00565b9050919050565b6000602082019050818103600083015261516581614c23565b9050919050565b6000602082019050818103600083015261518581614c46565b9050919050565b600060208201905081810360008301526151a581614c69565b9050919050565b600060208201905081810360008301526151c581614c8c565b9050919050565b600060208201905081810360008301526151e581614caf565b9050919050565b6000602082019050818103600083015261520581614cd2565b9050919050565b6000602082019050818103600083015261522581614cf5565b9050919050565b6000602082019050818103600083015261524581614d18565b9050919050565b6000602082019050818103600083015261526581614d3b565b9050919050565b6000602082019050818103600083015261528581614d5e565b9050919050565b600060208201905081810360008301526152a581614d81565b9050919050565b600060208201905081810360008301526152c581614da4565b9050919050565b600060208201905081810360008301526152e581614dc7565b9050919050565b60006020820190506153016000830184614df9565b92915050565b600060408201905061531c6000830185614df9565b6153296020830184614df9565b9392505050565b600061533a61534b565b90506153468282615656565b919050565b6000604051905090565b600067ffffffffffffffff8211156153705761536f615752565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561539c5761539b615752565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153c8576153c7615752565b5b6153d1826157a3565b9050602081019050919050565b600067ffffffffffffffff8211156153f9576153f8615752565b5b615402826157a3565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061548b826155d8565b9150615496836155d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154cb576154ca6156f4565b5b828201905092915050565b60006154e1826155d8565b91506154ec836155d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615525576155246156f4565b5b828202905092915050565b600061553b826155d8565b9150615546836155d8565b925082821015615559576155586156f4565b5b828203905092915050565b600061556f826155b8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561560f5780820151818401526020810190506155f4565b8381111561561e576000848401525b50505050565b6000600282049050600182168061563c57607f821691505b602082108114156156505761564f615723565b5b50919050565b61565f826157a3565b810181811067ffffffffffffffff8211171561567e5761567d615752565b5b80604052505050565b6000615692826155d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156c5576156c46156f4565b5b600182019050919050565b60006156db826156e2565b9050919050565b60006156ed826157b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156157a05760046000803e61579d6000516157c1565b90505b90565b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f45646974696f6e206d757374206265206f70656e2e0000000000000000000000600082015250565b7f45646974696f6e206d75737420626520617661696c61626c652e000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f45544820616d6f756e74206973206e6f742073756666696369656e7400000000600082015250565b7f4e6f207375636820616d6f756e74206f662065646974696f6e20617661696c6160008201527f626c6520666f72207769746864726177616c2e00000000000000000000000000602082015250565b7f45646974696f6e206d75737420626520636c6f7365642e000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f20737570706c7920617661696c61626c6520746f206d656574207468652060008201527f6f726465722e0000000000000000000000000000000000000000000000000000602082015250565b7f45646974696f6e206d757374206e6f74206265206f70656e2e00000000000000600082015250565b7f5468652047617465206861732073746f7070656420796f752e00000000000000600082015250565b7f4d696e7420776f756c642065786365656420617661696c6162696c6974792e00600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f41736b656420666f7220746f6f206d616e790000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45646974696f6e2073697a65206d757374206265206e6f6e2d7a65726f2e0000600082015250565b7f45646974696f6e206d7573742065786973740000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015615df357615e76565b615dfb61534b565b60043d036004823e80513d602482011167ffffffffffffffff82111715615e23575050615e76565b808201805167ffffffffffffffff811115615e415750505050615e76565b80602083010160043d038501811115615e5e575050505050615e76565b615e6d82602001850186615656565b82955050505050505b90565b615e8281615564565b8114615e8d57600080fd5b50565b615e9981615576565b8114615ea457600080fd5b50565b615eb081615582565b8114615ebb57600080fd5b50565b615ec78161558c565b8114615ed257600080fd5b50565b615ede816155d8565b8114615ee957600080fd5b5056fea26469706673582212209f7dc7427f6e06783cf1e232959eb4c5fc249007672c22d4152ca78d52938c6b64736f6c634300080100330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f6d6174697269612e636f6d2f7b69647d0000000000000000

Deployed Bytecode

0x60806040526004361061022f5760003560e01c8063862440e21161012e578063c84bda94116100ab578063f05c1db41161006f578063f05c1db414610872578063f23a6e61146108af578063f242432a146108ec578063f2fde38b14610915578063fd4c1eb81461093e5761022f565b8063c84bda9414610753578063c88355b414610790578063e8a3d485146107cd578063e985e9c5146107f8578063ed26e34e146108355761022f565b80639b24b3b0116100f25780639b24b3b01461064a5780639e0fd99814610687578063a22cb465146106b0578063abf1df6b146106d9578063bc197c81146107165761022f565b8063862440e2146105885780638da5cb5b146105b1578063938e3d7b146105dc578063972fc25e1461060557806398092661146106215761022f565b80633466dcfc116101bc5780634af53db0116101805780634af53db0146104a55780634e1273f4146104e257806350d0c8201461051f578063715018a6146105485780637c2f39f71461055f5761022f565b80633466dcfc146103ea5780633b5e5e81146104135780633ccfd60b1461043c57806347069b8c1461045357806347eeb2401461047c5761022f565b806316fe7bed1161020357806316fe7bed146103285780632450f18514610351578063257eb6451461037c5780632cd71f35146103a55780632eb2c2d6146103c15761022f565b8062fdd58e1461023457806301ffc9a7146102715780630e89341c146102ae57806313adccda146102eb575b600080fd5b34801561024057600080fd5b5061025b6004803603810190610256919061450f565b610967565b60405161026891906152ec565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906145b7565b610a30565b6040516102a59190614f59565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190614758565b610a52565b6040516102e29190614faa565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190614758565b610af7565b60405161031f9190614f59565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a91906147d0565b610b70565b005b34801561035d57600080fd5b50610366610c6b565b60405161037391906152ec565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906147d0565b610c81565b005b6103bf60048036038101906103ba91906148d8565b610d7c565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190614385565b6111cf565b005b3480156103f657600080fd5b50610411600480360381019061040c91906146c9565b611270565b005b34801561041f57600080fd5b5061043a6004803603810190610435919061489c565b61144c565b005b34801561044857600080fd5b50610451611534565b005b34801561045f57600080fd5b5061047a6004803603810190610475919061480c565b6115ff565b005b34801561048857600080fd5b506104a3600480360381019061049e919061489c565b6116e7565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190614758565b6117cf565b6040516104d99190614f59565b60405180910390f35b3480156104ee57600080fd5b506105096004803603810190610504919061454b565b611848565b6040516105169190614f00565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190614781565b6119f9565b005b34801561055457600080fd5b5061055d611bb7565b005b34801561056b57600080fd5b506105866004803603810190610581919061489c565b611c3f565b005b34801561059457600080fd5b506105af60048036038101906105aa9190614848565b611dfc565b005b3480156105bd57600080fd5b506105c6611ea4565b6040516105d39190614e23565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190614609565b611ece565b005b61061f600480360381019061061a91906148d8565b611f60565b005b34801561062d57600080fd5b506106486004803603810190610643919061489c565b612428565b005b34801561065657600080fd5b50610671600480360381019061066c9190614758565b612571565b60405161067e9190614f74565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a9919061489c565b61265a565b005b3480156106bc57600080fd5b506106d760048036038101906106d291906144d3565b612742565b005b3480156106e557600080fd5b5061070060048036038101906106fb9190614758565b612758565b60405161070d91906152ec565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190614385565b6127c4565b60405161074a9190614f8f565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190614758565b6127d9565b6040516107879190614f59565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190614758565b612852565b6040516107c491906152ec565b60405180910390f35b3480156107d957600080fd5b506107e26128be565b6040516107ef9190614faa565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190614349565b612950565b60405161082c9190614f59565b60405180910390f35b34801561084157600080fd5b5061085c60048036038101906108579190614758565b6129e4565b60405161086991906152ec565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190614758565b612a50565b6040516108a691906152ec565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190614444565b612abc565b6040516108e39190614f8f565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190614444565b612ad1565b005b34801561092157600080fd5b5061093c60048036038101906109379190614320565b612b72565b005b34801561094a57600080fd5b506109656004803603810190610960919061464e565b612c6a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf9061504c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610a3b82612de8565b80610a4b5750610a4a82612eca565b5b9050919050565b6060600d60008381526020019081526020016000208054610a7290615624565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90615624565b8015610aeb5780601f10610ac057610100808354040283529160200191610aeb565b820191906000526020600020905b815481529060010190602001808311610ace57829003601f168201915b50505050509050919050565b60008082118015610b095750600f5482105b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f9061524c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900460ff169050919050565b610b78612f44565b73ffffffffffffffffffffffffffffffffffffffff16610b96611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be39061520c565b60405180910390fd5b600082118015610bfd5750600f5482105b610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c339061524c565b60405180910390fd5b806006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006001600f54610c7c9190615530565b905090565b610c89612f44565b73ffffffffffffffffffffffffffffffffffffffff16610ca7611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf49061520c565b60405180910390fd5b600082118015610d0e5750600f5482105b610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d449061524c565b60405180910390fd5b80600a600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600084118015610d8d5750600f5484105b610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc39061524c565b60405180910390fd5b6007600085815260200190815260200160002060009054906101000a900460ff16610e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e239061500c565b60405180910390fd5b6006600085815260200190815260200160002060009054906101000a900460ff16610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e839061502c565b60405180910390fd5b34836005600087815260200190815260200160002054610eac91906154d6565b1115610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906150ac565b60405180910390fd5b600a600085815260200190815260200160002060009054906101000a900460ff161580610f9b5750610f9a828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600960008781526020019081526020016000205433604051602001610f7f9190614e08565b60405160208183030381529060405280519060200120612f4c565b5b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd19061518c565b60405180910390fd5b6000600b600086815260200190815260200160002054148061108957506000600b6000868152602001908152602001600020541180156110885750600b60008581526020019081526020016000205483600e600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110859190615480565b11155b5b6110c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bf906151ec565b60405180910390fd5b82600e600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111249190615480565b600e600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600c6000868152602001908152602001600020546111979190615480565b600c6000868152602001908152602001600020819055506111c933858560405180602001604052806000815250612f63565b50505050565b6111d7612f44565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061121d575061121c85611217612f44565b612950565b5b61125c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112539061512c565b60405180910390fd5b61126985858585856130f9565b5050505050565b611278612f44565b73ffffffffffffffffffffffffffffffffffffffff16611296611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e39061520c565b60405180910390fd5b6000831161132f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113269061522c565b60405180910390fd5b84600d6000600f5481526020019081526020016000209080519060200190611358929190613ee9565b508360056000600f54815260200190815260200160002081905550600160066000600f54815260200190815260200160002060006101000a81548160ff021916908315150217905550600060076000600f54815260200190815260200160002060006101000a81548160ff02191690831515021790555081600a6000600f54815260200190815260200160002060006101000a81548160ff0219169083151502179055508260086000600f5481526020019081526020016000208190555080600b6000600f548152602001908152602001600020819055506001600f5461143f9190615480565b600f819055505050505050565b611454612f44565b73ffffffffffffffffffffffffffffffffffffffff16611472611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf9061520c565b60405180910390fd5b806114d33084610967565b1015611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b906150cc565b60405180910390fd5b6115303033848460405180602001604052806000815250613459565b5050565b61153c612f44565b73ffffffffffffffffffffffffffffffffffffffff1661155a611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a79061520c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115fb573d6000803e3d6000fd5b5050565b611607612f44565b73ffffffffffffffffffffffffffffffffffffffff16611625611ea4565b73ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116729061520c565b60405180910390fd5b60008211801561168c5750600f5482105b6116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c29061524c565b60405180910390fd5b8060096000848152602001908152602001600020819055505050565b6116ef612f44565b73ffffffffffffffffffffffffffffffffffffffff1661170d611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a9061520c565b60405180910390fd5b6000821180156117745750600f5482105b6117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117aa9061524c565b60405180910390fd5b80600b6000848152602001908152602001600020819055505050565b600080821180156117e15750600f5482105b611820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118179061524c565b60405180910390fd5b600a600083815260200190815260200160002060009054906101000a900460ff169050919050565b6060815183511461188e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118859061528c565b60405180910390fd5b6000835167ffffffffffffffff8111156118d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118ff5781602001602082028036833780820191505090505b50905060005b84518110156119ee5761199885828151811061194a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061198b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610967565b8282815181106119d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806119e790615687565b9050611905565b508091505092915050565b611a01612f44565b73ffffffffffffffffffffffffffffffffffffffff16611a1f611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c9061520c565b60405180910390fd5b600083118015611a865750600f5483105b611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061524c565b60405180910390fd5b6007600084815260200190815260200160002060009054906101000a900460ff1680611b225750600860008481526020019081526020016000205481600c600086815260200190815260200160002054611b1f9190615480565b11155b611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906150cc565b60405180910390fd5b80600c600085815260200190815260200160002054611b809190615480565b600c600085815260200190815260200160002081905550611bb282848360405180602001604052806000815250612f63565b505050565b611bbf612f44565b73ffffffffffffffffffffffffffffffffffffffff16611bdd611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9061520c565b60405180910390fd5b611c3d60006136db565b565b611c47612f44565b73ffffffffffffffffffffffffffffffffffffffff16611c65611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb29061520c565b60405180910390fd5b600082118015611ccc5750600f5482105b611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061524c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900460ff1680611d685750600860008381526020019081526020016000205481600c600085815260200190815260200160002054611d659190615480565b11155b611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e906151ac565b60405180910390fd5b80600c600084815260200190815260200160002054611dc69190615480565b600c600084815260200190815260200160002081905550611df833838360405180602001604052806000815250612f63565b5050565b611e04612f44565b73ffffffffffffffffffffffffffffffffffffffff16611e22611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f9061520c565b60405180910390fd5b80600d60008481526020019081526020016000209080519060200190611e9f929190613ee9565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ed6612f44565b73ffffffffffffffffffffffffffffffffffffffff16611ef4611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f419061520c565b60405180910390fd5b818160049190611f5b929190613f6f565b505050565b600084118015611f715750600f5484105b611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa79061524c565b60405180910390fd5b6007600085815260200190815260200160002060009054906101000a900460ff1615612011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612008906150ec565b60405180910390fd5b6006600085815260200190815260200160002060009054906101000a900460ff16612071576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120689061502c565b60405180910390fd5b3483600560008781526020019081526020016000205461209191906154d6565b11156120d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c9906150ac565b60405180910390fd5b600860008581526020019081526020016000205483600c6000878152602001908152602001600020546121059190615480565b1115612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d9061514c565b60405180910390fd5b600a600085815260200190815260200160002060009054906101000a900460ff1615806121f457506121f3828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506009600087815260200190815260200160002054336040516020016121d89190614e08565b60405160208183030381529060405280519060200120612f4c565b5b612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a9061518c565b60405180910390fd5b6000600b60008681526020019081526020016000205414806122e257506000600b6000868152602001908152602001600020541180156122e15750600b60008581526020019081526020016000205483600e600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122de9190615480565b11155b5b612321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612318906151ec565b60405180910390fd5b82600c6000868152602001908152602001600020546123409190615480565b600c60008681526020019081526020016000208190555082600e600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b39190615480565b600e600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061242233858560405180602001604052806000815250612f63565b50505050565b612430612f44565b73ffffffffffffffffffffffffffffffffffffffff1661244e611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146124a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249b9061520c565b60405180910390fd5b6000821180156124b55750600f5482105b6124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb9061524c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900460ff1615612555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254c9061516c565b60405180910390fd5b8060086000848152602001908152602001600020819055505050565b600061257b612f44565b73ffffffffffffffffffffffffffffffffffffffff16612599611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e69061520c565b60405180910390fd5b6000821180156126005750600f5482105b61263f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126369061524c565b60405180910390fd5b60096000838152602001908152602001600020549050919050565b612662612f44565b73ffffffffffffffffffffffffffffffffffffffff16612680611ea4565b73ffffffffffffffffffffffffffffffffffffffff16146126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd9061520c565b60405180910390fd5b6000821180156126e75750600f5482105b612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d9061524c565b60405180910390fd5b8060056000848152602001908152602001600020819055505050565b61275461274d612f44565b83836137a1565b5050565b6000808211801561276a5750600f5482105b6127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a09061524c565b60405180910390fd5b60086000838152602001908152602001600020549050919050565b600063bc197c8160e01b905095945050505050565b600080821180156127eb5750600f5482105b61282a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128219061524c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900460ff169050919050565b600080821180156128645750600f5482105b6128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a9061524c565b60405180910390fd5b60056000838152602001908152602001600020549050919050565b6060600480546128cd90615624565b80601f01602080910402602001604051908101604052809291908181526020018280546128f990615624565b80156129465780601f1061291b57610100808354040283529160200191612946565b820191906000526020600020905b81548152906001019060200180831161292957829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080821180156129f65750600f5482105b612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c9061524c565b60405180910390fd5b600c6000838152602001908152602001600020549050919050565b60008082118015612a625750600f5482105b612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a989061524c565b60405180910390fd5b600b6000838152602001908152602001600020549050919050565b600063f23a6e6160e01b905095945050505050565b612ad9612f44565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612b1f5750612b1e85612b19612f44565b612950565b5b612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b559061508c565b60405180910390fd5b612b6b8585858585613459565b5050505050565b612b7a612f44565b73ffffffffffffffffffffffffffffffffffffffff16612b98611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614612bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be59061520c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c559061506c565b60405180910390fd5b612c67816136db565b50565b612c72612f44565b73ffffffffffffffffffffffffffffffffffffffff16612c90611ea4565b73ffffffffffffffffffffffffffffffffffffffff1614612ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdd9061520c565b60405180910390fd5b83600d6000600f5481526020019081526020016000209080519060200190612d0f929190613ee9565b508260056000600f54815260200190815260200160002081905550600160066000600f54815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600f54815260200190815260200160002060006101000a81548160ff02191690831515021790555081600a6000600f54815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b6000600f548152602001908152602001600020819055506001600f54612ddc9190615480565b600f8190555050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612eb357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ec35750612ec28261390e565b5b9050919050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f3d5750612f3c82612de8565b5b9050919050565b600033905090565b600082612f598584613978565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca906152cc565b60405180910390fd5b6000612fdd612f44565b9050612ffe81600087612fef88613a13565b612ff888613a13565b87613ad9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461305d9190615480565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516130db929190615307565b60405180910390a46130f281600087878787613ae1565b5050505050565b815183511461313d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613134906152ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a49061510c565b60405180910390fd5b60006131b7612f44565b90506131c7818787878787613ad9565b60005b84518110156133c457600085828151811061320e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110613253577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132eb906151cc565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133a99190615480565b92505081905550505050806133bd90615687565b90506131ca565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161343b929190614f22565b60405180910390a4613451818787878787613cc8565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c09061510c565b60405180910390fd5b60006134d3612f44565b90506134f38187876134e488613a13565b6134ed88613a13565b87613ad9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561358a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613581906151cc565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461363f9190615480565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516136bc929190615307565b60405180910390a46136d2828888888888613ae1565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613810576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138079061526c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516139019190614f59565b60405180910390a3505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008082905060005b8451811015613a085760008582815181106139c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116139e7576139e08382613eaf565b92506139f4565b6139f18184613eaf565b92505b508080613a0090615687565b915050613981565b508091505092915050565b60606000600167ffffffffffffffff811115613a58577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613a865781602001602082028036833780820191505090505b5090508281600081518110613ac4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b613b008473ffffffffffffffffffffffffffffffffffffffff16613ec6565b15613cc0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613b46959493929190614ea6565b602060405180830381600087803b158015613b6057600080fd5b505af1925050508015613b9157506040513d601f19601f82011682018060405250810190613b8e91906145e0565b60015b613c3757613b9d615781565b806308c379a01415613bfa5750613bb2615de3565b80613bbd5750613bfc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf19190614faa565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2e90614fcc565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb590614fec565b60405180910390fd5b505b505050505050565b613ce78473ffffffffffffffffffffffffffffffffffffffff16613ec6565b15613ea7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401613d2d959493929190614e3e565b602060405180830381600087803b158015613d4757600080fd5b505af1925050508015613d7857506040513d601f19601f82011682018060405250810190613d7591906145e0565b60015b613e1e57613d84615781565b806308c379a01415613de15750613d99615de3565b80613da45750613de3565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd89190614faa565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1590614fcc565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e9c90614fec565b60405180910390fd5b505b505050505050565b600082600052816020526040600020905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613ef590615624565b90600052602060002090601f016020900481019282613f175760008555613f5e565b82601f10613f3057805160ff1916838001178555613f5e565b82800160010185558215613f5e579182015b82811115613f5d578251825591602001919060010190613f42565b5b509050613f6b9190613ff5565b5090565b828054613f7b90615624565b90600052602060002090601f016020900481019282613f9d5760008555613fe4565b82601f10613fb657803560ff1916838001178555613fe4565b82800160010185558215613fe4579182015b82811115613fe3578235825591602001919060010190613fc8565b5b509050613ff19190613ff5565b5090565b5b8082111561400e576000816000905550600101613ff6565b5090565b600061402561402084615355565b615330565b9050808382526020820190508285602086028201111561404457600080fd5b60005b85811015614074578161405a8882614166565b845260208401935060208301925050600181019050614047565b5050509392505050565b600061409161408c84615381565b615330565b905080838252602082019050828560208602820111156140b057600080fd5b60005b858110156140e057816140c6888261430b565b8452602084019350602083019250506001810190506140b3565b5050509392505050565b60006140fd6140f8846153ad565b615330565b90508281526020810184848401111561411557600080fd5b6141208482856155e2565b509392505050565b600061413b614136846153de565b615330565b90508281526020810184848401111561415357600080fd5b61415e8482856155e2565b509392505050565b60008135905061417581615e79565b92915050565b600082601f83011261418c57600080fd5b813561419c848260208601614012565b91505092915050565b60008083601f8401126141b757600080fd5b8235905067ffffffffffffffff8111156141d057600080fd5b6020830191508360208202830111156141e857600080fd5b9250929050565b600082601f83011261420057600080fd5b813561421084826020860161407e565b91505092915050565b60008135905061422881615e90565b92915050565b60008135905061423d81615ea7565b92915050565b60008135905061425281615ebe565b92915050565b60008151905061426781615ebe565b92915050565b600082601f83011261427e57600080fd5b813561428e8482602086016140ea565b91505092915050565b60008083601f8401126142a957600080fd5b8235905067ffffffffffffffff8111156142c257600080fd5b6020830191508360018202830111156142da57600080fd5b9250929050565b600082601f8301126142f257600080fd5b8135614302848260208601614128565b91505092915050565b60008135905061431a81615ed5565b92915050565b60006020828403121561433257600080fd5b600061434084828501614166565b91505092915050565b6000806040838503121561435c57600080fd5b600061436a85828601614166565b925050602061437b85828601614166565b9150509250929050565b600080600080600060a0868803121561439d57600080fd5b60006143ab88828901614166565b95505060206143bc88828901614166565b945050604086013567ffffffffffffffff8111156143d957600080fd5b6143e5888289016141ef565b935050606086013567ffffffffffffffff81111561440257600080fd5b61440e888289016141ef565b925050608086013567ffffffffffffffff81111561442b57600080fd5b6144378882890161426d565b9150509295509295909350565b600080600080600060a0868803121561445c57600080fd5b600061446a88828901614166565b955050602061447b88828901614166565b945050604061448c8882890161430b565b935050606061449d8882890161430b565b925050608086013567ffffffffffffffff8111156144ba57600080fd5b6144c68882890161426d565b9150509295509295909350565b600080604083850312156144e657600080fd5b60006144f485828601614166565b925050602061450585828601614219565b9150509250929050565b6000806040838503121561452257600080fd5b600061453085828601614166565b92505060206145418582860161430b565b9150509250929050565b6000806040838503121561455e57600080fd5b600083013567ffffffffffffffff81111561457857600080fd5b6145848582860161417b565b925050602083013567ffffffffffffffff8111156145a157600080fd5b6145ad858286016141ef565b9150509250929050565b6000602082840312156145c957600080fd5b60006145d784828501614243565b91505092915050565b6000602082840312156145f257600080fd5b600061460084828501614258565b91505092915050565b6000806020838503121561461c57600080fd5b600083013567ffffffffffffffff81111561463657600080fd5b61464285828601614297565b92509250509250929050565b6000806000806080858703121561466457600080fd5b600085013567ffffffffffffffff81111561467e57600080fd5b61468a878288016142e1565b945050602061469b8782880161430b565b93505060406146ac87828801614219565b92505060606146bd8782880161430b565b91505092959194509250565b600080600080600060a086880312156146e157600080fd5b600086013567ffffffffffffffff8111156146fb57600080fd5b614707888289016142e1565b95505060206147188882890161430b565b94505060406147298882890161430b565b935050606061473a88828901614219565b925050608061474b8882890161430b565b9150509295509295909350565b60006020828403121561476a57600080fd5b60006147788482850161430b565b91505092915050565b60008060006060848603121561479657600080fd5b60006147a48682870161430b565b93505060206147b586828701614166565b92505060406147c68682870161430b565b9150509250925092565b600080604083850312156147e357600080fd5b60006147f18582860161430b565b925050602061480285828601614219565b9150509250929050565b6000806040838503121561481f57600080fd5b600061482d8582860161430b565b925050602061483e8582860161422e565b9150509250929050565b6000806040838503121561485b57600080fd5b60006148698582860161430b565b925050602083013567ffffffffffffffff81111561488657600080fd5b614892858286016142e1565b9150509250929050565b600080604083850312156148af57600080fd5b60006148bd8582860161430b565b92505060206148ce8582860161430b565b9150509250929050565b600080600080606085870312156148ee57600080fd5b60006148fc8782880161430b565b945050602061490d8782880161430b565b935050604085013567ffffffffffffffff81111561492a57600080fd5b614936878288016141a5565b925092505092959194509250565b60006149508383614dea565b60208301905092915050565b61496581615564565b82525050565b61497c61497782615564565b6156d0565b82525050565b600061498d8261541f565b614997818561544d565b93506149a28361540f565b8060005b838110156149d35781516149ba8882614944565b97506149c583615440565b9250506001810190506149a6565b5085935050505092915050565b6149e981615576565b82525050565b6149f881615582565b82525050565b614a078161558c565b82525050565b6000614a188261542a565b614a22818561545e565b9350614a328185602086016155f1565b614a3b816157a3565b840191505092915050565b6000614a5182615435565b614a5b818561546f565b9350614a6b8185602086016155f1565b614a74816157a3565b840191505092915050565b6000614a8c60348361546f565b9150614a97826157ce565b604082019050919050565b6000614aaf60288361546f565b9150614aba8261581d565b604082019050919050565b6000614ad260158361546f565b9150614add8261586c565b602082019050919050565b6000614af5601a8361546f565b9150614b0082615895565b602082019050919050565b6000614b18602b8361546f565b9150614b23826158be565b604082019050919050565b6000614b3b60268361546f565b9150614b468261590d565b604082019050919050565b6000614b5e60298361546f565b9150614b698261595c565b604082019050919050565b6000614b81601c8361546f565b9150614b8c826159ab565b602082019050919050565b6000614ba460338361546f565b9150614baf826159d4565b604082019050919050565b6000614bc760178361546f565b9150614bd282615a23565b602082019050919050565b6000614bea60258361546f565b9150614bf582615a4c565b604082019050919050565b6000614c0d60328361546f565b9150614c1882615a9b565b604082019050919050565b6000614c3060268361546f565b9150614c3b82615aea565b604082019050919050565b6000614c5360198361546f565b9150614c5e82615b39565b602082019050919050565b6000614c7660198361546f565b9150614c8182615b62565b602082019050919050565b6000614c99601f8361546f565b9150614ca482615b8b565b602082019050919050565b6000614cbc602a8361546f565b9150614cc782615bb4565b604082019050919050565b6000614cdf60128361546f565b9150614cea82615c03565b602082019050919050565b6000614d0260208361546f565b9150614d0d82615c2c565b602082019050919050565b6000614d25601e8361546f565b9150614d3082615c55565b602082019050919050565b6000614d4860128361546f565b9150614d5382615c7e565b602082019050919050565b6000614d6b60298361546f565b9150614d7682615ca7565b604082019050919050565b6000614d8e60298361546f565b9150614d9982615cf6565b604082019050919050565b6000614db160288361546f565b9150614dbc82615d45565b604082019050919050565b6000614dd460218361546f565b9150614ddf82615d94565b604082019050919050565b614df3816155d8565b82525050565b614e02816155d8565b82525050565b6000614e14828461496b565b60148201915081905092915050565b6000602082019050614e38600083018461495c565b92915050565b600060a082019050614e53600083018861495c565b614e60602083018761495c565b8181036040830152614e728186614982565b90508181036060830152614e868185614982565b90508181036080830152614e9a8184614a0d565b90509695505050505050565b600060a082019050614ebb600083018861495c565b614ec8602083018761495c565b614ed56040830186614df9565b614ee26060830185614df9565b8181036080830152614ef48184614a0d565b90509695505050505050565b60006020820190508181036000830152614f1a8184614982565b905092915050565b60006040820190508181036000830152614f3c8185614982565b90508181036020830152614f508184614982565b90509392505050565b6000602082019050614f6e60008301846149e0565b92915050565b6000602082019050614f8960008301846149ef565b92915050565b6000602082019050614fa460008301846149fe565b92915050565b60006020820190508181036000830152614fc48184614a46565b905092915050565b60006020820190508181036000830152614fe581614a7f565b9050919050565b6000602082019050818103600083015261500581614aa2565b9050919050565b6000602082019050818103600083015261502581614ac5565b9050919050565b6000602082019050818103600083015261504581614ae8565b9050919050565b6000602082019050818103600083015261506581614b0b565b9050919050565b6000602082019050818103600083015261508581614b2e565b9050919050565b600060208201905081810360008301526150a581614b51565b9050919050565b600060208201905081810360008301526150c581614b74565b9050919050565b600060208201905081810360008301526150e581614b97565b9050919050565b6000602082019050818103600083015261510581614bba565b9050919050565b6000602082019050818103600083015261512581614bdd565b9050919050565b6000602082019050818103600083015261514581614c00565b9050919050565b6000602082019050818103600083015261516581614c23565b9050919050565b6000602082019050818103600083015261518581614c46565b9050919050565b600060208201905081810360008301526151a581614c69565b9050919050565b600060208201905081810360008301526151c581614c8c565b9050919050565b600060208201905081810360008301526151e581614caf565b9050919050565b6000602082019050818103600083015261520581614cd2565b9050919050565b6000602082019050818103600083015261522581614cf5565b9050919050565b6000602082019050818103600083015261524581614d18565b9050919050565b6000602082019050818103600083015261526581614d3b565b9050919050565b6000602082019050818103600083015261528581614d5e565b9050919050565b600060208201905081810360008301526152a581614d81565b9050919050565b600060208201905081810360008301526152c581614da4565b9050919050565b600060208201905081810360008301526152e581614dc7565b9050919050565b60006020820190506153016000830184614df9565b92915050565b600060408201905061531c6000830185614df9565b6153296020830184614df9565b9392505050565b600061533a61534b565b90506153468282615656565b919050565b6000604051905090565b600067ffffffffffffffff8211156153705761536f615752565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561539c5761539b615752565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153c8576153c7615752565b5b6153d1826157a3565b9050602081019050919050565b600067ffffffffffffffff8211156153f9576153f8615752565b5b615402826157a3565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061548b826155d8565b9150615496836155d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154cb576154ca6156f4565b5b828201905092915050565b60006154e1826155d8565b91506154ec836155d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615525576155246156f4565b5b828202905092915050565b600061553b826155d8565b9150615546836155d8565b925082821015615559576155586156f4565b5b828203905092915050565b600061556f826155b8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561560f5780820151818401526020810190506155f4565b8381111561561e576000848401525b50505050565b6000600282049050600182168061563c57607f821691505b602082108114156156505761564f615723565b5b50919050565b61565f826157a3565b810181811067ffffffffffffffff8211171561567e5761567d615752565b5b80604052505050565b6000615692826155d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156c5576156c46156f4565b5b600182019050919050565b60006156db826156e2565b9050919050565b60006156ed826157b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156157a05760046000803e61579d6000516157c1565b90505b90565b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f45646974696f6e206d757374206265206f70656e2e0000000000000000000000600082015250565b7f45646974696f6e206d75737420626520617661696c61626c652e000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f45544820616d6f756e74206973206e6f742073756666696369656e7400000000600082015250565b7f4e6f207375636820616d6f756e74206f662065646974696f6e20617661696c6160008201527f626c6520666f72207769746864726177616c2e00000000000000000000000000602082015250565b7f45646974696f6e206d75737420626520636c6f7365642e000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f20737570706c7920617661696c61626c6520746f206d656574207468652060008201527f6f726465722e0000000000000000000000000000000000000000000000000000602082015250565b7f45646974696f6e206d757374206e6f74206265206f70656e2e00000000000000600082015250565b7f5468652047617465206861732073746f7070656420796f752e00000000000000600082015250565b7f4d696e7420776f756c642065786365656420617661696c6162696c6974792e00600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f41736b656420666f7220746f6f206d616e790000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45646974696f6e2073697a65206d757374206265206e6f6e2d7a65726f2e0000600082015250565b7f45646974696f6e206d7573742065786973740000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015615df357615e76565b615dfb61534b565b60043d036004823e80513d602482011167ffffffffffffffff82111715615e23575050615e76565b808201805167ffffffffffffffff811115615e415750505050615e76565b80602083010160043d038501811115615e5e575050505050615e76565b615e6d82602001850186615656565b82955050505050505b90565b615e8281615564565b8114615e8d57600080fd5b50565b615e9981615576565b8114615ea457600080fd5b50565b615eb081615582565b8114615ebb57600080fd5b50565b615ec78161558c565b8114615ed257600080fd5b50565b615ede816155d8565b8114615ee957600080fd5b5056fea26469706673582212209f7dc7427f6e06783cf1e232959eb4c5fc249007672c22d4152ca78d52938c6b64736f6c63430008010033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f6d6174697269612e636f6d2f7b69647d0000000000000000

-----Decoded View---------------
Arg [0] : uri (string): https://matiria.com/{id}

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [2] : 68747470733a2f2f6d6174697269612e636f6d2f7b69647d0000000000000000


Deployed Bytecode Sourcemap

45142:10599:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20857:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46654:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48037:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52992:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48472:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51696:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53273:1030;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22796:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49436:661;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51950:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52281:145;;;;;;;;;;;;;:::i;:::-;;51205:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51424:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47824:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21254:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52477:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38191:103;;;;;;;;;;;;;:::i;:::-;;50105:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46821:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37540:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55635:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54353:1169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50860:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48588:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50591:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21851:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47603:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40353:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48248:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47177:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55530:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22078:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47391:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46950:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40118:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22318:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38449:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48857:521;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20857:231;20943:7;20990:1;20971:21;;:7;:21;;;;20963:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21058:9;:13;21068:2;21058:13;;;;;;;;;;;:22;21072:7;21058:22;;;;;;;;;;;;;;;;21051:29;;20857:231;;;;:::o;46415:::-;46526:4;46550:38;46576:11;46550:25;:38::i;:::-;:88;;;;46592:46;46626:11;46592:33;:46::i;:::-;46550:88;46543:95;;46415:231;;;:::o;46654:120::-;46717:13;46750:12;:16;46763:2;46750:16;;;;;;;;;;;46743:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46654:120;;;:::o;48037:203::-;48101:4;48136:1;48126:7;:11;:43;;;;;48151:18;;48141:7;:28;48126:43;48118:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;48210:13;:22;48224:7;48210:22;;;;;;;;;;;;;;;;;;;;;48203:29;;48037:203;;;:::o;52992:231::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53104:1:::1;53094:7;:11;:43;;;;;53119:18;;53109:7;:28;53094:43;53086:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;53204:11;53171:21;:30;53193:7;53171:30;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;52992:231:::0;;:::o;48472:108::-;48521:7;48570:1;48549:18;;:22;;;;:::i;:::-;48541:31;;48472:108;:::o;51696:205::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51793:1:::1;51783:7;:11;:43;;;;;51808:18;;51798:7;:28;51783:43;51775:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;51886:7;51860:14;:23;51875:7;51860:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;51696:205:::0;;:::o;53273:1030::-;53407:1;53397:7;:11;:43;;;;;53422:18;;53412:7;:28;53397:43;53389:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;53482:13;:22;53496:7;53482:22;;;;;;;;;;;;;;;;;;;;;53474:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;53549:21;:30;53571:7;53549:30;;;;;;;;;;;;;;;;;;;;;53541:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53667:9;53655:8;53629:14;:23;53644:7;53629:23;;;;;;;;;;;;:34;;;;:::i;:::-;:47;;53621:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;53729:14;:23;53744:7;53729:23;;;;;;;;;;;;;;;;;;;;;53728:24;:120;;;;53757:90;53776:5;;53757:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53783:13;:22;53797:7;53783:22;;;;;;;;;;;;53834:10;53817:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;53807:39;;;;;;53757:18;:90::i;:::-;53728:120;53720:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;53931:1;53897:21;:30;53919:7;53897:30;;;;;;;;;;;;:35;:159;;;;53970:1;53937:21;:30;53959:7;53937:30;;;;;;;;;;;;:34;:118;;;;;54025:21;:30;54047:7;54025:30;;;;;;;;;;;;54013:8;53975:14;:23;53990:7;53975:23;;;;;;;;;;;:35;53999:10;53975:35;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:80;;53937:118;53897:159;53889:190;;;;;;;;;;;;:::i;:::-;;;;;;;;;54167:8;54129:14;:23;54144:7;54129:23;;;;;;;;;;;:35;54153:10;54129:35;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;54090:14;:23;54105:7;54090:23;;;;;;;;;;;:35;54114:10;54090:35;;;;;;;;;;;;;;;:85;;;;54236:8;54211:13;:22;54225:7;54211:22;;;;;;;;;;;;:33;;;;:::i;:::-;54186:13;:22;54200:7;54186:22;;;;;;;;;;;:58;;;;54255:40;54261:10;54273:7;54282:8;54255:40;;;;;;;;;;;;:5;:40::i;:::-;53273:1030;;;;:::o;22796:442::-;23037:12;:10;:12::i;:::-;23029:20;;:4;:20;;;:60;;;;23053:36;23070:4;23076:12;:10;:12::i;:::-;23053:16;:36::i;:::-;23029:60;23007:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23178:52;23201:4;23207:2;23211:3;23216:7;23225:4;23178:22;:52::i;:::-;22796:442;;;;;:::o;49436:661::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49597:1:::1;49590:4;:8;49582:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;49679:10;49644:12;:32;49657:18;;49644:32;;;;;;;;;;;:45;;;;;;;;;;;;:::i;:::-;;49737:5;49700:14;:34;49715:18;;49700:34;;;;;;;;;;;:42;;;;49797:4;49753:21;:41;49775:18;;49753:41;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;49848:5;49812:13;:33;49826:18;;49812:33;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;49901:7;49864:14;:34;49879:18;;49864:34;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;49964:4;49919:22;:42;49942:18;;49919:42;;;;;;;;;;;:49;;;;50023:12;49979:21;:41;50001:18;;49979:41;;;;;;;;;;;:56;;;;50088:1;50067:18;;:22;;;;:::i;:::-;50046:18;:43;;;;49436:661:::0;;;;;:::o;51950:280::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52081:8:::1;52044:33;52062:4;52069:7;52044:9;:33::i;:::-;:45;;52036:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;52155:67;52181:4;52188:10;52200:7;52209:8;52155:67;;;;;;;;;;;::::0;:17:::1;:67::i;:::-;51950:280:::0;;:::o;52281:145::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52331:15:::1;52349:21;52331:39;;52389:10;52381:28;;:37;52410:7;52381:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37831:1;52281:145::o:0;51205:211::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51309:1:::1;51299:7;:11;:43;;;;;51324:18;;51314:7;:28;51299:43;51291:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;51401:7;51376:13;:22;51390:7;51376:22;;;;;;;;;;;:32;;;;51205:211:::0;;:::o;51424:231::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51538:1:::1;51528:7;:11;:43;;;;;51553:18;;51543:7;:28;51528:43;51520:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;51638:9;51605:21;:30;51627:7;51605:30;;;;;;;;;;;:42;;;;51424:231:::0;;:::o;47824:205::-;47889:4;47924:1;47914:7;:11;:43;;;;;47939:18;;47929:7;:28;47914:43;47906:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47998:14;:23;48013:7;47998:23;;;;;;;;;;;;;;;;;;;;;47991:30;;47824:205;;;:::o;21254:524::-;21410:16;21471:3;:10;21452:8;:15;:29;21444:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21540:30;21587:8;:15;21573:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21540:63;;21621:9;21616:122;21640:8;:15;21636:1;:19;21616:122;;;21696:30;21706:8;21715:1;21706:11;;;;;;;;;;;;;;;;;;;;;;21719:3;21723:1;21719:6;;;;;;;;;;;;;;;;;;;;;;21696:9;:30::i;:::-;21677:13;21691:1;21677:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;21657:3;;;;:::i;:::-;;;21616:122;;;;21757:13;21750:20;;;21254:524;;;;:::o;52477:462::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52588:1:::1;52578:7;:11;:43;;;;;52603:18;;52593:7;:28;52578:43;52570:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;52663:13;:22;52677:7;52663:22;;;;;;;;;;;;;;;;;;;;;:96;;;;52727:22;:31;52750:7;52727:31;;;;;;;;;;;;52715:8;52690:13;:22;52704:7;52690:22;;;;;;;;;;;;:33;;;;:::i;:::-;:68;;52663:96;52655:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;52876:8;52851:13;:22;52865:7;52851:22;;;;;;;;;;;;:33;;;;:::i;:::-;52826:13;:22;52840:7;52826:22;;;;;;;;;;;:58;;;;52895:36;52901:6;52909:7;52918:8;52895:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;52477:462:::0;;;:::o;38191:103::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38256:30:::1;38283:1;38256:18;:30::i;:::-;38191:103::o:0;50105:437::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50207:1:::1;50197:7;:11;:43;;;;;50222:18;;50212:7;:28;50197:43;50189:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;50282:13;:22;50296:7;50282:22;;;;;;;;;;;;;;;;;;;;;:96;;;;50346:22;:31;50369:7;50346:31;;;;;;;;;;;;50334:8;50309:13;:22;50323:7;50309:22;;;;;;;;;;;;:33;;;;:::i;:::-;:68;;50282:96;50274:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;50475:8;50450:13;:22;50464:7;50450:22;;;;;;;;;;;;:33;;;;:::i;:::-;50425:13;:22;50439:7;50425:22;;;;;;;;;;;:58;;;;50494:40;50500:10;50512:7;50521:8;50494:40;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;50105:437:::0;;:::o;46821:121::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46928:6:::1;46904:12;:21;46917:7;46904:21;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;46821:121:::0;;:::o;37540:87::-;37586:7;37613:6;;;;;;;;;;;37606:13;;37540:87;:::o;55635:101::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55725:3:::1;;55710:12;:18;;;;;;;:::i;:::-;;55635:101:::0;;:::o;54353:1169::-;54490:1;54480:7;:11;:43;;;;;54505:18;;54495:7;:28;54480:43;54472:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;54566:13;:22;54580:7;54566:22;;;;;;;;;;;;;;;;;;;;;54565:23;54557:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;54635:21;:30;54657:7;54635:30;;;;;;;;;;;;;;;;;;;;;54627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54752:9;54740:8;54714:14;:23;54729:7;54714:23;;;;;;;;;;;;:34;;;;:::i;:::-;:47;;54706:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;54853:22;:31;54876:7;54853:31;;;;;;;;;;;;54840:8;54815:13;:22;54829:7;54815:22;;;;;;;;;;;;:33;;;;:::i;:::-;54814:70;;54805:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;54948:14;:23;54963:7;54948:23;;;;;;;;;;;;;;;;;;;;;54947:24;:120;;;;54976:90;54995:5;;54976:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55002:13;:22;55016:7;55002:22;;;;;;;;;;;;55053:10;55036:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;55026:39;;;;;;54976:18;:90::i;:::-;54947:120;54939:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;55150:1;55116:21;:30;55138:7;55116:30;;;;;;;;;;;;:35;:159;;;;55189:1;55156:21;:30;55178:7;55156:30;;;;;;;;;;;;:34;:118;;;;;55244:21;:30;55266:7;55244:30;;;;;;;;;;;;55232:8;55194:14;:23;55209:7;55194:23;;;;;;;;;;;:35;55218:10;55194:35;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:80;;55156:118;55116:159;55108:190;;;;;;;;;;;;:::i;:::-;;;;;;;;;55359:8;55334:13;:22;55348:7;55334:22;;;;;;;;;;;;:33;;;;:::i;:::-;55309:13;:22;55323:7;55309:22;;;;;;;;;;;:58;;;;55455:8;55417:14;:23;55432:7;55417:23;;;;;;;;;;;:35;55441:10;55417:35;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;55378:14;:23;55393:7;55378:23;;;;;;;;;;;:35;55402:10;55378:35;;;;;;;;;;;;;;;:85;;;;55474:40;55480:10;55492:7;55501:8;55474:40;;;;;;;;;;;;:5;:40::i;:::-;54353:1169;;;;:::o;50860:295::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50967:1:::1;50957:7;:11;:43;;;;;50982:18;;50972:7;:28;50957:43;50949:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;51043:13;:22;51057:7;51043:22;;;;;;;;;;;;;;;;;;;;;51042:23;51034:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51140:7;51106:22;:31;51129:7;51106:31;;;;;;;;;;;:41;;;;50860:295:::0;;:::o;48588:209::-;48655:7;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48693:1:::1;48683:7;:11;:43;;;;;48708:18;;48698:7;:28;48683:43;48675:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;48767:13;:22;48781:7;48767:22;;;;;;;;;;;;48760:29;;48588:209:::0;;;:::o;50591:212::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50697:1:::1;50687:7;:11;:43;;;;;50712:18;;50702:7;:28;50687:43;50679:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;50790:5;50764:14;:23;50779:7;50764:23;;;;;;;;;;;:31;;;;50591:212:::0;;:::o;21851:155::-;21946:52;21965:12;:10;:12::i;:::-;21979:8;21989;21946:18;:52::i;:::-;21851:155;;:::o;47603:213::-;47665:7;47703:1;47693:7;:11;:43;;;;;47718:18;;47708:7;:28;47693:43;47685:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47777:22;:31;47800:7;47777:31;;;;;;;;;;;;47770:38;;47603:213;;;:::o;40353:255::-;40538:6;40564:36;;;40557:43;;40353:255;;;;;;;:::o;48248:216::-;48317:4;48352:1;48342:7;:11;:43;;;;;48367:18;;48357:7;:28;48342:43;48334:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;48426:21;:30;48448:7;48426:30;;;;;;;;;;;;;;;;;;;;;48419:37;;48248:216;;;:::o;47177:206::-;47240:7;47278:1;47268:7;:11;:43;;;;;47293:18;;47283:7;:28;47268:43;47260:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47352:14;:23;47367:7;47352:23;;;;;;;;;;;;47345:30;;47177:206;;;:::o;55530:97::-;55574:13;55607:12;55600:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55530:97;:::o;22078:168::-;22177:4;22201:18;:27;22220:7;22201:27;;;;;;;;;;;;;;;:37;22229:8;22201:37;;;;;;;;;;;;;;;;;;;;;;;;;22194:44;;22078:168;;;;:::o;47391:204::-;47453:7;47491:1;47481:7;:11;:43;;;;;47506:18;;47496:7;:28;47481:43;47473:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47565:13;:22;47579:7;47565:22;;;;;;;;;;;;47558:29;;47391:204;;;:::o;46950:219::-;47019:7;47057:1;47047:7;:11;:43;;;;;47072:18;;47062:7;:28;47047:43;47039:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47131:21;:30;47153:7;47131:30;;;;;;;;;;;;47124:37;;46950:219;;;:::o;40118:227::-;40280:6;40306:31;;;40299:38;;40118:227;;;;;;;:::o;22318:401::-;22534:12;:10;:12::i;:::-;22526:20;;:4;:20;;;:60;;;;22550:36;22567:4;22573:12;:10;:12::i;:::-;22550:16;:36::i;:::-;22526:60;22504:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22666:45;22684:4;22690:2;22694;22698:6;22706:4;22666:17;:45::i;:::-;22318:401;;;;;:::o;38449:201::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38558:1:::1;38538:22;;:8;:22;;;;38530:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38614:28;38633:8;38614:18;:28::i;:::-;38449:201:::0;:::o;48857:521::-;37771:12;:10;:12::i;:::-;37760:23;;:7;:5;:7::i;:::-;:23;;;37752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49021:10:::1;48986:12;:32;48999:18;;48986:32;;;;;;;;;;;:45;;;;;;;;;;;;:::i;:::-;;49079:5;49042:14;:34;49057:18;;49042:34;;;;;;;;;;;:42;;;;49139:4;49095:21;:41;49117:18;;49095:41;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;49190:4;49154:13;:33;49168:18;;49154:33;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;49242:7;49205:14;:34;49220:18;;49205:34;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;49304:12;49260:21;:41;49282:18;;49260:41;;;;;;;;;;;:56;;;;49369:1;49348:18;;:22;;;;:::i;:::-;49327:18;:43;;;;48857:521:::0;;;;:::o;19880:310::-;19982:4;20034:26;20019:41;;;:11;:41;;;;:110;;;;20092:37;20077:52;;;:11;:52;;;;20019:110;:163;;;;20146:36;20170:11;20146:23;:36::i;:::-;20019:163;19999:183;;19880:310;;;:::o;39367:223::-;39469:4;39508:34;39493:49;;;:11;:49;;;;:89;;;;39546:36;39570:11;39546:23;:36::i;:::-;39493:89;39486:96;;39367:223;;;:::o;17568:98::-;17621:7;17648:10;17641:17;;17568:98;:::o;41536:190::-;41661:4;41714;41685:25;41698:5;41705:4;41685:12;:25::i;:::-;:33;41678:40;;41536:190;;;;;:::o;27272:569::-;27439:1;27425:16;;:2;:16;;;;27417:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27492:16;27511:12;:10;:12::i;:::-;27492:31;;27536:102;27557:8;27575:1;27579:2;27583:21;27601:2;27583:17;:21::i;:::-;27606:25;27624:6;27606:17;:25::i;:::-;27633:4;27536:20;:102::i;:::-;27672:6;27651:9;:13;27661:2;27651:13;;;;;;;;;;;:17;27665:2;27651:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27731:2;27694:52;;27727:1;27694:52;;27709:8;27694:52;;;27735:2;27739:6;27694:52;;;;;;;:::i;:::-;;;;;;;;27759:74;27790:8;27808:1;27812:2;27816;27820:6;27828:4;27759:30;:74::i;:::-;27272:569;;;;;:::o;24880:1074::-;25107:7;:14;25093:3;:10;:28;25085:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25199:1;25185:16;;:2;:16;;;;25177:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25256:16;25275:12;:10;:12::i;:::-;25256:31;;25300:60;25321:8;25331:4;25337:2;25341:3;25346:7;25355:4;25300:20;:60::i;:::-;25378:9;25373:421;25397:3;:10;25393:1;:14;25373:421;;;25429:10;25442:3;25446:1;25442:6;;;;;;;;;;;;;;;;;;;;;;25429:19;;25463:14;25480:7;25488:1;25480:10;;;;;;;;;;;;;;;;;;;;;;25463:27;;25507:19;25529:9;:13;25539:2;25529:13;;;;;;;;;;;:19;25543:4;25529:19;;;;;;;;;;;;;;;;25507:41;;25586:6;25571:11;:21;;25563:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25719:6;25705:11;:20;25683:9;:13;25693:2;25683:13;;;;;;;;;;;:19;25697:4;25683:19;;;;;;;;;;;;;;;:42;;;;25776:6;25755:9;:13;25765:2;25755:13;;;;;;;;;;;:17;25769:2;25755:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25373:421;;;25409:3;;;;:::i;:::-;;;25373:421;;;;25841:2;25811:47;;25835:4;25811:47;;25825:8;25811:47;;;25845:3;25850:7;25811:47;;;;;;;:::i;:::-;;;;;;;;25871:75;25907:8;25917:4;25923:2;25927:3;25932:7;25941:4;25871:35;:75::i;:::-;24880:1074;;;;;;:::o;23702:820::-;23904:1;23890:16;;:2;:16;;;;23882:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23961:16;23980:12;:10;:12::i;:::-;23961:31;;24005:96;24026:8;24036:4;24042:2;24046:21;24064:2;24046:17;:21::i;:::-;24069:25;24087:6;24069:17;:25::i;:::-;24096:4;24005:20;:96::i;:::-;24114:19;24136:9;:13;24146:2;24136:13;;;;;;;;;;;:19;24150:4;24136:19;;;;;;;;;;;;;;;;24114:41;;24189:6;24174:11;:21;;24166:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24314:6;24300:11;:20;24278:9;:13;24288:2;24278:13;;;;;;;;;;;:19;24292:4;24278:19;;;;;;;;;;;;;;;:42;;;;24363:6;24342:9;:13;24352:2;24342:13;;;;;;;;;;;:17;24356:2;24342:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24418:2;24387:46;;24412:4;24387:46;;24402:8;24387:46;;;24422:2;24426:6;24387:46;;;;;;;:::i;:::-;;;;;;;;24446:68;24477:8;24487:4;24493:2;24497;24501:6;24509:4;24446:30;:68::i;:::-;23702:820;;;;;;;:::o;38810:191::-;38884:16;38903:6;;;;;;;;;;;38884:25;;38929:8;38920:6;;:17;;;;;;;;;;;;;;;;;;38984:8;38953:40;;38974:8;38953:40;;;;;;;;;;;;38810:191;;:::o;31066:331::-;31221:8;31212:17;;:5;:17;;;;31204:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31324:8;31286:18;:25;31305:5;31286:25;;;;;;;;;;;;;;;:35;31312:8;31286:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31370:8;31348:41;;31363:5;31348:41;;;31380:8;31348:41;;;;;;:::i;:::-;;;;;;;;31066:331;;;:::o;18643:157::-;18728:4;18767:25;18752:40;;;:11;:40;;;;18745:47;;18643:157;;;:::o;42088:675::-;42171:7;42191:20;42214:4;42191:27;;42234:9;42229:497;42253:5;:12;42249:1;:16;42229:497;;;42287:20;42310:5;42316:1;42310:8;;;;;;;;;;;;;;;;;;;;;;42287:31;;42353:12;42337;:28;42333:382;;42480:42;42495:12;42509;42480:14;:42::i;:::-;42465:57;;42333:382;;;42657:42;42672:12;42686;42657:14;:42::i;:::-;42642:57;;42333:382;42229:497;42267:3;;;;;:::i;:::-;;;;42229:497;;;;42743:12;42736:19;;;42088:675;;;;:::o;34155:198::-;34221:16;34250:22;34289:1;34275:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34250:41;;34313:7;34302:5;34308:1;34302:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;34340:5;34333:12;;;34155:198;;;:::o;32353:221::-;;;;;;;:::o;32582:744::-;32797:15;:2;:13;;;:15::i;:::-;32793:526;;;32850:2;32833:38;;;32872:8;32882:4;32888:2;32892:6;32900:4;32833:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32829:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33181:6;33174:14;;;;;;;;;;;:::i;:::-;;;;;;;;32829:479;;;33230:62;;;;;;;;;;:::i;:::-;;;;;;;;32829:479;32967:43;;;32955:55;;;:8;:55;;;;32951:154;;33035:50;;;;;;;;;;:::i;:::-;;;;;;;;32951:154;32906:214;32793:526;32582:744;;;;;;:::o;33334:813::-;33574:15;:2;:13;;;:15::i;:::-;33570:570;;;33627:2;33610:43;;;33654:8;33664:4;33670:3;33675:7;33684:4;33610:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33606:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34002:6;33995:14;;;;;;;;;;;:::i;:::-;;;;;;;;33606:523;;;34051:62;;;;;;;;;;:::i;:::-;;;;;;;;33606:523;33783:48;;;33771:60;;;:8;:60;;;;33767:159;;33856:50;;;;;;;;;;:::i;:::-;;;;;;;;33767:159;33690:251;33570:570;33334:813;;;;;;:::o;42771:224::-;42839:13;42902:1;42896:4;42889:15;42931:1;42925:4;42918:15;42972:4;42966;42956:21;42947:30;;42874:114;;;;:::o;9621:326::-;9681:4;9938:1;9916:7;:19;;;:23;9909:30;;9621:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:623:1:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;670:623::-;;791:81;807:64;864:6;807:64;:::i;:::-;791:81;:::i;:::-;782:90;;892:5;920:6;913:5;906:21;946:4;939:5;935:16;928:23;;971:6;1021:3;1013:4;1005:6;1001:17;996:3;992:27;989:36;986:2;;;1038:1;1035;1028:12;986:2;1066:1;1051:236;1076:6;1073:1;1070:13;1051:236;;;1143:3;1171:37;1204:3;1192:10;1171:37;:::i;:::-;1166:3;1159:50;1238:4;1233:3;1229:14;1222:21;;1272:4;1267:3;1263:14;1256:21;;1111:176;1098:1;1095;1091:9;1086:14;;1051:236;;;1055:14;772:521;;;;;;;:::o;1299:343::-;;1401:65;1417:48;1458:6;1417:48;:::i;:::-;1401:65;:::i;:::-;1392:74;;1489:6;1482:5;1475:21;1527:4;1520:5;1516:16;1565:3;1556:6;1551:3;1547:16;1544:25;1541:2;;;1582:1;1579;1572:12;1541:2;1595:41;1629:6;1624:3;1619;1595:41;:::i;:::-;1382:260;;;;;;:::o;1648:345::-;;1751:66;1767:49;1809:6;1767:49;:::i;:::-;1751:66;:::i;:::-;1742:75;;1840:6;1833:5;1826:21;1878:4;1871:5;1867:16;1916:3;1907:6;1902:3;1898:16;1895:25;1892:2;;;1933:1;1930;1923:12;1892:2;1946:41;1980:6;1975:3;1970;1946:41;:::i;:::-;1732:261;;;;;;:::o;1999:139::-;;2083:6;2070:20;2061:29;;2099:33;2126:5;2099:33;:::i;:::-;2051:87;;;;:::o;2161:303::-;;2281:3;2274:4;2266:6;2262:17;2258:27;2248:2;;2299:1;2296;2289:12;2248:2;2339:6;2326:20;2364:94;2454:3;2446:6;2439:4;2431:6;2427:17;2364:94;:::i;:::-;2355:103;;2238:226;;;;;:::o;2487:367::-;;;2620:3;2613:4;2605:6;2601:17;2597:27;2587:2;;2638:1;2635;2628:12;2587:2;2674:6;2661:20;2651:30;;2704:18;2696:6;2693:30;2690:2;;;2736:1;2733;2726:12;2690:2;2773:4;2765:6;2761:17;2749:29;;2827:3;2819:4;2811:6;2807:17;2797:8;2793:32;2790:41;2787:2;;;2844:1;2841;2834:12;2787:2;2577:277;;;;;:::o;2877:303::-;;2997:3;2990:4;2982:6;2978:17;2974:27;2964:2;;3015:1;3012;3005:12;2964:2;3055:6;3042:20;3080:94;3170:3;3162:6;3155:4;3147:6;3143:17;3080:94;:::i;:::-;3071:103;;2954:226;;;;;:::o;3186:133::-;;3267:6;3254:20;3245:29;;3283:30;3307:5;3283:30;:::i;:::-;3235:84;;;;:::o;3325:139::-;;3409:6;3396:20;3387:29;;3425:33;3452:5;3425:33;:::i;:::-;3377:87;;;;:::o;3470:137::-;;3553:6;3540:20;3531:29;;3569:32;3595:5;3569:32;:::i;:::-;3521:86;;;;:::o;3613:141::-;;3700:6;3694:13;3685:22;;3716:32;3742:5;3716:32;:::i;:::-;3675:79;;;;:::o;3773:271::-;;3877:3;3870:4;3862:6;3858:17;3854:27;3844:2;;3895:1;3892;3885:12;3844:2;3935:6;3922:20;3960:78;4034:3;4026:6;4019:4;4011:6;4007:17;3960:78;:::i;:::-;3951:87;;3834:210;;;;;:::o;4064:352::-;;;4182:3;4175:4;4167:6;4163:17;4159:27;4149:2;;4200:1;4197;4190:12;4149:2;4236:6;4223:20;4213:30;;4266:18;4258:6;4255:30;4252:2;;;4298:1;4295;4288:12;4252:2;4335:4;4327:6;4323:17;4311:29;;4389:3;4381:4;4373:6;4369:17;4359:8;4355:32;4352:41;4349:2;;;4406:1;4403;4396:12;4349:2;4139:277;;;;;:::o;4436:273::-;;4541:3;4534:4;4526:6;4522:17;4518:27;4508:2;;4559:1;4556;4549:12;4508:2;4599:6;4586:20;4624:79;4699:3;4691:6;4684:4;4676:6;4672:17;4624:79;:::i;:::-;4615:88;;4498:211;;;;;:::o;4715:139::-;;4799:6;4786:20;4777:29;;4815:33;4842:5;4815:33;:::i;:::-;4767:87;;;;:::o;4860:262::-;;4968:2;4956:9;4947:7;4943:23;4939:32;4936:2;;;4984:1;4981;4974:12;4936:2;5027:1;5052:53;5097:7;5088:6;5077:9;5073:22;5052:53;:::i;:::-;5042:63;;4998:117;4926:196;;;;:::o;5128:407::-;;;5253:2;5241:9;5232:7;5228:23;5224:32;5221:2;;;5269:1;5266;5259:12;5221:2;5312:1;5337:53;5382:7;5373:6;5362:9;5358:22;5337:53;:::i;:::-;5327:63;;5283:117;5439:2;5465:53;5510:7;5501:6;5490:9;5486:22;5465:53;:::i;:::-;5455:63;;5410:118;5211:324;;;;;:::o;5541:1241::-;;;;;;5776:3;5764:9;5755:7;5751:23;5747:33;5744:2;;;5793:1;5790;5783:12;5744:2;5836:1;5861:53;5906:7;5897:6;5886:9;5882:22;5861:53;:::i;:::-;5851:63;;5807:117;5963:2;5989:53;6034:7;6025:6;6014:9;6010:22;5989:53;:::i;:::-;5979:63;;5934:118;6119:2;6108:9;6104:18;6091:32;6150:18;6142:6;6139:30;6136:2;;;6182:1;6179;6172:12;6136:2;6210:78;6280:7;6271:6;6260:9;6256:22;6210:78;:::i;:::-;6200:88;;6062:236;6365:2;6354:9;6350:18;6337:32;6396:18;6388:6;6385:30;6382:2;;;6428:1;6425;6418:12;6382:2;6456:78;6526:7;6517:6;6506:9;6502:22;6456:78;:::i;:::-;6446:88;;6308:236;6611:3;6600:9;6596:19;6583:33;6643:18;6635:6;6632:30;6629:2;;;6675:1;6672;6665:12;6629:2;6703:62;6757:7;6748:6;6737:9;6733:22;6703:62;:::i;:::-;6693:72;;6554:221;5734:1048;;;;;;;;:::o;6788:955::-;;;;;;6973:3;6961:9;6952:7;6948:23;6944:33;6941:2;;;6990:1;6987;6980:12;6941:2;7033:1;7058:53;7103:7;7094:6;7083:9;7079:22;7058:53;:::i;:::-;7048:63;;7004:117;7160:2;7186:53;7231:7;7222:6;7211:9;7207:22;7186:53;:::i;:::-;7176:63;;7131:118;7288:2;7314:53;7359:7;7350:6;7339:9;7335:22;7314:53;:::i;:::-;7304:63;;7259:118;7416:2;7442:53;7487:7;7478:6;7467:9;7463:22;7442:53;:::i;:::-;7432:63;;7387:118;7572:3;7561:9;7557:19;7544:33;7604:18;7596:6;7593:30;7590:2;;;7636:1;7633;7626:12;7590:2;7664:62;7718:7;7709:6;7698:9;7694:22;7664:62;:::i;:::-;7654:72;;7515:221;6931:812;;;;;;;;:::o;7749:401::-;;;7871:2;7859:9;7850:7;7846:23;7842:32;7839:2;;;7887:1;7884;7877:12;7839:2;7930:1;7955:53;8000:7;7991:6;7980:9;7976:22;7955:53;:::i;:::-;7945:63;;7901:117;8057:2;8083:50;8125:7;8116:6;8105:9;8101:22;8083:50;:::i;:::-;8073:60;;8028:115;7829:321;;;;;:::o;8156:407::-;;;8281:2;8269:9;8260:7;8256:23;8252:32;8249:2;;;8297:1;8294;8287:12;8249:2;8340:1;8365:53;8410:7;8401:6;8390:9;8386:22;8365:53;:::i;:::-;8355:63;;8311:117;8467:2;8493:53;8538:7;8529:6;8518:9;8514:22;8493:53;:::i;:::-;8483:63;;8438:118;8239:324;;;;;:::o;8569:693::-;;;8744:2;8732:9;8723:7;8719:23;8715:32;8712:2;;;8760:1;8757;8750:12;8712:2;8831:1;8820:9;8816:17;8803:31;8861:18;8853:6;8850:30;8847:2;;;8893:1;8890;8883:12;8847:2;8921:78;8991:7;8982:6;8971:9;8967:22;8921:78;:::i;:::-;8911:88;;8774:235;9076:2;9065:9;9061:18;9048:32;9107:18;9099:6;9096:30;9093:2;;;9139:1;9136;9129:12;9093:2;9167:78;9237:7;9228:6;9217:9;9213:22;9167:78;:::i;:::-;9157:88;;9019:236;8702:560;;;;;:::o;9268:260::-;;9375:2;9363:9;9354:7;9350:23;9346:32;9343:2;;;9391:1;9388;9381:12;9343:2;9434:1;9459:52;9503:7;9494:6;9483:9;9479:22;9459:52;:::i;:::-;9449:62;;9405:116;9333:195;;;;:::o;9534:282::-;;9652:2;9640:9;9631:7;9627:23;9623:32;9620:2;;;9668:1;9665;9658:12;9620:2;9711:1;9736:63;9791:7;9782:6;9771:9;9767:22;9736:63;:::i;:::-;9726:73;;9682:127;9610:206;;;;:::o;9822:395::-;;;9950:2;9938:9;9929:7;9925:23;9921:32;9918:2;;;9966:1;9963;9956:12;9918:2;10037:1;10026:9;10022:17;10009:31;10067:18;10059:6;10056:30;10053:2;;;10099:1;10096;10089:12;10053:2;10135:65;10192:7;10183:6;10172:9;10168:22;10135:65;:::i;:::-;10117:83;;;;9980:230;9908:309;;;;;:::o;10223:805::-;;;;;10389:3;10377:9;10368:7;10364:23;10360:33;10357:2;;;10406:1;10403;10396:12;10357:2;10477:1;10466:9;10462:17;10449:31;10507:18;10499:6;10496:30;10493:2;;;10539:1;10536;10529:12;10493:2;10567:63;10622:7;10613:6;10602:9;10598:22;10567:63;:::i;:::-;10557:73;;10420:220;10679:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10650:118;10807:2;10833:50;10875:7;10866:6;10855:9;10851:22;10833:50;:::i;:::-;10823:60;;10778:115;10932:2;10958:53;11003:7;10994:6;10983:9;10979:22;10958:53;:::i;:::-;10948:63;;10903:118;10347:681;;;;;;;:::o;11034:951::-;;;;;;11217:3;11205:9;11196:7;11192:23;11188:33;11185:2;;;11234:1;11231;11224:12;11185:2;11305:1;11294:9;11290:17;11277:31;11335:18;11327:6;11324:30;11321:2;;;11367:1;11364;11357:12;11321:2;11395:63;11450:7;11441:6;11430:9;11426:22;11395:63;:::i;:::-;11385:73;;11248:220;11507:2;11533:53;11578:7;11569:6;11558:9;11554:22;11533:53;:::i;:::-;11523:63;;11478:118;11635:2;11661:53;11706:7;11697:6;11686:9;11682:22;11661:53;:::i;:::-;11651:63;;11606:118;11763:2;11789:50;11831:7;11822:6;11811:9;11807:22;11789:50;:::i;:::-;11779:60;;11734:115;11888:3;11915:53;11960:7;11951:6;11940:9;11936:22;11915:53;:::i;:::-;11905:63;;11859:119;11175:810;;;;;;;;:::o;11991:262::-;;12099:2;12087:9;12078:7;12074:23;12070:32;12067:2;;;12115:1;12112;12105:12;12067:2;12158:1;12183:53;12228:7;12219:6;12208:9;12204:22;12183:53;:::i;:::-;12173:63;;12129:117;12057:196;;;;:::o;12259:552::-;;;;12401:2;12389:9;12380:7;12376:23;12372:32;12369:2;;;12417:1;12414;12407:12;12369:2;12460:1;12485:53;12530:7;12521:6;12510:9;12506:22;12485:53;:::i;:::-;12475:63;;12431:117;12587:2;12613:53;12658:7;12649:6;12638:9;12634:22;12613:53;:::i;:::-;12603:63;;12558:118;12715:2;12741:53;12786:7;12777:6;12766:9;12762:22;12741:53;:::i;:::-;12731:63;;12686:118;12359:452;;;;;:::o;12817:401::-;;;12939:2;12927:9;12918:7;12914:23;12910:32;12907:2;;;12955:1;12952;12945:12;12907:2;12998:1;13023:53;13068:7;13059:6;13048:9;13044:22;13023:53;:::i;:::-;13013:63;;12969:117;13125:2;13151:50;13193:7;13184:6;13173:9;13169:22;13151:50;:::i;:::-;13141:60;;13096:115;12897:321;;;;;:::o;13224:407::-;;;13349:2;13337:9;13328:7;13324:23;13320:32;13317:2;;;13365:1;13362;13355:12;13317:2;13408:1;13433:53;13478:7;13469:6;13458:9;13454:22;13433:53;:::i;:::-;13423:63;;13379:117;13535:2;13561:53;13606:7;13597:6;13586:9;13582:22;13561:53;:::i;:::-;13551:63;;13506:118;13307:324;;;;;:::o;13637:520::-;;;13772:2;13760:9;13751:7;13747:23;13743:32;13740:2;;;13788:1;13785;13778:12;13740:2;13831:1;13856:53;13901:7;13892:6;13881:9;13877:22;13856:53;:::i;:::-;13846:63;;13802:117;13986:2;13975:9;13971:18;13958:32;14017:18;14009:6;14006:30;14003:2;;;14049:1;14046;14039:12;14003:2;14077:63;14132:7;14123:6;14112:9;14108:22;14077:63;:::i;:::-;14067:73;;13929:221;13730:427;;;;;:::o;14163:407::-;;;14288:2;14276:9;14267:7;14263:23;14259:32;14256:2;;;14304:1;14301;14294:12;14256:2;14347:1;14372:53;14417:7;14408:6;14397:9;14393:22;14372:53;:::i;:::-;14362:63;;14318:117;14474:2;14500:53;14545:7;14536:6;14525:9;14521:22;14500:53;:::i;:::-;14490:63;;14445:118;14246:324;;;;;:::o;14576:715::-;;;;;14753:2;14741:9;14732:7;14728:23;14724:32;14721:2;;;14769:1;14766;14759:12;14721:2;14812:1;14837:53;14882:7;14873:6;14862:9;14858:22;14837:53;:::i;:::-;14827:63;;14783:117;14939:2;14965:53;15010:7;15001:6;14990:9;14986:22;14965:53;:::i;:::-;14955:63;;14910:118;15095:2;15084:9;15080:18;15067:32;15126:18;15118:6;15115:30;15112:2;;;15158:1;15155;15148:12;15112:2;15194:80;15266:7;15257:6;15246:9;15242:22;15194:80;:::i;:::-;15176:98;;;;15038:246;14711:580;;;;;;;:::o;15297:179::-;;15387:46;15429:3;15421:6;15387:46;:::i;:::-;15465:4;15460:3;15456:14;15442:28;;15377:99;;;;:::o;15482:118::-;15569:24;15587:5;15569:24;:::i;:::-;15564:3;15557:37;15547:53;;:::o;15606:157::-;15711:45;15731:24;15749:5;15731:24;:::i;:::-;15711:45;:::i;:::-;15706:3;15699:58;15689:74;;:::o;15799:732::-;;15947:54;15995:5;15947:54;:::i;:::-;16017:86;16096:6;16091:3;16017:86;:::i;:::-;16010:93;;16127:56;16177:5;16127:56;:::i;:::-;16206:7;16237:1;16222:284;16247:6;16244:1;16241:13;16222:284;;;16323:6;16317:13;16350:63;16409:3;16394:13;16350:63;:::i;:::-;16343:70;;16436:60;16489:6;16436:60;:::i;:::-;16426:70;;16282:224;16269:1;16266;16262:9;16257:14;;16222:284;;;16226:14;16522:3;16515:10;;15923:608;;;;;;;:::o;16537:109::-;16618:21;16633:5;16618:21;:::i;:::-;16613:3;16606:34;16596:50;;:::o;16652:118::-;16739:24;16757:5;16739:24;:::i;:::-;16734:3;16727:37;16717:53;;:::o;16776:115::-;16861:23;16878:5;16861:23;:::i;:::-;16856:3;16849:36;16839:52;;:::o;16897:360::-;;17011:38;17043:5;17011:38;:::i;:::-;17065:70;17128:6;17123:3;17065:70;:::i;:::-;17058:77;;17144:52;17189:6;17184:3;17177:4;17170:5;17166:16;17144:52;:::i;:::-;17221:29;17243:6;17221:29;:::i;:::-;17216:3;17212:39;17205:46;;16987:270;;;;;:::o;17263:364::-;;17379:39;17412:5;17379:39;:::i;:::-;17434:71;17498:6;17493:3;17434:71;:::i;:::-;17427:78;;17514:52;17559:6;17554:3;17547:4;17540:5;17536:16;17514:52;:::i;:::-;17591:29;17613:6;17591:29;:::i;:::-;17586:3;17582:39;17575:46;;17355:272;;;;;:::o;17633:366::-;;17796:67;17860:2;17855:3;17796:67;:::i;:::-;17789:74;;17872:93;17961:3;17872:93;:::i;:::-;17990:2;17985:3;17981:12;17974:19;;17779:220;;;:::o;18005:366::-;;18168:67;18232:2;18227:3;18168:67;:::i;:::-;18161:74;;18244:93;18333:3;18244:93;:::i;:::-;18362:2;18357:3;18353:12;18346:19;;18151:220;;;:::o;18377:366::-;;18540:67;18604:2;18599:3;18540:67;:::i;:::-;18533:74;;18616:93;18705:3;18616:93;:::i;:::-;18734:2;18729:3;18725:12;18718:19;;18523:220;;;:::o;18749:366::-;;18912:67;18976:2;18971:3;18912:67;:::i;:::-;18905:74;;18988:93;19077:3;18988:93;:::i;:::-;19106:2;19101:3;19097:12;19090:19;;18895:220;;;:::o;19121:366::-;;19284:67;19348:2;19343:3;19284:67;:::i;:::-;19277:74;;19360:93;19449:3;19360:93;:::i;:::-;19478:2;19473:3;19469:12;19462:19;;19267:220;;;:::o;19493:366::-;;19656:67;19720:2;19715:3;19656:67;:::i;:::-;19649:74;;19732:93;19821:3;19732:93;:::i;:::-;19850:2;19845:3;19841:12;19834:19;;19639:220;;;:::o;19865:366::-;;20028:67;20092:2;20087:3;20028:67;:::i;:::-;20021:74;;20104:93;20193:3;20104:93;:::i;:::-;20222:2;20217:3;20213:12;20206:19;;20011:220;;;:::o;20237:366::-;;20400:67;20464:2;20459:3;20400:67;:::i;:::-;20393:74;;20476:93;20565:3;20476:93;:::i;:::-;20594:2;20589:3;20585:12;20578:19;;20383:220;;;:::o;20609:366::-;;20772:67;20836:2;20831:3;20772:67;:::i;:::-;20765:74;;20848:93;20937:3;20848:93;:::i;:::-;20966:2;20961:3;20957:12;20950:19;;20755:220;;;:::o;20981:366::-;;21144:67;21208:2;21203:3;21144:67;:::i;:::-;21137:74;;21220:93;21309:3;21220:93;:::i;:::-;21338:2;21333:3;21329:12;21322:19;;21127:220;;;:::o;21353:366::-;;21516:67;21580:2;21575:3;21516:67;:::i;:::-;21509:74;;21592:93;21681:3;21592:93;:::i;:::-;21710:2;21705:3;21701:12;21694:19;;21499:220;;;:::o;21725:366::-;;21888:67;21952:2;21947:3;21888:67;:::i;:::-;21881:74;;21964:93;22053:3;21964:93;:::i;:::-;22082:2;22077:3;22073:12;22066:19;;21871:220;;;:::o;22097:366::-;;22260:67;22324:2;22319:3;22260:67;:::i;:::-;22253:74;;22336:93;22425:3;22336:93;:::i;:::-;22454:2;22449:3;22445:12;22438:19;;22243:220;;;:::o;22469:366::-;;22632:67;22696:2;22691:3;22632:67;:::i;:::-;22625:74;;22708:93;22797:3;22708:93;:::i;:::-;22826:2;22821:3;22817:12;22810:19;;22615:220;;;:::o;22841:366::-;;23004:67;23068:2;23063:3;23004:67;:::i;:::-;22997:74;;23080:93;23169:3;23080:93;:::i;:::-;23198:2;23193:3;23189:12;23182:19;;22987:220;;;:::o;23213:366::-;;23376:67;23440:2;23435:3;23376:67;:::i;:::-;23369:74;;23452:93;23541:3;23452:93;:::i;:::-;23570:2;23565:3;23561:12;23554:19;;23359:220;;;:::o;23585:366::-;;23748:67;23812:2;23807:3;23748:67;:::i;:::-;23741:74;;23824:93;23913:3;23824:93;:::i;:::-;23942:2;23937:3;23933:12;23926:19;;23731:220;;;:::o;23957:366::-;;24120:67;24184:2;24179:3;24120:67;:::i;:::-;24113:74;;24196:93;24285:3;24196:93;:::i;:::-;24314:2;24309:3;24305:12;24298:19;;24103:220;;;:::o;24329:366::-;;24492:67;24556:2;24551:3;24492:67;:::i;:::-;24485:74;;24568:93;24657:3;24568:93;:::i;:::-;24686:2;24681:3;24677:12;24670:19;;24475:220;;;:::o;24701:366::-;;24864:67;24928:2;24923:3;24864:67;:::i;:::-;24857:74;;24940:93;25029:3;24940:93;:::i;:::-;25058:2;25053:3;25049:12;25042:19;;24847:220;;;:::o;25073:366::-;;25236:67;25300:2;25295:3;25236:67;:::i;:::-;25229:74;;25312:93;25401:3;25312:93;:::i;:::-;25430:2;25425:3;25421:12;25414:19;;25219:220;;;:::o;25445:366::-;;25608:67;25672:2;25667:3;25608:67;:::i;:::-;25601:74;;25684:93;25773:3;25684:93;:::i;:::-;25802:2;25797:3;25793:12;25786:19;;25591:220;;;:::o;25817:366::-;;25980:67;26044:2;26039:3;25980:67;:::i;:::-;25973:74;;26056:93;26145:3;26056:93;:::i;:::-;26174:2;26169:3;26165:12;26158:19;;25963:220;;;:::o;26189:366::-;;26352:67;26416:2;26411:3;26352:67;:::i;:::-;26345:74;;26428:93;26517:3;26428:93;:::i;:::-;26546:2;26541:3;26537:12;26530:19;;26335:220;;;:::o;26561:366::-;;26724:67;26788:2;26783:3;26724:67;:::i;:::-;26717:74;;26800:93;26889:3;26800:93;:::i;:::-;26918:2;26913:3;26909:12;26902:19;;26707:220;;;:::o;26933:108::-;27010:24;27028:5;27010:24;:::i;:::-;27005:3;26998:37;26988:53;;:::o;27047:118::-;27134:24;27152:5;27134:24;:::i;:::-;27129:3;27122:37;27112:53;;:::o;27171:256::-;;27298:75;27369:3;27360:6;27298:75;:::i;:::-;27398:2;27393:3;27389:12;27382:19;;27418:3;27411:10;;27287:140;;;;:::o;27433:222::-;;27564:2;27553:9;27549:18;27541:26;;27577:71;27645:1;27634:9;27630:17;27621:6;27577:71;:::i;:::-;27531:124;;;;:::o;27661:1053::-;;28022:3;28011:9;28007:19;27999:27;;28036:71;28104:1;28093:9;28089:17;28080:6;28036:71;:::i;:::-;28117:72;28185:2;28174:9;28170:18;28161:6;28117:72;:::i;:::-;28236:9;28230:4;28226:20;28221:2;28210:9;28206:18;28199:48;28264:108;28367:4;28358:6;28264:108;:::i;:::-;28256:116;;28419:9;28413:4;28409:20;28404:2;28393:9;28389:18;28382:48;28447:108;28550:4;28541:6;28447:108;:::i;:::-;28439:116;;28603:9;28597:4;28593:20;28587:3;28576:9;28572:19;28565:49;28631:76;28702:4;28693:6;28631:76;:::i;:::-;28623:84;;27989:725;;;;;;;;:::o;28720:751::-;;28981:3;28970:9;28966:19;28958:27;;28995:71;29063:1;29052:9;29048:17;29039:6;28995:71;:::i;:::-;29076:72;29144:2;29133:9;29129:18;29120:6;29076:72;:::i;:::-;29158;29226:2;29215:9;29211:18;29202:6;29158:72;:::i;:::-;29240;29308:2;29297:9;29293:18;29284:6;29240:72;:::i;:::-;29360:9;29354:4;29350:20;29344:3;29333:9;29329:19;29322:49;29388:76;29459:4;29450:6;29388:76;:::i;:::-;29380:84;;28948:523;;;;;;;;:::o;29477:373::-;;29658:2;29647:9;29643:18;29635:26;;29707:9;29701:4;29697:20;29693:1;29682:9;29678:17;29671:47;29735:108;29838:4;29829:6;29735:108;:::i;:::-;29727:116;;29625:225;;;;:::o;29856:634::-;;30115:2;30104:9;30100:18;30092:26;;30164:9;30158:4;30154:20;30150:1;30139:9;30135:17;30128:47;30192:108;30295:4;30286:6;30192:108;:::i;:::-;30184:116;;30347:9;30341:4;30337:20;30332:2;30321:9;30317:18;30310:48;30375:108;30478:4;30469:6;30375:108;:::i;:::-;30367:116;;30082:408;;;;;:::o;30496:210::-;;30621:2;30610:9;30606:18;30598:26;;30634:65;30696:1;30685:9;30681:17;30672:6;30634:65;:::i;:::-;30588:118;;;;:::o;30712:222::-;;30843:2;30832:9;30828:18;30820:26;;30856:71;30924:1;30913:9;30909:17;30900:6;30856:71;:::i;:::-;30810:124;;;;:::o;30940:218::-;;31069:2;31058:9;31054:18;31046:26;;31082:69;31148:1;31137:9;31133:17;31124:6;31082:69;:::i;:::-;31036:122;;;;:::o;31164:313::-;;31315:2;31304:9;31300:18;31292:26;;31364:9;31358:4;31354:20;31350:1;31339:9;31335:17;31328:47;31392:78;31465:4;31456:6;31392:78;:::i;:::-;31384:86;;31282:195;;;;:::o;31483:419::-;;31687:2;31676:9;31672:18;31664:26;;31736:9;31730:4;31726:20;31722:1;31711:9;31707:17;31700:47;31764:131;31890:4;31764:131;:::i;:::-;31756:139;;31654:248;;;:::o;31908:419::-;;32112:2;32101:9;32097:18;32089:26;;32161:9;32155:4;32151:20;32147:1;32136:9;32132:17;32125:47;32189:131;32315:4;32189:131;:::i;:::-;32181:139;;32079:248;;;:::o;32333:419::-;;32537:2;32526:9;32522:18;32514:26;;32586:9;32580:4;32576:20;32572:1;32561:9;32557:17;32550:47;32614:131;32740:4;32614:131;:::i;:::-;32606:139;;32504:248;;;:::o;32758:419::-;;32962:2;32951:9;32947:18;32939:26;;33011:9;33005:4;33001:20;32997:1;32986:9;32982:17;32975:47;33039:131;33165:4;33039:131;:::i;:::-;33031:139;;32929:248;;;:::o;33183:419::-;;33387:2;33376:9;33372:18;33364:26;;33436:9;33430:4;33426:20;33422:1;33411:9;33407:17;33400:47;33464:131;33590:4;33464:131;:::i;:::-;33456:139;;33354:248;;;:::o;33608:419::-;;33812:2;33801:9;33797:18;33789:26;;33861:9;33855:4;33851:20;33847:1;33836:9;33832:17;33825:47;33889:131;34015:4;33889:131;:::i;:::-;33881:139;;33779:248;;;:::o;34033:419::-;;34237:2;34226:9;34222:18;34214:26;;34286:9;34280:4;34276:20;34272:1;34261:9;34257:17;34250:47;34314:131;34440:4;34314:131;:::i;:::-;34306:139;;34204:248;;;:::o;34458:419::-;;34662:2;34651:9;34647:18;34639:26;;34711:9;34705:4;34701:20;34697:1;34686:9;34682:17;34675:47;34739:131;34865:4;34739:131;:::i;:::-;34731:139;;34629:248;;;:::o;34883:419::-;;35087:2;35076:9;35072:18;35064:26;;35136:9;35130:4;35126:20;35122:1;35111:9;35107:17;35100:47;35164:131;35290:4;35164:131;:::i;:::-;35156:139;;35054:248;;;:::o;35308:419::-;;35512:2;35501:9;35497:18;35489:26;;35561:9;35555:4;35551:20;35547:1;35536:9;35532:17;35525:47;35589:131;35715:4;35589:131;:::i;:::-;35581:139;;35479:248;;;:::o;35733:419::-;;35937:2;35926:9;35922:18;35914:26;;35986:9;35980:4;35976:20;35972:1;35961:9;35957:17;35950:47;36014:131;36140:4;36014:131;:::i;:::-;36006:139;;35904:248;;;:::o;36158:419::-;;36362:2;36351:9;36347:18;36339:26;;36411:9;36405:4;36401:20;36397:1;36386:9;36382:17;36375:47;36439:131;36565:4;36439:131;:::i;:::-;36431:139;;36329:248;;;:::o;36583:419::-;;36787:2;36776:9;36772:18;36764:26;;36836:9;36830:4;36826:20;36822:1;36811:9;36807:17;36800:47;36864:131;36990:4;36864:131;:::i;:::-;36856:139;;36754:248;;;:::o;37008:419::-;;37212:2;37201:9;37197:18;37189:26;;37261:9;37255:4;37251:20;37247:1;37236:9;37232:17;37225:47;37289:131;37415:4;37289:131;:::i;:::-;37281:139;;37179:248;;;:::o;37433:419::-;;37637:2;37626:9;37622:18;37614:26;;37686:9;37680:4;37676:20;37672:1;37661:9;37657:17;37650:47;37714:131;37840:4;37714:131;:::i;:::-;37706:139;;37604:248;;;:::o;37858:419::-;;38062:2;38051:9;38047:18;38039:26;;38111:9;38105:4;38101:20;38097:1;38086:9;38082:17;38075:47;38139:131;38265:4;38139:131;:::i;:::-;38131:139;;38029:248;;;:::o;38283:419::-;;38487:2;38476:9;38472:18;38464:26;;38536:9;38530:4;38526:20;38522:1;38511:9;38507:17;38500:47;38564:131;38690:4;38564:131;:::i;:::-;38556:139;;38454:248;;;:::o;38708:419::-;;38912:2;38901:9;38897:18;38889:26;;38961:9;38955:4;38951:20;38947:1;38936:9;38932:17;38925:47;38989:131;39115:4;38989:131;:::i;:::-;38981:139;;38879:248;;;:::o;39133:419::-;;39337:2;39326:9;39322:18;39314:26;;39386:9;39380:4;39376:20;39372:1;39361:9;39357:17;39350:47;39414:131;39540:4;39414:131;:::i;:::-;39406:139;;39304:248;;;:::o;39558:419::-;;39762:2;39751:9;39747:18;39739:26;;39811:9;39805:4;39801:20;39797:1;39786:9;39782:17;39775:47;39839:131;39965:4;39839:131;:::i;:::-;39831:139;;39729:248;;;:::o;39983:419::-;;40187:2;40176:9;40172:18;40164:26;;40236:9;40230:4;40226:20;40222:1;40211:9;40207:17;40200:47;40264:131;40390:4;40264:131;:::i;:::-;40256:139;;40154:248;;;:::o;40408:419::-;;40612:2;40601:9;40597:18;40589:26;;40661:9;40655:4;40651:20;40647:1;40636:9;40632:17;40625:47;40689:131;40815:4;40689:131;:::i;:::-;40681:139;;40579:248;;;:::o;40833:419::-;;41037:2;41026:9;41022:18;41014:26;;41086:9;41080:4;41076:20;41072:1;41061:9;41057:17;41050:47;41114:131;41240:4;41114:131;:::i;:::-;41106:139;;41004:248;;;:::o;41258:419::-;;41462:2;41451:9;41447:18;41439:26;;41511:9;41505:4;41501:20;41497:1;41486:9;41482:17;41475:47;41539:131;41665:4;41539:131;:::i;:::-;41531:139;;41429:248;;;:::o;41683:419::-;;41887:2;41876:9;41872:18;41864:26;;41936:9;41930:4;41926:20;41922:1;41911:9;41907:17;41900:47;41964:131;42090:4;41964:131;:::i;:::-;41956:139;;41854:248;;;:::o;42108:222::-;;42239:2;42228:9;42224:18;42216:26;;42252:71;42320:1;42309:9;42305:17;42296:6;42252:71;:::i;:::-;42206:124;;;;:::o;42336:332::-;;42495:2;42484:9;42480:18;42472:26;;42508:71;42576:1;42565:9;42561:17;42552:6;42508:71;:::i;:::-;42589:72;42657:2;42646:9;42642:18;42633:6;42589:72;:::i;:::-;42462:206;;;;;:::o;42674:129::-;;42735:20;;:::i;:::-;42725:30;;42764:33;42792:4;42784:6;42764:33;:::i;:::-;42715:88;;;:::o;42809:75::-;;42875:2;42869:9;42859:19;;42849:35;:::o;42890:311::-;;43057:18;43049:6;43046:30;43043:2;;;43079:18;;:::i;:::-;43043:2;43129:4;43121:6;43117:17;43109:25;;43189:4;43183;43179:15;43171:23;;42972:229;;;:::o;43207:311::-;;43374:18;43366:6;43363:30;43360:2;;;43396:18;;:::i;:::-;43360:2;43446:4;43438:6;43434:17;43426:25;;43506:4;43500;43496:15;43488:23;;43289:229;;;:::o;43524:307::-;;43675:18;43667:6;43664:30;43661:2;;;43697:18;;:::i;:::-;43661:2;43735:29;43757:6;43735:29;:::i;:::-;43727:37;;43819:4;43813;43809:15;43801:23;;43590:241;;;:::o;43837:308::-;;43989:18;43981:6;43978:30;43975:2;;;44011:18;;:::i;:::-;43975:2;44049:29;44071:6;44049:29;:::i;:::-;44041:37;;44133:4;44127;44123:15;44115:23;;43904:241;;;:::o;44151:132::-;;44241:3;44233:11;;44271:4;44266:3;44262:14;44254:22;;44223:60;;;:::o;44289:114::-;;44390:5;44384:12;44374:22;;44363:40;;;:::o;44409:98::-;;44494:5;44488:12;44478:22;;44467:40;;;:::o;44513:99::-;;44599:5;44593:12;44583:22;;44572:40;;;:::o;44618:113::-;;44720:4;44715:3;44711:14;44703:22;;44693:38;;;:::o;44737:184::-;;44870:6;44865:3;44858:19;44910:4;44905:3;44901:14;44886:29;;44848:73;;;;:::o;44927:168::-;;45044:6;45039:3;45032:19;45084:4;45079:3;45075:14;45060:29;;45022:73;;;;:::o;45101:169::-;;45219:6;45214:3;45207:19;45259:4;45254:3;45250:14;45235:29;;45197:73;;;;:::o;45276:305::-;;45335:20;45353:1;45335:20;:::i;:::-;45330:25;;45369:20;45387:1;45369:20;:::i;:::-;45364:25;;45523:1;45455:66;45451:74;45448:1;45445:81;45442:2;;;45529:18;;:::i;:::-;45442:2;45573:1;45570;45566:9;45559:16;;45320:261;;;;:::o;45587:348::-;;45650:20;45668:1;45650:20;:::i;:::-;45645:25;;45684:20;45702:1;45684:20;:::i;:::-;45679:25;;45872:1;45804:66;45800:74;45797:1;45794:81;45789:1;45782:9;45775:17;45771:105;45768:2;;;45879:18;;:::i;:::-;45768:2;45927:1;45924;45920:9;45909:20;;45635:300;;;;:::o;45941:191::-;;46001:20;46019:1;46001:20;:::i;:::-;45996:25;;46035:20;46053:1;46035:20;:::i;:::-;46030:25;;46074:1;46071;46068:8;46065:2;;;46079:18;;:::i;:::-;46065:2;46124:1;46121;46117:9;46109:17;;45986:146;;;;:::o;46138:96::-;;46204:24;46222:5;46204:24;:::i;:::-;46193:35;;46183:51;;;:::o;46240:90::-;;46317:5;46310:13;46303:21;46292:32;;46282:48;;;:::o;46336:77::-;;46402:5;46391:16;;46381:32;;;:::o;46419:149::-;;46495:66;46488:5;46484:78;46473:89;;46463:105;;;:::o;46574:126::-;;46651:42;46644:5;46640:54;46629:65;;46619:81;;;:::o;46706:77::-;;46772:5;46761:16;;46751:32;;;:::o;46789:154::-;46873:6;46868:3;46863;46850:30;46935:1;46926:6;46921:3;46917:16;46910:27;46840:103;;;:::o;46949:307::-;47017:1;47027:113;47041:6;47038:1;47035:13;47027:113;;;47126:1;47121:3;47117:11;47111:18;47107:1;47102:3;47098:11;47091:39;47063:2;47060:1;47056:10;47051:15;;47027:113;;;47158:6;47155:1;47152:13;47149:2;;;47238:1;47229:6;47224:3;47220:16;47213:27;47149:2;46998:258;;;;:::o;47262:320::-;;47343:1;47337:4;47333:12;47323:22;;47390:1;47384:4;47380:12;47411:18;47401:2;;47467:4;47459:6;47455:17;47445:27;;47401:2;47529;47521:6;47518:14;47498:18;47495:38;47492:2;;;47548:18;;:::i;:::-;47492:2;47313:269;;;;:::o;47588:281::-;47671:27;47693:4;47671:27;:::i;:::-;47663:6;47659:40;47801:6;47789:10;47786:22;47765:18;47753:10;47750:34;47747:62;47744:2;;;47812:18;;:::i;:::-;47744:2;47852:10;47848:2;47841:22;47631:238;;;:::o;47875:233::-;;47937:24;47955:5;47937:24;:::i;:::-;47928:33;;47983:66;47976:5;47973:77;47970:2;;;48053:18;;:::i;:::-;47970:2;48100:1;48093:5;48089:13;48082:20;;47918:190;;;:::o;48114:100::-;;48182:26;48202:5;48182:26;:::i;:::-;48171:37;;48161:53;;;:::o;48220:94::-;;48288:20;48302:5;48288:20;:::i;:::-;48277:31;;48267:47;;;:::o;48320:180::-;48368:77;48365:1;48358:88;48465:4;48462:1;48455:15;48489:4;48486:1;48479:15;48506:180;48554:77;48551:1;48544:88;48651:4;48648:1;48641:15;48675:4;48672:1;48665:15;48692:180;48740:77;48737:1;48730:88;48837:4;48834:1;48827:15;48861:4;48858:1;48851:15;48878:183;;48951:1;48933:16;48930:23;48927:2;;;48989:1;48986;48983;48968:23;49011:34;49042:1;49036:8;49011:34;:::i;:::-;49004:41;;48927:2;48917:144;:::o;49067:102::-;;49159:2;49155:7;49150:2;49143:5;49139:14;49135:28;49125:38;;49115:54;;;:::o;49175:94::-;;49256:5;49252:2;49248:14;49227:35;;49217:52;;;:::o;49275:106::-;;49368:5;49363:3;49359:15;49338:36;;49328:53;;;:::o;49387:239::-;49527:34;49523:1;49515:6;49511:14;49504:58;49596:22;49591:2;49583:6;49579:15;49572:47;49493:133;:::o;49632:227::-;49772:34;49768:1;49760:6;49756:14;49749:58;49841:10;49836:2;49828:6;49824:15;49817:35;49738:121;:::o;49865:171::-;50005:23;50001:1;49993:6;49989:14;49982:47;49971:65;:::o;50042:176::-;50182:28;50178:1;50170:6;50166:14;50159:52;50148:70;:::o;50224:230::-;50364:34;50360:1;50352:6;50348:14;50341:58;50433:13;50428:2;50420:6;50416:15;50409:38;50330:124;:::o;50460:225::-;50600:34;50596:1;50588:6;50584:14;50577:58;50669:8;50664:2;50656:6;50652:15;50645:33;50566:119;:::o;50691:228::-;50831:34;50827:1;50819:6;50815:14;50808:58;50900:11;50895:2;50887:6;50883:15;50876:36;50797:122;:::o;50925:178::-;51065:30;51061:1;51053:6;51049:14;51042:54;51031:72;:::o;51109:238::-;51249:34;51245:1;51237:6;51233:14;51226:58;51318:21;51313:2;51305:6;51301:15;51294:46;51215:132;:::o;51353:173::-;51493:25;51489:1;51481:6;51477:14;51470:49;51459:67;:::o;51532:224::-;51672:34;51668:1;51660:6;51656:14;51649:58;51741:7;51736:2;51728:6;51724:15;51717:32;51638:118;:::o;51762:237::-;51902:34;51898:1;51890:6;51886:14;51879:58;51971:20;51966:2;51958:6;51954:15;51947:45;51868:131;:::o;52005:225::-;52145:34;52141:1;52133:6;52129:14;52122:58;52214:8;52209:2;52201:6;52197:15;52190:33;52111:119;:::o;52236:175::-;52376:27;52372:1;52364:6;52360:14;52353:51;52342:69;:::o;52417:175::-;52557:27;52553:1;52545:6;52541:14;52534:51;52523:69;:::o;52598:181::-;52738:33;52734:1;52726:6;52722:14;52715:57;52704:75;:::o;52785:229::-;52925:34;52921:1;52913:6;52909:14;52902:58;52994:12;52989:2;52981:6;52977:15;52970:37;52891:123;:::o;53020:168::-;53160:20;53156:1;53148:6;53144:14;53137:44;53126:62;:::o;53194:182::-;53334:34;53330:1;53322:6;53318:14;53311:58;53300:76;:::o;53382:180::-;53522:32;53518:1;53510:6;53506:14;53499:56;53488:74;:::o;53568:168::-;53708:20;53704:1;53696:6;53692:14;53685:44;53674:62;:::o;53742:228::-;53882:34;53878:1;53870:6;53866:14;53859:58;53951:11;53946:2;53938:6;53934:15;53927:36;53848:122;:::o;53976:228::-;54116:34;54112:1;54104:6;54100:14;54093:58;54185:11;54180:2;54172:6;54168:15;54161:36;54082:122;:::o;54210:227::-;54350:34;54346:1;54338:6;54334:14;54327:58;54419:10;54414:2;54406:6;54402:15;54395:35;54316:121;:::o;54443:220::-;54583:34;54579:1;54571:6;54567:14;54560:58;54652:3;54647:2;54639:6;54635:15;54628:28;54549:114;:::o;54669:711::-;;54746:4;54728:16;54725:26;54722:2;;;54754:5;;54722:2;54783:20;;:::i;:::-;54858:1;54840:16;54836:24;54833:1;54827:4;54812:49;54891:4;54885:11;54990:16;54983:4;54975:6;54971:17;54968:39;54935:18;54927:6;54924:30;54908:113;54905:2;;;55036:5;;;;54905:2;55082:6;55076:4;55072:17;55118:3;55112:10;55145:18;55137:6;55134:30;55131:2;;;55167:5;;;;;;55131:2;55215:6;55208:4;55203:3;55199:14;55195:27;55274:1;55256:16;55252:24;55246:4;55242:35;55237:3;55234:44;55231:2;;;55281:5;;;;;;;55231:2;55298:57;55346:6;55340:4;55336:17;55328:6;55324:30;55318:4;55298:57;:::i;:::-;55371:3;55364:10;;54712:668;;;;;;;:::o;55386:122::-;55459:24;55477:5;55459:24;:::i;:::-;55452:5;55449:35;55439:2;;55498:1;55495;55488:12;55439:2;55429:79;:::o;55514:116::-;55584:21;55599:5;55584:21;:::i;:::-;55577:5;55574:32;55564:2;;55620:1;55617;55610:12;55564:2;55554:76;:::o;55636:122::-;55709:24;55727:5;55709:24;:::i;:::-;55702:5;55699:35;55689:2;;55748:1;55745;55738:12;55689:2;55679:79;:::o;55764:120::-;55836:23;55853:5;55836:23;:::i;:::-;55829:5;55826:34;55816:2;;55874:1;55871;55864:12;55816:2;55806:78;:::o;55890:122::-;55963:24;55981:5;55963:24;:::i;:::-;55956:5;55953:35;55943:2;;56002:1;55999;55992:12;55943:2;55933:79;:::o

Swarm Source

ipfs://9f7dc7427f6e06783cf1e232959eb4c5fc249007672c22d4152ca78d52938c6b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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