Token RUGLIST

Overview ERC1155

Total Supply:
0 RUGGED

Holders:
44 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RugListClaimToken

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-30
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

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


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

pragma solidity ^0.8.0;


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

        _burn(account, id, value);
    }

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

        _burnBatch(account, ids, values);
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

// File: spotbot/RugListClaimToken.sol


pragma solidity ^0.8.0;





contract RugListClaimToken is ERC1155Supply, Ownable {
    using Strings for uint256;

    string private baseURI;
    string public name;
    string public symbol;

    address public spotBotContract;

    mapping(uint256 => bool) public validDropTypes;

    event SetBaseURI(string indexed _baseURI);
    event AddDropType(uint256 _dropType);

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _baseURI
    ) ERC1155(_baseURI) {
        name = _name;
        symbol = _symbol;
        baseURI = _baseURI;
        validDropTypes[0] = true;
        emit SetBaseURI(baseURI);
    }

    function addDropType(uint256 _dropType) external onlyOwner {
        validDropTypes[_dropType] = true;
        emit AddDropType(_dropType);
    }

    function mintBatch(uint256[] memory ids, uint256[] memory amounts)
        external
        onlyOwner
    {
        _mintBatch(owner(), ids, amounts, "");
    }

    function airdropTokens(
        address[] memory to,
        uint256 typeId,
        uint256 amount
    ) public onlyOwner {
        require(validDropTypes[typeId], "TheSpotPFP: Invalid drop type");
        require(
            balanceOf(owner(), typeId) >= amount * to.length,
            "TheSpotPFP: Not enough to airdrop"
        );
        for (uint256 i = 0; i < to.length; i++) {
            safeTransferFrom(owner(), to[i], typeId, amount, "");
        }
    }

    function updateBaseUri(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
        emit SetBaseURI(baseURI);
    }

    // Minifridge edits start

    // only callable by the owner for security
    function setSpotBotContractAddress(address _spotBotContract)
        external
        onlyOwner
    {
        spotBotContract = _spotBotContract;
    }

    // this method will be called by the spot pfp contract
    // it will burn 1 spot drop token of a specifc type
    function burnRugToken(uint256 typeId, address from, uint amount) external {
        require(msg.sender == spotBotContract, "Invalid burner address");
        _burn(from, typeId, amount);
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        require(validDropTypes[typeId], "TheSpotDrops: Invalid drop type");
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, typeId.toString(), ".json"))
                : "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_dropType","type":"uint256"}],"name":"AddDropType","type":"event"},{"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":"string","name":"_baseURI","type":"string"}],"name":"SetBaseURI","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":"_dropType","type":"uint256"}],"name":"addDropType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnRugToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spotBotContract","type":"address"}],"name":"setSpotBotContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spotBotContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validDropTypes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200492e3803806200492e833981810160405281019062000037919062000466565b8062000049816200012f60201b60201c565b506200006a6200005e6200014b60201b60201c565b6200015360201b60201c565b82600690805190602001906200008292919062000219565b5081600790805190602001906200009b92919062000219565b508060059080519060200190620000b492919062000219565b5060016009600080815260200190815260200160002060006101000a81548160ff0219169083151502179055506005604051620000f291906200062f565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250505062000648565b80600290805190602001906200014792919062000219565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000227906200054e565b90600052602060002090601f0160209004810192826200024b576000855562000297565b82601f106200026657805160ff191683800117855562000297565b8280016001018555821562000297579182015b828111156200029657825182559160200191906001019062000279565b5b509050620002a69190620002aa565b5090565b5b80821115620002c5576000816000905550600101620002ab565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200033282620002e7565b810181811067ffffffffffffffff82111715620003545762000353620002f8565b5b80604052505050565b600062000369620002c9565b905062000377828262000327565b919050565b600067ffffffffffffffff8211156200039a5762000399620002f8565b5b620003a582620002e7565b9050602081019050919050565b60005b83811015620003d2578082015181840152602081019050620003b5565b83811115620003e2576000848401525b50505050565b6000620003ff620003f9846200037c565b6200035d565b9050828152602081018484840111156200041e576200041d620002e2565b5b6200042b848285620003b2565b509392505050565b600082601f8301126200044b576200044a620002dd565b5b81516200045d848260208601620003e8565b91505092915050565b600080600060608486031215620004825762000481620002d3565b5b600084015167ffffffffffffffff811115620004a357620004a2620002d8565b5b620004b18682870162000433565b935050602084015167ffffffffffffffff811115620004d557620004d4620002d8565b5b620004e38682870162000433565b925050604084015167ffffffffffffffff811115620005075762000506620002d8565b5b620005158682870162000433565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056757607f821691505b602082108114156200057e576200057d6200051f565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154620005b3816200054e565b620005bf818662000584565b94506001821660008114620005dd5760018114620005ef5762000626565b60ff1983168652818601935062000626565b620005fa856200058f565b60005b838110156200061e57815481890152600182019150602081019050620005fd565b838801955050505b50505092915050565b60006200063d8284620005a4565b915081905092915050565b6142d680620006586000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c8063868c93a1116100c3578063d351cfdc1161007c578063d351cfdc146103af578063e985e9c5146103cb578063eb2d42ff146103fb578063f242432a14610417578063f2fde38b14610433578063f473b32c1461044f5761014c565b8063868c93a1146102d95780638da5cb5b146102f75780638ea405881461031557806395d89b4114610345578063a22cb46514610363578063bd85b0391461037f5761014c565b80632eb2c2d6116101155780632eb2c2d61461021b5780633963cb331461023757806339f7e37f146102535780634e1273f41461026f5780634f558e791461029f578063715018a6146102cf5761014c565b8062fdd58e1461015157806301ffc9a71461018157806306fdde03146101b15780630e89341c146101cf57806326ef7612146101ff575b600080fd5b61016b60048036038101906101669190612753565b61046b565b60405161017891906127a2565b60405180910390f35b61019b60048036038101906101969190612815565b610534565b6040516101a8919061285d565b60405180910390f35b6101b9610616565b6040516101c69190612911565b60405180910390f35b6101e960048036038101906101e49190612933565b6106a4565b6040516101f69190612911565b60405180910390f35b61021960048036038101906102149190612933565b610764565b005b61023560048036038101906102309190612b5d565b610846565b005b610251600480360381019061024c9190612c2c565b6108e7565b005b61026d60048036038101906102689190612cfa565b6109a7565b005b61028960048036038101906102849190612e06565b610a80565b6040516102969190612f3c565b60405180910390f35b6102b960048036038101906102b49190612933565b610b99565b6040516102c6919061285d565b60405180910390f35b6102d7610bad565b005b6102e1610c35565b6040516102ee9190612f6d565b60405180910390f35b6102ff610c5b565b60405161030c9190612f6d565b60405180910390f35b61032f600480360381019061032a9190612933565b610c85565b60405161033c919061285d565b60405180910390f35b61034d610ca5565b60405161035a9190612911565b60405180910390f35b61037d60048036038101906103789190612fb4565b610d33565b005b61039960048036038101906103949190612933565b610d49565b6040516103a691906127a2565b60405180910390f35b6103c960048036038101906103c49190612ff4565b610d66565b005b6103e560048036038101906103e0919061306c565b610e08565b6040516103f2919061285d565b60405180910390f35b610415600480360381019061041091906130ac565b610e9c565b005b610431600480360381019061042c91906130ff565b610f3c565b005b61044d60048036038101906104489190612c2c565b610fdd565b005b61046960048036038101906104649190613196565b6110d5565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390613277565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ff57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061060f575061060e82611272565b5b9050919050565b60068054610623906132c6565b80601f016020809104026020016040519081016040528092919081815260200182805461064f906132c6565b801561069c5780601f106106715761010080835404028352916020019161069c565b820191906000526020600020905b81548152906001019060200180831161067f57829003601f168201915b505050505081565b60606009600083815260200190815260200160002060009054906101000a900460ff16610706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fd90613344565b60405180910390fd5b600060058054610715906132c6565b905011610731576040518060200160405280600081525061075d565b600561073c836112dc565b60405160200161074d929190613480565b6040516020818303038152906040525b9050919050565b61076c61143d565b73ffffffffffffffffffffffffffffffffffffffff1661078a610c5b565b73ffffffffffffffffffffffffffffffffffffffff16146107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d7906134fb565b60405180910390fd5b60016009600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f464a2fbdd2f6b94323d350eae34fb2567561e4047adc31d7d918fee42b3aef908160405161083b91906127a2565b60405180910390a150565b61084e61143d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061089457506108938561088e61143d565b610e08565b5b6108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca9061358d565b60405180910390fd5b6108e08585858585611445565b5050505050565b6108ef61143d565b73ffffffffffffffffffffffffffffffffffffffff1661090d610c5b565b73ffffffffffffffffffffffffffffffffffffffff1614610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a906134fb565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109af61143d565b73ffffffffffffffffffffffffffffffffffffffff166109cd610c5b565b73ffffffffffffffffffffffffffffffffffffffff1614610a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a906134fb565b60405180910390fd5b8060059080519060200190610a39929190612608565b506005604051610a4991906135ad565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b60608151835114610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd90613636565b60405180910390fd5b6000835167ffffffffffffffff811115610ae357610ae2612965565b5b604051908082528060200260200182016040528015610b115781602001602082028036833780820191505090505b50905060005b8451811015610b8e57610b5e858281518110610b3657610b35613656565b5b6020026020010151858381518110610b5157610b50613656565b5b602002602001015161046b565b828281518110610b7157610b70613656565b5b60200260200101818152505080610b87906136b4565b9050610b17565b508091505092915050565b600080610ba583610d49565b119050919050565b610bb561143d565b73ffffffffffffffffffffffffffffffffffffffff16610bd3610c5b565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c20906134fb565b60405180910390fd5b610c336000611759565b565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60078054610cb2906132c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cde906132c6565b8015610d2b5780601f10610d0057610100808354040283529160200191610d2b565b820191906000526020600020905b815481529060010190602001808311610d0e57829003601f168201915b505050505081565b610d45610d3e61143d565b838361181f565b5050565b600060036000838152602001908152602001600020549050919050565b610d6e61143d565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610c5b565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd9906134fb565b60405180910390fd5b610e04610ded610c5b565b83836040518060200160405280600081525061198c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390613749565b60405180910390fd5b610f37828483611baa565b505050565b610f4461143d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f8a5750610f8985610f8461143d565b610e08565b5b610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc0906137db565b60405180910390fd5b610fd68585858585611dc7565b5050505050565b610fe561143d565b73ffffffffffffffffffffffffffffffffffffffff16611003610c5b565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611050906134fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c09061386d565b60405180910390fd5b6110d281611759565b50565b6110dd61143d565b73ffffffffffffffffffffffffffffffffffffffff166110fb610c5b565b73ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611148906134fb565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900460ff166111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a8906138d9565b60405180910390fd5b8251816111be91906138f9565b6111cf6111c9610c5b565b8461046b565b1015611210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611207906139c5565b60405180910390fd5b60005b835181101561126c57611259611227610c5b565b85838151811061123a57611239613656565b5b6020026020010151858560405180602001604052806000815250610f3c565b8080611264906136b4565b915050611213565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415611324576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611438565b600082905060005b6000821461135657808061133f906136b4565b915050600a8261134f9190613a14565b915061132c565b60008167ffffffffffffffff81111561137257611371612965565b5b6040519080825280601f01601f1916602001820160405280156113a45781602001600182028036833780820191505090505b5090505b60008514611431576001826113bd9190613a45565b9150600a856113cc9190613a79565b60306113d89190613aaa565b60f81b8183815181106113ee576113ed613656565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561142a9190613a14565b94506113a8565b8093505050505b919050565b600033905090565b8151835114611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090613b72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090613c04565b60405180910390fd5b600061150361143d565b9050611513818787878787612049565b60005b84518110156116c457600085828151811061153457611533613656565b5b60200260200101519050600085838151811061155357611552613656565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90613c96565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a99190613aaa565b92505081905550505050806116bd906136b4565b9050611516565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161173b929190613cb6565b60405180910390a46117518187878787876121c3565b505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613d5f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161197f919061285d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613df1565b60405180910390fd5b8151835114611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3790613b72565b60405180910390fd5b6000611a4a61143d565b9050611a5b81600087878787612049565b60005b8451811015611b1457838181518110611a7a57611a79613656565b5b6020026020010151600080878481518110611a9857611a97613656565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611afa9190613aaa565b925050819055508080611b0c906136b4565b915050611a5e565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b8c929190613cb6565b60405180910390a4611ba3816000878787876121c3565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190613e83565b60405180910390fd5b6000611c2461143d565b9050611c5481856000611c368761239b565b611c3f8761239b565b60405180602001604052806000815250612049565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613f15565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611db8929190613f35565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90613c04565b60405180910390fd5b6000611e4161143d565b9050611e61818787611e528861239b565b611e5b8861239b565b87612049565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613c96565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fad9190613aaa565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161202a929190613f35565b60405180910390a4612040828888888888612415565b50505050505050565b6120578686868686866125ed565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156121095760005b8351811015612107578281815181106120ab576120aa613656565b5b6020026020010151600360008684815181106120ca576120c9613656565b5b6020026020010151815260200190815260200160002060008282546120ef9190613aaa565b9250508190555080612100906136b4565b905061208f565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121bb5760005b83518110156121b95782818151811061215d5761215c613656565b5b60200260200101516003600086848151811061217c5761217b613656565b5b6020026020010151815260200190815260200160002060008282546121a19190613a45565b92505081905550806121b2906136b4565b9050612141565b505b505050505050565b6121e28473ffffffffffffffffffffffffffffffffffffffff166125f5565b15612393578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612228959493929190613fb3565b6020604051808303816000875af192505050801561226457506040513d601f19601f820116820180604052508101906122619190614030565b60015b61230a5761227061406a565b806308c379a014156122cd575061228561408c565b8061229057506122cf565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c49190612911565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190614194565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614226565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156123ba576123b9612965565b5b6040519080825280602002602001820160405280156123e85781602001602082028036833780820191505090505b5090508281600081518110612400576123ff613656565b5b60200260200101818152505080915050919050565b6124348473ffffffffffffffffffffffffffffffffffffffff166125f5565b156125e5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161247a959493929190614246565b6020604051808303816000875af19250505080156124b657506040513d601f19601f820116820180604052508101906124b39190614030565b60015b61255c576124c261406a565b806308c379a0141561251f57506124d761408c565b806124e25750612521565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125169190612911565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255390614194565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614226565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b828054612614906132c6565b90600052602060002090601f016020900481019282612636576000855561267d565b82601f1061264f57805160ff191683800117855561267d565b8280016001018555821561267d579182015b8281111561267c578251825591602001919060010190612661565b5b50905061268a919061268e565b5090565b5b808211156126a757600081600090555060010161268f565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006126ea826126bf565b9050919050565b6126fa816126df565b811461270557600080fd5b50565b600081359050612717816126f1565b92915050565b6000819050919050565b6127308161271d565b811461273b57600080fd5b50565b60008135905061274d81612727565b92915050565b6000806040838503121561276a576127696126b5565b5b600061277885828601612708565b92505060206127898582860161273e565b9150509250929050565b61279c8161271d565b82525050565b60006020820190506127b76000830184612793565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6127f2816127bd565b81146127fd57600080fd5b50565b60008135905061280f816127e9565b92915050565b60006020828403121561282b5761282a6126b5565b5b600061283984828501612800565b91505092915050565b60008115159050919050565b61285781612842565b82525050565b6000602082019050612872600083018461284e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128b2578082015181840152602081019050612897565b838111156128c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006128e382612878565b6128ed8185612883565b93506128fd818560208601612894565b612906816128c7565b840191505092915050565b6000602082019050818103600083015261292b81846128d8565b905092915050565b600060208284031215612949576129486126b5565b5b60006129578482850161273e565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61299d826128c7565b810181811067ffffffffffffffff821117156129bc576129bb612965565b5b80604052505050565b60006129cf6126ab565b90506129db8282612994565b919050565b600067ffffffffffffffff8211156129fb576129fa612965565b5b602082029050602081019050919050565b600080fd5b6000612a24612a1f846129e0565b6129c5565b90508083825260208201905060208402830185811115612a4757612a46612a0c565b5b835b81811015612a705780612a5c888261273e565b845260208401935050602081019050612a49565b5050509392505050565b600082601f830112612a8f57612a8e612960565b5b8135612a9f848260208601612a11565b91505092915050565b600080fd5b600067ffffffffffffffff821115612ac857612ac7612965565b5b612ad1826128c7565b9050602081019050919050565b82818337600083830152505050565b6000612b00612afb84612aad565b6129c5565b905082815260208101848484011115612b1c57612b1b612aa8565b5b612b27848285612ade565b509392505050565b600082601f830112612b4457612b43612960565b5b8135612b54848260208601612aed565b91505092915050565b600080600080600060a08688031215612b7957612b786126b5565b5b6000612b8788828901612708565b9550506020612b9888828901612708565b945050604086013567ffffffffffffffff811115612bb957612bb86126ba565b5b612bc588828901612a7a565b935050606086013567ffffffffffffffff811115612be657612be56126ba565b5b612bf288828901612a7a565b925050608086013567ffffffffffffffff811115612c1357612c126126ba565b5b612c1f88828901612b2f565b9150509295509295909350565b600060208284031215612c4257612c416126b5565b5b6000612c5084828501612708565b91505092915050565b600067ffffffffffffffff821115612c7457612c73612965565b5b612c7d826128c7565b9050602081019050919050565b6000612c9d612c9884612c59565b6129c5565b905082815260208101848484011115612cb957612cb8612aa8565b5b612cc4848285612ade565b509392505050565b600082601f830112612ce157612ce0612960565b5b8135612cf1848260208601612c8a565b91505092915050565b600060208284031215612d1057612d0f6126b5565b5b600082013567ffffffffffffffff811115612d2e57612d2d6126ba565b5b612d3a84828501612ccc565b91505092915050565b600067ffffffffffffffff821115612d5e57612d5d612965565b5b602082029050602081019050919050565b6000612d82612d7d84612d43565b6129c5565b90508083825260208201905060208402830185811115612da557612da4612a0c565b5b835b81811015612dce5780612dba8882612708565b845260208401935050602081019050612da7565b5050509392505050565b600082601f830112612ded57612dec612960565b5b8135612dfd848260208601612d6f565b91505092915050565b60008060408385031215612e1d57612e1c6126b5565b5b600083013567ffffffffffffffff811115612e3b57612e3a6126ba565b5b612e4785828601612dd8565b925050602083013567ffffffffffffffff811115612e6857612e676126ba565b5b612e7485828601612a7a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612eb38161271d565b82525050565b6000612ec58383612eaa565b60208301905092915050565b6000602082019050919050565b6000612ee982612e7e565b612ef38185612e89565b9350612efe83612e9a565b8060005b83811015612f2f578151612f168882612eb9565b9750612f2183612ed1565b925050600181019050612f02565b5085935050505092915050565b60006020820190508181036000830152612f568184612ede565b905092915050565b612f67816126df565b82525050565b6000602082019050612f826000830184612f5e565b92915050565b612f9181612842565b8114612f9c57600080fd5b50565b600081359050612fae81612f88565b92915050565b60008060408385031215612fcb57612fca6126b5565b5b6000612fd985828601612708565b9250506020612fea85828601612f9f565b9150509250929050565b6000806040838503121561300b5761300a6126b5565b5b600083013567ffffffffffffffff811115613029576130286126ba565b5b61303585828601612a7a565b925050602083013567ffffffffffffffff811115613056576130556126ba565b5b61306285828601612a7a565b9150509250929050565b60008060408385031215613083576130826126b5565b5b600061309185828601612708565b92505060206130a285828601612708565b9150509250929050565b6000806000606084860312156130c5576130c46126b5565b5b60006130d38682870161273e565b93505060206130e486828701612708565b92505060406130f58682870161273e565b9150509250925092565b600080600080600060a0868803121561311b5761311a6126b5565b5b600061312988828901612708565b955050602061313a88828901612708565b945050604061314b8882890161273e565b935050606061315c8882890161273e565b925050608086013567ffffffffffffffff81111561317d5761317c6126ba565b5b61318988828901612b2f565b9150509295509295909350565b6000806000606084860312156131af576131ae6126b5565b5b600084013567ffffffffffffffff8111156131cd576131cc6126ba565b5b6131d986828701612dd8565b93505060206131ea8682870161273e565b92505060406131fb8682870161273e565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613261602b83612883565b915061326c82613205565b604082019050919050565b6000602082019050818103600083015261329081613254565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132de57607f821691505b602082108114156132f2576132f1613297565b5b50919050565b7f54686553706f7444726f70733a20496e76616c69642064726f70207479706500600082015250565b600061332e601f83612883565b9150613339826132f8565b602082019050919050565b6000602082019050818103600083015261335d81613321565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613391816132c6565b61339b8186613364565b945060018216600081146133b657600181146133c7576133fa565b60ff198316865281860193506133fa565b6133d08561336f565b60005b838110156133f2578154818901526001820191506020810190506133d3565b838801955050505b50505092915050565b600061340e82612878565b6134188185613364565b9350613428818560208601612894565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061346a600583613364565b915061347582613434565b600582019050919050565b600061348c8285613384565b91506134988284613403565b91506134a38261345d565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134e5602083612883565b91506134f0826134af565b602082019050919050565b60006020820190508181036000830152613514816134d8565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613577603283612883565b91506135828261351b565b604082019050919050565b600060208201905081810360008301526135a68161356a565b9050919050565b60006135b98284613384565b915081905092915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613620602983612883565b915061362b826135c4565b604082019050919050565b6000602082019050818103600083015261364f81613613565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136bf8261271d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136f2576136f1613685565b5b600182019050919050565b7f496e76616c6964206275726e6572206164647265737300000000000000000000600082015250565b6000613733601683612883565b915061373e826136fd565b602082019050919050565b6000602082019050818103600083015261376281613726565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006137c5602983612883565b91506137d082613769565b604082019050919050565b600060208201905081810360008301526137f4816137b8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613857602683612883565b9150613862826137fb565b604082019050919050565b600060208201905081810360008301526138868161384a565b9050919050565b7f54686553706f745046503a20496e76616c69642064726f702074797065000000600082015250565b60006138c3601d83612883565b91506138ce8261388d565b602082019050919050565b600060208201905081810360008301526138f2816138b6565b9050919050565b60006139048261271d565b915061390f8361271d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561394857613947613685565b5b828202905092915050565b7f54686553706f745046503a204e6f7420656e6f75676820746f2061697264726f60008201527f7000000000000000000000000000000000000000000000000000000000000000602082015250565b60006139af602183612883565b91506139ba82613953565b604082019050919050565b600060208201905081810360008301526139de816139a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a1f8261271d565b9150613a2a8361271d565b925082613a3a57613a396139e5565b5b828204905092915050565b6000613a508261271d565b9150613a5b8361271d565b925082821015613a6e57613a6d613685565b5b828203905092915050565b6000613a848261271d565b9150613a8f8361271d565b925082613a9f57613a9e6139e5565b5b828206905092915050565b6000613ab58261271d565b9150613ac08361271d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613af557613af4613685565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613b5c602883612883565b9150613b6782613b00565b604082019050919050565b60006020820190508181036000830152613b8b81613b4f565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613bee602583612883565b9150613bf982613b92565b604082019050919050565b60006020820190508181036000830152613c1d81613be1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613c80602a83612883565b9150613c8b82613c24565b604082019050919050565b60006020820190508181036000830152613caf81613c73565b9050919050565b60006040820190508181036000830152613cd08185612ede565b90508181036020830152613ce48184612ede565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613d49602983612883565b9150613d5482613ced565b604082019050919050565b60006020820190508181036000830152613d7881613d3c565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ddb602183612883565b9150613de682613d7f565b604082019050919050565b60006020820190508181036000830152613e0a81613dce565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e6d602383612883565b9150613e7882613e11565b604082019050919050565b60006020820190508181036000830152613e9c81613e60565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613eff602483612883565b9150613f0a82613ea3565b604082019050919050565b60006020820190508181036000830152613f2e81613ef2565b9050919050565b6000604082019050613f4a6000830185612793565b613f576020830184612793565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000613f8582613f5e565b613f8f8185613f69565b9350613f9f818560208601612894565b613fa8816128c7565b840191505092915050565b600060a082019050613fc86000830188612f5e565b613fd56020830187612f5e565b8181036040830152613fe78186612ede565b90508181036060830152613ffb8185612ede565b9050818103608083015261400f8184613f7a565b90509695505050505050565b60008151905061402a816127e9565b92915050565b600060208284031215614046576140456126b5565b5b60006140548482850161401b565b91505092915050565b60008160e01c9050919050565b600060033d11156140895760046000803e61408660005161405d565b90505b90565b600060443d101561409c5761411f565b6140a46126ab565b60043d036004823e80513d602482011167ffffffffffffffff821117156140cc57505061411f565b808201805167ffffffffffffffff8111156140ea575050505061411f565b80602083010160043d03850181111561410757505050505061411f565b61411682602001850186612994565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061417e603483612883565b915061418982614122565b604082019050919050565b600060208201905081810360008301526141ad81614171565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614210602883612883565b915061421b826141b4565b604082019050919050565b6000602082019050818103600083015261423f81614203565b9050919050565b600060a08201905061425b6000830188612f5e565b6142686020830187612f5e565b6142756040830186612793565b6142826060830185612793565b81810360808301526142948184613f7a565b9050969550505050505056fea2646970667358221220d62d9258914de620b920c299b478bfb9a771c5f08d9847d494c470b5357291a764736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000075255474c49535400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000652554747454400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6644687858745357636a4a6f71334c5a6e74346b58756154334435674c563174376e41467a6a6838735178742f00000000000000000000

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000075255474c49535400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000652554747454400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6644687858745357636a4a6f71334c5a6e74346b58756154334435674c563174376e41467a6a6838735178742f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): RUGLIST
Arg [1] : _symbol (string): RUGGED
Arg [2] : _baseURI (string): ipfs://QmfDhxXtSWcjJoq3LZnt4kXuaT3D5gLV1t7nAFzjh8sQxt/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 5255474c49535400000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 5255474745440000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d6644687858745357636a4a6f71334c5a6e74346b587561
Arg [9] : 54334435674c563174376e41467a6a6838735178742f00000000000000000000


