ETH Price: $3,159.56 (+0.52%)
Gas: 2 Gwei

Token

 

Overview

Max Total Supply

333

Holders

244

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
johnthehermit.eth
0x2572f630800c6ff3f808c43967ffbce834c37085
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:
NFTLandAlphaPass

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/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/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/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/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/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/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/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/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/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File: @openzeppelin/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: contracts/7_NFTLand.sol


pragma solidity ^0.8.13;






contract NFTLandAlphaPass is Ownable, ReentrancyGuard, ERC1155Supply {
    uint16 constant MAX_TOKENS = 333;
    uint16 totalMinted;

    uint256[] salePrices = [0.15 ether, 0.2 ether];
    
    bool isReserveState = true;
    mapping(address => uint8) public firstWhitelist;
    mapping(address => uint8) public secondWhitelist;

    address payable communityWallet;
    address payable nftLandWallet;

    constructor(
        string memory baseURI,
        address payable nftLandWalletAddress,
        address payable communityWalletAddress
        ) ERC1155(baseURI) {
            communityWallet = communityWalletAddress;
            nftLandWallet = nftLandWalletAddress;
    }

    function reserve(uint16 amount) external onlyOwner {
        require(isReserveState, "Reserve state not active");
        require(totalMinted + amount <= MAX_TOKENS, 'Minted amount will exceed max supply');
        totalMinted += amount;
        _mint(msg.sender, 0, amount, '');
    }

    function mint() external payable nonReentrant {
        require(isReserveState == false, "There is no sale active currently");
        require(totalMinted + 1 <= MAX_TOKENS, 'Minted amount will exceed max supply.');
        uint8 mintableCode = 2;
        if (firstWhitelist[address(msg.sender)] == 1) {
            mintableCode = 0;
        } else if (secondWhitelist[address(msg.sender)] == 1) {
            mintableCode = 1;
        }
        require(mintableCode != 2, 'Address cannot mint a token.');
        require(msg.value == salePrices[mintableCode], 'Insufficient ether provided to mint.');
        totalMinted += 1;
        mintableCode == 0 ? firstWhitelist[address(msg.sender)] = 2 : secondWhitelist[address(msg.sender)] = 2;
        _mint(msg.sender, 0, 1, '');
    }

    function switchReserveState() external onlyOwner {
        isReserveState = !isReserveState;
    }

    function getReserveState() external view onlyOwner returns (bool) {
        return isReserveState;
    }

    function setMetadataUri(string memory uri) external onlyOwner {
        _setURI(uri);
    }
    
    function withdrawBalance() external onlyOwner {
        require(address(this).balance > 0, "Insufficient balance");
        uint256 communityBalance = (address(this).balance * 20)/100;
        uint256 nftLandBalance = address(this).balance - communityBalance;
        (bool communitySuccess, ) = communityWallet.call{ value: communityBalance }("");
        (bool nftLandSuccess, ) = nftLandWallet.call{ value: nftLandBalance }("");
        require(communitySuccess && nftLandSuccess, "Ether withdrawal failed");
    }

    function addToFirstWhitelist(address[] memory addresses) external onlyOwner {
        for (uint8 i = 0; i < addresses.length; i++) {
            require(firstWhitelist[addresses[i]] == 0, "Address already exists in whitelist");
            firstWhitelist[addresses[i]]=1;
        }
    }

    function addToSecondWhitelist(address[] memory addresses) external onlyOwner {
        for (uint8 i = 0; i < addresses.length; i++) {
            require(secondWhitelist[addresses[i]] == 0 , "Address already exists in whitelist");
            secondWhitelist[addresses[i]]=1;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address payable","name":"nftLandWalletAddress","type":"address"},{"internalType":"address payable","name":"communityWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToFirstWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToSecondWhitelist","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"firstWhitelist","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserveState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"amount","type":"uint16"}],"name":"reserve","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":"","type":"address"}],"name":"secondWhitelist","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"setMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchReserveState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280670214e8348c4f000067ffffffffffffffff1681526020016702c68af0bb14000067ffffffffffffffff1681525060079060026200004f9291906200024b565b506001600860006101000a81548160ff0219169083151502179055503480156200007857600080fd5b5060405162004df338038062004df383398181016040528101906200009e91906200055b565b82620000bf620000b36200016360201b60201c565b6200016b60201b60201c565b60018081905550620000d7816200022f60201b60201c565b5080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200063a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806004908051906020019062000247929190620002a9565b5050565b82805482825590600052602060002090810192821562000296579160200282015b8281111562000295578251829067ffffffffffffffff169055916020019190600101906200026c565b5b509050620002a591906200033a565b5090565b828054620002b79062000605565b90600052602060002090601f016020900481019282620002db576000855562000327565b82601f10620002f657805160ff191683800117855562000327565b8280016001018555821562000327579182015b828111156200032657825182559160200191906001019062000309565b5b5090506200033691906200033a565b5090565b5b80821115620003555760008160009055506001016200033b565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003c28262000377565b810181811067ffffffffffffffff82111715620003e457620003e362000388565b5b80604052505050565b6000620003f962000359565b9050620004078282620003b7565b919050565b600067ffffffffffffffff8211156200042a576200042962000388565b5b620004358262000377565b9050602081019050919050565b60005b838110156200046257808201518184015260208101905062000445565b8381111562000472576000848401525b50505050565b60006200048f62000489846200040c565b620003ed565b905082815260208101848484011115620004ae57620004ad62000372565b5b620004bb84828562000442565b509392505050565b600082601f830112620004db57620004da6200036d565b5b8151620004ed84826020860162000478565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200052382620004f6565b9050919050565b620005358162000516565b81146200054157600080fd5b50565b60008151905062000555816200052a565b92915050565b60008060006060848603121562000577576200057662000363565b5b600084015167ffffffffffffffff81111562000598576200059762000368565b5b620005a686828701620004c3565b9350506020620005b98682870162000544565b9250506040620005cc8682870162000544565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200061e57607f821691505b602082108103620006345762000633620005d6565b5b50919050565b6147a9806200064a6000396000f3fe60806040526004361061013f5760003560e01c80635fd8c710116100b6578063bd85b0391161006f578063bd85b03914610448578063d601f10a14610485578063e985e9c51461049c578063ef5bac25146104d9578063f242432a14610504578063f2fde38b1461052d5761013f565b80635fd8c71014610374578063661f22691461038b578063715018a6146103b45780638da5cb5b146103cb57806395c47704146103f6578063a22cb4651461041f5761013f565b80631f0808d4116101085780631f0808d41461022e5780632eb2c2d61461025757806335d2d3bf1461028057806343b967e3146102bd5780634e1273f4146102fa5780634f558e79146103375761013f565b8062fdd58e1461014457806301ffc9a7146101815780630e89341c146101be5780631130630c146101fb5780631249c58b14610224575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612adf565b610556565b6040516101789190612b2e565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612ba1565b61061f565b6040516101b59190612be9565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c04565b610701565b6040516101f29190612cca565b60405180910390f35b34801561020757600080fd5b50610222600480360381019061021d9190612e21565b610795565b005b61022c61081d565b005b34801561023a57600080fd5b5061025560048036038101906102509190612ea4565b610bb8565b005b34801561026357600080fd5b5061027e6004803603810190610279919061303a565b610d47565b005b34801561028c57600080fd5b506102a760048036038101906102a29190613109565b610de8565b6040516102b49190613152565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613109565b610e08565b6040516102f19190613152565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613230565b610e28565b60405161032e9190613366565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190612c04565b610f41565b60405161036b9190612be9565b60405180910390f35b34801561038057600080fd5b50610389610f55565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613388565b6111ac565b005b3480156103c057600080fd5b506103c9611373565b005b3480156103d757600080fd5b506103e06113fb565b6040516103ed91906133e0565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613388565b611424565b005b34801561042b57600080fd5b5061044660048036038101906104419190613427565b6115eb565b005b34801561045457600080fd5b5061046f600480360381019061046a9190612c04565b611601565b60405161047c9190612b2e565b60405180910390f35b34801561049157600080fd5b5061049a61161e565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613467565b6116c6565b6040516104d09190612be9565b60405180910390f35b3480156104e557600080fd5b506104ee61175a565b6040516104fb9190612be9565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906134a7565b6117ed565b005b34801561053957600080fd5b50610554600480360381019061054f9190613109565b61188e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bd906135b0565b60405180910390fd5b6002600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ea57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106fa57506106f982611985565b5b9050919050565b606060048054610710906135ff565b80601f016020809104026020016040519081016040528092919081815260200182805461073c906135ff565b80156107895780601f1061075e57610100808354040283529160200191610789565b820191906000526020600020905b81548152906001019060200180831161076c57829003601f168201915b50505050509050919050565b61079d6119ef565b73ffffffffffffffffffffffffffffffffffffffff166107bb6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108089061367c565b60405180910390fd5b61081a816119f7565b50565b600260015403610862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610859906136e8565b60405180910390fd5b600260018190555060001515600860009054906101000a900460ff161515146108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b79061377a565b60405180910390fd5b61014d61ffff166001600660009054906101000a900461ffff166108e491906137c9565b61ffff161115610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090613873565b60405180910390fd5b6000600290506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff160361098f57600090506109ec565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16036109eb57600190505b5b60028160ff1603610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a29906138df565b60405180910390fd5b60078160ff1681548110610a4957610a486138ff565b5b90600052602060002001543414610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c906139a0565b60405180910390fd5b6001600660008282829054906101000a900461ffff16610ab591906137c9565b92506101000a81548161ffff021916908361ffff16021790555060008160ff1614610b37576002600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055610b90565b6002600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555b50610bae336000600160405180602001604052806000815250611a11565b5060018081905550565b610bc06119ef565b73ffffffffffffffffffffffffffffffffffffffff16610bde6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b9061367c565b60405180910390fd5b600860009054906101000a900460ff16610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613a0c565b60405180910390fd5b61014d61ffff1681600660009054906101000a900461ffff16610ca691906137c9565b61ffff161115610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613a9e565b60405180910390fd5b80600660008282829054906101000a900461ffff16610d0a91906137c9565b92506101000a81548161ffff021916908361ffff160217905550610d443360008361ffff1660405180602001604052806000815250611a11565b50565b610d4f6119ef565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d955750610d9485610d8f6119ef565b6116c6565b5b610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90613b30565b60405180910390fd5b610de18585858585611ba7565b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b60608151835114610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613bc2565b60405180910390fd5b6000835167ffffffffffffffff811115610e8b57610e8a612cf6565b5b604051908082528060200260200182016040528015610eb95781602001602082028036833780820191505090505b50905060005b8451811015610f3657610f06858281518110610ede57610edd6138ff565b5b6020026020010151858381518110610ef957610ef86138ff565b5b6020026020010151610556565b828281518110610f1957610f186138ff565b5b60200260200101818152505080610f2f90613be2565b9050610ebf565b508091505092915050565b600080610f4d83611601565b119050919050565b610f5d6119ef565b73ffffffffffffffffffffffffffffffffffffffff16610f7b6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc89061367c565b60405180910390fd5b60004711611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613c76565b60405180910390fd5b600060646014476110259190613c96565b61102f9190613d1f565b90506000814761103f9190613d50565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161108990613db5565b60006040518083038185875af1925050503d80600081146110c6576040519150601f19603f3d011682016040523d82523d6000602084013e6110cb565b606091505b505090506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161111790613db5565b60006040518083038185875af1925050503d8060008114611154576040519150601f19603f3d011682016040523d82523d6000602084013e611159565b606091505b505090508180156111675750805b6111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e16565b60405180910390fd5b50505050565b6111b46119ef565b73ffffffffffffffffffffffffffffffffffffffff166111d26113fb565b73ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f9061367c565b60405180910390fd5b60005b81518160ff16101561136f57600060096000848460ff1681518110611253576112526138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16146112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613ea8565b60405180910390fd5b600160096000848460ff1681518110611302576113016138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550808061136790613ec8565b91505061122b565b5050565b61137b6119ef565b73ffffffffffffffffffffffffffffffffffffffff166113996113fb565b73ffffffffffffffffffffffffffffffffffffffff16146113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e69061367c565b60405180910390fd5b6113f96000611ebd565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142c6119ef565b73ffffffffffffffffffffffffffffffffffffffff1661144a6113fb565b73ffffffffffffffffffffffffffffffffffffffff16146114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061367c565b60405180910390fd5b60005b81518160ff1610156115e7576000600a6000848460ff16815181106114cb576114ca6138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161461155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590613ea8565b60405180910390fd5b6001600a6000848460ff168151811061157a576115796138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806115df90613ec8565b9150506114a3565b5050565b6115fd6115f66119ef565b8383611f81565b5050565b600060056000838152602001908152602001600020549050919050565b6116266119ef565b73ffffffffffffffffffffffffffffffffffffffff166116446113fb565b73ffffffffffffffffffffffffffffffffffffffff161461169a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116919061367c565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006117646119ef565b73ffffffffffffffffffffffffffffffffffffffff166117826113fb565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf9061367c565b60405180910390fd5b600860009054906101000a900460ff16905090565b6117f56119ef565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061183b575061183a856118356119ef565b6116c6565b5b61187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613f63565b60405180910390fd5b61188785858585856120ed565b5050505050565b6118966119ef565b73ffffffffffffffffffffffffffffffffffffffff166118b46113fb565b73ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061367c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090613ff5565b60405180910390fd5b61198281611ebd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060049080519060200190611a0d929190612994565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790614087565b60405180910390fd5b6000611a8a6119ef565b9050611aab81600087611a9c88612371565b611aa588612371565b876123eb565b826002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0b91906140a7565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b899291906140fd565b60405180910390a4611ba0816000878787876125bb565b5050505050565b8151835114611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290614198565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c519061422a565b60405180910390fd5b6000611c646119ef565b9050611c748187878787876123eb565b60005b8451811015611e28576000858281518110611c9557611c946138ff565b5b602002602001015190506000858381518110611cb457611cb36138ff565b5b6020026020010151905060006002600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d906142bc565b60405180910390fd5b8181036002600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0d91906140a7565b9250508190555050505080611e2190613be2565b9050611c77565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e9f9291906142dc565b60405180910390a4611eb5818787878787612792565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614385565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120e09190612be9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361215c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121539061422a565b60405180910390fd5b60006121666119ef565b905061218681878761217788612371565b61218088612371565b876123eb565b60006002600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906142bc565b60405180910390fd5b8381036002600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836002600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d591906140a7565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516123529291906140fd565b60405180910390a46123688288888888886125bb565b50505050505050565b60606000600167ffffffffffffffff8111156123905761238f612cf6565b5b6040519080825280602002602001820160405280156123be5781602001602082028036833780820191505090505b50905082816000815181106123d6576123d56138ff565b5b60200260200101818152505080915050919050565b6123f9868686868686612969565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036124aa5760005b83518110156124a85782818151811061244c5761244b6138ff565b5b60200260200101516005600086848151811061246b5761246a6138ff565b5b60200260200101518152602001908152602001600020600082825461249091906140a7565b92505081905550806124a190613be2565b9050612430565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125b35760005b83518110156125b15760008482815181106124ff576124fe6138ff565b5b60200260200101519050600084838151811061251e5761251d6138ff565b5b6020026020010151905060006005600084815260200190815260200160002054905081811015612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614417565b60405180910390fd5b8181036005600085815260200190815260200160002081905550505050806125aa90613be2565b90506124e1565b505b505050505050565b6125da8473ffffffffffffffffffffffffffffffffffffffff16612971565b1561278a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161262095949392919061448c565b6020604051808303816000875af192505050801561265c57506040513d601f19601f8201168201806040525081019061265991906144fb565b60015b61270157612668614535565b806308c379a0036126c4575061267c614557565b8061268757506126c6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb9190612cca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f890614659565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f906146eb565b60405180910390fd5b505b505050505050565b6127b18473ffffffffffffffffffffffffffffffffffffffff16612971565b15612961578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016127f795949392919061470b565b6020604051808303816000875af192505050801561283357506040513d601f19601f8201168201806040525081019061283091906144fb565b60015b6128d85761283f614535565b806308c379a00361289b5750612853614557565b8061285e575061289d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929190612cca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cf90614659565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461295f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612956906146eb565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546129a0906135ff565b90600052602060002090601f0160209004810192826129c25760008555612a09565b82601f106129db57805160ff1916838001178555612a09565b82800160010185558215612a09579182015b82811115612a085782518255916020019190600101906129ed565b5b509050612a169190612a1a565b5090565b5b80821115612a33576000816000905550600101612a1b565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a7682612a4b565b9050919050565b612a8681612a6b565b8114612a9157600080fd5b50565b600081359050612aa381612a7d565b92915050565b6000819050919050565b612abc81612aa9565b8114612ac757600080fd5b50565b600081359050612ad981612ab3565b92915050565b60008060408385031215612af657612af5612a41565b5b6000612b0485828601612a94565b9250506020612b1585828601612aca565b9150509250929050565b612b2881612aa9565b82525050565b6000602082019050612b436000830184612b1f565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b7e81612b49565b8114612b8957600080fd5b50565b600081359050612b9b81612b75565b92915050565b600060208284031215612bb757612bb6612a41565b5b6000612bc584828501612b8c565b91505092915050565b60008115159050919050565b612be381612bce565b82525050565b6000602082019050612bfe6000830184612bda565b92915050565b600060208284031215612c1a57612c19612a41565b5b6000612c2884828501612aca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c6b578082015181840152602081019050612c50565b83811115612c7a576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c9c82612c31565b612ca68185612c3c565b9350612cb6818560208601612c4d565b612cbf81612c80565b840191505092915050565b60006020820190508181036000830152612ce48184612c91565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d2e82612c80565b810181811067ffffffffffffffff82111715612d4d57612d4c612cf6565b5b80604052505050565b6000612d60612a37565b9050612d6c8282612d25565b919050565b600067ffffffffffffffff821115612d8c57612d8b612cf6565b5b612d9582612c80565b9050602081019050919050565b82818337600083830152505050565b6000612dc4612dbf84612d71565b612d56565b905082815260208101848484011115612de057612ddf612cf1565b5b612deb848285612da2565b509392505050565b600082601f830112612e0857612e07612cec565b5b8135612e18848260208601612db1565b91505092915050565b600060208284031215612e3757612e36612a41565b5b600082013567ffffffffffffffff811115612e5557612e54612a46565b5b612e6184828501612df3565b91505092915050565b600061ffff82169050919050565b612e8181612e6a565b8114612e8c57600080fd5b50565b600081359050612e9e81612e78565b92915050565b600060208284031215612eba57612eb9612a41565b5b6000612ec884828501612e8f565b91505092915050565b600067ffffffffffffffff821115612eec57612eeb612cf6565b5b602082029050602081019050919050565b600080fd5b6000612f15612f1084612ed1565b612d56565b90508083825260208201905060208402830185811115612f3857612f37612efd565b5b835b81811015612f615780612f4d8882612aca565b845260208401935050602081019050612f3a565b5050509392505050565b600082601f830112612f8057612f7f612cec565b5b8135612f90848260208601612f02565b91505092915050565b600067ffffffffffffffff821115612fb457612fb3612cf6565b5b612fbd82612c80565b9050602081019050919050565b6000612fdd612fd884612f99565b612d56565b905082815260208101848484011115612ff957612ff8612cf1565b5b613004848285612da2565b509392505050565b600082601f83011261302157613020612cec565b5b8135613031848260208601612fca565b91505092915050565b600080600080600060a0868803121561305657613055612a41565b5b600061306488828901612a94565b955050602061307588828901612a94565b945050604086013567ffffffffffffffff81111561309657613095612a46565b5b6130a288828901612f6b565b935050606086013567ffffffffffffffff8111156130c3576130c2612a46565b5b6130cf88828901612f6b565b925050608086013567ffffffffffffffff8111156130f0576130ef612a46565b5b6130fc8882890161300c565b9150509295509295909350565b60006020828403121561311f5761311e612a41565b5b600061312d84828501612a94565b91505092915050565b600060ff82169050919050565b61314c81613136565b82525050565b60006020820190506131676000830184613143565b92915050565b600067ffffffffffffffff82111561318857613187612cf6565b5b602082029050602081019050919050565b60006131ac6131a78461316d565b612d56565b905080838252602082019050602084028301858111156131cf576131ce612efd565b5b835b818110156131f857806131e48882612a94565b8452602084019350506020810190506131d1565b5050509392505050565b600082601f83011261321757613216612cec565b5b8135613227848260208601613199565b91505092915050565b6000806040838503121561324757613246612a41565b5b600083013567ffffffffffffffff81111561326557613264612a46565b5b61327185828601613202565b925050602083013567ffffffffffffffff81111561329257613291612a46565b5b61329e85828601612f6b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132dd81612aa9565b82525050565b60006132ef83836132d4565b60208301905092915050565b6000602082019050919050565b6000613313826132a8565b61331d81856132b3565b9350613328836132c4565b8060005b8381101561335957815161334088826132e3565b975061334b836132fb565b92505060018101905061332c565b5085935050505092915050565b600060208201905081810360008301526133808184613308565b905092915050565b60006020828403121561339e5761339d612a41565b5b600082013567ffffffffffffffff8111156133bc576133bb612a46565b5b6133c884828501613202565b91505092915050565b6133da81612a6b565b82525050565b60006020820190506133f560008301846133d1565b92915050565b61340481612bce565b811461340f57600080fd5b50565b600081359050613421816133fb565b92915050565b6000806040838503121561343e5761343d612a41565b5b600061344c85828601612a94565b925050602061345d85828601613412565b9150509250929050565b6000806040838503121561347e5761347d612a41565b5b600061348c85828601612a94565b925050602061349d85828601612a94565b9150509250929050565b600080600080600060a086880312156134c3576134c2612a41565b5b60006134d188828901612a94565b95505060206134e288828901612a94565b94505060406134f388828901612aca565b935050606061350488828901612aca565b925050608086013567ffffffffffffffff81111561352557613524612a46565b5b6135318882890161300c565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061359a602b83612c3c565b91506135a58261353e565b604082019050919050565b600060208201905081810360008301526135c98161358d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061361757607f821691505b60208210810361362a576136296135d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613666602083612c3c565b915061367182613630565b602082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006136d2601f83612c3c565b91506136dd8261369c565b602082019050919050565b60006020820190508181036000830152613701816136c5565b9050919050565b7f5468657265206973206e6f2073616c65206163746976652063757272656e746c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b6000613764602183612c3c565b915061376f82613708565b604082019050919050565b6000602082019050818103600083015261379381613757565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137d482612e6a565b91506137df83612e6a565b92508261ffff038211156137f6576137f561379a565b5b828201905092915050565b7f4d696e74656420616d6f756e742077696c6c20657863656564206d617820737560008201527f70706c792e000000000000000000000000000000000000000000000000000000602082015250565b600061385d602583612c3c565b915061386882613801565b604082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b7f416464726573732063616e6e6f74206d696e74206120746f6b656e2e00000000600082015250565b60006138c9601c83612c3c565b91506138d482613893565b602082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e73756666696369656e742065746865722070726f766964656420746f206d60008201527f696e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061398a602483612c3c565b91506139958261392e565b604082019050919050565b600060208201905081810360008301526139b98161397d565b9050919050565b7f52657365727665207374617465206e6f74206163746976650000000000000000600082015250565b60006139f6601883612c3c565b9150613a01826139c0565b602082019050919050565b60006020820190508181036000830152613a25816139e9565b9050919050565b7f4d696e74656420616d6f756e742077696c6c20657863656564206d617820737560008201527f70706c7900000000000000000000000000000000000000000000000000000000602082015250565b6000613a88602483612c3c565b9150613a9382613a2c565b604082019050919050565b60006020820190508181036000830152613ab781613a7b565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613b1a603283612c3c565b9150613b2582613abe565b604082019050919050565b60006020820190508181036000830152613b4981613b0d565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613bac602983612c3c565b9150613bb782613b50565b604082019050919050565b60006020820190508181036000830152613bdb81613b9f565b9050919050565b6000613bed82612aa9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c1f57613c1e61379a565b5b600182019050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613c60601483612c3c565b9150613c6b82613c2a565b602082019050919050565b60006020820190508181036000830152613c8f81613c53565b9050919050565b6000613ca182612aa9565b9150613cac83612aa9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ce557613ce461379a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2a82612aa9565b9150613d3583612aa9565b925082613d4557613d44613cf0565b5b828204905092915050565b6000613d5b82612aa9565b9150613d6683612aa9565b925082821015613d7957613d7861379a565b5b828203905092915050565b600081905092915050565b50565b6000613d9f600083613d84565b9150613daa82613d8f565b600082019050919050565b6000613dc082613d92565b9150819050919050565b7f4574686572207769746864726177616c206661696c6564000000000000000000600082015250565b6000613e00601783612c3c565b9150613e0b82613dca565b602082019050919050565b60006020820190508181036000830152613e2f81613df3565b9050919050565b7f4164647265737320616c72656164792065786973747320696e2077686974656c60008201527f6973740000000000000000000000000000000000000000000000000000000000602082015250565b6000613e92602383612c3c565b9150613e9d82613e36565b604082019050919050565b60006020820190508181036000830152613ec181613e85565b9050919050565b6000613ed382613136565b915060ff8203613ee657613ee561379a565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613f4d602983612c3c565b9150613f5882613ef1565b604082019050919050565b60006020820190508181036000830152613f7c81613f40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fdf602683612c3c565b9150613fea82613f83565b604082019050919050565b6000602082019050818103600083015261400e81613fd2565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614071602183612c3c565b915061407c82614015565b604082019050919050565b600060208201905081810360008301526140a081614064565b9050919050565b60006140b282612aa9565b91506140bd83612aa9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140f2576140f161379a565b5b828201905092915050565b60006040820190506141126000830185612b1f565b61411f6020830184612b1f565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614182602883612c3c565b915061418d82614126565b604082019050919050565b600060208201905081810360008301526141b181614175565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614214602583612c3c565b915061421f826141b8565b604082019050919050565b6000602082019050818103600083015261424381614207565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006142a6602a83612c3c565b91506142b18261424a565b604082019050919050565b600060208201905081810360008301526142d581614299565b9050919050565b600060408201905081810360008301526142f68185613308565b9050818103602083015261430a8184613308565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061436f602983612c3c565b915061437a82614313565b604082019050919050565b6000602082019050818103600083015261439e81614362565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614401602883612c3c565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061445e82614437565b6144688185614442565b9350614478818560208601612c4d565b61448181612c80565b840191505092915050565b600060a0820190506144a160008301886133d1565b6144ae60208301876133d1565b6144bb6040830186612b1f565b6144c86060830185612b1f565b81810360808301526144da8184614453565b90509695505050505050565b6000815190506144f581612b75565b92915050565b60006020828403121561451157614510612a41565b5b600061451f848285016144e6565b91505092915050565b60008160e01c9050919050565b600060033d11156145545760046000803e614551600051614528565b90505b90565b600060443d106145e457614569612a37565b60043d036004823e80513d602482011167ffffffffffffffff821117156145915750506145e4565b808201805167ffffffffffffffff8111156145af57505050506145e4565b80602083010160043d0385018111156145cc5750505050506145e4565b6145db82602001850186612d25565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614643603483612c3c565b915061464e826145e7565b604082019050919050565b6000602082019050818103600083015261467281614636565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006146d5602883612c3c565b91506146e082614679565b604082019050919050565b60006020820190508181036000830152614704816146c8565b9050919050565b600060a08201905061472060008301886133d1565b61472d60208301876133d1565b818103604083015261473f8186613308565b905081810360608301526147538185613308565b905081810360808301526147678184614453565b9050969550505050505056fea2646970667358221220a7f502e3684690cbcd7bcc54fc15432010f10701e64d65f1bd99ee1a1ce8c4a064736f6c634300080d00330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f6062ae6d646709c26d83814102eea3cad5593f40000000000000000000000000d8a7978b137c7f74cc7ba967e6199b79cb21684000000000000000000000000000000000000000000000000000000000000003c697066733a2f2f516d5366564e584865556a6464794c52635143566a4e70794c344543697859765838466a375675785a4338726e482f302e6a736f6e00000000

Deployed Bytecode

0x60806040526004361061013f5760003560e01c80635fd8c710116100b6578063bd85b0391161006f578063bd85b03914610448578063d601f10a14610485578063e985e9c51461049c578063ef5bac25146104d9578063f242432a14610504578063f2fde38b1461052d5761013f565b80635fd8c71014610374578063661f22691461038b578063715018a6146103b45780638da5cb5b146103cb57806395c47704146103f6578063a22cb4651461041f5761013f565b80631f0808d4116101085780631f0808d41461022e5780632eb2c2d61461025757806335d2d3bf1461028057806343b967e3146102bd5780634e1273f4146102fa5780634f558e79146103375761013f565b8062fdd58e1461014457806301ffc9a7146101815780630e89341c146101be5780631130630c146101fb5780631249c58b14610224575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612adf565b610556565b6040516101789190612b2e565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612ba1565b61061f565b6040516101b59190612be9565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c04565b610701565b6040516101f29190612cca565b60405180910390f35b34801561020757600080fd5b50610222600480360381019061021d9190612e21565b610795565b005b61022c61081d565b005b34801561023a57600080fd5b5061025560048036038101906102509190612ea4565b610bb8565b005b34801561026357600080fd5b5061027e6004803603810190610279919061303a565b610d47565b005b34801561028c57600080fd5b506102a760048036038101906102a29190613109565b610de8565b6040516102b49190613152565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613109565b610e08565b6040516102f19190613152565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613230565b610e28565b60405161032e9190613366565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190612c04565b610f41565b60405161036b9190612be9565b60405180910390f35b34801561038057600080fd5b50610389610f55565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613388565b6111ac565b005b3480156103c057600080fd5b506103c9611373565b005b3480156103d757600080fd5b506103e06113fb565b6040516103ed91906133e0565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613388565b611424565b005b34801561042b57600080fd5b5061044660048036038101906104419190613427565b6115eb565b005b34801561045457600080fd5b5061046f600480360381019061046a9190612c04565b611601565b60405161047c9190612b2e565b60405180910390f35b34801561049157600080fd5b5061049a61161e565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613467565b6116c6565b6040516104d09190612be9565b60405180910390f35b3480156104e557600080fd5b506104ee61175a565b6040516104fb9190612be9565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906134a7565b6117ed565b005b34801561053957600080fd5b50610554600480360381019061054f9190613109565b61188e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bd906135b0565b60405180910390fd5b6002600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ea57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106fa57506106f982611985565b5b9050919050565b606060048054610710906135ff565b80601f016020809104026020016040519081016040528092919081815260200182805461073c906135ff565b80156107895780601f1061075e57610100808354040283529160200191610789565b820191906000526020600020905b81548152906001019060200180831161076c57829003601f168201915b50505050509050919050565b61079d6119ef565b73ffffffffffffffffffffffffffffffffffffffff166107bb6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108089061367c565b60405180910390fd5b61081a816119f7565b50565b600260015403610862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610859906136e8565b60405180910390fd5b600260018190555060001515600860009054906101000a900460ff161515146108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b79061377a565b60405180910390fd5b61014d61ffff166001600660009054906101000a900461ffff166108e491906137c9565b61ffff161115610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090613873565b60405180910390fd5b6000600290506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff160361098f57600090506109ec565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16036109eb57600190505b5b60028160ff1603610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a29906138df565b60405180910390fd5b60078160ff1681548110610a4957610a486138ff565b5b90600052602060002001543414610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c906139a0565b60405180910390fd5b6001600660008282829054906101000a900461ffff16610ab591906137c9565b92506101000a81548161ffff021916908361ffff16021790555060008160ff1614610b37576002600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055610b90565b6002600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555b50610bae336000600160405180602001604052806000815250611a11565b5060018081905550565b610bc06119ef565b73ffffffffffffffffffffffffffffffffffffffff16610bde6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b9061367c565b60405180910390fd5b600860009054906101000a900460ff16610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613a0c565b60405180910390fd5b61014d61ffff1681600660009054906101000a900461ffff16610ca691906137c9565b61ffff161115610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613a9e565b60405180910390fd5b80600660008282829054906101000a900461ffff16610d0a91906137c9565b92506101000a81548161ffff021916908361ffff160217905550610d443360008361ffff1660405180602001604052806000815250611a11565b50565b610d4f6119ef565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d955750610d9485610d8f6119ef565b6116c6565b5b610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90613b30565b60405180910390fd5b610de18585858585611ba7565b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b60608151835114610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613bc2565b60405180910390fd5b6000835167ffffffffffffffff811115610e8b57610e8a612cf6565b5b604051908082528060200260200182016040528015610eb95781602001602082028036833780820191505090505b50905060005b8451811015610f3657610f06858281518110610ede57610edd6138ff565b5b6020026020010151858381518110610ef957610ef86138ff565b5b6020026020010151610556565b828281518110610f1957610f186138ff565b5b60200260200101818152505080610f2f90613be2565b9050610ebf565b508091505092915050565b600080610f4d83611601565b119050919050565b610f5d6119ef565b73ffffffffffffffffffffffffffffffffffffffff16610f7b6113fb565b73ffffffffffffffffffffffffffffffffffffffff1614610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc89061367c565b60405180910390fd5b60004711611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613c76565b60405180910390fd5b600060646014476110259190613c96565b61102f9190613d1f565b90506000814761103f9190613d50565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161108990613db5565b60006040518083038185875af1925050503d80600081146110c6576040519150601f19603f3d011682016040523d82523d6000602084013e6110cb565b606091505b505090506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161111790613db5565b60006040518083038185875af1925050503d8060008114611154576040519150601f19603f3d011682016040523d82523d6000602084013e611159565b606091505b505090508180156111675750805b6111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e16565b60405180910390fd5b50505050565b6111b46119ef565b73ffffffffffffffffffffffffffffffffffffffff166111d26113fb565b73ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f9061367c565b60405180910390fd5b60005b81518160ff16101561136f57600060096000848460ff1681518110611253576112526138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16146112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613ea8565b60405180910390fd5b600160096000848460ff1681518110611302576113016138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550808061136790613ec8565b91505061122b565b5050565b61137b6119ef565b73ffffffffffffffffffffffffffffffffffffffff166113996113fb565b73ffffffffffffffffffffffffffffffffffffffff16146113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e69061367c565b60405180910390fd5b6113f96000611ebd565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142c6119ef565b73ffffffffffffffffffffffffffffffffffffffff1661144a6113fb565b73ffffffffffffffffffffffffffffffffffffffff16146114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061367c565b60405180910390fd5b60005b81518160ff1610156115e7576000600a6000848460ff16815181106114cb576114ca6138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161461155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590613ea8565b60405180910390fd5b6001600a6000848460ff168151811061157a576115796138ff565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806115df90613ec8565b9150506114a3565b5050565b6115fd6115f66119ef565b8383611f81565b5050565b600060056000838152602001908152602001600020549050919050565b6116266119ef565b73ffffffffffffffffffffffffffffffffffffffff166116446113fb565b73ffffffffffffffffffffffffffffffffffffffff161461169a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116919061367c565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006117646119ef565b73ffffffffffffffffffffffffffffffffffffffff166117826113fb565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf9061367c565b60405180910390fd5b600860009054906101000a900460ff16905090565b6117f56119ef565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061183b575061183a856118356119ef565b6116c6565b5b61187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613f63565b60405180910390fd5b61188785858585856120ed565b5050505050565b6118966119ef565b73ffffffffffffffffffffffffffffffffffffffff166118b46113fb565b73ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061367c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090613ff5565b60405180910390fd5b61198281611ebd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060049080519060200190611a0d929190612994565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790614087565b60405180910390fd5b6000611a8a6119ef565b9050611aab81600087611a9c88612371565b611aa588612371565b876123eb565b826002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0b91906140a7565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b899291906140fd565b60405180910390a4611ba0816000878787876125bb565b5050505050565b8151835114611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290614198565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c519061422a565b60405180910390fd5b6000611c646119ef565b9050611c748187878787876123eb565b60005b8451811015611e28576000858281518110611c9557611c946138ff565b5b602002602001015190506000858381518110611cb457611cb36138ff565b5b6020026020010151905060006002600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d906142bc565b60405180910390fd5b8181036002600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0d91906140a7565b9250508190555050505080611e2190613be2565b9050611c77565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e9f9291906142dc565b60405180910390a4611eb5818787878787612792565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614385565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120e09190612be9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361215c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121539061422a565b60405180910390fd5b60006121666119ef565b905061218681878761217788612371565b61218088612371565b876123eb565b60006002600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906142bc565b60405180910390fd5b8381036002600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836002600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d591906140a7565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516123529291906140fd565b60405180910390a46123688288888888886125bb565b50505050505050565b60606000600167ffffffffffffffff8111156123905761238f612cf6565b5b6040519080825280602002602001820160405280156123be5781602001602082028036833780820191505090505b50905082816000815181106123d6576123d56138ff565b5b60200260200101818152505080915050919050565b6123f9868686868686612969565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036124aa5760005b83518110156124a85782818151811061244c5761244b6138ff565b5b60200260200101516005600086848151811061246b5761246a6138ff565b5b60200260200101518152602001908152602001600020600082825461249091906140a7565b92505081905550806124a190613be2565b9050612430565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125b35760005b83518110156125b15760008482815181106124ff576124fe6138ff565b5b60200260200101519050600084838151811061251e5761251d6138ff565b5b6020026020010151905060006005600084815260200190815260200160002054905081811015612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614417565b60405180910390fd5b8181036005600085815260200190815260200160002081905550505050806125aa90613be2565b90506124e1565b505b505050505050565b6125da8473ffffffffffffffffffffffffffffffffffffffff16612971565b1561278a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161262095949392919061448c565b6020604051808303816000875af192505050801561265c57506040513d601f19601f8201168201806040525081019061265991906144fb565b60015b61270157612668614535565b806308c379a0036126c4575061267c614557565b8061268757506126c6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb9190612cca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f890614659565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f906146eb565b60405180910390fd5b505b505050505050565b6127b18473ffffffffffffffffffffffffffffffffffffffff16612971565b15612961578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016127f795949392919061470b565b6020604051808303816000875af192505050801561283357506040513d601f19601f8201168201806040525081019061283091906144fb565b60015b6128d85761283f614535565b806308c379a00361289b5750612853614557565b8061285e575061289d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929190612cca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cf90614659565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461295f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612956906146eb565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546129a0906135ff565b90600052602060002090601f0160209004810192826129c25760008555612a09565b82601f106129db57805160ff1916838001178555612a09565b82800160010185558215612a09579182015b82811115612a085782518255916020019190600101906129ed565b5b509050612a169190612a1a565b5090565b5b80821115612a33576000816000905550600101612a1b565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a7682612a4b565b9050919050565b612a8681612a6b565b8114612a9157600080fd5b50565b600081359050612aa381612a7d565b92915050565b6000819050919050565b612abc81612aa9565b8114612ac757600080fd5b50565b600081359050612ad981612ab3565b92915050565b60008060408385031215612af657612af5612a41565b5b6000612b0485828601612a94565b9250506020612b1585828601612aca565b9150509250929050565b612b2881612aa9565b82525050565b6000602082019050612b436000830184612b1f565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b7e81612b49565b8114612b8957600080fd5b50565b600081359050612b9b81612b75565b92915050565b600060208284031215612bb757612bb6612a41565b5b6000612bc584828501612b8c565b91505092915050565b60008115159050919050565b612be381612bce565b82525050565b6000602082019050612bfe6000830184612bda565b92915050565b600060208284031215612c1a57612c19612a41565b5b6000612c2884828501612aca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c6b578082015181840152602081019050612c50565b83811115612c7a576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c9c82612c31565b612ca68185612c3c565b9350612cb6818560208601612c4d565b612cbf81612c80565b840191505092915050565b60006020820190508181036000830152612ce48184612c91565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d2e82612c80565b810181811067ffffffffffffffff82111715612d4d57612d4c612cf6565b5b80604052505050565b6000612d60612a37565b9050612d6c8282612d25565b919050565b600067ffffffffffffffff821115612d8c57612d8b612cf6565b5b612d9582612c80565b9050602081019050919050565b82818337600083830152505050565b6000612dc4612dbf84612d71565b612d56565b905082815260208101848484011115612de057612ddf612cf1565b5b612deb848285612da2565b509392505050565b600082601f830112612e0857612e07612cec565b5b8135612e18848260208601612db1565b91505092915050565b600060208284031215612e3757612e36612a41565b5b600082013567ffffffffffffffff811115612e5557612e54612a46565b5b612e6184828501612df3565b91505092915050565b600061ffff82169050919050565b612e8181612e6a565b8114612e8c57600080fd5b50565b600081359050612e9e81612e78565b92915050565b600060208284031215612eba57612eb9612a41565b5b6000612ec884828501612e8f565b91505092915050565b600067ffffffffffffffff821115612eec57612eeb612cf6565b5b602082029050602081019050919050565b600080fd5b6000612f15612f1084612ed1565b612d56565b90508083825260208201905060208402830185811115612f3857612f37612efd565b5b835b81811015612f615780612f4d8882612aca565b845260208401935050602081019050612f3a565b5050509392505050565b600082601f830112612f8057612f7f612cec565b5b8135612f90848260208601612f02565b91505092915050565b600067ffffffffffffffff821115612fb457612fb3612cf6565b5b612fbd82612c80565b9050602081019050919050565b6000612fdd612fd884612f99565b612d56565b905082815260208101848484011115612ff957612ff8612cf1565b5b613004848285612da2565b509392505050565b600082601f83011261302157613020612cec565b5b8135613031848260208601612fca565b91505092915050565b600080600080600060a0868803121561305657613055612a41565b5b600061306488828901612a94565b955050602061307588828901612a94565b945050604086013567ffffffffffffffff81111561309657613095612a46565b5b6130a288828901612f6b565b935050606086013567ffffffffffffffff8111156130c3576130c2612a46565b5b6130cf88828901612f6b565b925050608086013567ffffffffffffffff8111156130f0576130ef612a46565b5b6130fc8882890161300c565b9150509295509295909350565b60006020828403121561311f5761311e612a41565b5b600061312d84828501612a94565b91505092915050565b600060ff82169050919050565b61314c81613136565b82525050565b60006020820190506131676000830184613143565b92915050565b600067ffffffffffffffff82111561318857613187612cf6565b5b602082029050602081019050919050565b60006131ac6131a78461316d565b612d56565b905080838252602082019050602084028301858111156131cf576131ce612efd565b5b835b818110156131f857806131e48882612a94565b8452602084019350506020810190506131d1565b5050509392505050565b600082601f83011261321757613216612cec565b5b8135613227848260208601613199565b91505092915050565b6000806040838503121561324757613246612a41565b5b600083013567ffffffffffffffff81111561326557613264612a46565b5b61327185828601613202565b925050602083013567ffffffffffffffff81111561329257613291612a46565b5b61329e85828601612f6b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132dd81612aa9565b82525050565b60006132ef83836132d4565b60208301905092915050565b6000602082019050919050565b6000613313826132a8565b61331d81856132b3565b9350613328836132c4565b8060005b8381101561335957815161334088826132e3565b975061334b836132fb565b92505060018101905061332c565b5085935050505092915050565b600060208201905081810360008301526133808184613308565b905092915050565b60006020828403121561339e5761339d612a41565b5b600082013567ffffffffffffffff8111156133bc576133bb612a46565b5b6133c884828501613202565b91505092915050565b6133da81612a6b565b82525050565b60006020820190506133f560008301846133d1565b92915050565b61340481612bce565b811461340f57600080fd5b50565b600081359050613421816133fb565b92915050565b6000806040838503121561343e5761343d612a41565b5b600061344c85828601612a94565b925050602061345d85828601613412565b9150509250929050565b6000806040838503121561347e5761347d612a41565b5b600061348c85828601612a94565b925050602061349d85828601612a94565b9150509250929050565b600080600080600060a086880312156134c3576134c2612a41565b5b60006134d188828901612a94565b95505060206134e288828901612a94565b94505060406134f388828901612aca565b935050606061350488828901612aca565b925050608086013567ffffffffffffffff81111561352557613524612a46565b5b6135318882890161300c565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061359a602b83612c3c565b91506135a58261353e565b604082019050919050565b600060208201905081810360008301526135c98161358d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061361757607f821691505b60208210810361362a576136296135d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613666602083612c3c565b915061367182613630565b602082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006136d2601f83612c3c565b91506136dd8261369c565b602082019050919050565b60006020820190508181036000830152613701816136c5565b9050919050565b7f5468657265206973206e6f2073616c65206163746976652063757272656e746c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b6000613764602183612c3c565b915061376f82613708565b604082019050919050565b6000602082019050818103600083015261379381613757565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137d482612e6a565b91506137df83612e6a565b92508261ffff038211156137f6576137f561379a565b5b828201905092915050565b7f4d696e74656420616d6f756e742077696c6c20657863656564206d617820737560008201527f70706c792e000000000000000000000000000000000000000000000000000000602082015250565b600061385d602583612c3c565b915061386882613801565b604082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b7f416464726573732063616e6e6f74206d696e74206120746f6b656e2e00000000600082015250565b60006138c9601c83612c3c565b91506138d482613893565b602082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e73756666696369656e742065746865722070726f766964656420746f206d60008201527f696e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061398a602483612c3c565b91506139958261392e565b604082019050919050565b600060208201905081810360008301526139b98161397d565b9050919050565b7f52657365727665207374617465206e6f74206163746976650000000000000000600082015250565b60006139f6601883612c3c565b9150613a01826139c0565b602082019050919050565b60006020820190508181036000830152613a25816139e9565b9050919050565b7f4d696e74656420616d6f756e742077696c6c20657863656564206d617820737560008201527f70706c7900000000000000000000000000000000000000000000000000000000602082015250565b6000613a88602483612c3c565b9150613a9382613a2c565b604082019050919050565b60006020820190508181036000830152613ab781613a7b565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613b1a603283612c3c565b9150613b2582613abe565b604082019050919050565b60006020820190508181036000830152613b4981613b0d565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613bac602983612c3c565b9150613bb782613b50565b604082019050919050565b60006020820190508181036000830152613bdb81613b9f565b9050919050565b6000613bed82612aa9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c1f57613c1e61379a565b5b600182019050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613c60601483612c3c565b9150613c6b82613c2a565b602082019050919050565b60006020820190508181036000830152613c8f81613c53565b9050919050565b6000613ca182612aa9565b9150613cac83612aa9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ce557613ce461379a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2a82612aa9565b9150613d3583612aa9565b925082613d4557613d44613cf0565b5b828204905092915050565b6000613d5b82612aa9565b9150613d6683612aa9565b925082821015613d7957613d7861379a565b5b828203905092915050565b600081905092915050565b50565b6000613d9f600083613d84565b9150613daa82613d8f565b600082019050919050565b6000613dc082613d92565b9150819050919050565b7f4574686572207769746864726177616c206661696c6564000000000000000000600082015250565b6000613e00601783612c3c565b9150613e0b82613dca565b602082019050919050565b60006020820190508181036000830152613e2f81613df3565b9050919050565b7f4164647265737320616c72656164792065786973747320696e2077686974656c60008201527f6973740000000000000000000000000000000000000000000000000000000000602082015250565b6000613e92602383612c3c565b9150613e9d82613e36565b604082019050919050565b60006020820190508181036000830152613ec181613e85565b9050919050565b6000613ed382613136565b915060ff8203613ee657613ee561379a565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613f4d602983612c3c565b9150613f5882613ef1565b604082019050919050565b60006020820190508181036000830152613f7c81613f40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fdf602683612c3c565b9150613fea82613f83565b604082019050919050565b6000602082019050818103600083015261400e81613fd2565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614071602183612c3c565b915061407c82614015565b604082019050919050565b600060208201905081810360008301526140a081614064565b9050919050565b60006140b282612aa9565b91506140bd83612aa9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140f2576140f161379a565b5b828201905092915050565b60006040820190506141126000830185612b1f565b61411f6020830184612b1f565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614182602883612c3c565b915061418d82614126565b604082019050919050565b600060208201905081810360008301526141b181614175565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614214602583612c3c565b915061421f826141b8565b604082019050919050565b6000602082019050818103600083015261424381614207565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006142a6602a83612c3c565b91506142b18261424a565b604082019050919050565b600060208201905081810360008301526142d581614299565b9050919050565b600060408201905081810360008301526142f68185613308565b9050818103602083015261430a8184613308565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061436f602983612c3c565b915061437a82614313565b604082019050919050565b6000602082019050818103600083015261439e81614362565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614401602883612c3c565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061445e82614437565b6144688185614442565b9350614478818560208601612c4d565b61448181612c80565b840191505092915050565b600060a0820190506144a160008301886133d1565b6144ae60208301876133d1565b6144bb6040830186612b1f565b6144c86060830185612b1f565b81810360808301526144da8184614453565b90509695505050505050565b6000815190506144f581612b75565b92915050565b60006020828403121561451157614510612a41565b5b600061451f848285016144e6565b91505092915050565b60008160e01c9050919050565b600060033d11156145545760046000803e614551600051614528565b90505b90565b600060443d106145e457614569612a37565b60043d036004823e80513d602482011167ffffffffffffffff821117156145915750506145e4565b808201805167ffffffffffffffff8111156145af57505050506145e4565b80602083010160043d0385018111156145cc5750505050506145e4565b6145db82602001850186612d25565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614643603483612c3c565b915061464e826145e7565b604082019050919050565b6000602082019050818103600083015261467281614636565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006146d5602883612c3c565b91506146e082614679565b604082019050919050565b60006020820190508181036000830152614704816146c8565b9050919050565b600060a08201905061472060008301886133d1565b61472d60208301876133d1565b818103604083015261473f8186613308565b905081810360608301526147538185613308565b905081810360808301526147678184614453565b9050969550505050505056fea2646970667358221220a7f502e3684690cbcd7bcc54fc15432010f10701e64d65f1bd99ee1a1ce8c4a064736f6c634300080d0033

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

0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000f6062ae6d646709c26d83814102eea3cad5593f40000000000000000000000000d8a7978b137c7f74cc7ba967e6199b79cb21684000000000000000000000000000000000000000000000000000000000000003c697066733a2f2f516d5366564e584865556a6464794c52635143566a4e70794c344543697859765838466a375675785a4338726e482f302e6a736f6e00000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmSfVNXHeUjddyLRcQCVjNpyL4ECixYvX8Fj7VuxZC8rnH/0.json
Arg [1] : nftLandWalletAddress (address): 0xF6062aE6D646709C26d83814102eEa3CAD5593f4
Arg [2] : communityWalletAddress (address): 0x0d8A7978B137c7f74CC7ba967E6199B79CB21684

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 000000000000000000000000f6062ae6d646709c26d83814102eea3cad5593f4
Arg [2] : 0000000000000000000000000d8a7978b137c7f74cc7ba967e6199b79cb21684
Arg [3] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [4] : 697066733a2f2f516d5366564e584865556a6464794c52635143566a4e70794c
Arg [5] : 344543697859765838466a375675785a4338726e482f302e6a736f6e00000000


Deployed Bytecode Sourcemap

43925:3271:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25730:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24753:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25474:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45960:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44934:796;;;:::i;:::-;;44636:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27669:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44159:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44213:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26127:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40184:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46065:524;;;;;;;;;;;;;:::i;:::-;;46597:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43032:103;;;;;;;;;;;;;:::i;:::-;;42381:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46897:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26724:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39973:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45738:100;;;;;;;;;;;;;:::i;:::-;;26951:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45846:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27191:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43290:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25730:231;25816:7;25863:1;25844:21;;:7;:21;;;25836:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25931:9;:13;25941:2;25931:13;;;;;;;;;;;:22;25945:7;25931:22;;;;;;;;;;;;;;;;25924:29;;25730:231;;;;:::o;24753:310::-;24855:4;24907:26;24892:41;;;:11;:41;;;;:110;;;;24965:37;24950:52;;;:11;:52;;;;24892:110;:163;;;;25019:36;25043:11;25019:23;:36::i;:::-;24892:163;24872:183;;24753:310;;;:::o;25474:105::-;25534:13;25567:4;25560:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25474:105;;;:::o;45960:93::-;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46033:12:::1;46041:3;46033:7;:12::i;:::-;45960:93:::0;:::o;44934:796::-;1812:1;2410:7;;:19;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;45017:5:::1;44999:23;;:14;;;;;;;;;;;:23;;;44991:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44030:3;45079:29;;45093:1;45079:11;;;;;;;;;;;:15;;;;:::i;:::-;:29;;;;45071:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;45161:18;45182:1;45161:22;;45237:1;45198:14;:35;45221:10;45198:35;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;45194:185:::1;;45270:1;45255:16;;45194:185;;;45333:1;45293:15;:36;45317:10;45293:36;;;;;;;;;;;;;;;;;;;;;;;;;:41;;::::0;45289:90:::1;;45366:1;45351:16;;45289:90;45194:185;45413:1;45397:12;:17;;::::0;45389:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45479:10;45490:12;45479:24;;;;;;;;;;:::i;:::-;;;;;;;;;;45466:9;:37;45458:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;45570:1;45555:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45598:1;45582:12;:17;;;:102;;45683:1;45644:15;:36;45668:10;45644:36;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;45582:102;;;45640:1;45602:14;:35;45625:10;45602:35;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;45582:102;;45695:27;45701:10;45713:1;45716;45695:27;;;;;;;;;;;::::0;:5:::1;:27::i;:::-;44980:750;1768:1:::0;2722:7;:22;;;;44934:796::o;44636:290::-;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44706:14:::1;;;;;;;;;;;44698:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44030:3;44768:34;;44782:6;44768:11;;;;;;;;;;;:20;;;;:::i;:::-;:34;;;;44760:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;44869:6;44854:11;;:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44886:32;44892:10;44904:1;44907:6;44886:32;;;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;44636:290:::0;:::o;27669:442::-;27910:12;:10;:12::i;:::-;27902:20;;:4;:20;;;:60;;;;27926:36;27943:4;27949:12;:10;:12::i;:::-;27926:16;:36::i;:::-;27902:60;27880:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28051:52;28074:4;28080:2;28084:3;28089:7;28098:4;28051:22;:52::i;:::-;27669:442;;;;;:::o;44159:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;44213:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;26127:524::-;26283:16;26344:3;:10;26325:8;:15;:29;26317:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26413:30;26460:8;:15;26446:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26413:63;;26494:9;26489:122;26513:8;:15;26509:1;:19;26489:122;;;26569:30;26579:8;26588:1;26579:11;;;;;;;;:::i;:::-;;;;;;;;26592:3;26596:1;26592:6;;;;;;;;:::i;:::-;;;;;;;;26569:9;:30::i;:::-;26550:13;26564:1;26550:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26530:3;;;;:::i;:::-;;;26489:122;;;;26630:13;26623:20;;;26127:524;;;;:::o;40184:122::-;40241:4;40297:1;40265:29;40291:2;40265:25;:29::i;:::-;:33;40258:40;;40184:122;;;:::o;46065:524::-;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46154:1:::1;46130:21;:25;46122:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46191:24;46247:3;46243:2;46219:21;:26;;;;:::i;:::-;46218:32;;;;:::i;:::-;46191:59;;46261:22;46310:16;46286:21;:40;;;;:::i;:::-;46261:65;;46338:21;46365:15;;;;;;;;;;;:20;;46394:16;46365:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46337:79;;;46428:19;46453:13;;;;;;;;;;;:18;;46480:14;46453:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46427:73;;;46519:16;:34;;;;;46539:14;46519:34;46511:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46111:478;;;;46065:524::o:0;46597:292::-;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46689:7:::1;46684:198;46706:9;:16;46702:1;:20;;;46684:198;;;46784:1;46752:14;:28;46767:9;46777:1;46767:12;;;;;;;;;;:::i;:::-;;;;;;;;46752:28;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;46744:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46869:1;46840:14;:28;46855:9;46865:1;46855:12;;;;;;;;;;:::i;:::-;;;;;;;;46840:28;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;46724:3;;;;;:::i;:::-;;;;46684:198;;;;46597:292:::0;:::o;43032:103::-;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43097:30:::1;43124:1;43097:18;:30::i;:::-;43032:103::o:0;42381:87::-;42427:7;42454:6;;;;;;;;;;;42447:13;;42381:87;:::o;46897:296::-;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46990:7:::1;46985:201;47007:9;:16;47003:1;:20;;;46985:201;;;47086:1;47053:15;:29;47069:9;47079:1;47069:12;;;;;;;;;;:::i;:::-;;;;;;;;47053:29;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;47045:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;47173:1;47143:15;:29;47159:9;47169:1;47159:12;;;;;;;;;;:::i;:::-;;;;;;;;47143:29;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;47025:3;;;;;:::i;:::-;;;;46985:201;;;;46897:296:::0;:::o;26724:155::-;26819:52;26838:12;:10;:12::i;:::-;26852:8;26862;26819:18;:52::i;:::-;26724:155;;:::o;39973:113::-;40035:7;40062:12;:16;40075:2;40062:16;;;;;;;;;;;;40055:23;;39973:113;;;:::o;45738:100::-;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45816:14:::1;;;;;;;;;;;45815:15;45798:14;;:32;;;;;;;;;;;;;;;;;;45738:100::o:0;26951:168::-;27050:4;27074:18;:27;27093:7;27074:27;;;;;;;;;;;;;;;:37;27102:8;27074:37;;;;;;;;;;;;;;;;;;;;;;;;;27067:44;;26951:168;;;;:::o;45846:106::-;45906:4;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45930:14:::1;;;;;;;;;;;45923:21;;45846:106:::0;:::o;27191:401::-;27407:12;:10;:12::i;:::-;27399:20;;:4;:20;;;:60;;;;27423:36;27440:4;27446:12;:10;:12::i;:::-;27423:16;:36::i;:::-;27399:60;27377:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27539:45;27557:4;27563:2;27567;27571:6;27579:4;27539:17;:45::i;:::-;27191:401;;;;;:::o;43290:201::-;42612:12;:10;:12::i;:::-;42601:23;;:7;:5;:7::i;:::-;:23;;;42593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43399:1:::1;43379:22;;:8;:22;;::::0;43371:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43455:28;43474:8;43455:18;:28::i;:::-;43290:201:::0;:::o;15168:157::-;15253:4;15292:25;15277:40;;;:11;:40;;;;15270:47;;15168:157;;;:::o;23462:98::-;23515:7;23542:10;23535:17;;23462:98;:::o;31671:88::-;31745:6;31738:4;:13;;;;;;;;;;;;:::i;:::-;;31671:88;:::o;32145:569::-;32312:1;32298:16;;:2;:16;;;32290:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32365:16;32384:12;:10;:12::i;:::-;32365:31;;32409:102;32430:8;32448:1;32452:2;32456:21;32474:2;32456:17;:21::i;:::-;32479:25;32497:6;32479:17;:25::i;:::-;32506:4;32409:20;:102::i;:::-;32545:6;32524:9;:13;32534:2;32524:13;;;;;;;;;;;:17;32538:2;32524:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32604:2;32567:52;;32600:1;32567:52;;32582:8;32567:52;;;32608:2;32612:6;32567:52;;;;;;;:::i;:::-;;;;;;;;32632:74;32663:8;32681:1;32685:2;32689;32693:6;32701:4;32632:30;:74::i;:::-;32279:435;32145:569;;;;:::o;29753:1074::-;29980:7;:14;29966:3;:10;:28;29958:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30072:1;30058:16;;:2;:16;;;30050:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30129:16;30148:12;:10;:12::i;:::-;30129:31;;30173:60;30194:8;30204:4;30210:2;30214:3;30219:7;30228:4;30173:20;:60::i;:::-;30251:9;30246:421;30270:3;:10;30266:1;:14;30246:421;;;30302:10;30315:3;30319:1;30315:6;;;;;;;;:::i;:::-;;;;;;;;30302:19;;30336:14;30353:7;30361:1;30353:10;;;;;;;;:::i;:::-;;;;;;;;30336:27;;30380:19;30402:9;:13;30412:2;30402:13;;;;;;;;;;;:19;30416:4;30402:19;;;;;;;;;;;;;;;;30380:41;;30459:6;30444:11;:21;;30436:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30592:6;30578:11;:20;30556:9;:13;30566:2;30556:13;;;;;;;;;;;:19;30570:4;30556:19;;;;;;;;;;;;;;;:42;;;;30649:6;30628:9;:13;30638:2;30628:13;;;;;;;;;;;:17;30642:2;30628:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30287:380;;;30282:3;;;;:::i;:::-;;;30246:421;;;;30714:2;30684:47;;30708:4;30684:47;;30698:8;30684:47;;;30718:3;30723:7;30684:47;;;;;;;:::i;:::-;;;;;;;;30744:75;30780:8;30790:4;30796:2;30800:3;30805:7;30814:4;30744:35;:75::i;:::-;29947:880;29753:1074;;;;;:::o;43651:191::-;43725:16;43744:6;;;;;;;;;;;43725:25;;43770:8;43761:6;;:17;;;;;;;;;;;;;;;;;;43825:8;43794:40;;43815:8;43794:40;;;;;;;;;;;;43714:128;43651:191;:::o;35939:331::-;36094:8;36085:17;;:5;:17;;;36077:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36197:8;36159:18;:25;36178:5;36159:25;;;;;;;;;;;;;;;:35;36185:8;36159:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36243:8;36221:41;;36236:5;36221:41;;;36253:8;36221:41;;;;;;:::i;:::-;;;;;;;;35939:331;;;:::o;28575:820::-;28777:1;28763:16;;:2;:16;;;28755:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28834:16;28853:12;:10;:12::i;:::-;28834:31;;28878:96;28899:8;28909:4;28915:2;28919:21;28937:2;28919:17;:21::i;:::-;28942:25;28960:6;28942:17;:25::i;:::-;28969:4;28878:20;:96::i;:::-;28987:19;29009:9;:13;29019:2;29009:13;;;;;;;;;;;:19;29023:4;29009:19;;;;;;;;;;;;;;;;28987:41;;29062:6;29047:11;:21;;29039:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29187:6;29173:11;:20;29151:9;:13;29161:2;29151:13;;;;;;;;;;;:19;29165:4;29151:19;;;;;;;;;;;;;;;:42;;;;29236:6;29215:9;:13;29225:2;29215:13;;;;;;;;;;;:17;29229:2;29215:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29291:2;29260:46;;29285:4;29260:46;;29275:8;29260:46;;;29295:2;29299:6;29260:46;;;;;;;:::i;:::-;;;;;;;;29319:68;29350:8;29360:4;29366:2;29370;29374:6;29382:4;29319:30;:68::i;:::-;28744:651;;28575:820;;;;;:::o;39028:198::-;39094:16;39123:22;39162:1;39148:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39123:41;;39186:7;39175:5;39181:1;39175:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39213:5;39206:12;;;39028:198;;;:::o;40381:931::-;40620:66;40647:8;40657:4;40663:2;40667:3;40672:7;40681:4;40620:26;:66::i;:::-;40719:1;40703:18;;:4;:18;;;40699:160;;40743:9;40738:110;40762:3;:10;40758:1;:14;40738:110;;;40822:7;40830:1;40822:10;;;;;;;;:::i;:::-;;;;;;;;40798:12;:20;40811:3;40815:1;40811:6;;;;;;;;:::i;:::-;;;;;;;;40798:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;40774:3;;;;:::i;:::-;;;40738:110;;;;40699:160;40889:1;40875:16;;:2;:16;;;40871:434;;40913:9;40908:386;40932:3;:10;40928:1;:14;40908:386;;;40968:10;40981:3;40985:1;40981:6;;;;;;;;:::i;:::-;;;;;;;;40968:19;;41006:14;41023:7;41031:1;41023:10;;;;;;;;:::i;:::-;;;;;;;;41006:27;;41052:14;41069:12;:16;41082:2;41069:16;;;;;;;;;;;;41052:33;;41122:6;41112;:16;;41104:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41253:6;41244;:15;41225:12;:16;41238:2;41225:16;;;;;;;;;;;:34;;;;40949:345;;;40944:3;;;;:::i;:::-;;;40908:386;;;;40871:434;40381:931;;;;;;:::o;37455:744::-;37670:15;:2;:13;;;:15::i;:::-;37666:526;;;37723:2;37706:38;;;37745:8;37755:4;37761:2;37765:6;37773:4;37706:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37702:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38054:6;38047:14;;;;;;;;;;;:::i;:::-;;;;;;;;37702:479;;;38103:62;;;;;;;;;;:::i;:::-;;;;;;;;37702:479;37840:43;;;37828:55;;;:8;:55;;;;37824:154;;37908:50;;;;;;;;;;:::i;:::-;;;;;;;;37824:154;37779:214;37666:526;37455:744;;;;;;:::o;38207:813::-;38447:15;:2;:13;;;:15::i;:::-;38443:570;;;38500:2;38483:43;;;38527:8;38537:4;38543:3;38548:7;38557:4;38483:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38479:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38875:6;38868:14;;;;;;;;;;;:::i;:::-;;;;;;;;38479:523;;;38924:62;;;;;;;;;;:::i;:::-;;;;;;;;38479:523;38656:48;;;38644:60;;;:8;:60;;;;38640:159;;38729:50;;;;;;;;;;:::i;:::-;;;;;;;;38640:159;38563:251;38443:570;38207:813;;;;;;:::o;37226:221::-;;;;;;;:::o;6116:326::-;6176:4;6433:1;6411:7;:19;;;:23;6404:30;;6116:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:307::-;3896:1;3906:113;3920:6;3917:1;3914:13;3906:113;;;4005:1;4000:3;3996:11;3990:18;3986:1;3981:3;3977:11;3970:39;3942:2;3939:1;3935:10;3930:15;;3906:113;;;4037:6;4034:1;4031:13;4028:101;;;4117:1;4108:6;4103:3;4099:16;4092:27;4028:101;3877:258;3828:307;;;:::o;4141:102::-;4182:6;4233:2;4229:7;4224:2;4217:5;4213:14;4209:28;4199:38;;4141:102;;;:::o;4249:364::-;4337:3;4365:39;4398:5;4365:39;:::i;:::-;4420:71;4484:6;4479:3;4420:71;:::i;:::-;4413:78;;4500:52;4545:6;4540:3;4533:4;4526:5;4522:16;4500:52;:::i;:::-;4577:29;4599:6;4577:29;:::i;:::-;4572:3;4568:39;4561:46;;4341:272;4249:364;;;;:::o;4619:313::-;4732:4;4770:2;4759:9;4755:18;4747:26;;4819:9;4813:4;4809:20;4805:1;4794:9;4790:17;4783:47;4847:78;4920:4;4911:6;4847:78;:::i;:::-;4839:86;;4619:313;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:308::-;5854:4;5944:18;5936:6;5933:30;5930:56;;;5966:18;;:::i;:::-;5930:56;6004:29;6026:6;6004:29;:::i;:::-;5996:37;;6088:4;6082;6078:15;6070:23;;5792:308;;;:::o;6106:154::-;6190:6;6185:3;6180;6167:30;6252:1;6243:6;6238:3;6234:16;6227:27;6106:154;;;:::o;6266:412::-;6344:5;6369:66;6385:49;6427:6;6385:49;:::i;:::-;6369:66;:::i;:::-;6360:75;;6458:6;6451:5;6444:21;6496:4;6489:5;6485:16;6534:3;6525:6;6520:3;6516:16;6513:25;6510:112;;;6541:79;;:::i;:::-;6510:112;6631:41;6665:6;6660:3;6655;6631:41;:::i;:::-;6350:328;6266:412;;;;;:::o;6698:340::-;6754:5;6803:3;6796:4;6788:6;6784:17;6780:27;6770:122;;6811:79;;:::i;:::-;6770:122;6928:6;6915:20;6953:79;7028:3;7020:6;7013:4;7005:6;7001:17;6953:79;:::i;:::-;6944:88;;6760:278;6698:340;;;;:::o;7044:509::-;7113:6;7162:2;7150:9;7141:7;7137:23;7133:32;7130:119;;;7168:79;;:::i;:::-;7130:119;7316:1;7305:9;7301:17;7288:31;7346:18;7338:6;7335:30;7332:117;;;7368:79;;:::i;:::-;7332:117;7473:63;7528:7;7519:6;7508:9;7504:22;7473:63;:::i;:::-;7463:73;;7259:287;7044:509;;;;:::o;7559:89::-;7595:7;7635:6;7628:5;7624:18;7613:29;;7559:89;;;:::o;7654:120::-;7726:23;7743:5;7726:23;:::i;:::-;7719:5;7716:34;7706:62;;7764:1;7761;7754:12;7706:62;7654:120;:::o;7780:137::-;7825:5;7863:6;7850:20;7841:29;;7879:32;7905:5;7879:32;:::i;:::-;7780:137;;;;:::o;7923:327::-;7981:6;8030:2;8018:9;8009:7;8005:23;8001:32;7998:119;;;8036:79;;:::i;:::-;7998:119;8156:1;8181:52;8225:7;8216:6;8205:9;8201:22;8181:52;:::i;:::-;8171:62;;8127:116;7923:327;;;;:::o;8256:311::-;8333:4;8423:18;8415:6;8412:30;8409:56;;;8445:18;;:::i;:::-;8409:56;8495:4;8487:6;8483:17;8475:25;;8555:4;8549;8545:15;8537:23;;8256:311;;;:::o;8573:117::-;8682:1;8679;8672:12;8713:710;8809:5;8834:81;8850:64;8907:6;8850:64;:::i;:::-;8834:81;:::i;:::-;8825:90;;8935:5;8964:6;8957:5;8950:21;8998:4;8991:5;8987:16;8980:23;;9051:4;9043:6;9039:17;9031:6;9027:30;9080:3;9072:6;9069:15;9066:122;;;9099:79;;:::i;:::-;9066:122;9214:6;9197:220;9231:6;9226:3;9223:15;9197:220;;;9306:3;9335:37;9368:3;9356:10;9335:37;:::i;:::-;9330:3;9323:50;9402:4;9397:3;9393:14;9386:21;;9273:144;9257:4;9252:3;9248:14;9241:21;;9197:220;;;9201:21;8815:608;;8713:710;;;;;:::o;9446:370::-;9517:5;9566:3;9559:4;9551:6;9547:17;9543:27;9533:122;;9574:79;;:::i;:::-;9533:122;9691:6;9678:20;9716:94;9806:3;9798:6;9791:4;9783:6;9779:17;9716:94;:::i;:::-;9707:103;;9523:293;9446:370;;;;:::o;9822:307::-;9883:4;9973:18;9965:6;9962:30;9959:56;;;9995:18;;:::i;:::-;9959:56;10033:29;10055:6;10033:29;:::i;:::-;10025:37;;10117:4;10111;10107:15;10099:23;;9822:307;;;:::o;10135:410::-;10212:5;10237:65;10253:48;10294:6;10253:48;:::i;:::-;10237:65;:::i;:::-;10228:74;;10325:6;10318:5;10311:21;10363:4;10356:5;10352:16;10401:3;10392:6;10387:3;10383:16;10380:25;10377:112;;;10408:79;;:::i;:::-;10377:112;10498:41;10532:6;10527:3;10522;10498:41;:::i;:::-;10218:327;10135:410;;;;;:::o;10564:338::-;10619:5;10668:3;10661:4;10653:6;10649:17;10645:27;10635:122;;10676:79;;:::i;:::-;10635:122;10793:6;10780:20;10818:78;10892:3;10884:6;10877:4;10869:6;10865:17;10818:78;:::i;:::-;10809:87;;10625:277;10564:338;;;;:::o;10908:1509::-;11062:6;11070;11078;11086;11094;11143:3;11131:9;11122:7;11118:23;11114:33;11111:120;;;11150:79;;:::i;:::-;11111:120;11270:1;11295:53;11340:7;11331:6;11320:9;11316:22;11295:53;:::i;:::-;11285:63;;11241:117;11397:2;11423:53;11468:7;11459:6;11448:9;11444:22;11423:53;:::i;:::-;11413:63;;11368:118;11553:2;11542:9;11538:18;11525:32;11584:18;11576:6;11573:30;11570:117;;;11606:79;;:::i;:::-;11570:117;11711:78;11781:7;11772:6;11761:9;11757:22;11711:78;:::i;:::-;11701:88;;11496:303;11866:2;11855:9;11851:18;11838:32;11897:18;11889:6;11886:30;11883:117;;;11919:79;;:::i;:::-;11883:117;12024:78;12094:7;12085:6;12074:9;12070:22;12024:78;:::i;:::-;12014:88;;11809:303;12179:3;12168:9;12164:19;12151:33;12211:18;12203:6;12200:30;12197:117;;;12233:79;;:::i;:::-;12197:117;12338:62;12392:7;12383:6;12372:9;12368:22;12338:62;:::i;:::-;12328:72;;12122:288;10908:1509;;;;;;;;:::o;12423:329::-;12482:6;12531:2;12519:9;12510:7;12506:23;12502:32;12499:119;;;12537:79;;:::i;:::-;12499:119;12657:1;12682:53;12727:7;12718:6;12707:9;12703:22;12682:53;:::i;:::-;12672:63;;12628:117;12423:329;;;;:::o;12758:86::-;12793:7;12833:4;12826:5;12822:16;12811:27;;12758:86;;;:::o;12850:112::-;12933:22;12949:5;12933:22;:::i;:::-;12928:3;12921:35;12850:112;;:::o;12968:214::-;13057:4;13095:2;13084:9;13080:18;13072:26;;13108:67;13172:1;13161:9;13157:17;13148:6;13108:67;:::i;:::-;12968:214;;;;:::o;13188:311::-;13265:4;13355:18;13347:6;13344:30;13341:56;;;13377:18;;:::i;:::-;13341:56;13427:4;13419:6;13415:17;13407:25;;13487:4;13481;13477:15;13469:23;;13188:311;;;:::o;13522:710::-;13618:5;13643:81;13659:64;13716:6;13659:64;:::i;:::-;13643:81;:::i;:::-;13634:90;;13744:5;13773:6;13766:5;13759:21;13807:4;13800:5;13796:16;13789:23;;13860:4;13852:6;13848:17;13840:6;13836:30;13889:3;13881:6;13878:15;13875:122;;;13908:79;;:::i;:::-;13875:122;14023:6;14006:220;14040:6;14035:3;14032:15;14006:220;;;14115:3;14144:37;14177:3;14165:10;14144:37;:::i;:::-;14139:3;14132:50;14211:4;14206:3;14202:14;14195:21;;14082:144;14066:4;14061:3;14057:14;14050:21;;14006:220;;;14010:21;13624:608;;13522:710;;;;;:::o;14255:370::-;14326:5;14375:3;14368:4;14360:6;14356:17;14352:27;14342:122;;14383:79;;:::i;:::-;14342:122;14500:6;14487:20;14525:94;14615:3;14607:6;14600:4;14592:6;14588:17;14525:94;:::i;:::-;14516:103;;14332:293;14255:370;;;;:::o;14631:894::-;14749:6;14757;14806:2;14794:9;14785:7;14781:23;14777:32;14774:119;;;14812:79;;:::i;:::-;14774:119;14960:1;14949:9;14945:17;14932:31;14990:18;14982:6;14979:30;14976:117;;;15012:79;;:::i;:::-;14976:117;15117:78;15187:7;15178:6;15167:9;15163:22;15117:78;:::i;:::-;15107:88;;14903:302;15272:2;15261:9;15257:18;15244:32;15303:18;15295:6;15292:30;15289:117;;;15325:79;;:::i;:::-;15289:117;15430:78;15500:7;15491:6;15480:9;15476:22;15430:78;:::i;:::-;15420:88;;15215:303;14631:894;;;;;:::o;15531:114::-;15598:6;15632:5;15626:12;15616:22;;15531:114;;;:::o;15651:184::-;15750:11;15784:6;15779:3;15772:19;15824:4;15819:3;15815:14;15800:29;;15651:184;;;;:::o;15841:132::-;15908:4;15931:3;15923:11;;15961:4;15956:3;15952:14;15944:22;;15841:132;;;:::o;15979:108::-;16056:24;16074:5;16056:24;:::i;:::-;16051:3;16044:37;15979:108;;:::o;16093:179::-;16162:10;16183:46;16225:3;16217:6;16183:46;:::i;:::-;16261:4;16256:3;16252:14;16238:28;;16093:179;;;;:::o;16278:113::-;16348:4;16380;16375:3;16371:14;16363:22;;16278:113;;;:::o;16427:732::-;16546:3;16575:54;16623:5;16575:54;:::i;:::-;16645:86;16724:6;16719:3;16645:86;:::i;:::-;16638:93;;16755:56;16805:5;16755:56;:::i;:::-;16834:7;16865:1;16850:284;16875:6;16872:1;16869:13;16850:284;;;16951:6;16945:13;16978:63;17037:3;17022:13;16978:63;:::i;:::-;16971:70;;17064:60;17117:6;17064:60;:::i;:::-;17054:70;;16910:224;16897:1;16894;16890:9;16885:14;;16850:284;;;16854:14;17150:3;17143:10;;16551:608;;;16427:732;;;;:::o;17165:373::-;17308:4;17346:2;17335:9;17331:18;17323:26;;17395:9;17389:4;17385:20;17381:1;17370:9;17366:17;17359:47;17423:108;17526:4;17517:6;17423:108;:::i;:::-;17415:116;;17165:373;;;;:::o;17544:539::-;17628:6;17677:2;17665:9;17656:7;17652:23;17648:32;17645:119;;;17683:79;;:::i;:::-;17645:119;17831:1;17820:9;17816:17;17803:31;17861:18;17853:6;17850:30;17847:117;;;17883:79;;:::i;:::-;17847:117;17988:78;18058:7;18049:6;18038:9;18034:22;17988:78;:::i;:::-;17978:88;;17774:302;17544:539;;;;:::o;18089:118::-;18176:24;18194:5;18176:24;:::i;:::-;18171:3;18164:37;18089:118;;:::o;18213:222::-;18306:4;18344:2;18333:9;18329:18;18321:26;;18357:71;18425:1;18414:9;18410:17;18401:6;18357:71;:::i;:::-;18213:222;;;;:::o;18441:116::-;18511:21;18526:5;18511:21;:::i;:::-;18504:5;18501:32;18491:60;;18547:1;18544;18537:12;18491:60;18441:116;:::o;18563:133::-;18606:5;18644:6;18631:20;18622:29;;18660:30;18684:5;18660:30;:::i;:::-;18563:133;;;;:::o;18702:468::-;18767:6;18775;18824:2;18812:9;18803:7;18799:23;18795:32;18792:119;;;18830:79;;:::i;:::-;18792:119;18950:1;18975:53;19020:7;19011:6;19000:9;18996:22;18975:53;:::i;:::-;18965:63;;18921:117;19077:2;19103:50;19145:7;19136:6;19125:9;19121:22;19103:50;:::i;:::-;19093:60;;19048:115;18702:468;;;;;:::o;19176:474::-;19244:6;19252;19301:2;19289:9;19280:7;19276:23;19272:32;19269:119;;;19307:79;;:::i;:::-;19269:119;19427:1;19452:53;19497:7;19488:6;19477:9;19473:22;19452:53;:::i;:::-;19442:63;;19398:117;19554:2;19580:53;19625:7;19616:6;19605:9;19601:22;19580:53;:::i;:::-;19570:63;;19525:118;19176:474;;;;;:::o;19656:1089::-;19760:6;19768;19776;19784;19792;19841:3;19829:9;19820:7;19816:23;19812:33;19809:120;;;19848:79;;:::i;:::-;19809:120;19968:1;19993:53;20038:7;20029:6;20018:9;20014:22;19993:53;:::i;:::-;19983:63;;19939:117;20095:2;20121:53;20166:7;20157:6;20146:9;20142:22;20121:53;:::i;:::-;20111:63;;20066:118;20223:2;20249:53;20294:7;20285:6;20274:9;20270:22;20249:53;:::i;:::-;20239:63;;20194:118;20351:2;20377:53;20422:7;20413:6;20402:9;20398:22;20377:53;:::i;:::-;20367:63;;20322:118;20507:3;20496:9;20492:19;20479:33;20539:18;20531:6;20528:30;20525:117;;;20561:79;;:::i;:::-;20525:117;20666:62;20720:7;20711:6;20700:9;20696:22;20666:62;:::i;:::-;20656:72;;20450:288;19656:1089;;;;;;;;:::o;20751:230::-;20891:34;20887:1;20879:6;20875:14;20868:58;20960:13;20955:2;20947:6;20943:15;20936:38;20751:230;:::o;20987:366::-;21129:3;21150:67;21214:2;21209:3;21150:67;:::i;:::-;21143:74;;21226:93;21315:3;21226:93;:::i;:::-;21344:2;21339:3;21335:12;21328:19;;20987:366;;;:::o;21359:419::-;21525:4;21563:2;21552:9;21548:18;21540:26;;21612:9;21606:4;21602:20;21598:1;21587:9;21583:17;21576:47;21640:131;21766:4;21640:131;:::i;:::-;21632:139;;21359:419;;;:::o;21784:180::-;21832:77;21829:1;21822:88;21929:4;21926:1;21919:15;21953:4;21950:1;21943:15;21970:320;22014:6;22051:1;22045:4;22041:12;22031:22;;22098:1;22092:4;22088:12;22119:18;22109:81;;22175:4;22167:6;22163:17;22153:27;;22109:81;22237:2;22229:6;22226:14;22206:18;22203:38;22200:84;;22256:18;;:::i;:::-;22200:84;22021:269;21970:320;;;:::o;22296:182::-;22436:34;22432:1;22424:6;22420:14;22413:58;22296:182;:::o;22484:366::-;22626:3;22647:67;22711:2;22706:3;22647:67;:::i;:::-;22640:74;;22723:93;22812:3;22723:93;:::i;:::-;22841:2;22836:3;22832:12;22825:19;;22484:366;;;:::o;22856:419::-;23022:4;23060:2;23049:9;23045:18;23037:26;;23109:9;23103:4;23099:20;23095:1;23084:9;23080:17;23073:47;23137:131;23263:4;23137:131;:::i;:::-;23129:139;;22856:419;;;:::o;23281:181::-;23421:33;23417:1;23409:6;23405:14;23398:57;23281:181;:::o;23468:366::-;23610:3;23631:67;23695:2;23690:3;23631:67;:::i;:::-;23624:74;;23707:93;23796:3;23707:93;:::i;:::-;23825:2;23820:3;23816:12;23809:19;;23468:366;;;:::o;23840:419::-;24006:4;24044:2;24033:9;24029:18;24021:26;;24093:9;24087:4;24083:20;24079:1;24068:9;24064:17;24057:47;24121:131;24247:4;24121:131;:::i;:::-;24113:139;;23840:419;;;:::o;24265:220::-;24405:34;24401:1;24393:6;24389:14;24382:58;24474:3;24469:2;24461:6;24457:15;24450:28;24265:220;:::o;24491:366::-;24633:3;24654:67;24718:2;24713:3;24654:67;:::i;:::-;24647:74;;24730:93;24819:3;24730:93;:::i;:::-;24848:2;24843:3;24839:12;24832:19;;24491:366;;;:::o;24863:419::-;25029:4;25067:2;25056:9;25052:18;25044:26;;25116:9;25110:4;25106:20;25102:1;25091:9;25087:17;25080:47;25144:131;25270:4;25144:131;:::i;:::-;25136:139;;24863:419;;;:::o;25288:180::-;25336:77;25333:1;25326:88;25433:4;25430:1;25423:15;25457:4;25454:1;25447:15;25474:242;25513:3;25532:19;25549:1;25532:19;:::i;:::-;25527:24;;25565:19;25582:1;25565:19;:::i;:::-;25560:24;;25658:1;25650:6;25646:14;25643:1;25640:21;25637:47;;;25664:18;;:::i;:::-;25637:47;25708:1;25705;25701:9;25694:16;;25474:242;;;;:::o;25722:224::-;25862:34;25858:1;25850:6;25846:14;25839:58;25931:7;25926:2;25918:6;25914:15;25907:32;25722:224;:::o;25952:366::-;26094:3;26115:67;26179:2;26174:3;26115:67;:::i;:::-;26108:74;;26191:93;26280:3;26191:93;:::i;:::-;26309:2;26304:3;26300:12;26293:19;;25952:366;;;:::o;26324:419::-;26490:4;26528:2;26517:9;26513:18;26505:26;;26577:9;26571:4;26567:20;26563:1;26552:9;26548:17;26541:47;26605:131;26731:4;26605:131;:::i;:::-;26597:139;;26324:419;;;:::o;26749:178::-;26889:30;26885:1;26877:6;26873:14;26866:54;26749:178;:::o;26933:366::-;27075:3;27096:67;27160:2;27155:3;27096:67;:::i;:::-;27089:74;;27172:93;27261:3;27172:93;:::i;:::-;27290:2;27285:3;27281:12;27274:19;;26933:366;;;:::o;27305:419::-;27471:4;27509:2;27498:9;27494:18;27486:26;;27558:9;27552:4;27548:20;27544:1;27533:9;27529:17;27522:47;27586:131;27712:4;27586:131;:::i;:::-;27578:139;;27305:419;;;:::o;27730:180::-;27778:77;27775:1;27768:88;27875:4;27872:1;27865:15;27899:4;27896:1;27889:15;27916:223;28056:34;28052:1;28044:6;28040:14;28033:58;28125:6;28120:2;28112:6;28108:15;28101:31;27916:223;:::o;28145:366::-;28287:3;28308:67;28372:2;28367:3;28308:67;:::i;:::-;28301:74;;28384:93;28473:3;28384:93;:::i;:::-;28502:2;28497:3;28493:12;28486:19;;28145:366;;;:::o;28517:419::-;28683:4;28721:2;28710:9;28706:18;28698:26;;28770:9;28764:4;28760:20;28756:1;28745:9;28741:17;28734:47;28798:131;28924:4;28798:131;:::i;:::-;28790:139;;28517:419;;;:::o;28942:174::-;29082:26;29078:1;29070:6;29066:14;29059:50;28942:174;:::o;29122:366::-;29264:3;29285:67;29349:2;29344:3;29285:67;:::i;:::-;29278:74;;29361:93;29450:3;29361:93;:::i;:::-;29479:2;29474:3;29470:12;29463:19;;29122:366;;;:::o;29494:419::-;29660:4;29698:2;29687:9;29683:18;29675:26;;29747:9;29741:4;29737:20;29733:1;29722:9;29718:17;29711:47;29775:131;29901:4;29775:131;:::i;:::-;29767:139;;29494:419;;;:::o;29919:223::-;30059:34;30055:1;30047:6;30043:14;30036:58;30128:6;30123:2;30115:6;30111:15;30104:31;29919:223;:::o;30148:366::-;30290:3;30311:67;30375:2;30370:3;30311:67;:::i;:::-;30304:74;;30387:93;30476:3;30387:93;:::i;:::-;30505:2;30500:3;30496:12;30489:19;;30148:366;;;:::o;30520:419::-;30686:4;30724:2;30713:9;30709:18;30701:26;;30773:9;30767:4;30763:20;30759:1;30748:9;30744:17;30737:47;30801:131;30927:4;30801:131;:::i;:::-;30793:139;;30520:419;;;:::o;30945:237::-;31085:34;31081:1;31073:6;31069:14;31062:58;31154:20;31149:2;31141:6;31137:15;31130:45;30945:237;:::o;31188:366::-;31330:3;31351:67;31415:2;31410:3;31351:67;:::i;:::-;31344:74;;31427:93;31516:3;31427:93;:::i;:::-;31545:2;31540:3;31536:12;31529:19;;31188:366;;;:::o;31560:419::-;31726:4;31764:2;31753:9;31749:18;31741:26;;31813:9;31807:4;31803:20;31799:1;31788:9;31784:17;31777:47;31841:131;31967:4;31841:131;:::i;:::-;31833:139;;31560:419;;;:::o;31985:228::-;32125:34;32121:1;32113:6;32109:14;32102:58;32194:11;32189:2;32181:6;32177:15;32170:36;31985:228;:::o;32219:366::-;32361:3;32382:67;32446:2;32441:3;32382:67;:::i;:::-;32375:74;;32458:93;32547:3;32458:93;:::i;:::-;32576:2;32571:3;32567:12;32560:19;;32219:366;;;:::o;32591:419::-;32757:4;32795:2;32784:9;32780:18;32772:26;;32844:9;32838:4;32834:20;32830:1;32819:9;32815:17;32808:47;32872:131;32998:4;32872:131;:::i;:::-;32864:139;;32591:419;;;:::o;33016:233::-;33055:3;33078:24;33096:5;33078:24;:::i;:::-;33069:33;;33124:66;33117:5;33114:77;33111:103;;33194:18;;:::i;:::-;33111:103;33241:1;33234:5;33230:13;33223:20;;33016:233;;;:::o;33255:170::-;33395:22;33391:1;33383:6;33379:14;33372:46;33255:170;:::o;33431:366::-;33573:3;33594:67;33658:2;33653:3;33594:67;:::i;:::-;33587:74;;33670:93;33759:3;33670:93;:::i;:::-;33788:2;33783:3;33779:12;33772:19;;33431:366;;;:::o;33803:419::-;33969:4;34007:2;33996:9;33992:18;33984:26;;34056:9;34050:4;34046:20;34042:1;34031:9;34027:17;34020:47;34084:131;34210:4;34084:131;:::i;:::-;34076:139;;33803:419;;;:::o;34228:348::-;34268:7;34291:20;34309:1;34291:20;:::i;:::-;34286:25;;34325:20;34343:1;34325:20;:::i;:::-;34320:25;;34513:1;34445:66;34441:74;34438:1;34435:81;34430:1;34423:9;34416:17;34412:105;34409:131;;;34520:18;;:::i;:::-;34409:131;34568:1;34565;34561:9;34550:20;;34228:348;;;;:::o;34582:180::-;34630:77;34627:1;34620:88;34727:4;34724:1;34717:15;34751:4;34748:1;34741:15;34768:185;34808:1;34825:20;34843:1;34825:20;:::i;:::-;34820:25;;34859:20;34877:1;34859:20;:::i;:::-;34854:25;;34898:1;34888:35;;34903:18;;:::i;:::-;34888:35;34945:1;34942;34938:9;34933:14;;34768:185;;;;:::o;34959:191::-;34999:4;35019:20;35037:1;35019:20;:::i;:::-;35014:25;;35053:20;35071:1;35053:20;:::i;:::-;35048:25;;35092:1;35089;35086:8;35083:34;;;35097:18;;:::i;:::-;35083:34;35142:1;35139;35135:9;35127:17;;34959:191;;;;:::o;35156:147::-;35257:11;35294:3;35279:18;;35156:147;;;;:::o;35309:114::-;;:::o;35429:398::-;35588:3;35609:83;35690:1;35685:3;35609:83;:::i;:::-;35602:90;;35701:93;35790:3;35701:93;:::i;:::-;35819:1;35814:3;35810:11;35803:18;;35429:398;;;:::o;35833:379::-;36017:3;36039:147;36182:3;36039:147;:::i;:::-;36032:154;;36203:3;36196:10;;35833:379;;;:::o;36218:173::-;36358:25;36354:1;36346:6;36342:14;36335:49;36218:173;:::o;36397:366::-;36539:3;36560:67;36624:2;36619:3;36560:67;:::i;:::-;36553:74;;36636:93;36725:3;36636:93;:::i;:::-;36754:2;36749:3;36745:12;36738:19;;36397:366;;;:::o;36769:419::-;36935:4;36973:2;36962:9;36958:18;36950:26;;37022:9;37016:4;37012:20;37008:1;36997:9;36993:17;36986:47;37050:131;37176:4;37050:131;:::i;:::-;37042:139;;36769:419;;;:::o;37194:222::-;37334:34;37330:1;37322:6;37318:14;37311:58;37403:5;37398:2;37390:6;37386:15;37379:30;37194:222;:::o;37422:366::-;37564:3;37585:67;37649:2;37644:3;37585:67;:::i;:::-;37578:74;;37661:93;37750:3;37661:93;:::i;:::-;37779:2;37774:3;37770:12;37763:19;;37422:366;;;:::o;37794:419::-;37960:4;37998:2;37987:9;37983:18;37975:26;;38047:9;38041:4;38037:20;38033:1;38022:9;38018:17;38011:47;38075:131;38201:4;38075:131;:::i;:::-;38067:139;;37794:419;;;:::o;38219:167::-;38256:3;38279:22;38295:5;38279:22;:::i;:::-;38270:31;;38323:4;38316:5;38313:15;38310:41;;38331:18;;:::i;:::-;38310:41;38378:1;38371:5;38367:13;38360:20;;38219:167;;;:::o;38392:228::-;38532:34;38528:1;38520:6;38516:14;38509:58;38601:11;38596:2;38588:6;38584:15;38577:36;38392:228;:::o;38626:366::-;38768:3;38789:67;38853:2;38848:3;38789:67;:::i;:::-;38782:74;;38865:93;38954:3;38865:93;:::i;:::-;38983:2;38978:3;38974:12;38967:19;;38626:366;;;:::o;38998:419::-;39164:4;39202:2;39191:9;39187:18;39179:26;;39251:9;39245:4;39241:20;39237:1;39226:9;39222:17;39215:47;39279:131;39405:4;39279:131;:::i;:::-;39271:139;;38998:419;;;:::o;39423:225::-;39563:34;39559:1;39551:6;39547:14;39540:58;39632:8;39627:2;39619:6;39615:15;39608:33;39423:225;:::o;39654:366::-;39796:3;39817:67;39881:2;39876:3;39817:67;:::i;:::-;39810:74;;39893:93;39982:3;39893:93;:::i;:::-;40011:2;40006:3;40002:12;39995:19;;39654:366;;;:::o;40026:419::-;40192:4;40230:2;40219:9;40215:18;40207:26;;40279:9;40273:4;40269:20;40265:1;40254:9;40250:17;40243:47;40307:131;40433:4;40307:131;:::i;:::-;40299:139;;40026:419;;;:::o;40451:220::-;40591:34;40587:1;40579:6;40575:14;40568:58;40660:3;40655:2;40647:6;40643:15;40636:28;40451:220;:::o;40677:366::-;40819:3;40840:67;40904:2;40899:3;40840:67;:::i;:::-;40833:74;;40916:93;41005:3;40916:93;:::i;:::-;41034:2;41029:3;41025:12;41018:19;;40677:366;;;:::o;41049:419::-;41215:4;41253:2;41242:9;41238:18;41230:26;;41302:9;41296:4;41292:20;41288:1;41277:9;41273:17;41266:47;41330:131;41456:4;41330:131;:::i;:::-;41322:139;;41049:419;;;:::o;41474:305::-;41514:3;41533:20;41551:1;41533:20;:::i;:::-;41528:25;;41567:20;41585:1;41567:20;:::i;:::-;41562:25;;41721:1;41653:66;41649:74;41646:1;41643:81;41640:107;;;41727:18;;:::i;:::-;41640:107;41771:1;41768;41764:9;41757:16;;41474:305;;;;:::o;41785:332::-;41906:4;41944:2;41933:9;41929:18;41921:26;;41957:71;42025:1;42014:9;42010:17;42001:6;41957:71;:::i;:::-;42038:72;42106:2;42095:9;42091:18;42082:6;42038:72;:::i;:::-;41785:332;;;;;:::o;42123:227::-;42263:34;42259:1;42251:6;42247:14;42240:58;42332:10;42327:2;42319:6;42315:15;42308:35;42123:227;:::o;42356:366::-;42498:3;42519:67;42583:2;42578:3;42519:67;:::i;:::-;42512:74;;42595:93;42684:3;42595:93;:::i;:::-;42713:2;42708:3;42704:12;42697:19;;42356:366;;;:::o;42728:419::-;42894:4;42932:2;42921:9;42917:18;42909:26;;42981:9;42975:4;42971:20;42967:1;42956:9;42952:17;42945:47;43009:131;43135:4;43009:131;:::i;:::-;43001:139;;42728:419;;;:::o;43153:224::-;43293:34;43289:1;43281:6;43277:14;43270:58;43362:7;43357:2;43349:6;43345:15;43338:32;43153:224;:::o;43383:366::-;43525:3;43546:67;43610:2;43605:3;43546:67;:::i;:::-;43539:74;;43622:93;43711:3;43622:93;:::i;:::-;43740:2;43735:3;43731:12;43724:19;;43383:366;;;:::o;43755:419::-;43921:4;43959:2;43948:9;43944:18;43936:26;;44008:9;44002:4;43998:20;43994:1;43983:9;43979:17;43972:47;44036:131;44162:4;44036:131;:::i;:::-;44028:139;;43755:419;;;:::o;44180:229::-;44320:34;44316:1;44308:6;44304:14;44297:58;44389:12;44384:2;44376:6;44372:15;44365:37;44180:229;:::o;44415:366::-;44557:3;44578:67;44642:2;44637:3;44578:67;:::i;:::-;44571:74;;44654:93;44743:3;44654:93;:::i;:::-;44772:2;44767:3;44763:12;44756:19;;44415:366;;;:::o;44787:419::-;44953:4;44991:2;44980:9;44976:18;44968:26;;45040:9;45034:4;45030:20;45026:1;45015:9;45011:17;45004:47;45068:131;45194:4;45068:131;:::i;:::-;45060:139;;44787:419;;;:::o;45212:634::-;45433:4;45471:2;45460:9;45456:18;45448:26;;45520:9;45514:4;45510:20;45506:1;45495:9;45491:17;45484:47;45548:108;45651:4;45642:6;45548:108;:::i;:::-;45540:116;;45703:9;45697:4;45693:20;45688:2;45677:9;45673:18;45666:48;45731:108;45834:4;45825:6;45731:108;:::i;:::-;45723:116;;45212:634;;;;;:::o;45852:228::-;45992:34;45988:1;45980:6;45976:14;45969:58;46061:11;46056:2;46048:6;46044:15;46037:36;45852:228;:::o;46086:366::-;46228:3;46249:67;46313:2;46308:3;46249:67;:::i;:::-;46242:74;;46325:93;46414:3;46325:93;:::i;:::-;46443:2;46438:3;46434:12;46427:19;;46086:366;;;:::o;46458:419::-;46624:4;46662:2;46651:9;46647:18;46639:26;;46711:9;46705:4;46701:20;46697:1;46686:9;46682:17;46675:47;46739:131;46865:4;46739:131;:::i;:::-;46731:139;;46458:419;;;:::o;46883:227::-;47023:34;47019:1;47011:6;47007:14;47000:58;47092:10;47087:2;47079:6;47075:15;47068:35;46883:227;:::o;47116:366::-;47258:3;47279:67;47343:2;47338:3;47279:67;:::i;:::-;47272:74;;47355:93;47444:3;47355:93;:::i;:::-;47473:2;47468:3;47464:12;47457:19;;47116:366;;;:::o;47488:419::-;47654:4;47692:2;47681:9;47677:18;47669:26;;47741:9;47735:4;47731:20;47727:1;47716:9;47712:17;47705:47;47769:131;47895:4;47769:131;:::i;:::-;47761:139;;47488:419;;;:::o;47913:98::-;47964:6;47998:5;47992:12;47982:22;;47913:98;;;:::o;48017:168::-;48100:11;48134:6;48129:3;48122:19;48174:4;48169:3;48165:14;48150:29;;48017:168;;;;:::o;48191:360::-;48277:3;48305:38;48337:5;48305:38;:::i;:::-;48359:70;48422:6;48417:3;48359:70;:::i;:::-;48352:77;;48438:52;48483:6;48478:3;48471:4;48464:5;48460:16;48438:52;:::i;:::-;48515:29;48537:6;48515:29;:::i;:::-;48510:3;48506:39;48499:46;;48281:270;48191:360;;;;:::o;48557:751::-;48780:4;48818:3;48807:9;48803:19;48795:27;;48832:71;48900:1;48889:9;48885:17;48876:6;48832:71;:::i;:::-;48913:72;48981:2;48970:9;48966:18;48957:6;48913:72;:::i;:::-;48995;49063:2;49052:9;49048:18;49039:6;48995:72;:::i;:::-;49077;49145:2;49134:9;49130:18;49121:6;49077:72;:::i;:::-;49197:9;49191:4;49187:20;49181:3;49170:9;49166:19;49159:49;49225:76;49296:4;49287:6;49225:76;:::i;:::-;49217:84;;48557:751;;;;;;;;:::o;49314:141::-;49370:5;49401:6;49395:13;49386:22;;49417:32;49443:5;49417:32;:::i;:::-;49314:141;;;;:::o;49461:349::-;49530:6;49579:2;49567:9;49558:7;49554:23;49550:32;49547:119;;;49585:79;;:::i;:::-;49547:119;49705:1;49730:63;49785:7;49776:6;49765:9;49761:22;49730:63;:::i;:::-;49720:73;;49676:127;49461:349;;;;:::o;49816:106::-;49860:8;49909:5;49904:3;49900:15;49879:36;;49816:106;;;:::o;49928:183::-;49963:3;50001:1;49983:16;49980:23;49977:128;;;50039:1;50036;50033;50018:23;50061:34;50092:1;50086:8;50061:34;:::i;:::-;50054:41;;49977:128;49928:183;:::o;50117:711::-;50156:3;50194:4;50176:16;50173:26;50202:5;50170:39;50231:20;;:::i;:::-;50306:1;50288:16;50284:24;50281:1;50275:4;50260:49;50339:4;50333:11;50438:16;50431:4;50423:6;50419:17;50416:39;50383:18;50375:6;50372:30;50356:113;50353:146;;;50484:5;;;;50353:146;50530:6;50524:4;50520:17;50566:3;50560:10;50593:18;50585:6;50582:30;50579:43;;;50615:5;;;;;;50579:43;50663:6;50656:4;50651:3;50647:14;50643:27;50722:1;50704:16;50700:24;50694:4;50690:35;50685:3;50682:44;50679:57;;;50729:5;;;;;;;50679:57;50746;50794:6;50788:4;50784:17;50776:6;50772:30;50766:4;50746:57;:::i;:::-;50819:3;50812:10;;50160:668;;;;;50117:711;;:::o;50834:239::-;50974:34;50970:1;50962:6;50958:14;50951:58;51043:22;51038:2;51030:6;51026:15;51019:47;50834:239;:::o;51079:366::-;51221:3;51242:67;51306:2;51301:3;51242:67;:::i;:::-;51235:74;;51318:93;51407:3;51318:93;:::i;:::-;51436:2;51431:3;51427:12;51420:19;;51079:366;;;:::o;51451:419::-;51617:4;51655:2;51644:9;51640:18;51632:26;;51704:9;51698:4;51694:20;51690:1;51679:9;51675:17;51668:47;51732:131;51858:4;51732:131;:::i;:::-;51724:139;;51451:419;;;:::o;51876:227::-;52016:34;52012:1;52004:6;52000:14;51993:58;52085:10;52080:2;52072:6;52068:15;52061:35;51876:227;:::o;52109:366::-;52251:3;52272:67;52336:2;52331:3;52272:67;:::i;:::-;52265:74;;52348:93;52437:3;52348:93;:::i;:::-;52466:2;52461:3;52457:12;52450:19;;52109:366;;;:::o;52481:419::-;52647:4;52685:2;52674:9;52670:18;52662:26;;52734:9;52728:4;52724:20;52720:1;52709:9;52705:17;52698:47;52762:131;52888:4;52762:131;:::i;:::-;52754:139;;52481:419;;;:::o;52906:1053::-;53229:4;53267:3;53256:9;53252:19;53244:27;;53281:71;53349:1;53338:9;53334:17;53325:6;53281:71;:::i;:::-;53362:72;53430:2;53419:9;53415:18;53406:6;53362:72;:::i;:::-;53481:9;53475:4;53471:20;53466:2;53455:9;53451:18;53444:48;53509:108;53612:4;53603:6;53509:108;:::i;:::-;53501:116;;53664:9;53658:4;53654:20;53649:2;53638:9;53634:18;53627:48;53692:108;53795:4;53786:6;53692:108;:::i;:::-;53684:116;;53848:9;53842:4;53838:20;53832:3;53821:9;53817:19;53810:49;53876:76;53947:4;53938:6;53876:76;:::i;:::-;53868:84;;52906:1053;;;;;;;;:::o

Swarm Source

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