ETH Price: $3,350.62 (-1.13%)

Token

 

Overview

Max Total Supply

2,731

Holders

2,730

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x8dfa76a3e8f290e6224b93beba163b90449b0e38
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:
RLPS

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-05
*/

pragma solidity ^0.8.9;

// SPDX-License-Identifier: MIT

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

// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)
/**
 * @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 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;
}

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)
/**
 * @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);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
/**
 * @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);
}

// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
/**
 * @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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

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

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol)
/**
 * @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: address zero is not a valid owner");
        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 token owner or 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: caller is not token owner or 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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, 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);

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

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

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

        _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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _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);

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

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

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * 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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * 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);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "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 `ids` and `amounts` 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 {}

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        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;
    }
}

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

        _burn(account, id, value);
    }

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

        _burnBatch(account, ids, values);
    }
}

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

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

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

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

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

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

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

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

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

contract RLPS is ERC1155, ERC1155Burnable, Ownable {
    constructor()
        ERC1155("https://api.grandleisure.org/rlps/data")
    {}

    function airdrop(
        uint256 tokenId,
        address[] memory recipients
    ) public onlyOwner {
        for (uint256 i = 0; i < recipients.length; i++) {
            _mint(recipients[i], tokenId, 1, "");
        }
    }

    function setApprovalForAll(
        address operator,
        bool approved
    ) public override {
        // Revert — this NFT is not sellable/transferrable
        revert();
    }

    function isApprovedForAll(
        address _owner,
        address _operator
    ) public override view returns (bool isOperator) {
        // Revert — this NFT is not sellable/transferrable
        revert();
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
        require(
            msg.sender == owner()
            || from == address(0)
            || to == address(0),
            "This NFT is non-transferable"
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"airdrop","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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060600160405280602681526020016200380b602691396200003d816200006460201b60201c565b506200005e620000526200007960201b60201c565b6200008160201b60201c565b620004a8565b8060029081620000759190620003c1565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001c957607f821691505b602082108103620001df57620001de62000181565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020a565b6200025586836200020a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a26200029c62000296846200026d565b62000277565b6200026d565b9050919050565b6000819050919050565b620002be8362000281565b620002d6620002cd82620002a9565b84845462000217565b825550505050565b600090565b620002ed620002de565b620002fa818484620002b3565b505050565b5b81811015620003225762000316600082620002e3565b60018101905062000300565b5050565b601f82111562000371576200033b81620001e5565b6200034684620001fa565b8101602085101562000356578190505b6200036e6200036585620001fa565b830182620002ff565b50505b505050565b600082821c905092915050565b6000620003966000198460080262000376565b1980831691505092915050565b6000620003b1838362000383565b9150826002028217905092915050565b620003cc8262000147565b67ffffffffffffffff811115620003e857620003e762000152565b5b620003f48254620001b0565b6200040182828562000326565b600060209050601f83116001811462000439576000841562000424578287015190505b620004308582620003a3565b865550620004a0565b601f1984166200044986620001e5565b60005b8281101562000473578489015182556001820191506020850194506020810190506200044c565b868310156200049357848901516200048f601f89168262000383565b8355505b6001600288020188555050505b505050505050565b61335380620004b86000396000f3fe608060405234801561001057600080fd5b50600436106100e95760003560e01c80638da5cb5b1161008c578063e985e9c511610066578063e985e9c514610246578063f242432a14610276578063f2fde38b14610292578063f5298aca146102ae576100e9565b80638da5cb5b146101f0578063a22cb4651461020e578063bdf7a8e61461022a576100e9565b80632eb2c2d6116100c85780632eb2c2d61461017e5780634e1273f41461019a5780636b20c454146101ca578063715018a6146101e6576100e9565b8062fdd58e146100ee57806301ffc9a71461011e5780630e89341c1461014e575b600080fd5b61010860048036038101906101039190611dfc565b6102ca565b6040516101159190611e4b565b60405180910390f35b61013860048036038101906101339190611ebe565b610392565b6040516101459190611f06565b60405180910390f35b61016860048036038101906101639190611f21565b610474565b6040516101759190611fde565b60405180910390f35b610198600480360381019061019391906121fd565b610508565b005b6101b460048036038101906101af919061238f565b6105a9565b6040516101c191906124c5565b60405180910390f35b6101e460048036038101906101df91906124e7565b6106c2565b005b6101ee61075f565b005b6101f8610773565b6040516102059190612581565b60405180910390f35b610228600480360381019061022391906125c8565b61079d565b005b610244600480360381019061023f9190612608565b6107a2565b005b610260600480360381019061025b9190612664565b610804565b60405161026d9190611f06565b60405180910390f35b610290600480360381019061028b91906126a4565b610809565b005b6102ac60048036038101906102a7919061273b565b6108aa565b005b6102c860048036038101906102c39190612768565b61092d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061282d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046d575061046c826109ca565b5b9050919050565b6060600280546104839061287c565b80601f01602080910402602001604051908101604052809291908181526020018280546104af9061287c565b80156104fc5780601f106104d1576101008083540402835291602001916104fc565b820191906000526020600020905b8154815290600101906020018083116104df57829003601f168201915b50505050509050919050565b610510610a34565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610556575061055585610550610a34565b610804565b5b610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058c9061291f565b60405180910390fd5b6105a28585858585610a3c565b5050505050565b606081518351146105ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e6906129b1565b60405180910390fd5b6000835167ffffffffffffffff81111561060c5761060b612005565b5b60405190808252806020026020018201604052801561063a5781602001602082028036833780820191505090505b50905060005b84518110156106b75761068785828151811061065f5761065e6129d1565b5b602002602001015185838151811061067a576106796129d1565b5b60200260200101516102ca565b82828151811061069a576106996129d1565b5b602002602001018181525050806106b090612a2f565b9050610640565b508091505092915050565b6106ca610a34565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610710575061070f8361070a610a34565b610804565b5b61074f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107469061291f565b60405180910390fd5b61075a838383610d5d565b505050565b61076761102b565b61077160006110a9565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b6107aa61102b565b60005b81518110156107ff576107ec8282815181106107cc576107cb6129d1565b5b60200260200101518460016040518060200160405280600081525061116f565b80806107f790612a2f565b9150506107ad565b505050565b600080fd5b610811610a34565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610857575061085685610851610a34565b610804565b5b610896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088d9061291f565b60405180910390fd5b6108a3858585858561131f565b5050505050565b6108b261102b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890612ae9565b60405180910390fd5b61092a816110a9565b50565b610935610a34565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061097b575061097a83610975610a34565b610804565b5b6109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b19061291f565b60405180910390fd5b6109c58383836115ba565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790612b7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690612c0d565b60405180910390fd5b6000610af9610a34565b9050610b09818787878787611800565b60005b8451811015610cba576000858281518110610b2a57610b296129d1565b5b602002602001015190506000858381518110610b4957610b486129d1565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190612c9f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c9f9190612cbf565b9250508190555050505080610cb390612a2f565b9050610b0c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d31929190612cf3565b60405180910390a4610d478187878787876118f9565b610d55818787878787611901565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390612d9c565b60405180910390fd5b8051825114610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790612b7b565b60405180910390fd5b6000610e1a610a34565b9050610e3a81856000868660405180602001604052806000815250611800565b60005b8351811015610f87576000848281518110610e5b57610e5a6129d1565b5b602002602001015190506000848381518110610e7a57610e796129d1565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290612e2e565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080610f7f90612a2f565b915050610e3d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610fff929190612cf3565b60405180910390a4611025818560008686604051806020016040528060008152506118f9565b50505050565b611033610a34565b73ffffffffffffffffffffffffffffffffffffffff16611051610773565b73ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90612e9a565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590612f2c565b60405180910390fd5b60006111e8610a34565b905060006111f585611ad8565b9050600061120285611ad8565b905061121383600089858589611800565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112729190612cbf565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516112f0929190612f4c565b60405180910390a4611307836000898585896118f9565b61131683600089898989611b52565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590612c0d565b60405180910390fd5b6000611398610a34565b905060006113a585611ad8565b905060006113b285611ad8565b90506113c2838989858589611800565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090612c9f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461150e9190612cbf565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161158b929190612f4c565b60405180910390a46115a1848a8a86868a6118f9565b6115af848a8a8a8a8a611b52565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090612d9c565b60405180910390fd5b6000611633610a34565b9050600061164084611ad8565b9050600061164d84611ad8565b905061166d83876000858560405180602001604052806000815250611800565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90612e2e565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516117d1929190612f4c565b60405180910390a46117f7848860008686604051806020016040528060008152506118f9565b50505050505050565b61180e868686868686611d29565b611816610773565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061187b5750600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806118b25750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b6118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890612fc1565b60405180910390fd5b505050505050565b505050505050565b6119208473ffffffffffffffffffffffffffffffffffffffff16611d31565b15611ad0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611966959493929190613036565b6020604051808303816000875af19250505080156119a257506040513d601f19601f8201168201806040525081019061199f91906130b3565b60015b611a47576119ae6130ed565b806308c379a003611a0a57506119c261310f565b806119cd5750611a0c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a019190611fde565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90613211565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906132a3565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611af757611af6612005565b5b604051908082528060200260200182016040528015611b255781602001602082028036833780820191505090505b5090508281600081518110611b3d57611b3c6129d1565b5b60200260200101818152505080915050919050565b611b718473ffffffffffffffffffffffffffffffffffffffff16611d31565b15611d21578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611bb79594939291906132c3565b6020604051808303816000875af1925050508015611bf357506040513d601f19601f82011682018060405250810190611bf091906130b3565b60015b611c9857611bff6130ed565b806308c379a003611c5b5750611c1361310f565b80611c1e5750611c5d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c529190611fde565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613211565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d16906132a3565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d9382611d68565b9050919050565b611da381611d88565b8114611dae57600080fd5b50565b600081359050611dc081611d9a565b92915050565b6000819050919050565b611dd981611dc6565b8114611de457600080fd5b50565b600081359050611df681611dd0565b92915050565b60008060408385031215611e1357611e12611d5e565b5b6000611e2185828601611db1565b9250506020611e3285828601611de7565b9150509250929050565b611e4581611dc6565b82525050565b6000602082019050611e606000830184611e3c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e9b81611e66565b8114611ea657600080fd5b50565b600081359050611eb881611e92565b92915050565b600060208284031215611ed457611ed3611d5e565b5b6000611ee284828501611ea9565b91505092915050565b60008115159050919050565b611f0081611eeb565b82525050565b6000602082019050611f1b6000830184611ef7565b92915050565b600060208284031215611f3757611f36611d5e565b5b6000611f4584828501611de7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f88578082015181840152602081019050611f6d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611fb082611f4e565b611fba8185611f59565b9350611fca818560208601611f6a565b611fd381611f94565b840191505092915050565b60006020820190508181036000830152611ff88184611fa5565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61203d82611f94565b810181811067ffffffffffffffff8211171561205c5761205b612005565b5b80604052505050565b600061206f611d54565b905061207b8282612034565b919050565b600067ffffffffffffffff82111561209b5761209a612005565b5b602082029050602081019050919050565b600080fd5b60006120c46120bf84612080565b612065565b905080838252602082019050602084028301858111156120e7576120e66120ac565b5b835b8181101561211057806120fc8882611de7565b8452602084019350506020810190506120e9565b5050509392505050565b600082601f83011261212f5761212e612000565b5b813561213f8482602086016120b1565b91505092915050565b600080fd5b600067ffffffffffffffff82111561216857612167612005565b5b61217182611f94565b9050602081019050919050565b82818337600083830152505050565b60006121a061219b8461214d565b612065565b9050828152602081018484840111156121bc576121bb612148565b5b6121c784828561217e565b509392505050565b600082601f8301126121e4576121e3612000565b5b81356121f484826020860161218d565b91505092915050565b600080600080600060a0868803121561221957612218611d5e565b5b600061222788828901611db1565b955050602061223888828901611db1565b945050604086013567ffffffffffffffff81111561225957612258611d63565b5b6122658882890161211a565b935050606086013567ffffffffffffffff81111561228657612285611d63565b5b6122928882890161211a565b925050608086013567ffffffffffffffff8111156122b3576122b2611d63565b5b6122bf888289016121cf565b9150509295509295909350565b600067ffffffffffffffff8211156122e7576122e6612005565b5b602082029050602081019050919050565b600061230b612306846122cc565b612065565b9050808382526020820190506020840283018581111561232e5761232d6120ac565b5b835b8181101561235757806123438882611db1565b845260208401935050602081019050612330565b5050509392505050565b600082601f83011261237657612375612000565b5b81356123868482602086016122f8565b91505092915050565b600080604083850312156123a6576123a5611d5e565b5b600083013567ffffffffffffffff8111156123c4576123c3611d63565b5b6123d085828601612361565b925050602083013567ffffffffffffffff8111156123f1576123f0611d63565b5b6123fd8582860161211a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61243c81611dc6565b82525050565b600061244e8383612433565b60208301905092915050565b6000602082019050919050565b600061247282612407565b61247c8185612412565b935061248783612423565b8060005b838110156124b857815161249f8882612442565b97506124aa8361245a565b92505060018101905061248b565b5085935050505092915050565b600060208201905081810360008301526124df8184612467565b905092915050565b600080600060608486031215612500576124ff611d5e565b5b600061250e86828701611db1565b935050602084013567ffffffffffffffff81111561252f5761252e611d63565b5b61253b8682870161211a565b925050604084013567ffffffffffffffff81111561255c5761255b611d63565b5b6125688682870161211a565b9150509250925092565b61257b81611d88565b82525050565b60006020820190506125966000830184612572565b92915050565b6125a581611eeb565b81146125b057600080fd5b50565b6000813590506125c28161259c565b92915050565b600080604083850312156125df576125de611d5e565b5b60006125ed85828601611db1565b92505060206125fe858286016125b3565b9150509250929050565b6000806040838503121561261f5761261e611d5e565b5b600061262d85828601611de7565b925050602083013567ffffffffffffffff81111561264e5761264d611d63565b5b61265a85828601612361565b9150509250929050565b6000806040838503121561267b5761267a611d5e565b5b600061268985828601611db1565b925050602061269a85828601611db1565b9150509250929050565b600080600080600060a086880312156126c0576126bf611d5e565b5b60006126ce88828901611db1565b95505060206126df88828901611db1565b94505060406126f088828901611de7565b935050606061270188828901611de7565b925050608086013567ffffffffffffffff81111561272257612721611d63565b5b61272e888289016121cf565b9150509295509295909350565b60006020828403121561275157612750611d5e565b5b600061275f84828501611db1565b91505092915050565b60008060006060848603121561278157612780611d5e565b5b600061278f86828701611db1565b93505060206127a086828701611de7565b92505060406127b186828701611de7565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612817602a83611f59565b9150612822826127bb565b604082019050919050565b600060208201905081810360008301526128468161280a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061289457607f821691505b6020821081036128a7576128a661284d565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612909602e83611f59565b9150612914826128ad565b604082019050919050565b60006020820190508181036000830152612938816128fc565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061299b602983611f59565b91506129a68261293f565b604082019050919050565b600060208201905081810360008301526129ca8161298e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a3a82611dc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a6c57612a6b612a00565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ad3602683611f59565b9150612ade82612a77565b604082019050919050565b60006020820190508181036000830152612b0281612ac6565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612b65602883611f59565b9150612b7082612b09565b604082019050919050565b60006020820190508181036000830152612b9481612b58565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612bf7602583611f59565b9150612c0282612b9b565b604082019050919050565b60006020820190508181036000830152612c2681612bea565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c89602a83611f59565b9150612c9482612c2d565b604082019050919050565b60006020820190508181036000830152612cb881612c7c565b9050919050565b6000612cca82611dc6565b9150612cd583611dc6565b9250828201905080821115612ced57612cec612a00565b5b92915050565b60006040820190508181036000830152612d0d8185612467565b90508181036020830152612d218184612467565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612d86602383611f59565b9150612d9182612d2a565b604082019050919050565b60006020820190508181036000830152612db581612d79565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000612e18602483611f59565b9150612e2382612dbc565b604082019050919050565b60006020820190508181036000830152612e4781612e0b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e84602083611f59565b9150612e8f82612e4e565b602082019050919050565b60006020820190508181036000830152612eb381612e77565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f16602183611f59565b9150612f2182612eba565b604082019050919050565b60006020820190508181036000830152612f4581612f09565b9050919050565b6000604082019050612f616000830185611e3c565b612f6e6020830184611e3c565b9392505050565b7f54686973204e4654206973206e6f6e2d7472616e7366657261626c6500000000600082015250565b6000612fab601c83611f59565b9150612fb682612f75565b602082019050919050565b60006020820190508181036000830152612fda81612f9e565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061300882612fe1565b6130128185612fec565b9350613022818560208601611f6a565b61302b81611f94565b840191505092915050565b600060a08201905061304b6000830188612572565b6130586020830187612572565b818103604083015261306a8186612467565b9050818103606083015261307e8185612467565b905081810360808301526130928184612ffd565b90509695505050505050565b6000815190506130ad81611e92565b92915050565b6000602082840312156130c9576130c8611d5e565b5b60006130d78482850161309e565b91505092915050565b60008160e01c9050919050565b600060033d111561310c5760046000803e6131096000516130e0565b90505b90565b600060443d1061319c57613121611d54565b60043d036004823e80513d602482011167ffffffffffffffff8211171561314957505061319c565b808201805167ffffffffffffffff811115613167575050505061319c565b80602083010160043d03850181111561318457505050505061319c565b61319382602001850186612034565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006131fb603483611f59565b91506132068261319f565b604082019050919050565b6000602082019050818103600083015261322a816131ee565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061328d602883611f59565b915061329882613231565b604082019050919050565b600060208201905081810360008301526132bc81613280565b9050919050565b600060a0820190506132d86000830188612572565b6132e56020830187612572565b6132f26040830186611e3c565b6132ff6060830185611e3c565b81810360808301526133118184612ffd565b9050969550505050505056fea2646970667358221220cb44508867ba9c0017311b4b299e3b585997b45ad9ff0ad78dea1651e303496e64736f6c6343000812003368747470733a2f2f6170692e6772616e646c6569737572652e6f72672f726c70732f64617461

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100e95760003560e01c80638da5cb5b1161008c578063e985e9c511610066578063e985e9c514610246578063f242432a14610276578063f2fde38b14610292578063f5298aca146102ae576100e9565b80638da5cb5b146101f0578063a22cb4651461020e578063bdf7a8e61461022a576100e9565b80632eb2c2d6116100c85780632eb2c2d61461017e5780634e1273f41461019a5780636b20c454146101ca578063715018a6146101e6576100e9565b8062fdd58e146100ee57806301ffc9a71461011e5780630e89341c1461014e575b600080fd5b61010860048036038101906101039190611dfc565b6102ca565b6040516101159190611e4b565b60405180910390f35b61013860048036038101906101339190611ebe565b610392565b6040516101459190611f06565b60405180910390f35b61016860048036038101906101639190611f21565b610474565b6040516101759190611fde565b60405180910390f35b610198600480360381019061019391906121fd565b610508565b005b6101b460048036038101906101af919061238f565b6105a9565b6040516101c191906124c5565b60405180910390f35b6101e460048036038101906101df91906124e7565b6106c2565b005b6101ee61075f565b005b6101f8610773565b6040516102059190612581565b60405180910390f35b610228600480360381019061022391906125c8565b61079d565b005b610244600480360381019061023f9190612608565b6107a2565b005b610260600480360381019061025b9190612664565b610804565b60405161026d9190611f06565b60405180910390f35b610290600480360381019061028b91906126a4565b610809565b005b6102ac60048036038101906102a7919061273b565b6108aa565b005b6102c860048036038101906102c39190612768565b61092d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361033a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103319061282d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046d575061046c826109ca565b5b9050919050565b6060600280546104839061287c565b80601f01602080910402602001604051908101604052809291908181526020018280546104af9061287c565b80156104fc5780601f106104d1576101008083540402835291602001916104fc565b820191906000526020600020905b8154815290600101906020018083116104df57829003601f168201915b50505050509050919050565b610510610a34565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610556575061055585610550610a34565b610804565b5b610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058c9061291f565b60405180910390fd5b6105a28585858585610a3c565b5050505050565b606081518351146105ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e6906129b1565b60405180910390fd5b6000835167ffffffffffffffff81111561060c5761060b612005565b5b60405190808252806020026020018201604052801561063a5781602001602082028036833780820191505090505b50905060005b84518110156106b75761068785828151811061065f5761065e6129d1565b5b602002602001015185838151811061067a576106796129d1565b5b60200260200101516102ca565b82828151811061069a576106996129d1565b5b602002602001018181525050806106b090612a2f565b9050610640565b508091505092915050565b6106ca610a34565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610710575061070f8361070a610a34565b610804565b5b61074f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107469061291f565b60405180910390fd5b61075a838383610d5d565b505050565b61076761102b565b61077160006110a9565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b6107aa61102b565b60005b81518110156107ff576107ec8282815181106107cc576107cb6129d1565b5b60200260200101518460016040518060200160405280600081525061116f565b80806107f790612a2f565b9150506107ad565b505050565b600080fd5b610811610a34565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610857575061085685610851610a34565b610804565b5b610896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088d9061291f565b60405180910390fd5b6108a3858585858561131f565b5050505050565b6108b261102b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890612ae9565b60405180910390fd5b61092a816110a9565b50565b610935610a34565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061097b575061097a83610975610a34565b610804565b5b6109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b19061291f565b60405180910390fd5b6109c58383836115ba565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790612b7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690612c0d565b60405180910390fd5b6000610af9610a34565b9050610b09818787878787611800565b60005b8451811015610cba576000858281518110610b2a57610b296129d1565b5b602002602001015190506000858381518110610b4957610b486129d1565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190612c9f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c9f9190612cbf565b9250508190555050505080610cb390612a2f565b9050610b0c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d31929190612cf3565b60405180910390a4610d478187878787876118f9565b610d55818787878787611901565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390612d9c565b60405180910390fd5b8051825114610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790612b7b565b60405180910390fd5b6000610e1a610a34565b9050610e3a81856000868660405180602001604052806000815250611800565b60005b8351811015610f87576000848281518110610e5b57610e5a6129d1565b5b602002602001015190506000848381518110610e7a57610e796129d1565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290612e2e565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080610f7f90612a2f565b915050610e3d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610fff929190612cf3565b60405180910390a4611025818560008686604051806020016040528060008152506118f9565b50505050565b611033610a34565b73ffffffffffffffffffffffffffffffffffffffff16611051610773565b73ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90612e9a565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590612f2c565b60405180910390fd5b60006111e8610a34565b905060006111f585611ad8565b9050600061120285611ad8565b905061121383600089858589611800565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112729190612cbf565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516112f0929190612f4c565b60405180910390a4611307836000898585896118f9565b61131683600089898989611b52565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590612c0d565b60405180910390fd5b6000611398610a34565b905060006113a585611ad8565b905060006113b285611ad8565b90506113c2838989858589611800565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090612c9f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461150e9190612cbf565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161158b929190612f4c565b60405180910390a46115a1848a8a86868a6118f9565b6115af848a8a8a8a8a611b52565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090612d9c565b60405180910390fd5b6000611633610a34565b9050600061164084611ad8565b9050600061164d84611ad8565b905061166d83876000858560405180602001604052806000815250611800565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90612e2e565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516117d1929190612f4c565b60405180910390a46117f7848860008686604051806020016040528060008152506118f9565b50505050505050565b61180e868686868686611d29565b611816610773565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061187b5750600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806118b25750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b6118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890612fc1565b60405180910390fd5b505050505050565b505050505050565b6119208473ffffffffffffffffffffffffffffffffffffffff16611d31565b15611ad0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611966959493929190613036565b6020604051808303816000875af19250505080156119a257506040513d601f19601f8201168201806040525081019061199f91906130b3565b60015b611a47576119ae6130ed565b806308c379a003611a0a57506119c261310f565b806119cd5750611a0c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a019190611fde565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90613211565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906132a3565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611af757611af6612005565b5b604051908082528060200260200182016040528015611b255781602001602082028036833780820191505090505b5090508281600081518110611b3d57611b3c6129d1565b5b60200260200101818152505080915050919050565b611b718473ffffffffffffffffffffffffffffffffffffffff16611d31565b15611d21578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611bb79594939291906132c3565b6020604051808303816000875af1925050508015611bf357506040513d601f19601f82011682018060405250810190611bf091906130b3565b60015b611c9857611bff6130ed565b806308c379a003611c5b5750611c1361310f565b80611c1e5750611c5d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c529190611fde565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613211565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d16906132a3565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d9382611d68565b9050919050565b611da381611d88565b8114611dae57600080fd5b50565b600081359050611dc081611d9a565b92915050565b6000819050919050565b611dd981611dc6565b8114611de457600080fd5b50565b600081359050611df681611dd0565b92915050565b60008060408385031215611e1357611e12611d5e565b5b6000611e2185828601611db1565b9250506020611e3285828601611de7565b9150509250929050565b611e4581611dc6565b82525050565b6000602082019050611e606000830184611e3c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e9b81611e66565b8114611ea657600080fd5b50565b600081359050611eb881611e92565b92915050565b600060208284031215611ed457611ed3611d5e565b5b6000611ee284828501611ea9565b91505092915050565b60008115159050919050565b611f0081611eeb565b82525050565b6000602082019050611f1b6000830184611ef7565b92915050565b600060208284031215611f3757611f36611d5e565b5b6000611f4584828501611de7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f88578082015181840152602081019050611f6d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611fb082611f4e565b611fba8185611f59565b9350611fca818560208601611f6a565b611fd381611f94565b840191505092915050565b60006020820190508181036000830152611ff88184611fa5565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61203d82611f94565b810181811067ffffffffffffffff8211171561205c5761205b612005565b5b80604052505050565b600061206f611d54565b905061207b8282612034565b919050565b600067ffffffffffffffff82111561209b5761209a612005565b5b602082029050602081019050919050565b600080fd5b60006120c46120bf84612080565b612065565b905080838252602082019050602084028301858111156120e7576120e66120ac565b5b835b8181101561211057806120fc8882611de7565b8452602084019350506020810190506120e9565b5050509392505050565b600082601f83011261212f5761212e612000565b5b813561213f8482602086016120b1565b91505092915050565b600080fd5b600067ffffffffffffffff82111561216857612167612005565b5b61217182611f94565b9050602081019050919050565b82818337600083830152505050565b60006121a061219b8461214d565b612065565b9050828152602081018484840111156121bc576121bb612148565b5b6121c784828561217e565b509392505050565b600082601f8301126121e4576121e3612000565b5b81356121f484826020860161218d565b91505092915050565b600080600080600060a0868803121561221957612218611d5e565b5b600061222788828901611db1565b955050602061223888828901611db1565b945050604086013567ffffffffffffffff81111561225957612258611d63565b5b6122658882890161211a565b935050606086013567ffffffffffffffff81111561228657612285611d63565b5b6122928882890161211a565b925050608086013567ffffffffffffffff8111156122b3576122b2611d63565b5b6122bf888289016121cf565b9150509295509295909350565b600067ffffffffffffffff8211156122e7576122e6612005565b5b602082029050602081019050919050565b600061230b612306846122cc565b612065565b9050808382526020820190506020840283018581111561232e5761232d6120ac565b5b835b8181101561235757806123438882611db1565b845260208401935050602081019050612330565b5050509392505050565b600082601f83011261237657612375612000565b5b81356123868482602086016122f8565b91505092915050565b600080604083850312156123a6576123a5611d5e565b5b600083013567ffffffffffffffff8111156123c4576123c3611d63565b5b6123d085828601612361565b925050602083013567ffffffffffffffff8111156123f1576123f0611d63565b5b6123fd8582860161211a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61243c81611dc6565b82525050565b600061244e8383612433565b60208301905092915050565b6000602082019050919050565b600061247282612407565b61247c8185612412565b935061248783612423565b8060005b838110156124b857815161249f8882612442565b97506124aa8361245a565b92505060018101905061248b565b5085935050505092915050565b600060208201905081810360008301526124df8184612467565b905092915050565b600080600060608486031215612500576124ff611d5e565b5b600061250e86828701611db1565b935050602084013567ffffffffffffffff81111561252f5761252e611d63565b5b61253b8682870161211a565b925050604084013567ffffffffffffffff81111561255c5761255b611d63565b5b6125688682870161211a565b9150509250925092565b61257b81611d88565b82525050565b60006020820190506125966000830184612572565b92915050565b6125a581611eeb565b81146125b057600080fd5b50565b6000813590506125c28161259c565b92915050565b600080604083850312156125df576125de611d5e565b5b60006125ed85828601611db1565b92505060206125fe858286016125b3565b9150509250929050565b6000806040838503121561261f5761261e611d5e565b5b600061262d85828601611de7565b925050602083013567ffffffffffffffff81111561264e5761264d611d63565b5b61265a85828601612361565b9150509250929050565b6000806040838503121561267b5761267a611d5e565b5b600061268985828601611db1565b925050602061269a85828601611db1565b9150509250929050565b600080600080600060a086880312156126c0576126bf611d5e565b5b60006126ce88828901611db1565b95505060206126df88828901611db1565b94505060406126f088828901611de7565b935050606061270188828901611de7565b925050608086013567ffffffffffffffff81111561272257612721611d63565b5b61272e888289016121cf565b9150509295509295909350565b60006020828403121561275157612750611d5e565b5b600061275f84828501611db1565b91505092915050565b60008060006060848603121561278157612780611d5e565b5b600061278f86828701611db1565b93505060206127a086828701611de7565b92505060406127b186828701611de7565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612817602a83611f59565b9150612822826127bb565b604082019050919050565b600060208201905081810360008301526128468161280a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061289457607f821691505b6020821081036128a7576128a661284d565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612909602e83611f59565b9150612914826128ad565b604082019050919050565b60006020820190508181036000830152612938816128fc565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061299b602983611f59565b91506129a68261293f565b604082019050919050565b600060208201905081810360008301526129ca8161298e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a3a82611dc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a6c57612a6b612a00565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ad3602683611f59565b9150612ade82612a77565b604082019050919050565b60006020820190508181036000830152612b0281612ac6565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612b65602883611f59565b9150612b7082612b09565b604082019050919050565b60006020820190508181036000830152612b9481612b58565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612bf7602583611f59565b9150612c0282612b9b565b604082019050919050565b60006020820190508181036000830152612c2681612bea565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c89602a83611f59565b9150612c9482612c2d565b604082019050919050565b60006020820190508181036000830152612cb881612c7c565b9050919050565b6000612cca82611dc6565b9150612cd583611dc6565b9250828201905080821115612ced57612cec612a00565b5b92915050565b60006040820190508181036000830152612d0d8185612467565b90508181036020830152612d218184612467565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612d86602383611f59565b9150612d9182612d2a565b604082019050919050565b60006020820190508181036000830152612db581612d79565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000612e18602483611f59565b9150612e2382612dbc565b604082019050919050565b60006020820190508181036000830152612e4781612e0b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e84602083611f59565b9150612e8f82612e4e565b602082019050919050565b60006020820190508181036000830152612eb381612e77565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f16602183611f59565b9150612f2182612eba565b604082019050919050565b60006020820190508181036000830152612f4581612f09565b9050919050565b6000604082019050612f616000830185611e3c565b612f6e6020830184611e3c565b9392505050565b7f54686973204e4654206973206e6f6e2d7472616e7366657261626c6500000000600082015250565b6000612fab601c83611f59565b9150612fb682612f75565b602082019050919050565b60006020820190508181036000830152612fda81612f9e565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061300882612fe1565b6130128185612fec565b9350613022818560208601611f6a565b61302b81611f94565b840191505092915050565b600060a08201905061304b6000830188612572565b6130586020830187612572565b818103604083015261306a8186612467565b9050818103606083015261307e8185612467565b905081810360808301526130928184612ffd565b90509695505050505050565b6000815190506130ad81611e92565b92915050565b6000602082840312156130c9576130c8611d5e565b5b60006130d78482850161309e565b91505092915050565b60008160e01c9050919050565b600060033d111561310c5760046000803e6131096000516130e0565b90505b90565b600060443d1061319c57613121611d54565b60043d036004823e80513d602482011167ffffffffffffffff8211171561314957505061319c565b808201805167ffffffffffffffff811115613167575050505061319c565b80602083010160043d03850181111561318457505050505061319c565b61319382602001850186612034565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006131fb603483611f59565b91506132068261319f565b604082019050919050565b6000602082019050818103600083015261322a816131ee565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061328d602883611f59565b915061329882613231565b604082019050919050565b600060208201905081810360008301526132bc81613280565b9050919050565b600060a0820190506132d86000830188612572565b6132e56020830187612572565b6132f26040830186611e3c565b6132ff6060830185611e3c565b81810360808301526133118184612ffd565b9050969550505050505056fea2646970667358221220cb44508867ba9c0017311b4b299e3b585997b45ad9ff0ad78dea1651e303496e64736f6c63430008120033

Deployed Bytecode Sourcemap

40237:1302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21069:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20092:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20813:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23012:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21465:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37260:358;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39420:103;;;:::i;:::-;;38772:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40625:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40383:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40823:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22529:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39678:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36926:326;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21069:230;21155:7;21202:1;21183:21;;:7;:21;;;21175:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21269:9;:13;21279:2;21269:13;;;;;;;;;;;:22;21283:7;21269:22;;;;;;;;;;;;;;;;21262:29;;21069:230;;;;:::o;20092:310::-;20194:4;20246:26;20231:41;;;:11;:41;;;;:110;;;;20304:37;20289:52;;;:11;:52;;;;20231:110;:163;;;;20358:36;20382:11;20358:23;:36::i;:::-;20231:163;20211:183;;20092:310;;;:::o;20813:105::-;20873:13;20906:4;20899:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20813:105;;;:::o;23012:438::-;23253:12;:10;:12::i;:::-;23245:20;;:4;:20;;;:60;;;;23269:36;23286:4;23292:12;:10;:12::i;:::-;23269:16;:36::i;:::-;23245:60;23223:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;23390:52;23413:4;23419:2;23423:3;23428:7;23437:4;23390:22;:52::i;:::-;23012:438;;;;;:::o;21465:524::-;21621:16;21682:3;:10;21663:8;:15;:29;21655:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21751:30;21798:8;:15;21784:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21751:63;;21832:9;21827:122;21851:8;:15;21847:1;:19;21827:122;;;21907:30;21917:8;21926:1;21917:11;;;;;;;;:::i;:::-;;;;;;;;21930:3;21934:1;21930:6;;;;;;;;:::i;:::-;;;;;;;;21907:9;:30::i;:::-;21888:13;21902:1;21888:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;21868:3;;;;:::i;:::-;;;21827:122;;;;21968:13;21961:20;;;21465:524;;;;:::o;37260:358::-;37436:12;:10;:12::i;:::-;37425:23;;:7;:23;;;:66;;;;37452:39;37469:7;37478:12;:10;:12::i;:::-;37452:16;:39::i;:::-;37425:66;37403:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;37578:32;37589:7;37598:3;37603:6;37578:10;:32::i;:::-;37260:358;;;:::o;39420:103::-;38658:13;:11;:13::i;:::-;39485:30:::1;39512:1;39485:18;:30::i;:::-;39420:103::o:0;38772:87::-;38818:7;38845:6;;;;;;;;;;;38838:13;;38772:87;:::o;40625:190::-;40799:8;;;40383:234;38658:13;:11;:13::i;:::-;40504:9:::1;40499:111;40523:10;:17;40519:1;:21;40499:111;;;40562:36;40568:10;40579:1;40568:13;;;;;;;;:::i;:::-;;;;;;;;40583:7;40592:1;40562:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;40542:3;;;;;:::i;:::-;;;;40499:111;;;;40383:234:::0;;:::o;40823:222::-;41029:8;;;22529:406;22745:12;:10;:12::i;:::-;22737:20;;:4;:20;;;:60;;;;22761:36;22778:4;22784:12;:10;:12::i;:::-;22761:16;:36::i;:::-;22737:60;22715:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;22882:45;22900:4;22906:2;22910;22914:6;22922:4;22882:17;:45::i;:::-;22529:406;;;;;:::o;39678:201::-;38658:13;:11;:13::i;:::-;39787:1:::1;39767:22;;:8;:22;;::::0;39759:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39843:28;39862:8;39843:18;:28::i;:::-;39678:201:::0;:::o;36926:326::-;37077:12;:10;:12::i;:::-;37066:23;;:7;:23;;;:66;;;;37093:39;37110:7;37119:12;:10;:12::i;:::-;37093:16;:39::i;:::-;37066:66;37044:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;37219:25;37225:7;37234:2;37238:5;37219;:25::i;:::-;36926:326;;;:::o;18941:157::-;19026:4;19065:25;19050:40;;;:11;:40;;;;19043:47;;18941:157;;;:::o;17962:98::-;18015:7;18042:10;18035:17;;17962:98;:::o;25246:1146::-;25473:7;:14;25459:3;:10;:28;25451:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25565:1;25551:16;;:2;:16;;;25543:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25622:16;25641:12;:10;:12::i;:::-;25622:31;;25666:60;25687:8;25697:4;25703:2;25707:3;25712:7;25721:4;25666:20;:60::i;:::-;25744:9;25739:421;25763:3;:10;25759:1;:14;25739:421;;;25795:10;25808:3;25812:1;25808:6;;;;;;;;:::i;:::-;;;;;;;;25795:19;;25829:14;25846:7;25854:1;25846:10;;;;;;;;:::i;:::-;;;;;;;;25829:27;;25873:19;25895:9;:13;25905:2;25895:13;;;;;;;;;;;:19;25909:4;25895:19;;;;;;;;;;;;;;;;25873:41;;25952:6;25937:11;:21;;25929:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26085:6;26071:11;:20;26049:9;:13;26059:2;26049:13;;;;;;;;;;;:19;26063:4;26049:19;;;;;;;;;;;;;;;:42;;;;26142:6;26121:9;:13;26131:2;26121:13;;;;;;;;;;;:17;26135:2;26121:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25780:380;;;25775:3;;;;:::i;:::-;;;25739:421;;;;26207:2;26177:47;;26201:4;26177:47;;26191:8;26177:47;;;26211:3;26216:7;26177:47;;;;;;;:::i;:::-;;;;;;;;26237:59;26257:8;26267:4;26273:2;26277:3;26282:7;26291:4;26237:19;:59::i;:::-;26309:75;26345:8;26355:4;26361:2;26365:3;26370:7;26379:4;26309:35;:75::i;:::-;25440:952;25246:1146;;;;;:::o;31011:969::-;31179:1;31163:18;;:4;:18;;;31155:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31254:7;:14;31240:3;:10;:28;31232:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31326:16;31345:12;:10;:12::i;:::-;31326:31;;31370:66;31391:8;31401:4;31415:1;31419:3;31424:7;31370:66;;;;;;;;;;;;:20;:66::i;:::-;31454:9;31449:373;31473:3;:10;31469:1;:14;31449:373;;;31505:10;31518:3;31522:1;31518:6;;;;;;;;:::i;:::-;;;;;;;;31505:19;;31539:14;31556:7;31564:1;31556:10;;;;;;;;:::i;:::-;;;;;;;;31539:27;;31583:19;31605:9;:13;31615:2;31605:13;;;;;;;;;;;:19;31619:4;31605:19;;;;;;;;;;;;;;;;31583:41;;31662:6;31647:11;:21;;31639:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31789:6;31775:11;:20;31753:9;:13;31763:2;31753:13;;;;;;;;;;;:19;31767:4;31753:19;;;;;;;;;;;;;;;:42;;;;31490:332;;;31485:3;;;;;:::i;:::-;;;;31449:373;;;;31877:1;31839:55;;31863:4;31839:55;;31853:8;31839:55;;;31881:3;31886:7;31839:55;;;;;;;:::i;:::-;;;;;;;;31907:65;31927:8;31937:4;31951:1;31955:3;31960:7;31907:65;;;;;;;;;;;;:19;:65::i;:::-;31144:836;31011:969;;;:::o;38937:132::-;39012:12;:10;:12::i;:::-;39001:23;;:7;:5;:7::i;:::-;:23;;;38993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38937:132::o;40039:191::-;40113:16;40132:6;;;;;;;;;;;40113:25;;40158:8;40149:6;;:17;;;;;;;;;;;;;;;;;;40213:8;40182:40;;40203:8;40182:40;;;;;;;;;;;;40102:128;40039:191;:::o;27710:729::-;27877:1;27863:16;;:2;:16;;;27855:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27930:16;27949:12;:10;:12::i;:::-;27930:31;;27972:20;27995:21;28013:2;27995:17;:21::i;:::-;27972:44;;28027:24;28054:25;28072:6;28054:17;:25::i;:::-;28027:52;;28092:66;28113:8;28131:1;28135:2;28139:3;28144:7;28153:4;28092:20;:66::i;:::-;28192:6;28171:9;:13;28181:2;28171:13;;;;;;;;;;;:17;28185:2;28171:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28251:2;28214:52;;28247:1;28214:52;;28229:8;28214:52;;;28255:2;28259:6;28214:52;;;;;;;:::i;:::-;;;;;;;;28279:65;28299:8;28317:1;28321:2;28325:3;28330:7;28339:4;28279:19;:65::i;:::-;28357:74;28388:8;28406:1;28410:2;28414;28418:6;28426:4;28357:30;:74::i;:::-;27844:595;;;27710:729;;;;:::o;23914:974::-;24116:1;24102:16;;:2;:16;;;24094:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24173:16;24192:12;:10;:12::i;:::-;24173:31;;24215:20;24238:21;24256:2;24238:17;:21::i;:::-;24215:44;;24270:24;24297:25;24315:6;24297:17;:25::i;:::-;24270:52;;24335:60;24356:8;24366:4;24372:2;24376:3;24381:7;24390:4;24335:20;:60::i;:::-;24408:19;24430:9;:13;24440:2;24430:13;;;;;;;;;;;:19;24444:4;24430:19;;;;;;;;;;;;;;;;24408:41;;24483:6;24468:11;:21;;24460:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24608:6;24594:11;:20;24572:9;:13;24582:2;24572:13;;;;;;;;;;;:19;24586:4;24572:19;;;;;;;;;;;;;;;:42;;;;24657:6;24636:9;:13;24646:2;24636:13;;;;;;;;;;;:17;24650:2;24636:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24712:2;24681:46;;24706:4;24681:46;;24696:8;24681:46;;;24716:2;24720:6;24681:46;;;;;;;:::i;:::-;;;;;;;;24740:59;24760:8;24770:4;24776:2;24780:3;24785:7;24794:4;24740:19;:59::i;:::-;24812:68;24843:8;24853:4;24859:2;24863;24867:6;24875:4;24812:30;:68::i;:::-;24083:805;;;;23914:974;;;;;:::o;29953:808::-;30096:1;30080:18;;:4;:18;;;30072:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30151:16;30170:12;:10;:12::i;:::-;30151:31;;30193:20;30216:21;30234:2;30216:17;:21::i;:::-;30193:44;;30248:24;30275:25;30293:6;30275:17;:25::i;:::-;30248:52;;30313:66;30334:8;30344:4;30358:1;30362:3;30367:7;30313:66;;;;;;;;;;;;:20;:66::i;:::-;30392:19;30414:9;:13;30424:2;30414:13;;;;;;;;;;;:19;30428:4;30414:19;;;;;;;;;;;;;;;;30392:41;;30467:6;30452:11;:21;;30444:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30586:6;30572:11;:20;30550:9;:13;30560:2;30550:13;;;;;;;;;;;:19;30564:4;30550:19;;;;;;;;;;;;;;;:42;;;;30660:1;30621:54;;30646:4;30621:54;;30636:8;30621:54;;;30664:2;30668:6;30621:54;;;;;;;:::i;:::-;;;;;;;;30688:65;30708:8;30718:4;30732:1;30736:3;30741:7;30688:65;;;;;;;;;;;;:19;:65::i;:::-;30061:700;;;;29953:808;;;:::o;41053:483::-;41284:66;41311:8;41321:4;41327:2;41331:3;41336:7;41345:4;41284:26;:66::i;:::-;41397:7;:5;:7::i;:::-;41383:21;;:10;:21;;;:56;;;;41437:1;41421:18;;:4;:18;;;41383:56;:89;;;;41470:1;41456:16;;:2;:16;;;41383:89;41361:167;;;;;;;;;;;;:::i;:::-;;;;;;;;;41053:483;;;;;;:::o;34588:220::-;;;;;;;:::o;35568:813::-;35808:15;:2;:13;;;:15::i;:::-;35804:570;;;35861:2;35844:43;;;35888:8;35898:4;35904:3;35909:7;35918:4;35844:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35840:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36236:6;36229:14;;;;;;;;;;;:::i;:::-;;;;;;;;35840:523;;;36285:62;;;;;;;;;;:::i;:::-;;;;;;;;35840:523;36017:48;;;36005:60;;;:8;:60;;;;36001:159;;36090:50;;;;;;;;;;:::i;:::-;;;;;;;;36001:159;35924:251;35804:570;35568:813;;;;;;:::o;36389:198::-;36455:16;36484:22;36523:1;36509:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36484:41;;36547:7;36536:5;36542:1;36536:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36574:5;36567:12;;;36389:198;;;:::o;34816:744::-;35031:15;:2;:13;;;:15::i;:::-;35027:526;;;35084:2;35067:38;;;35106:8;35116:4;35122:2;35126:6;35134:4;35067:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35063:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;35415:6;35408:14;;;;;;;;;;;:::i;:::-;;;;;;;;35063:479;;;35464:62;;;;;;;;;;:::i;:::-;;;;;;;;35063:479;35201:43;;;35189:55;;;:8;:55;;;;35185:154;;35269:50;;;;;;;;;;:::i;:::-;;;;;;;;35185:154;35140:214;35027:526;34816:744;;;;;;:::o;33412:221::-;;;;;;;:::o;9173:326::-;9233:4;9490:1;9468:7;:19;;;:23;9461:30;;9173:326;;;:::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:246::-;3909:1;3919:113;3933:6;3930:1;3927:13;3919:113;;;4018:1;4013:3;4009:11;4003:18;3999:1;3994:3;3990:11;3983:39;3955:2;3952:1;3948:10;3943:15;;3919:113;;;4066:1;4057:6;4052:3;4048:16;4041:27;3890:184;3828:246;;;:::o;4080:102::-;4121:6;4172:2;4168:7;4163:2;4156:5;4152:14;4148:28;4138:38;;4080:102;;;:::o;4188:377::-;4276:3;4304:39;4337:5;4304:39;:::i;:::-;4359:71;4423:6;4418:3;4359:71;:::i;:::-;4352:78;;4439:65;4497:6;4492:3;4485:4;4478:5;4474:16;4439:65;:::i;:::-;4529:29;4551:6;4529:29;:::i;:::-;4524:3;4520:39;4513:46;;4280:285;4188:377;;;;:::o;4571:313::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4771:9;4765:4;4761:20;4757:1;4746:9;4742:17;4735:47;4799:78;4872:4;4863:6;4799:78;:::i;:::-;4791:86;;4571:313;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:311::-;10153:4;10243:18;10235:6;10232:30;10229:56;;;10265:18;;:::i;:::-;10229:56;10315:4;10307:6;10303:17;10295:25;;10375:4;10369;10365:15;10357:23;;10076:311;;;:::o;10410:710::-;10506:5;10531:81;10547:64;10604:6;10547:64;:::i;:::-;10531:81;:::i;:::-;10522:90;;10632:5;10661:6;10654:5;10647:21;10695:4;10688:5;10684:16;10677:23;;10748:4;10740:6;10736:17;10728:6;10724:30;10777:3;10769:6;10766:15;10763:122;;;10796:79;;:::i;:::-;10763:122;10911:6;10894:220;10928:6;10923:3;10920:15;10894:220;;;11003:3;11032:37;11065:3;11053:10;11032:37;:::i;:::-;11027:3;11020:50;11099:4;11094:3;11090:14;11083:21;;10970:144;10954:4;10949:3;10945:14;10938:21;;10894:220;;;10898:21;10512:608;;10410:710;;;;;:::o;11143:370::-;11214:5;11263:3;11256:4;11248:6;11244:17;11240:27;11230:122;;11271:79;;:::i;:::-;11230:122;11388:6;11375:20;11413:94;11503:3;11495:6;11488:4;11480:6;11476:17;11413:94;:::i;:::-;11404:103;;11220:293;11143:370;;;;:::o;11519:894::-;11637:6;11645;11694:2;11682:9;11673:7;11669:23;11665:32;11662:119;;;11700:79;;:::i;:::-;11662:119;11848:1;11837:9;11833:17;11820:31;11878:18;11870:6;11867:30;11864:117;;;11900:79;;:::i;:::-;11864:117;12005:78;12075:7;12066:6;12055:9;12051:22;12005:78;:::i;:::-;11995:88;;11791:302;12160:2;12149:9;12145:18;12132:32;12191:18;12183:6;12180:30;12177:117;;;12213:79;;:::i;:::-;12177:117;12318:78;12388:7;12379:6;12368:9;12364:22;12318:78;:::i;:::-;12308:88;;12103:303;11519:894;;;;;:::o;12419:114::-;12486:6;12520:5;12514:12;12504:22;;12419:114;;;:::o;12539:184::-;12638:11;12672:6;12667:3;12660:19;12712:4;12707:3;12703:14;12688:29;;12539:184;;;;:::o;12729:132::-;12796:4;12819:3;12811:11;;12849:4;12844:3;12840:14;12832:22;;12729:132;;;:::o;12867:108::-;12944:24;12962:5;12944:24;:::i;:::-;12939:3;12932:37;12867:108;;:::o;12981:179::-;13050:10;13071:46;13113:3;13105:6;13071:46;:::i;:::-;13149:4;13144:3;13140:14;13126:28;;12981:179;;;;:::o;13166:113::-;13236:4;13268;13263:3;13259:14;13251:22;;13166:113;;;:::o;13315:732::-;13434:3;13463:54;13511:5;13463:54;:::i;:::-;13533:86;13612:6;13607:3;13533:86;:::i;:::-;13526:93;;13643:56;13693:5;13643:56;:::i;:::-;13722:7;13753:1;13738:284;13763:6;13760:1;13757:13;13738:284;;;13839:6;13833:13;13866:63;13925:3;13910:13;13866:63;:::i;:::-;13859:70;;13952:60;14005:6;13952:60;:::i;:::-;13942:70;;13798:224;13785:1;13782;13778:9;13773:14;;13738:284;;;13742:14;14038:3;14031:10;;13439:608;;;13315:732;;;;:::o;14053:373::-;14196:4;14234:2;14223:9;14219:18;14211:26;;14283:9;14277:4;14273:20;14269:1;14258:9;14254:17;14247:47;14311:108;14414:4;14405:6;14311:108;:::i;:::-;14303:116;;14053:373;;;;:::o;14432:1039::-;14559:6;14567;14575;14624:2;14612:9;14603:7;14599:23;14595:32;14592:119;;;14630:79;;:::i;:::-;14592:119;14750:1;14775:53;14820:7;14811:6;14800:9;14796:22;14775:53;:::i;:::-;14765:63;;14721:117;14905:2;14894:9;14890:18;14877:32;14936:18;14928:6;14925:30;14922:117;;;14958:79;;:::i;:::-;14922:117;15063:78;15133:7;15124:6;15113:9;15109:22;15063:78;:::i;:::-;15053:88;;14848:303;15218:2;15207:9;15203:18;15190:32;15249:18;15241:6;15238:30;15235:117;;;15271:79;;:::i;:::-;15235:117;15376:78;15446:7;15437:6;15426:9;15422:22;15376:78;:::i;:::-;15366:88;;15161:303;14432:1039;;;;;:::o;15477:118::-;15564:24;15582:5;15564:24;:::i;:::-;15559:3;15552:37;15477:118;;:::o;15601:222::-;15694:4;15732:2;15721:9;15717:18;15709:26;;15745:71;15813:1;15802:9;15798:17;15789:6;15745:71;:::i;:::-;15601:222;;;;:::o;15829:116::-;15899:21;15914:5;15899:21;:::i;:::-;15892:5;15889:32;15879:60;;15935:1;15932;15925:12;15879:60;15829:116;:::o;15951:133::-;15994:5;16032:6;16019:20;16010:29;;16048:30;16072:5;16048:30;:::i;:::-;15951:133;;;;:::o;16090:468::-;16155:6;16163;16212:2;16200:9;16191:7;16187:23;16183:32;16180:119;;;16218:79;;:::i;:::-;16180:119;16338:1;16363:53;16408:7;16399:6;16388:9;16384:22;16363:53;:::i;:::-;16353:63;;16309:117;16465:2;16491:50;16533:7;16524:6;16513:9;16509:22;16491:50;:::i;:::-;16481:60;;16436:115;16090:468;;;;;:::o;16564:684::-;16657:6;16665;16714:2;16702:9;16693:7;16689:23;16685:32;16682:119;;;16720:79;;:::i;:::-;16682:119;16840:1;16865:53;16910:7;16901:6;16890:9;16886:22;16865:53;:::i;:::-;16855:63;;16811:117;16995:2;16984:9;16980:18;16967:32;17026:18;17018:6;17015:30;17012:117;;;17048:79;;:::i;:::-;17012:117;17153:78;17223:7;17214:6;17203:9;17199:22;17153:78;:::i;:::-;17143:88;;16938:303;16564:684;;;;;:::o;17254:474::-;17322:6;17330;17379:2;17367:9;17358:7;17354:23;17350:32;17347:119;;;17385:79;;:::i;:::-;17347:119;17505:1;17530:53;17575:7;17566:6;17555:9;17551:22;17530:53;:::i;:::-;17520:63;;17476:117;17632:2;17658:53;17703:7;17694:6;17683:9;17679:22;17658:53;:::i;:::-;17648:63;;17603:118;17254:474;;;;;:::o;17734:1089::-;17838:6;17846;17854;17862;17870;17919:3;17907:9;17898:7;17894:23;17890:33;17887:120;;;17926:79;;:::i;:::-;17887:120;18046:1;18071:53;18116:7;18107:6;18096:9;18092:22;18071:53;:::i;:::-;18061:63;;18017:117;18173:2;18199:53;18244:7;18235:6;18224:9;18220:22;18199:53;:::i;:::-;18189:63;;18144:118;18301:2;18327:53;18372:7;18363:6;18352:9;18348:22;18327:53;:::i;:::-;18317:63;;18272:118;18429:2;18455:53;18500:7;18491:6;18480:9;18476:22;18455:53;:::i;:::-;18445:63;;18400:118;18585:3;18574:9;18570:19;18557:33;18617:18;18609:6;18606:30;18603:117;;;18639:79;;:::i;:::-;18603:117;18744:62;18798:7;18789:6;18778:9;18774:22;18744:62;:::i;:::-;18734:72;;18528:288;17734:1089;;;;;;;;:::o;18829:329::-;18888:6;18937:2;18925:9;18916:7;18912:23;18908:32;18905:119;;;18943:79;;:::i;:::-;18905:119;19063:1;19088:53;19133:7;19124:6;19113:9;19109:22;19088:53;:::i;:::-;19078:63;;19034:117;18829:329;;;;:::o;19164:619::-;19241:6;19249;19257;19306:2;19294:9;19285:7;19281:23;19277:32;19274:119;;;19312:79;;:::i;:::-;19274:119;19432:1;19457:53;19502:7;19493:6;19482:9;19478:22;19457:53;:::i;:::-;19447:63;;19403:117;19559:2;19585:53;19630:7;19621:6;19610:9;19606:22;19585:53;:::i;:::-;19575:63;;19530:118;19687:2;19713:53;19758:7;19749:6;19738:9;19734:22;19713:53;:::i;:::-;19703:63;;19658:118;19164:619;;;;;:::o;19789:229::-;19929:34;19925:1;19917:6;19913:14;19906:58;19998:12;19993:2;19985:6;19981:15;19974:37;19789:229;:::o;20024:366::-;20166:3;20187:67;20251:2;20246:3;20187:67;:::i;:::-;20180:74;;20263:93;20352:3;20263:93;:::i;:::-;20381:2;20376:3;20372:12;20365:19;;20024:366;;;:::o;20396:419::-;20562:4;20600:2;20589:9;20585:18;20577:26;;20649:9;20643:4;20639:20;20635:1;20624:9;20620:17;20613:47;20677:131;20803:4;20677:131;:::i;:::-;20669:139;;20396:419;;;:::o;20821:180::-;20869:77;20866:1;20859:88;20966:4;20963:1;20956:15;20990:4;20987:1;20980:15;21007:320;21051:6;21088:1;21082:4;21078:12;21068:22;;21135:1;21129:4;21125:12;21156:18;21146:81;;21212:4;21204:6;21200:17;21190:27;;21146:81;21274:2;21266:6;21263:14;21243:18;21240:38;21237:84;;21293:18;;:::i;:::-;21237:84;21058:269;21007:320;;;:::o;21333:233::-;21473:34;21469:1;21461:6;21457:14;21450:58;21542:16;21537:2;21529:6;21525:15;21518:41;21333:233;:::o;21572:366::-;21714:3;21735:67;21799:2;21794:3;21735:67;:::i;:::-;21728:74;;21811:93;21900:3;21811:93;:::i;:::-;21929:2;21924:3;21920:12;21913:19;;21572:366;;;:::o;21944:419::-;22110:4;22148:2;22137:9;22133:18;22125:26;;22197:9;22191:4;22187:20;22183:1;22172:9;22168:17;22161:47;22225:131;22351:4;22225:131;:::i;:::-;22217:139;;21944:419;;;:::o;22369:228::-;22509:34;22505:1;22497:6;22493:14;22486:58;22578:11;22573:2;22565:6;22561:15;22554:36;22369:228;:::o;22603:366::-;22745:3;22766:67;22830:2;22825:3;22766:67;:::i;:::-;22759:74;;22842:93;22931:3;22842:93;:::i;:::-;22960:2;22955:3;22951:12;22944:19;;22603:366;;;:::o;22975:419::-;23141:4;23179:2;23168:9;23164:18;23156:26;;23228:9;23222:4;23218:20;23214:1;23203:9;23199:17;23192:47;23256:131;23382:4;23256:131;:::i;:::-;23248:139;;22975:419;;;:::o;23400:180::-;23448:77;23445:1;23438:88;23545:4;23542:1;23535:15;23569:4;23566:1;23559:15;23586:180;23634:77;23631:1;23624:88;23731:4;23728:1;23721:15;23755:4;23752:1;23745:15;23772:233;23811:3;23834:24;23852:5;23834:24;:::i;:::-;23825:33;;23880:66;23873:5;23870:77;23867:103;;23950:18;;:::i;:::-;23867:103;23997:1;23990:5;23986:13;23979:20;;23772:233;;;:::o;24011:225::-;24151:34;24147:1;24139:6;24135:14;24128:58;24220:8;24215:2;24207:6;24203:15;24196:33;24011:225;:::o;24242:366::-;24384:3;24405:67;24469:2;24464:3;24405:67;:::i;:::-;24398:74;;24481:93;24570:3;24481:93;:::i;:::-;24599:2;24594:3;24590:12;24583:19;;24242:366;;;:::o;24614:419::-;24780:4;24818:2;24807:9;24803:18;24795:26;;24867:9;24861:4;24857:20;24853:1;24842:9;24838:17;24831:47;24895:131;25021:4;24895:131;:::i;:::-;24887:139;;24614:419;;;:::o;25039:227::-;25179:34;25175:1;25167:6;25163:14;25156:58;25248:10;25243:2;25235:6;25231:15;25224:35;25039:227;:::o;25272:366::-;25414:3;25435:67;25499:2;25494:3;25435:67;:::i;:::-;25428:74;;25511:93;25600:3;25511:93;:::i;:::-;25629:2;25624:3;25620:12;25613:19;;25272:366;;;:::o;25644:419::-;25810:4;25848:2;25837:9;25833:18;25825:26;;25897:9;25891:4;25887:20;25883:1;25872:9;25868:17;25861:47;25925:131;26051:4;25925:131;:::i;:::-;25917:139;;25644:419;;;:::o;26069:224::-;26209:34;26205:1;26197:6;26193:14;26186:58;26278:7;26273:2;26265:6;26261:15;26254:32;26069:224;:::o;26299:366::-;26441:3;26462:67;26526:2;26521:3;26462:67;:::i;:::-;26455:74;;26538:93;26627:3;26538:93;:::i;:::-;26656:2;26651:3;26647:12;26640:19;;26299:366;;;:::o;26671:419::-;26837:4;26875:2;26864:9;26860:18;26852:26;;26924:9;26918:4;26914:20;26910:1;26899:9;26895:17;26888:47;26952:131;27078:4;26952:131;:::i;:::-;26944:139;;26671:419;;;:::o;27096:229::-;27236:34;27232:1;27224:6;27220:14;27213:58;27305:12;27300:2;27292:6;27288:15;27281:37;27096:229;:::o;27331:366::-;27473:3;27494:67;27558:2;27553:3;27494:67;:::i;:::-;27487:74;;27570:93;27659:3;27570:93;:::i;:::-;27688:2;27683:3;27679:12;27672:19;;27331:366;;;:::o;27703:419::-;27869:4;27907:2;27896:9;27892:18;27884:26;;27956:9;27950:4;27946:20;27942:1;27931:9;27927:17;27920:47;27984:131;28110:4;27984:131;:::i;:::-;27976:139;;27703:419;;;:::o;28128:191::-;28168:3;28187:20;28205:1;28187:20;:::i;:::-;28182:25;;28221:20;28239:1;28221:20;:::i;:::-;28216:25;;28264:1;28261;28257:9;28250:16;;28285:3;28282:1;28279:10;28276:36;;;28292:18;;:::i;:::-;28276:36;28128:191;;;;:::o;28325:634::-;28546:4;28584:2;28573:9;28569:18;28561:26;;28633:9;28627:4;28623:20;28619:1;28608:9;28604:17;28597:47;28661:108;28764:4;28755:6;28661:108;:::i;:::-;28653:116;;28816:9;28810:4;28806:20;28801:2;28790:9;28786:18;28779:48;28844:108;28947:4;28938:6;28844:108;:::i;:::-;28836:116;;28325:634;;;;;:::o;28965:222::-;29105:34;29101:1;29093:6;29089:14;29082:58;29174:5;29169:2;29161:6;29157:15;29150:30;28965:222;:::o;29193:366::-;29335:3;29356:67;29420:2;29415:3;29356:67;:::i;:::-;29349:74;;29432:93;29521:3;29432:93;:::i;:::-;29550:2;29545:3;29541:12;29534:19;;29193:366;;;:::o;29565:419::-;29731:4;29769:2;29758:9;29754:18;29746:26;;29818:9;29812:4;29808:20;29804:1;29793:9;29789:17;29782:47;29846:131;29972:4;29846:131;:::i;:::-;29838:139;;29565:419;;;:::o;29990:223::-;30130:34;30126:1;30118:6;30114:14;30107:58;30199:6;30194:2;30186:6;30182:15;30175:31;29990:223;:::o;30219:366::-;30361:3;30382:67;30446:2;30441:3;30382:67;:::i;:::-;30375:74;;30458:93;30547:3;30458:93;:::i;:::-;30576:2;30571:3;30567:12;30560:19;;30219:366;;;:::o;30591:419::-;30757:4;30795:2;30784:9;30780:18;30772:26;;30844:9;30838:4;30834:20;30830:1;30819:9;30815:17;30808:47;30872:131;30998:4;30872:131;:::i;:::-;30864:139;;30591:419;;;:::o;31016:182::-;31156:34;31152:1;31144:6;31140:14;31133:58;31016:182;:::o;31204:366::-;31346:3;31367:67;31431:2;31426:3;31367:67;:::i;:::-;31360:74;;31443:93;31532:3;31443:93;:::i;:::-;31561:2;31556:3;31552:12;31545:19;;31204:366;;;:::o;31576:419::-;31742:4;31780:2;31769:9;31765:18;31757:26;;31829:9;31823:4;31819:20;31815:1;31804:9;31800:17;31793:47;31857:131;31983:4;31857:131;:::i;:::-;31849:139;;31576:419;;;:::o;32001:220::-;32141:34;32137:1;32129:6;32125:14;32118:58;32210:3;32205:2;32197:6;32193:15;32186:28;32001:220;:::o;32227:366::-;32369:3;32390:67;32454:2;32449:3;32390:67;:::i;:::-;32383:74;;32466:93;32555:3;32466:93;:::i;:::-;32584:2;32579:3;32575:12;32568:19;;32227:366;;;:::o;32599:419::-;32765:4;32803:2;32792:9;32788:18;32780:26;;32852:9;32846:4;32842:20;32838:1;32827:9;32823:17;32816:47;32880:131;33006:4;32880:131;:::i;:::-;32872:139;;32599:419;;;:::o;33024:332::-;33145:4;33183:2;33172:9;33168:18;33160:26;;33196:71;33264:1;33253:9;33249:17;33240:6;33196:71;:::i;:::-;33277:72;33345:2;33334:9;33330:18;33321:6;33277:72;:::i;:::-;33024:332;;;;;:::o;33362:178::-;33502:30;33498:1;33490:6;33486:14;33479:54;33362:178;:::o;33546:366::-;33688:3;33709:67;33773:2;33768:3;33709:67;:::i;:::-;33702:74;;33785:93;33874:3;33785:93;:::i;:::-;33903:2;33898:3;33894:12;33887:19;;33546:366;;;:::o;33918:419::-;34084:4;34122:2;34111:9;34107:18;34099:26;;34171:9;34165:4;34161:20;34157:1;34146:9;34142:17;34135:47;34199:131;34325:4;34199:131;:::i;:::-;34191:139;;33918:419;;;:::o;34343:98::-;34394:6;34428:5;34422:12;34412:22;;34343:98;;;:::o;34447:168::-;34530:11;34564:6;34559:3;34552:19;34604:4;34599:3;34595:14;34580:29;;34447:168;;;;:::o;34621:373::-;34707:3;34735:38;34767:5;34735:38;:::i;:::-;34789:70;34852:6;34847:3;34789:70;:::i;:::-;34782:77;;34868:65;34926:6;34921:3;34914:4;34907:5;34903:16;34868:65;:::i;:::-;34958:29;34980:6;34958:29;:::i;:::-;34953:3;34949:39;34942:46;;34711:283;34621:373;;;;:::o;35000:1053::-;35323:4;35361:3;35350:9;35346:19;35338:27;;35375:71;35443:1;35432:9;35428:17;35419:6;35375:71;:::i;:::-;35456:72;35524:2;35513:9;35509:18;35500:6;35456:72;:::i;:::-;35575:9;35569:4;35565:20;35560:2;35549:9;35545:18;35538:48;35603:108;35706:4;35697:6;35603:108;:::i;:::-;35595:116;;35758:9;35752:4;35748:20;35743:2;35732:9;35728:18;35721:48;35786:108;35889:4;35880:6;35786:108;:::i;:::-;35778:116;;35942:9;35936:4;35932:20;35926:3;35915:9;35911:19;35904:49;35970:76;36041:4;36032:6;35970:76;:::i;:::-;35962:84;;35000:1053;;;;;;;;:::o;36059:141::-;36115:5;36146:6;36140:13;36131:22;;36162:32;36188:5;36162:32;:::i;:::-;36059:141;;;;:::o;36206:349::-;36275:6;36324:2;36312:9;36303:7;36299:23;36295:32;36292:119;;;36330:79;;:::i;:::-;36292:119;36450:1;36475:63;36530:7;36521:6;36510:9;36506:22;36475:63;:::i;:::-;36465:73;;36421:127;36206:349;;;;:::o;36561:106::-;36605:8;36654:5;36649:3;36645:15;36624:36;;36561:106;;;:::o;36673:183::-;36708:3;36746:1;36728:16;36725:23;36722:128;;;36784:1;36781;36778;36763:23;36806:34;36837:1;36831:8;36806:34;:::i;:::-;36799:41;;36722:128;36673:183;:::o;36862:711::-;36901:3;36939:4;36921:16;36918:26;36947:5;36915:39;36976:20;;:::i;:::-;37051:1;37033:16;37029:24;37026:1;37020:4;37005:49;37084:4;37078:11;37183:16;37176:4;37168:6;37164:17;37161:39;37128:18;37120:6;37117:30;37101:113;37098:146;;;37229:5;;;;37098:146;37275:6;37269:4;37265:17;37311:3;37305:10;37338:18;37330:6;37327:30;37324:43;;;37360:5;;;;;;37324:43;37408:6;37401:4;37396:3;37392:14;37388:27;37467:1;37449:16;37445:24;37439:4;37435:35;37430:3;37427:44;37424:57;;;37474:5;;;;;;;37424:57;37491;37539:6;37533:4;37529:17;37521:6;37517:30;37511:4;37491:57;:::i;:::-;37564:3;37557:10;;36905:668;;;;;36862:711;;:::o;37579:239::-;37719:34;37715:1;37707:6;37703:14;37696:58;37788:22;37783:2;37775:6;37771:15;37764:47;37579:239;:::o;37824:366::-;37966:3;37987:67;38051:2;38046:3;37987:67;:::i;:::-;37980:74;;38063:93;38152:3;38063:93;:::i;:::-;38181:2;38176:3;38172:12;38165:19;;37824:366;;;:::o;38196:419::-;38362:4;38400:2;38389:9;38385:18;38377:26;;38449:9;38443:4;38439:20;38435:1;38424:9;38420:17;38413:47;38477:131;38603:4;38477:131;:::i;:::-;38469:139;;38196:419;;;:::o;38621:227::-;38761:34;38757:1;38749:6;38745:14;38738:58;38830:10;38825:2;38817:6;38813:15;38806:35;38621:227;:::o;38854:366::-;38996:3;39017:67;39081:2;39076:3;39017:67;:::i;:::-;39010:74;;39093:93;39182:3;39093:93;:::i;:::-;39211:2;39206:3;39202:12;39195:19;;38854:366;;;:::o;39226:419::-;39392:4;39430:2;39419:9;39415:18;39407:26;;39479:9;39473:4;39469:20;39465:1;39454:9;39450:17;39443:47;39507:131;39633:4;39507:131;:::i;:::-;39499:139;;39226:419;;;:::o;39651:751::-;39874:4;39912:3;39901:9;39897:19;39889:27;;39926:71;39994:1;39983:9;39979:17;39970:6;39926:71;:::i;:::-;40007:72;40075:2;40064:9;40060:18;40051:6;40007:72;:::i;:::-;40089;40157:2;40146:9;40142:18;40133:6;40089:72;:::i;:::-;40171;40239:2;40228:9;40224:18;40215:6;40171:72;:::i;:::-;40291:9;40285:4;40281:20;40275:3;40264:9;40260:19;40253:49;40319:76;40390:4;40381:6;40319:76;:::i;:::-;40311:84;;39651:751;;;;;;;;:::o

Swarm Source

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