Deployed ByteCode Sourcemap

41599:2511:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25102:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24125:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41722:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43789:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42260:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27041:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43305:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43078:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25499:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40661:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;:::i;:::-;;41776:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4079:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41815:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41747:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26096:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40450:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42416:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26323:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43586:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26563:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42589:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25102:231;25188:7;25235:1;25216:21;;:7;:21;;;;25208:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25303:9;:13;25313:2;25303:13;;;;;;;;;;;:22;25317:7;25303:22;;;;;;;;;;;;;;;;25296:29;;25102:231;;;;:::o;24125:310::-;24227:4;24279:26;24264:41;;;:11;:41;;;;:110;;;;24337:37;24322:52;;;:11;:52;;;;24264:110;:163;;;;24391:36;24415:11;24391:23;:36::i;:::-;24264:163;24244:183;;24125:310;;;:::o;41722:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43789:318::-;43848:13;43882:14;:22;43897:6;43882:22;;;;;;;;;;;;;;;;;;;;;43874:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43995:1;43977:7;43971:21;;;;;:::i;:::-;;;:25;:128;;;;;;;;;;;;;;;;;44040:7;44049:17;:6;:15;:17::i;:::-;44023:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43971:128;43951:148;;43789:318;;;:::o;42260:148::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42358:4:::1;42330:14;:25;42345:9;42330:25;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;42378:22;42390:9;42378:22;;;;;;:::i;:::-;;;;;;;;42260:148:::0;:::o;27041:442::-;27282:12;:10;:12::i;:::-;27274:20;;:4;:20;;;:60;;;;27298:36;27315:4;27321:12;:10;:12::i;:::-;27298:16;:36::i;:::-;27274:60;27252:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27423:52;27446:4;27452:2;27456:3;27461:7;27470:4;27423:22;:52::i;:::-;27041:442;;;;;:::o;43305:156::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43437:16:::1;43419:15;;:34;;;;;;;;;;;;;;;;;;43305:156:::0;:::o;43078:138::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43165:8:::1;43155:7;:18;;;;;;;;;;;;:::i;:::-;;43200:7;43189:19;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43078:138:::0;:::o;25499:524::-;25655:16;25716:3;:10;25697:8;:15;:29;25689:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25785:30;25832:8;:15;25818:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25785:63;;25866:9;25861:122;25885:8;:15;25881:1;:19;25861:122;;;25941:30;25951:8;25960:1;25951:11;;;;;;;;:::i;:::-;;;;;;;;25964:3;25968:1;25964:6;;;;;;;;:::i;:::-;;;;;;;;25941:9;:30::i;:::-;25922:13;25936:1;25922:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25902:3;;;;:::i;:::-;;;25861:122;;;;26002:13;25995:20;;;25499:524;;;;:::o;40661:122::-;40718:4;40774:1;40742:29;40768:2;40742:25;:29::i;:::-;:33;40735:40;;40661:122;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;41776:30::-;;;;;;;;;;;;;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;41815:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;41747:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26096:155::-;26191:52;26210:12;:10;:12::i;:::-;26224:8;26234;26191:18;:52::i;:::-;26096:155;;:::o;40450:113::-;40512:7;40539:12;:16;40552:2;40539:16;;;;;;;;;;;;40532:23;;40450:113;;;:::o;42416:165::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42536:37:::1;42547:7;:5;:7::i;:::-;42556:3;42561:7;42536:37;;;;;;;;;;;::::0;:10:::1;:37::i;:::-;42416:165:::0;;:::o;26323:168::-;26422:4;26446:18;:27;26465:7;26446:27;;;;;;;;;;;;;;;:37;26474:8;26446:37;;;;;;;;;;;;;;;;;;;;;;;;;26439:44;;26323:168;;;;:::o;43586:195::-;43693:15;;;;;;;;;;;43679:29;;:10;:29;;;43671:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43746:27;43752:4;43758:6;43766;43746:5;:27::i;:::-;43586:195;;;:::o;26563:401::-;26779:12;:10;:12::i;:::-;26771:20;;:4;:20;;;:60;;;;26795:36;26812:4;26818:12;:10;:12::i;:::-;26795:16;:36::i;:::-;26771:60;26749:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26911:45;26929:4;26935:2;26939;26943:6;26951:4;26911:17;:45::i;:::-;26563:401;;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;42589:481::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42735:14:::1;:22;42750:6;42735:22;;;;;;;;;;;;;;;;;;;;;42727:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42863:2;:9;42854:6;:18;;;;:::i;:::-;42824:26;42834:7;:5;:7::i;:::-;42843:6;42824:9;:26::i;:::-;:48;;42802:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;42949:9;42944:119;42968:2;:9;42964:1;:13;42944:119;;;42999:52;43016:7;:5;:7::i;:::-;43025:2;43028:1;43025:5;;;;;;;;:::i;:::-;;;;;;;;43032:6;43040;42999:52;;;;;;;;;;;::::0;:16:::1;:52::i;:::-;42979:3;;;;;:::i;:::-;;;;42944:119;;;;42589:481:::0;;;:::o;15480:157::-;15565:4;15604:25;15589:40;;;:11;:40;;;;15582:47;;15480:157;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;29125:1074::-;29352:7;:14;29338:3;:10;:28;29330:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29444:1;29430:16;;:2;:16;;;;29422:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29501:16;29520:12;:10;:12::i;:::-;29501:31;;29545:60;29566:8;29576:4;29582:2;29586:3;29591:7;29600:4;29545:20;:60::i;:::-;29623:9;29618:421;29642:3;:10;29638:1;:14;29618:421;;;29674:10;29687:3;29691:1;29687:6;;;;;;;;:::i;:::-;;;;;;;;29674:19;;29708:14;29725:7;29733:1;29725:10;;;;;;;;:::i;:::-;;;;;;;;29708:27;;29752:19;29774:9;:13;29784:2;29774:13;;;;;;;;;;;:19;29788:4;29774:19;;;;;;;;;;;;;;;;29752:41;;29831:6;29816:11;:21;;29808:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29964:6;29950:11;:20;29928:9;:13;29938:2;29928:13;;;;;;;;;;;:19;29942:4;29928:19;;;;;;;;;;;;;;;:42;;;;30021:6;30000:9;:13;30010:2;30000:13;;;;;;;;;;;:17;30014:2;30000:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29659:380;;;29654:3;;;;:::i;:::-;;;29618:421;;;;30086:2;30056:47;;30080:4;30056:47;;30070:8;30056:47;;;30090:3;30095:7;30056:47;;;;;;;:::i;:::-;;;;;;;;30116:75;30152:8;30162:4;30168:2;30172:3;30177:7;30186:4;30116:35;:75::i;:::-;29319:880;29125:1074;;;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;35311:331::-;35466:8;35457:17;;:5;:17;;;;35449:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35569:8;35531:18;:25;35550:5;35531:25;;;;;;;;;;;;;;;:35;35557:8;35531:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35615:8;35593:41;;35608:5;35593:41;;;35625:8;35593:41;;;;;;:::i;:::-;;;;;;;;35311:331;;;:::o;32442:735::-;32634:1;32620:16;;:2;:16;;;;32612:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32707:7;:14;32693:3;:10;:28;32685:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32779:16;32798:12;:10;:12::i;:::-;32779:31;;32823:66;32844:8;32862:1;32866:2;32870:3;32875:7;32884:4;32823:20;:66::i;:::-;32907:9;32902:103;32926:3;:10;32922:1;:14;32902:103;;;32983:7;32991:1;32983:10;;;;;;;;:::i;:::-;;;;;;;;32958:9;:17;32968:3;32972:1;32968:6;;;;;;;;:::i;:::-;;;;;;;;32958:17;;;;;;;;;;;:21;32976:2;32958:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32938:3;;;;;:::i;:::-;;;;32902:103;;;;33058:2;33022:53;;33054:1;33022:53;;33036:8;33022:53;;;33062:3;33067:7;33022:53;;;;;;;:::i;:::-;;;;;;;;33088:81;33124:8;33142:1;33146:2;33150:3;33155:7;33164:4;33088:35;:81::i;:::-;32601:576;32442:735;;;;:::o;33427:648::-;33570:1;33554:18;;:4;:18;;;;33546:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33625:16;33644:12;:10;:12::i;:::-;33625:31;;33669:102;33690:8;33700:4;33714:1;33718:21;33736:2;33718:17;:21::i;:::-;33741:25;33759:6;33741:17;:25::i;:::-;33669:102;;;;;;;;;;;;:20;:102::i;:::-;33784:19;33806:9;:13;33816:2;33806:13;;;;;;;;;;;:19;33820:4;33806:19;;;;;;;;;;;;;;;;33784:41;;33859:6;33844:11;:21;;33836:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33978:6;33964:11;:20;33942:9;:13;33952:2;33942:13;;;;;;;;;;;:19;33956:4;33942:19;;;;;;;;;;;;;;;:42;;;;34052:1;34013:54;;34038:4;34013:54;;34028:8;34013:54;;;34056:2;34060:6;34013:54;;;;;;;:::i;:::-;;;;;;;;33535:540;;33427:648;;;:::o;27947:820::-;28149:1;28135:16;;:2;:16;;;;28127:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28206:16;28225:12;:10;:12::i;:::-;28206:31;;28250:96;28271:8;28281:4;28287:2;28291:21;28309:2;28291:17;:21::i;:::-;28314:25;28332:6;28314:17;:25::i;:::-;28341:4;28250:20;:96::i;:::-;28359:19;28381:9;:13;28391:2;28381:13;;;;;;;;;;;:19;28395:4;28381:19;;;;;;;;;;;;;;;;28359:41;;28434:6;28419:11;:21;;28411:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28559:6;28545:11;:20;28523:9;:13;28533:2;28523:13;;;;;;;;;;;:19;28537:4;28523:19;;;;;;;;;;;;;;;:42;;;;28608:6;28587:9;:13;28597:2;28587:13;;;;;;;;;;;:17;28601:2;28587:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28663:2;28632:46;;28657:4;28632:46;;28647:8;28632:46;;;28667:2;28671:6;28632:46;;;;;;;:::i;:::-;;;;;;;;28691:68;28722:8;28732:4;28738:2;28742;28746:6;28754:4;28691:30;:68::i;:::-;28116:651;;27947:820;;;;;:::o;40858:655::-;41097:66;41124:8;41134:4;41140:2;41144:3;41149:7;41158:4;41097:26;:66::i;:::-;41196:1;41180:18;;:4;:18;;;41176:160;;;41220:9;41215:110;41239:3;:10;41235:1;:14;41215:110;;;41299:7;41307:1;41299:10;;;;;;;;:::i;:::-;;;;;;;;41275:12;:20;41288:3;41292:1;41288:6;;;;;;;;:::i;:::-;;;;;;;;41275:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;41251:3;;;;:::i;:::-;;;41215:110;;;;41176:160;41366:1;41352:16;;:2;:16;;;41348:158;;;41390:9;41385:110;41409:3;:10;41405:1;:14;41385:110;;;41469:7;41477:1;41469:10;;;;;;;;:::i;:::-;;;;;;;;41445:12;:20;41458:3;41462:1;41458:6;;;;;;;;:::i;:::-;;;;;;;;41445:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;41421:3;;;;:::i;:::-;;;41385:110;;;;41348:158;40858:655;;;;;;:::o;37579:813::-;37819:15;:2;:13;;;:15::i;:::-;37815:570;;;37872:2;37855:43;;;37899:8;37909:4;37915:3;37920:7;37929:4;37855:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37851:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38247:6;38240:14;;;;;;;;;;;:::i;:::-;;;;;;;;37851:523;;;38296:62;;;;;;;;;;:::i;:::-;;;;;;;;37851:523;38028:48;;;38016:60;;;:8;:60;;;;38012:159;;38101:50;;;;;;;;;;:::i;:::-;;;;;;;;38012:159;37935:251;37815:570;37579:813;;;;;;:::o;38400:198::-;38466:16;38495:22;38534:1;38520:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38495:41;;38558:7;38547:5;38553:1;38547:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38585:5;38578:12;;;38400:198;;;:::o;36827:744::-;37042:15;:2;:13;;;:15::i;:::-;37038:526;;;37095:2;37078:38;;;37117:8;37127:4;37133:2;37137:6;37145:4;37078:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37074:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37426:6;37419:14;;;;;;;;;;;:::i;:::-;;;;;;;;37074:479;;;37475:62;;;;;;;;;;:::i;:::-;;;;;;;;37074:479;37212:43;;;37200:55;;;:8;:55;;;;37196:154;;37280:50;;;;;;;;;;:::i;:::-;;;;;;;;37196:154;37151:214;37038:526;36827:744;;;;;;:::o;36598:221::-;;;;;;;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:329::-;10178:6;10227:2;10215:9;10206:7;10202:23;10198:32;10195:119;;;10233:79;;:::i;:::-;10195:119;10353:1;10378:53;10423:7;10414:6;10403:9;10399:22;10378:53;:::i;:::-;10368:63;;10324:117;10119:329;;;;:::o;10454:308::-;10516:4;10606:18;10598:6;10595:30;10592:56;;;10628:18;;:::i;:::-;10592:56;10666:29;10688:6;10666:29;:::i;:::-;10658:37;;10750:4;10744;10740:15;10732:23;;10454:308;;;:::o;10768:412::-;10846:5;10871:66;10887:49;10929:6;10887:49;:::i;:::-;10871:66;:::i;:::-;10862:75;;10960:6;10953:5;10946:21;10998:4;10991:5;10987:16;11036:3;11027:6;11022:3;11018:16;11015:25;11012:112;;;11043:79;;:::i;:::-;11012:112;11133:41;11167:6;11162:3;11157;11133:41;:::i;:::-;10852:328;10768:412;;;;;:::o;11200:340::-;11256:5;11305:3;11298:4;11290:6;11286:17;11282:27;11272:122;;11313:79;;:::i;:::-;11272:122;11430:6;11417:20;11455:79;11530:3;11522:6;11515:4;11507:6;11503:17;11455:79;:::i;:::-;11446:88;;11262:278;11200:340;;;;:::o;11546:509::-;11615:6;11664:2;11652:9;11643:7;11639:23;11635:32;11632:119;;;11670:79;;:::i;:::-;11632:119;11818:1;11807:9;11803:17;11790:31;11848:18;11840:6;11837:30;11834:117;;;11870:79;;:::i;:::-;11834:117;11975:63;12030:7;12021:6;12010:9;12006:22;11975:63;:::i;:::-;11965:73;;11761:287;11546:509;;;;:::o;12061:311::-;12138:4;12228:18;12220:6;12217:30;12214:56;;;12250:18;;:::i;:::-;12214:56;12300:4;12292:6;12288:17;12280:25;;12360:4;12354;12350:15;12342:23;;12061:311;;;:::o;12395:710::-;12491:5;12516:81;12532:64;12589:6;12532:64;:::i;:::-;12516:81;:::i;:::-;12507:90;;12617:5;12646:6;12639:5;12632:21;12680:4;12673:5;12669:16;12662:23;;12733:4;12725:6;12721:17;12713:6;12709:30;12762:3;12754:6;12751:15;12748:122;;;12781:79;;:::i;:::-;12748:122;12896:6;12879:220;12913:6;12908:3;12905:15;12879:220;;;12988:3;13017:37;13050:3;13038:10;13017:37;:::i;:::-;13012:3;13005:50;13084:4;13079:3;13075:14;13068:21;;12955:144;12939:4;12934:3;12930:14;12923:21;;12879:220;;;12883:21;12497:608;;12395:710;;;;;:::o;13128:370::-;13199:5;13248:3;13241:4;13233:6;13229:17;13225:27;13215:122;;13256:79;;:::i;:::-;13215:122;13373:6;13360:20;13398:94;13488:3;13480:6;13473:4;13465:6;13461:17;13398:94;:::i;:::-;13389:103;;13205:293;13128:370;;;;:::o;13504:894::-;13622:6;13630;13679:2;13667:9;13658:7;13654:23;13650:32;13647:119;;;13685:79;;:::i;:::-;13647:119;13833:1;13822:9;13818:17;13805:31;13863:18;13855:6;13852:30;13849:117;;;13885:79;;:::i;:::-;13849:117;13990:78;14060:7;14051:6;14040:9;14036:22;13990:78;:::i;:::-;13980:88;;13776:302;14145:2;14134:9;14130:18;14117:32;14176:18;14168:6;14165:30;14162:117;;;14198:79;;:::i;:::-;14162:117;14303:78;14373:7;14364:6;14353:9;14349:22;14303:78;:::i;:::-;14293:88;;14088:303;13504:894;;;;;:::o;14404:114::-;14471:6;14505:5;14499:12;14489:22;;14404:114;;;:::o;14524:184::-;14623:11;14657:6;14652:3;14645:19;14697:4;14692:3;14688:14;14673:29;;14524:184;;;;:::o;14714:132::-;14781:4;14804:3;14796:11;;14834:4;14829:3;14825:14;14817:22;;14714:132;;;:::o;14852:108::-;14929:24;14947:5;14929:24;:::i;:::-;14924:3;14917:37;14852:108;;:::o;14966:179::-;15035:10;15056:46;15098:3;15090:6;15056:46;:::i;:::-;15134:4;15129:3;15125:14;15111:28;;14966:179;;;;:::o;15151:113::-;15221:4;15253;15248:3;15244:14;15236:22;;15151:113;;;:::o;15300:732::-;15419:3;15448:54;15496:5;15448:54;:::i;:::-;15518:86;15597:6;15592:3;15518:86;:::i;:::-;15511:93;;15628:56;15678:5;15628:56;:::i;:::-;15707:7;15738:1;15723:284;15748:6;15745:1;15742:13;15723:284;;;15824:6;15818:13;15851:63;15910:3;15895:13;15851:63;:::i;:::-;15844:70;;15937:60;15990:6;15937:60;:::i;:::-;15927:70;;15783:224;15770:1;15767;15763:9;15758:14;;15723:284;;;15727:14;16023:3;16016:10;;15424:608;;;15300:732;;;;:::o;16038:373::-;16181:4;16219:2;16208:9;16204:18;16196:26;;16268:9;16262:4;16258:20;16254:1;16243:9;16239:17;16232:47;16296:108;16399:4;16390:6;16296:108;:::i;:::-;16288:116;;16038:373;;;;:::o;16417:118::-;16504:24;16522:5;16504:24;:::i;:::-;16499:3;16492:37;16417:118;;:::o;16541:222::-;16634:4;16672:2;16661:9;16657:18;16649:26;;16685:71;16753:1;16742:9;16738:17;16729:6;16685:71;:::i;:::-;16541:222;;;;:::o;16769:116::-;16839:21;16854:5;16839:21;:::i;:::-;16832:5;16829:32;16819:60;;16875:1;16872;16865:12;16819:60;16769:116;:::o;16891:133::-;16934:5;16972:6;16959:20;16950:29;;16988:30;17012:5;16988:30;:::i;:::-;16891:133;;;;:::o;17030:468::-;17095:6;17103;17152:2;17140:9;17131:7;17127:23;17123:32;17120:119;;;17158:79;;:::i;:::-;17120:119;17278:1;17303:53;17348:7;17339:6;17328:9;17324:22;17303:53;:::i;:::-;17293:63;;17249:117;17405:2;17431:50;17473:7;17464:6;17453:9;17449:22;17431:50;:::i;:::-;17421:60;;17376:115;17030:468;;;;;:::o;17504:894::-;17622:6;17630;17679:2;17667:9;17658:7;17654:23;17650:32;17647:119;;;17685:79;;:::i;:::-;17647:119;17833:1;17822:9;17818:17;17805:31;17863:18;17855:6;17852:30;17849:117;;;17885:79;;:::i;:::-;17849:117;17990:78;18060:7;18051:6;18040:9;18036:22;17990:78;:::i;:::-;17980:88;;17776:302;18145:2;18134:9;18130:18;18117:32;18176:18;18168:6;18165:30;18162:117;;;18198:79;;:::i;:::-;18162:117;18303:78;18373:7;18364:6;18353:9;18349:22;18303:78;:::i;:::-;18293:88;;18088:303;17504:894;;;;;:::o;18404:474::-;18472:6;18480;18529:2;18517:9;18508:7;18504:23;18500:32;18497:119;;;18535:79;;:::i;:::-;18497:119;18655:1;18680:53;18725:7;18716:6;18705:9;18701:22;18680:53;:::i;:::-;18670:63;;18626:117;18782:2;18808:53;18853:7;18844:6;18833:9;18829:22;18808:53;:::i;:::-;18798:63;;18753:118;18404:474;;;;;:::o;18884:619::-;18961:6;18969;18977;19026:2;19014:9;19005:7;19001:23;18997:32;18994:119;;;19032:79;;:::i;:::-;18994:119;19152:1;19177:53;19222:7;19213:6;19202:9;19198:22;19177:53;:::i;:::-;19167:63;;19123:117;19279:2;19305:53;19350:7;19341:6;19330:9;19326:22;19305:53;:::i;:::-;19295:63;;19250:118;19407:2;19433:53;19478:7;19469:6;19458:9;19454:22;19433:53;:::i;:::-;19423:63;;19378:118;18884:619;;;;;:::o;19509:1089::-;19613:6;19621;19629;19637;19645;19694:3;19682:9;19673:7;19669:23;19665:33;19662:120;;;19701:79;;:::i;:::-;19662:120;19821:1;19846:53;19891:7;19882:6;19871:9;19867:22;19846:53;:::i;:::-;19836:63;;19792:117;19948:2;19974:53;20019:7;20010:6;19999:9;19995:22;19974:53;:::i;:::-;19964:63;;19919:118;20076:2;20102:53;20147:7;20138:6;20127:9;20123:22;20102:53;:::i;:::-;20092:63;;20047:118;20204:2;20230:53;20275:7;20266:6;20255:9;20251:22;20230:53;:::i;:::-;20220:63;;20175:118;20360:3;20349:9;20345:19;20332:33;20392:18;20384:6;20381:30;20378:117;;;20414:79;;:::i;:::-;20378:117;20519:62;20573:7;20564:6;20553:9;20549:22;20519:62;:::i;:::-;20509:72;;20303:288;19509:1089;;;;;;;;:::o;20604:829::-;20706:6;20714;20722;20771:2;20759:9;20750:7;20746:23;20742:32;20739:119;;;20777:79;;:::i;:::-;20739:119;20925:1;20914:9;20910:17;20897:31;20955:18;20947:6;20944:30;20941:117;;;20977:79;;:::i;:::-;20941:117;21082:78;21152:7;21143:6;21132:9;21128:22;21082:78;:::i;:::-;21072:88;;20868:302;21209:2;21235:53;21280:7;21271:6;21260:9;21256:22;21235:53;:::i;:::-;21225:63;;21180:118;21337:2;21363:53;21408:7;21399:6;21388:9;21384:22;21363:53;:::i;:::-;21353:63;;21308:118;20604:829;;;;;:::o;21439:230::-;21579:34;21575:1;21567:6;21563:14;21556:58;21648:13;21643:2;21635:6;21631:15;21624:38;21439:230;:::o;21675:366::-;21817:3;21838:67;21902:2;21897:3;21838:67;:::i;:::-;21831:74;;21914:93;22003:3;21914:93;:::i;:::-;22032:2;22027:3;22023:12;22016:19;;21675:366;;;:::o;22047:419::-;22213:4;22251:2;22240:9;22236:18;22228:26;;22300:9;22294:4;22290:20;22286:1;22275:9;22271:17;22264:47;22328:131;22454:4;22328:131;:::i;:::-;22320:139;;22047:419;;;:::o;22472:180::-;22520:77;22517:1;22510:88;22617:4;22614:1;22607:15;22641:4;22638:1;22631:15;22658:320;22702:6;22739:1;22733:4;22729:12;22719:22;;22786:1;22780:4;22776:12;22807:18;22797:81;;22863:4;22855:6;22851:17;22841:27;;22797:81;22925:2;22917:6;22914:14;22894:18;22891:38;22888:84;;;22944:18;;:::i;:::-;22888:84;22709:269;22658:320;;;:::o;22984:181::-;23124:33;23120:1;23112:6;23108:14;23101:57;22984:181;:::o;23171:366::-;23313:3;23334:67;23398:2;23393:3;23334:67;:::i;:::-;23327:74;;23410:93;23499:3;23410:93;:::i;:::-;23528:2;23523:3;23519:12;23512:19;;23171:366;;;:::o;23543:419::-;23709:4;23747:2;23736:9;23732:18;23724:26;;23796:9;23790:4;23786:20;23782:1;23771:9;23767:17;23760:47;23824:131;23950:4;23824:131;:::i;:::-;23816:139;;23543:419;;;:::o;23968:148::-;24070:11;24107:3;24092:18;;23968:148;;;;:::o;24122:141::-;24171:4;24194:3;24186:11;;24217:3;24214:1;24207:14;24251:4;24248:1;24238:18;24230:26;;24122:141;;;:::o;24293:845::-;24396:3;24433:5;24427:12;24462:36;24488:9;24462:36;:::i;:::-;24514:89;24596:6;24591:3;24514:89;:::i;:::-;24507:96;;24634:1;24623:9;24619:17;24650:1;24645:137;;;;24796:1;24791:341;;;;24612:520;;24645:137;24729:4;24725:9;24714;24710:25;24705:3;24698:38;24765:6;24760:3;24756:16;24749:23;;24645:137;;24791:341;24858:38;24890:5;24858:38;:::i;:::-;24918:1;24932:154;24946:6;24943:1;24940:13;24932:154;;;25020:7;25014:14;25010:1;25005:3;25001:11;24994:35;25070:1;25061:7;25057:15;25046:26;;24968:4;24965:1;24961:12;24956:17;;24932:154;;;25115:6;25110:3;25106:16;25099:23;;24798:334;;24612:520;;24400:738;;24293:845;;;;:::o;25144:377::-;25250:3;25278:39;25311:5;25278:39;:::i;:::-;25333:89;25415:6;25410:3;25333:89;:::i;:::-;25326:96;;25431:52;25476:6;25471:3;25464:4;25457:5;25453:16;25431:52;:::i;:::-;25508:6;25503:3;25499:16;25492:23;;25254:267;25144:377;;;;:::o;25527:155::-;25667:7;25663:1;25655:6;25651:14;25644:31;25527:155;:::o;25688:400::-;25848:3;25869:84;25951:1;25946:3;25869:84;:::i;:::-;25862:91;;25962:93;26051:3;25962:93;:::i;:::-;26080:1;26075:3;26071:11;26064:18;;25688:400;;;:::o;26094:695::-;26372:3;26394:92;26482:3;26473:6;26394:92;:::i;:::-;26387:99;;26503:95;26594:3;26585:6;26503:95;:::i;:::-;26496:102;;26615:148;26759:3;26615:148;:::i;:::-;26608:155;;26780:3;26773:10;;26094:695;;;;;:::o;26795:182::-;26935:34;26931:1;26923:6;26919:14;26912:58;26795:182;:::o;26983:366::-;27125:3;27146:67;27210:2;27205:3;27146:67;:::i;:::-;27139:74;;27222:93;27311:3;27222:93;:::i;:::-;27340:2;27335:3;27331:12;27324:19;;26983:366;;;:::o;27355:419::-;27521:4;27559:2;27548:9;27544:18;27536:26;;27608:9;27602:4;27598:20;27594:1;27583:9;27579:17;27572:47;27636:131;27762:4;27636:131;:::i;:::-;27628:139;;27355:419;;;:::o;27780:237::-;27920:34;27916:1;27908:6;27904:14;27897:58;27989:20;27984:2;27976:6;27972:15;27965:45;27780:237;:::o;28023:366::-;28165:3;28186:67;28250:2;28245:3;28186:67;:::i;:::-;28179:74;;28262:93;28351:3;28262:93;:::i;:::-;28380:2;28375:3;28371:12;28364:19;;28023:366;;;:::o;28395:419::-;28561:4;28599:2;28588:9;28584:18;28576:26;;28648:9;28642:4;28638:20;28634:1;28623:9;28619:17;28612:47;28676:131;28802:4;28676:131;:::i;:::-;28668:139;;28395:419;;;:::o;28820:269::-;28949:3;28971:92;29059:3;29050:6;28971:92;:::i;:::-;28964:99;;29080:3;29073:10;;28820:269;;;;:::o;29095:228::-;29235:34;29231:1;29223:6;29219:14;29212:58;29304:11;29299:2;29291:6;29287:15;29280:36;29095:228;:::o;29329:366::-;29471:3;29492:67;29556:2;29551:3;29492:67;:::i;:::-;29485:74;;29568:93;29657:3;29568:93;:::i;:::-;29686:2;29681:3;29677:12;29670:19;;29329:366;;;:::o;29701:419::-;29867:4;29905:2;29894:9;29890:18;29882:26;;29954:9;29948:4;29944:20;29940:1;29929:9;29925:17;29918:47;29982:131;30108:4;29982:131;:::i;:::-;29974:139;;29701:419;;;:::o;30126:180::-;30174:77;30171:1;30164:88;30271:4;30268:1;30261:15;30295:4;30292:1;30285:15;30312:180;30360:77;30357:1;30350:88;30457:4;30454:1;30447:15;30481:4;30478:1;30471:15;30498:233;30537:3;30560:24;30578:5;30560:24;:::i;:::-;30551:33;;30606:66;30599:5;30596:77;30593:103;;;30676:18;;:::i;:::-;30593:103;30723:1;30716:5;30712:13;30705:20;;30498:233;;;:::o;30737:172::-;30877:24;30873:1;30865:6;30861:14;30854:48;30737:172;:::o;30915:366::-;31057:3;31078:67;31142:2;31137:3;31078:67;:::i;:::-;31071:74;;31154:93;31243:3;31154:93;:::i;:::-;31272:2;31267:3;31263:12;31256:19;;30915:366;;;:::o;31287:419::-;31453:4;31491:2;31480:9;31476:18;31468:26;;31540:9;31534:4;31530:20;31526:1;31515:9;31511:17;31504:47;31568:131;31694:4;31568:131;:::i;:::-;31560:139;;31287:419;;;:::o;31712:228::-;31852:34;31848:1;31840:6;31836:14;31829:58;31921:11;31916:2;31908:6;31904:15;31897:36;31712:228;:::o;31946:366::-;32088:3;32109:67;32173:2;32168:3;32109:67;:::i;:::-;32102:74;;32185:93;32274:3;32185:93;:::i;:::-;32303:2;32298:3;32294:12;32287:19;;31946:366;;;:::o;32318:419::-;32484:4;32522:2;32511:9;32507:18;32499:26;;32571:9;32565:4;32561:20;32557:1;32546:9;32542:17;32535:47;32599:131;32725:4;32599:131;:::i;:::-;32591:139;;32318:419;;;:::o;32743:225::-;32883:34;32879:1;32871:6;32867:14;32860:58;32952:8;32947:2;32939:6;32935:15;32928:33;32743:225;:::o;32974:366::-;33116:3;33137:67;33201:2;33196:3;33137:67;:::i;:::-;33130:74;;33213:93;33302:3;33213:93;:::i;:::-;33331:2;33326:3;33322:12;33315:19;;32974:366;;;:::o;33346:419::-;33512:4;33550:2;33539:9;33535:18;33527:26;;33599:9;33593:4;33589:20;33585:1;33574:9;33570:17;33563:47;33627:131;33753:4;33627:131;:::i;:::-;33619:139;;33346:419;;;:::o;33771:179::-;33911:31;33907:1;33899:6;33895:14;33888:55;33771:179;:::o;33956:366::-;34098:3;34119:67;34183:2;34178:3;34119:67;:::i;:::-;34112:74;;34195:93;34284:3;34195:93;:::i;:::-;34313:2;34308:3;34304:12;34297:19;;33956:366;;;:::o;34328:419::-;34494:4;34532:2;34521:9;34517:18;34509:26;;34581:9;34575:4;34571:20;34567:1;34556:9;34552:17;34545:47;34609:131;34735:4;34609:131;:::i;:::-;34601:139;;34328:419;;;:::o;34753:348::-;34793:7;34816:20;34834:1;34816:20;:::i;:::-;34811:25;;34850:20;34868:1;34850:20;:::i;:::-;34845:25;;35038:1;34970:66;34966:74;34963:1;34960:81;34955:1;34948:9;34941:17;34937:105;34934:131;;;35045:18;;:::i;:::-;34934:131;35093:1;35090;35086:9;35075:20;;34753:348;;;;:::o;35107:220::-;35247:34;35243:1;35235:6;35231:14;35224:58;35316:3;35311:2;35303:6;35299:15;35292:28;35107:220;:::o;35333:366::-;35475:3;35496:67;35560:2;35555:3;35496:67;:::i;:::-;35489:74;;35572:93;35661:3;35572:93;:::i;:::-;35690:2;35685:3;35681:12;35674:19;;35333:366;;;:::o;35705:419::-;35871:4;35909:2;35898:9;35894:18;35886:26;;35958:9;35952:4;35948:20;35944:1;35933:9;35929:17;35922:47;35986:131;36112:4;35986:131;:::i;:::-;35978:139;;35705:419;;;:::o;36130:180::-;36178:77;36175:1;36168:88;36275:4;36272:1;36265:15;36299:4;36296:1;36289:15;36316:185;36356:1;36373:20;36391:1;36373:20;:::i;:::-;36368:25;;36407:20;36425:1;36407:20;:::i;:::-;36402:25;;36446:1;36436:35;;36451:18;;:::i;:::-;36436:35;36493:1;36490;36486:9;36481:14;;36316:185;;;;:::o;36507:191::-;36547:4;36567:20;36585:1;36567:20;:::i;:::-;36562:25;;36601:20;36619:1;36601:20;:::i;:::-;36596:25;;36640:1;36637;36634:8;36631:34;;;36645:18;;:::i;:::-;36631:34;36690:1;36687;36683:9;36675:17;;36507:191;;;;:::o;36704:176::-;36736:1;36753:20;36771:1;36753:20;:::i;:::-;36748:25;;36787:20;36805:1;36787:20;:::i;:::-;36782:25;;36826:1;36816:35;;36831:18;;:::i;:::-;36816:35;36872:1;36869;36865:9;36860:14;;36704:176;;;;:::o;36886:305::-;36926:3;36945:20;36963:1;36945:20;:::i;:::-;36940:25;;36979:20;36997:1;36979:20;:::i;:::-;36974:25;;37133:1;37065:66;37061:74;37058:1;37055:81;37052:107;;;37139:18;;:::i;:::-;37052:107;37183:1;37180;37176:9;37169:16;;36886:305;;;;:::o;37197:227::-;37337:34;37333:1;37325:6;37321:14;37314:58;37406:10;37401:2;37393:6;37389:15;37382:35;37197:227;:::o;37430:366::-;37572:3;37593:67;37657:2;37652:3;37593:67;:::i;:::-;37586:74;;37669:93;37758:3;37669:93;:::i;:::-;37787:2;37782:3;37778:12;37771:19;;37430:366;;;:::o;37802:419::-;37968:4;38006:2;37995:9;37991:18;37983:26;;38055:9;38049:4;38045:20;38041:1;38030:9;38026:17;38019:47;38083:131;38209:4;38083:131;:::i;:::-;38075:139;;37802:419;;;:::o;38227:224::-;38367:34;38363:1;38355:6;38351:14;38344:58;38436:7;38431:2;38423:6;38419:15;38412:32;38227:224;:::o;38457:366::-;38599:3;38620:67;38684:2;38679:3;38620:67;:::i;:::-;38613:74;;38696:93;38785:3;38696:93;:::i;:::-;38814:2;38809:3;38805:12;38798:19;;38457:366;;;:::o;38829:419::-;38995:4;39033:2;39022:9;39018:18;39010:26;;39082:9;39076:4;39072:20;39068:1;39057:9;39053:17;39046:47;39110:131;39236:4;39110:131;:::i;:::-;39102:139;;38829:419;;;:::o;39254:229::-;39394:34;39390:1;39382:6;39378:14;39371:58;39463:12;39458:2;39450:6;39446:15;39439:37;39254:229;:::o;39489:366::-;39631:3;39652:67;39716:2;39711:3;39652:67;:::i;:::-;39645:74;;39728:93;39817:3;39728:93;:::i;:::-;39846:2;39841:3;39837:12;39830:19;;39489:366;;;:::o;39861:419::-;40027:4;40065:2;40054:9;40050:18;40042:26;;40114:9;40108:4;40104:20;40100:1;40089:9;40085:17;40078:47;40142:131;40268:4;40142:131;:::i;:::-;40134:139;;39861:419;;;:::o;40286:634::-;40507:4;40545:2;40534:9;40530:18;40522:26;;40594:9;40588:4;40584:20;40580:1;40569:9;40565:17;40558:47;40622:108;40725:4;40716:6;40622:108;:::i;:::-;40614:116;;40777:9;40771:4;40767:20;40762:2;40751:9;40747:18;40740:48;40805:108;40908:4;40899:6;40805:108;:::i;:::-;40797:116;;40286:634;;;;;:::o;40926:228::-;41066:34;41062:1;41054:6;41050:14;41043:58;41135:11;41130:2;41122:6;41118:15;41111:36;40926:228;:::o;41160:366::-;41302:3;41323:67;41387:2;41382:3;41323:67;:::i;:::-;41316:74;;41399:93;41488:3;41399:93;:::i;:::-;41517:2;41512:3;41508:12;41501:19;;41160:366;;;:::o;41532:419::-;41698:4;41736:2;41725:9;41721:18;41713:26;;41785:9;41779:4;41775:20;41771:1;41760:9;41756:17;41749:47;41813:131;41939:4;41813:131;:::i;:::-;41805:139;;41532:419;;;:::o;41957:220::-;42097:34;42093:1;42085:6;42081:14;42074:58;42166:3;42161:2;42153:6;42149:15;42142:28;41957:220;:::o;42183:366::-;42325:3;42346:67;42410:2;42405:3;42346:67;:::i;:::-;42339:74;;42422:93;42511:3;42422:93;:::i;:::-;42540:2;42535:3;42531:12;42524:19;;42183:366;;;:::o;42555:419::-;42721:4;42759:2;42748:9;42744:18;42736:26;;42808:9;42802:4;42798:20;42794:1;42783:9;42779:17;42772:47;42836:131;42962:4;42836:131;:::i;:::-;42828:139;;42555:419;;;:::o;42980:222::-;43120:34;43116:1;43108:6;43104:14;43097:58;43189:5;43184:2;43176:6;43172:15;43165:30;42980:222;:::o;43208:366::-;43350:3;43371:67;43435:2;43430:3;43371:67;:::i;:::-;43364:74;;43447:93;43536:3;43447:93;:::i;:::-;43565:2;43560:3;43556:12;43549:19;;43208:366;;;:::o;43580:419::-;43746:4;43784:2;43773:9;43769:18;43761:26;;43833:9;43827:4;43823:20;43819:1;43808:9;43804:17;43797:47;43861:131;43987:4;43861:131;:::i;:::-;43853:139;;43580:419;;;:::o;44005:223::-;44145:34;44141:1;44133:6;44129:14;44122:58;44214:6;44209:2;44201:6;44197:15;44190:31;44005:223;:::o;44234:366::-;44376:3;44397:67;44461:2;44456:3;44397:67;:::i;:::-;44390:74;;44473:93;44562:3;44473:93;:::i;:::-;44591:2;44586:3;44582:12;44575:19;;44234:366;;;:::o;44606:419::-;44772:4;44810:2;44799:9;44795:18;44787:26;;44859:9;44853:4;44849:20;44845:1;44834:9;44830:17;44823:47;44887:131;45013:4;44887:131;:::i;:::-;44879:139;;44606:419;;;:::o;45031:332::-;45152:4;45190:2;45179:9;45175:18;45167:26;;45203:71;45271:1;45260:9;45256:17;45247:6;45203:71;:::i;:::-;45284:72;45352:2;45341:9;45337:18;45328:6;45284:72;:::i;:::-;45031:332;;;;;:::o;45369:98::-;45420:6;45454:5;45448:12;45438:22;;45369:98;;;:::o;45473:168::-;45556:11;45590:6;45585:3;45578:19;45630:4;45625:3;45621:14;45606:29;;45473:168;;;;:::o;45647:360::-;45733:3;45761:38;45793:5;45761:38;:::i;:::-;45815:70;45878:6;45873:3;45815:70;:::i;:::-;45808:77;;45894:52;45939:6;45934:3;45927:4;45920:5;45916:16;45894:52;:::i;:::-;45971:29;45993:6;45971:29;:::i;:::-;45966:3;45962:39;45955:46;;45737:270;45647:360;;;;:::o;46013:1053::-;46336:4;46374:3;46363:9;46359:19;46351:27;;46388:71;46456:1;46445:9;46441:17;46432:6;46388:71;:::i;:::-;46469:72;46537:2;46526:9;46522:18;46513:6;46469:72;:::i;:::-;46588:9;46582:4;46578:20;46573:2;46562:9;46558:18;46551:48;46616:108;46719:4;46710:6;46616:108;:::i;:::-;46608:116;;46771:9;46765:4;46761:20;46756:2;46745:9;46741:18;46734:48;46799:108;46902:4;46893:6;46799:108;:::i;:::-;46791:116;;46955:9;46949:4;46945:20;46939:3;46928:9;46924:19;46917:49;46983:76;47054:4;47045:6;46983:76;:::i;:::-;46975:84;;46013:1053;;;;;;;;:::o;47072:141::-;47128:5;47159:6;47153:13;47144:22;;47175:32;47201:5;47175:32;:::i;:::-;47072:141;;;;:::o;47219:349::-;47288:6;47337:2;47325:9;47316:7;47312:23;47308:32;47305:119;;;47343:79;;:::i;:::-;47305:119;47463:1;47488:63;47543:7;47534:6;47523:9;47519:22;47488:63;:::i;:::-;47478:73;;47434:127;47219:349;;;;:::o;47574:106::-;47618:8;47667:5;47662:3;47658:15;47637:36;;47574:106;;;:::o;47686:183::-;47721:3;47759:1;47741:16;47738:23;47735:128;;;47797:1;47794;47791;47776:23;47819:34;47850:1;47844:8;47819:34;:::i;:::-;47812:41;;47735:128;47686:183;:::o;47875:711::-;47914:3;47952:4;47934:16;47931:26;47928:39;;;47960:5;;47928:39;47989:20;;:::i;:::-;48064:1;48046:16;48042:24;48039:1;48033:4;48018:49;48097:4;48091:11;48196:16;48189:4;48181:6;48177:17;48174:39;48141:18;48133:6;48130:30;48114:113;48111:146;;;48242:5;;;;48111:146;48288:6;48282:4;48278:17;48324:3;48318:10;48351:18;48343:6;48340:30;48337:43;;;48373:5;;;;;;48337:43;48421:6;48414:4;48409:3;48405:14;48401:27;48480:1;48462:16;48458:24;48452:4;48448:35;48443:3;48440:44;48437:57;;;48487:5;;;;;;;48437:57;48504;48552:6;48546:4;48542:17;48534:6;48530:30;48524:4;48504:57;:::i;:::-;48577:3;48570:10;;47918:668;;;;;47875:711;;:::o;48592:239::-;48732:34;48728:1;48720:6;48716:14;48709:58;48801:22;48796:2;48788:6;48784:15;48777:47;48592:239;:::o;48837:366::-;48979:3;49000:67;49064:2;49059:3;49000:67;:::i;:::-;48993:74;;49076:93;49165:3;49076:93;:::i;:::-;49194:2;49189:3;49185:12;49178:19;;48837:366;;;:::o;49209:419::-;49375:4;49413:2;49402:9;49398:18;49390:26;;49462:9;49456:4;49452:20;49448:1;49437:9;49433:17;49426:47;49490:131;49616:4;49490:131;:::i;:::-;49482:139;;49209:419;;;:::o;49634:227::-;49774:34;49770:1;49762:6;49758:14;49751:58;49843:10;49838:2;49830:6;49826:15;49819:35;49634:227;:::o;49867:366::-;50009:3;50030:67;50094:2;50089:3;50030:67;:::i;:::-;50023:74;;50106:93;50195:3;50106:93;:::i;:::-;50224:2;50219:3;50215:12;50208:19;;49867:366;;;:::o;50239:419::-;50405:4;50443:2;50432:9;50428:18;50420:26;;50492:9;50486:4;50482:20;50478:1;50467:9;50463:17;50456:47;50520:131;50646:4;50520:131;:::i;:::-;50512:139;;50239:419;;;:::o;50664:751::-;50887:4;50925:3;50914:9;50910:19;50902:27;;50939:71;51007:1;50996:9;50992:17;50983:6;50939:71;:::i;:::-;51020:72;51088:2;51077:9;51073:18;51064:6;51020:72;:::i;:::-;51102;51170:2;51159:9;51155:18;51146:6;51102:72;:::i;:::-;51184;51252:2;51241:9;51237:18;51228:6;51184:72;:::i;:::-;51304:9;51298:4;51294:20;51288:3;51277:9;51273:19;51266:49;51332:76;51403:4;51394:6;51332:76;:::i;:::-;51324:84;;50664:751;;;;;;;;:::o

Swarm Source

ipfs://d62d9258914de620b920c299b478bfb9a771c5f08d9847d494c470b5357291a7
Loading