ETH Price: $3,341.78 (-1.67%)

Token

 

Overview

Max Total Supply

0

Holders

1,473

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xa441f96703a9053862f1845474979cb1be11cf96
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Hitchhikerofstar

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-18
*/

// 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (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 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 (last updated v4.7.0) (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: address zero is not a valid owner");
        return _balances[id][account];
    }

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

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

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

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner 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: caller is not token 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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

        return array;
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (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 token 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 token owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: contract/ERC1155.sol


pragma solidity ^0.8.4;





contract Hitchhikerofstar is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply {
    constructor()
        ERC1155("https://resource.hypernft.world/properties/{id}.json")
    {}

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }

    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","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":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051806060016040528060348152602001620040fb603491396200003d816200006460201b60201c565b506200005e620000526200008060201b60201c565b6200008860201b60201c565b62000263565b80600290805190602001906200007c9291906200014e565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200015c90620001fe565b90600052602060002090601f016020900481019282620001805760008555620001cc565b82601f106200019b57805160ff1916838001178555620001cc565b82800160010185558215620001cc579182015b82811115620001cb578251825591602001919060010190620001ae565b5b509050620001db9190620001df565b5090565b5b80821115620001fa576000816000905550600101620001e0565b5090565b600060028204905060018216806200021757607f821691505b602082108114156200022e576200022d62000234565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613e8880620002736000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c8063715018a6116100a2578063bd85b03911610071578063bd85b039146102da578063e985e9c51461030a578063f242432a1461033a578063f2fde38b14610356578063f5298aca1461037257610115565b8063715018a61461027a578063731133e9146102845780638da5cb5b146102a0578063a22cb465146102be57610115565b80631f7fdffa116100e95780631f7fdffa146101c65780632eb2c2d6146101e25780634e1273f4146101fe5780634f558e791461022e5780636b20c4541461025e57610115565b8062fdd58e1461011a57806301ffc9a71461014a57806302fe53051461017a5780630e89341c14610196575b600080fd5b610134600480360381019061012f9190612c1a565b61038e565b60405161014191906134cc565b60405180910390f35b610164600480360381019061015f9190612d8c565b610457565b60405161017191906132af565b60405180910390f35b610194600480360381019061018f9190612dde565b610539565b005b6101b060048036038101906101ab9190612e1f565b61054d565b6040516101bd91906132ca565b60405180910390f35b6101e060048036038101906101db9190612b33565b6105e1565b005b6101fc60048036038101906101f79190612966565b6105fb565b005b61021860048036038101906102139190612d20565b61069c565b6040516102259190613256565b60405180910390f35b61024860048036038101906102439190612e1f565b61084d565b60405161025591906132af565b60405180910390f35b61027860048036038101906102739190612ab4565b610861565b005b6102826108fe565b005b61029e60048036038101906102999190612ca5565b610912565b005b6102a861092c565b6040516102b59190613179565b60405180910390f35b6102d860048036038101906102d39190612bde565b610956565b005b6102f460048036038101906102ef9190612e1f565b61096c565b60405161030191906134cc565b60405180910390f35b610324600480360381019061031f919061292a565b610989565b60405161033191906132af565b60405180910390f35b610354600480360381019061034f9190612a25565b610a1d565b005b610370600480360381019061036b9190612901565b610abe565b005b61038c60048036038101906103879190612c56565b610b42565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f69061338c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610532575061053182610bdf565b5b9050919050565b610541610c49565b61054a81610cc7565b50565b60606002805461055c9061376c565b80601f01602080910402602001604051908101604052809291908181526020018280546105889061376c565b80156105d55780601f106105aa576101008083540402835291602001916105d5565b820191906000526020600020905b8154815290600101906020018083116105b857829003601f168201915b50505050509050919050565b6105e9610c49565b6105f584848484610ce1565b50505050565b610603610f5a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610649575061064885610643610f5a565b610989565b5b610688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067f9061330c565b60405180910390fd5b6106958585858585610f62565b5050505050565b606081518351146106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d99061346c565b60405180910390fd5b6000835167ffffffffffffffff811115610725577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156107535781602001602082028036833780820191505090505b50905060005b8451811015610842576107ec85828151811061079e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106107df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161038e565b828281518110610825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061083b906137cf565b9050610759565b508091505092915050565b6000806108598361096c565b119050919050565b610869610f5a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806108af57506108ae836108a9610f5a565b610989565b5b6108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e59061330c565b60405180910390fd5b6108f98383836112d0565b505050565b610906610c49565b61091060006115eb565b565b61091a610c49565b610926848484846116b1565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610968610961610f5a565b8383611862565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a25610f5a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a6b5750610a6a85610a65610f5a565b610989565b5b610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa19061330c565b60405180910390fd5b610ab785858585856119cf565b5050505050565b610ac6610c49565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d9061334c565b60405180910390fd5b610b3f816115eb565b50565b610b4a610f5a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b905750610b8f83610b8a610f5a565b610989565b5b610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc69061330c565b60405180910390fd5b610bda838383611c6b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610c51610f5a565b73ffffffffffffffffffffffffffffffffffffffff16610c6f61092c565b73ffffffffffffffffffffffffffffffffffffffff1614610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc9061340c565b60405180910390fd5b565b8060029080519060200190610cdd9291906125f9565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906134ac565b60405180910390fd5b8151835114610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c9061348c565b60405180910390fd5b6000610d9f610f5a565b9050610db081600087878787611eb2565b60005b8451811015610eb557838181518110610df5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600080878481518110610e39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e9b9190613660565b925050819055508080610ead906137cf565b915050610db3565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f2d929190613278565b60405180910390a4610f4481600087878787611ec8565b610f5381600087878787611ed0565b5050505050565b600033905090565b8151835114610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d9061348c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906133ac565b60405180910390fd5b6000611020610f5a565b9050611030818787878787611eb2565b60005b845181101561122d576000858281518110611077577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106110bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561115d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611154906133ec565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112129190613660565b9250508190555050505080611226906137cf565b9050611033565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112a4929190613278565b60405180910390a46112ba818787878787611ec8565b6112c8818787878787611ed0565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611337906133cc565b60405180910390fd5b8051825114611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b9061348c565b60405180910390fd5b600061138e610f5a565b90506113ae81856000868660405180602001604052806000815250611eb2565b60005b83518110156115475760008482815181106113f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061143a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d29061336c565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061153f906137cf565b9150506113b1565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115bf929190613278565b60405180910390a46115e581856000868660405180602001604052806000815250611ec8565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611718906134ac565b60405180910390fd5b600061172b610f5a565b90506000611738856120b7565b90506000611745856120b7565b905061175683600089858589611eb2565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117b59190613660565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516118339291906134e7565b60405180910390a461184a83600089858589611ec8565b6118598360008989898961217d565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c89061344c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119c291906132af565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a36906133ac565b60405180910390fd5b6000611a49610f5a565b90506000611a56856120b7565b90506000611a63856120b7565b9050611a73838989858589611eb2565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b01906133ec565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbf9190613660565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611c3c9291906134e7565b60405180910390a4611c52848a8a86868a611ec8565b611c60848a8a8a8a8a61217d565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd2906133cc565b60405180910390fd5b6000611ce5610f5a565b90506000611cf2846120b7565b90506000611cff846120b7565b9050611d1f83876000858560405180602001604052806000815250611eb2565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad9061336c565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611e839291906134e7565b60405180910390a4611ea984886000868660405180602001604052806000815250611ec8565b50505050505050565b611ec0868686868686612364565b505050505050565b505050505050565b611eef8473ffffffffffffffffffffffffffffffffffffffff166125ce565b156120af578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f35959493929190613194565b602060405180830381600087803b158015611f4f57600080fd5b505af1925050508015611f8057506040513d601f19601f82011682018060405250810190611f7d9190612db5565b60015b61202657611f8c6138a5565b806308c379a01415611fe95750611fa1613d60565b80611fac5750611feb565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe091906132ca565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d906132ec565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a49061332c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156120fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561212a5781602001602082028036833780820191505090505b5090508281600081518110612168577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b61219c8473ffffffffffffffffffffffffffffffffffffffff166125ce565b1561235c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121e29594939291906131fc565b602060405180830381600087803b1580156121fc57600080fd5b505af192505050801561222d57506040513d601f19601f8201168201806040525081019061222a9190612db5565b60015b6122d3576122396138a5565b806308c379a01415612296575061224e613d60565b806122595750612298565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d91906132ca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ca906132ec565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461235a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123519061332c565b60405180910390fd5b505b505050505050565b6123728686868686866125f1565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156124705760005b835181101561246e578281815181106123ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160046000868481518110612431577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546124569190613660565b9250508190555080612467906137cf565b90506123aa565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125c65760005b83518110156125c45760008482815181106124ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110612531577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006004600084815260200190815260200160002054905081811015612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d9061342c565b60405180910390fd5b8181036004600085815260200190815260200160002081905550505050806125bd906137cf565b90506124a8565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b8280546126059061376c565b90600052602060002090601f016020900481019282612627576000855561266e565b82601f1061264057805160ff191683800117855561266e565b8280016001018555821561266e579182015b8281111561266d578251825591602001919060010190612652565b5b50905061267b919061267f565b5090565b5b80821115612698576000816000905550600101612680565b5090565b60006126af6126aa84613535565b613510565b905080838252602082019050828560208602820111156126ce57600080fd5b60005b858110156126fe57816126e488826127f0565b8452602084019350602083019250506001810190506126d1565b5050509392505050565b600061271b61271684613561565b613510565b9050808382526020820190508285602086028201111561273a57600080fd5b60005b8581101561276a578161275088826128ec565b84526020840193506020830192505060018101905061273d565b5050509392505050565b60006127876127828461358d565b613510565b90508281526020810184848401111561279f57600080fd5b6127aa84828561372a565b509392505050565b60006127c56127c0846135be565b613510565b9050828152602081018484840111156127dd57600080fd5b6127e884828561372a565b509392505050565b6000813590506127ff81613df6565b92915050565b600082601f83011261281657600080fd5b813561282684826020860161269c565b91505092915050565b600082601f83011261284057600080fd5b8135612850848260208601612708565b91505092915050565b60008135905061286881613e0d565b92915050565b60008135905061287d81613e24565b92915050565b60008151905061289281613e24565b92915050565b600082601f8301126128a957600080fd5b81356128b9848260208601612774565b91505092915050565b600082601f8301126128d357600080fd5b81356128e38482602086016127b2565b91505092915050565b6000813590506128fb81613e3b565b92915050565b60006020828403121561291357600080fd5b6000612921848285016127f0565b91505092915050565b6000806040838503121561293d57600080fd5b600061294b858286016127f0565b925050602061295c858286016127f0565b9150509250929050565b600080600080600060a0868803121561297e57600080fd5b600061298c888289016127f0565b955050602061299d888289016127f0565b945050604086013567ffffffffffffffff8111156129ba57600080fd5b6129c68882890161282f565b935050606086013567ffffffffffffffff8111156129e357600080fd5b6129ef8882890161282f565b925050608086013567ffffffffffffffff811115612a0c57600080fd5b612a1888828901612898565b9150509295509295909350565b600080600080600060a08688031215612a3d57600080fd5b6000612a4b888289016127f0565b9550506020612a5c888289016127f0565b9450506040612a6d888289016128ec565b9350506060612a7e888289016128ec565b925050608086013567ffffffffffffffff811115612a9b57600080fd5b612aa788828901612898565b9150509295509295909350565b600080600060608486031215612ac957600080fd5b6000612ad7868287016127f0565b935050602084013567ffffffffffffffff811115612af457600080fd5b612b008682870161282f565b925050604084013567ffffffffffffffff811115612b1d57600080fd5b612b298682870161282f565b9150509250925092565b60008060008060808587031215612b4957600080fd5b6000612b57878288016127f0565b945050602085013567ffffffffffffffff811115612b7457600080fd5b612b808782880161282f565b935050604085013567ffffffffffffffff811115612b9d57600080fd5b612ba98782880161282f565b925050606085013567ffffffffffffffff811115612bc657600080fd5b612bd287828801612898565b91505092959194509250565b60008060408385031215612bf157600080fd5b6000612bff858286016127f0565b9250506020612c1085828601612859565b9150509250929050565b60008060408385031215612c2d57600080fd5b6000612c3b858286016127f0565b9250506020612c4c858286016128ec565b9150509250929050565b600080600060608486031215612c6b57600080fd5b6000612c79868287016127f0565b9350506020612c8a868287016128ec565b9250506040612c9b868287016128ec565b9150509250925092565b60008060008060808587031215612cbb57600080fd5b6000612cc9878288016127f0565b9450506020612cda878288016128ec565b9350506040612ceb878288016128ec565b925050606085013567ffffffffffffffff811115612d0857600080fd5b612d1487828801612898565b91505092959194509250565b60008060408385031215612d3357600080fd5b600083013567ffffffffffffffff811115612d4d57600080fd5b612d5985828601612805565b925050602083013567ffffffffffffffff811115612d7657600080fd5b612d828582860161282f565b9150509250929050565b600060208284031215612d9e57600080fd5b6000612dac8482850161286e565b91505092915050565b600060208284031215612dc757600080fd5b6000612dd584828501612883565b91505092915050565b600060208284031215612df057600080fd5b600082013567ffffffffffffffff811115612e0a57600080fd5b612e16848285016128c2565b91505092915050565b600060208284031215612e3157600080fd5b6000612e3f848285016128ec565b91505092915050565b6000612e54838361315b565b60208301905092915050565b612e69816136b6565b82525050565b6000612e7a826135ff565b612e84818561362d565b9350612e8f836135ef565b8060005b83811015612ec0578151612ea78882612e48565b9750612eb283613620565b925050600181019050612e93565b5085935050505092915050565b612ed6816136c8565b82525050565b6000612ee78261360a565b612ef1818561363e565b9350612f01818560208601613739565b612f0a816138c7565b840191505092915050565b6000612f2082613615565b612f2a818561364f565b9350612f3a818560208601613739565b612f43816138c7565b840191505092915050565b6000612f5b60348361364f565b9150612f66826138e5565b604082019050919050565b6000612f7e602f8361364f565b9150612f8982613934565b604082019050919050565b6000612fa160288361364f565b9150612fac82613983565b604082019050919050565b6000612fc460268361364f565b9150612fcf826139d2565b604082019050919050565b6000612fe760248361364f565b9150612ff282613a21565b604082019050919050565b600061300a602a8361364f565b915061301582613a70565b604082019050919050565b600061302d60258361364f565b915061303882613abf565b604082019050919050565b600061305060238361364f565b915061305b82613b0e565b604082019050919050565b6000613073602a8361364f565b915061307e82613b5d565b604082019050919050565b600061309660208361364f565b91506130a182613bac565b602082019050919050565b60006130b960288361364f565b91506130c482613bd5565b604082019050919050565b60006130dc60298361364f565b91506130e782613c24565b604082019050919050565b60006130ff60298361364f565b915061310a82613c73565b604082019050919050565b600061312260288361364f565b915061312d82613cc2565b604082019050919050565b600061314560218361364f565b915061315082613d11565b604082019050919050565b61316481613720565b82525050565b61317381613720565b82525050565b600060208201905061318e6000830184612e60565b92915050565b600060a0820190506131a96000830188612e60565b6131b66020830187612e60565b81810360408301526131c88186612e6f565b905081810360608301526131dc8185612e6f565b905081810360808301526131f08184612edc565b90509695505050505050565b600060a0820190506132116000830188612e60565b61321e6020830187612e60565b61322b604083018661316a565b613238606083018561316a565b818103608083015261324a8184612edc565b90509695505050505050565b600060208201905081810360008301526132708184612e6f565b905092915050565b600060408201905081810360008301526132928185612e6f565b905081810360208301526132a68184612e6f565b90509392505050565b60006020820190506132c46000830184612ecd565b92915050565b600060208201905081810360008301526132e48184612f15565b905092915050565b6000602082019050818103600083015261330581612f4e565b9050919050565b6000602082019050818103600083015261332581612f71565b9050919050565b6000602082019050818103600083015261334581612f94565b9050919050565b6000602082019050818103600083015261336581612fb7565b9050919050565b6000602082019050818103600083015261338581612fda565b9050919050565b600060208201905081810360008301526133a581612ffd565b9050919050565b600060208201905081810360008301526133c581613020565b9050919050565b600060208201905081810360008301526133e581613043565b9050919050565b6000602082019050818103600083015261340581613066565b9050919050565b6000602082019050818103600083015261342581613089565b9050919050565b60006020820190508181036000830152613445816130ac565b9050919050565b60006020820190508181036000830152613465816130cf565b9050919050565b60006020820190508181036000830152613485816130f2565b9050919050565b600060208201905081810360008301526134a581613115565b9050919050565b600060208201905081810360008301526134c581613138565b9050919050565b60006020820190506134e1600083018461316a565b92915050565b60006040820190506134fc600083018561316a565b613509602083018461316a565b9392505050565b600061351a61352b565b9050613526828261379e565b919050565b6000604051905090565b600067ffffffffffffffff8211156135505761354f613876565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561357c5761357b613876565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135a8576135a7613876565b5b6135b1826138c7565b9050602081019050919050565b600067ffffffffffffffff8211156135d9576135d8613876565b5b6135e2826138c7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061366b82613720565b915061367683613720565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136ab576136aa613818565b5b828201905092915050565b60006136c182613700565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561375757808201518184015260208101905061373c565b83811115613766576000848401525b50505050565b6000600282049050600182168061378457607f821691505b6020821081141561379857613797613847565b5b50919050565b6137a7826138c7565b810181811067ffffffffffffffff821117156137c6576137c5613876565b5b80604052505050565b60006137da82613720565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561380d5761380c613818565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156138c45760046000803e6138c16000516138d8565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613d7057613df3565b613d7861352b565b60043d036004823e80513d602482011167ffffffffffffffff82111715613da0575050613df3565b808201805167ffffffffffffffff811115613dbe5750505050613df3565b80602083010160043d038501811115613ddb575050505050613df3565b613dea8260200185018661379e565b82955050505050505b90565b613dff816136b6565b8114613e0a57600080fd5b50565b613e16816136c8565b8114613e2157600080fd5b50565b613e2d816136d4565b8114613e3857600080fd5b50565b613e4481613720565b8114613e4f57600080fd5b5056fea2646970667358221220a657d2fd554fb7eaa13e0442d340685c4cffca08916455f524c8a22863b30e8464736f6c6343000804003368747470733a2f2f7265736f757263652e68797065726e66742e776f726c642f70726f706572746965732f7b69647d2e6a736f6e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101155760003560e01c8063715018a6116100a2578063bd85b03911610071578063bd85b039146102da578063e985e9c51461030a578063f242432a1461033a578063f2fde38b14610356578063f5298aca1461037257610115565b8063715018a61461027a578063731133e9146102845780638da5cb5b146102a0578063a22cb465146102be57610115565b80631f7fdffa116100e95780631f7fdffa146101c65780632eb2c2d6146101e25780634e1273f4146101fe5780634f558e791461022e5780636b20c4541461025e57610115565b8062fdd58e1461011a57806301ffc9a71461014a57806302fe53051461017a5780630e89341c14610196575b600080fd5b610134600480360381019061012f9190612c1a565b61038e565b60405161014191906134cc565b60405180910390f35b610164600480360381019061015f9190612d8c565b610457565b60405161017191906132af565b60405180910390f35b610194600480360381019061018f9190612dde565b610539565b005b6101b060048036038101906101ab9190612e1f565b61054d565b6040516101bd91906132ca565b60405180910390f35b6101e060048036038101906101db9190612b33565b6105e1565b005b6101fc60048036038101906101f79190612966565b6105fb565b005b61021860048036038101906102139190612d20565b61069c565b6040516102259190613256565b60405180910390f35b61024860048036038101906102439190612e1f565b61084d565b60405161025591906132af565b60405180910390f35b61027860048036038101906102739190612ab4565b610861565b005b6102826108fe565b005b61029e60048036038101906102999190612ca5565b610912565b005b6102a861092c565b6040516102b59190613179565b60405180910390f35b6102d860048036038101906102d39190612bde565b610956565b005b6102f460048036038101906102ef9190612e1f565b61096c565b60405161030191906134cc565b60405180910390f35b610324600480360381019061031f919061292a565b610989565b60405161033191906132af565b60405180910390f35b610354600480360381019061034f9190612a25565b610a1d565b005b610370600480360381019061036b9190612901565b610abe565b005b61038c60048036038101906103879190612c56565b610b42565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f69061338c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610532575061053182610bdf565b5b9050919050565b610541610c49565b61054a81610cc7565b50565b60606002805461055c9061376c565b80601f01602080910402602001604051908101604052809291908181526020018280546105889061376c565b80156105d55780601f106105aa576101008083540402835291602001916105d5565b820191906000526020600020905b8154815290600101906020018083116105b857829003601f168201915b50505050509050919050565b6105e9610c49565b6105f584848484610ce1565b50505050565b610603610f5a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610649575061064885610643610f5a565b610989565b5b610688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067f9061330c565b60405180910390fd5b6106958585858585610f62565b5050505050565b606081518351146106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d99061346c565b60405180910390fd5b6000835167ffffffffffffffff811115610725577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156107535781602001602082028036833780820191505090505b50905060005b8451811015610842576107ec85828151811061079e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106107df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161038e565b828281518110610825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061083b906137cf565b9050610759565b508091505092915050565b6000806108598361096c565b119050919050565b610869610f5a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806108af57506108ae836108a9610f5a565b610989565b5b6108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e59061330c565b60405180910390fd5b6108f98383836112d0565b505050565b610906610c49565b61091060006115eb565b565b61091a610c49565b610926848484846116b1565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610968610961610f5a565b8383611862565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a25610f5a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a6b5750610a6a85610a65610f5a565b610989565b5b610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa19061330c565b60405180910390fd5b610ab785858585856119cf565b5050505050565b610ac6610c49565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d9061334c565b60405180910390fd5b610b3f816115eb565b50565b610b4a610f5a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b905750610b8f83610b8a610f5a565b610989565b5b610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc69061330c565b60405180910390fd5b610bda838383611c6b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610c51610f5a565b73ffffffffffffffffffffffffffffffffffffffff16610c6f61092c565b73ffffffffffffffffffffffffffffffffffffffff1614610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc9061340c565b60405180910390fd5b565b8060029080519060200190610cdd9291906125f9565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906134ac565b60405180910390fd5b8151835114610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c9061348c565b60405180910390fd5b6000610d9f610f5a565b9050610db081600087878787611eb2565b60005b8451811015610eb557838181518110610df5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600080878481518110610e39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e9b9190613660565b925050819055508080610ead906137cf565b915050610db3565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f2d929190613278565b60405180910390a4610f4481600087878787611ec8565b610f5381600087878787611ed0565b5050505050565b600033905090565b8151835114610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d9061348c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906133ac565b60405180910390fd5b6000611020610f5a565b9050611030818787878787611eb2565b60005b845181101561122d576000858281518110611077577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106110bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561115d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611154906133ec565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112129190613660565b9250508190555050505080611226906137cf565b9050611033565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112a4929190613278565b60405180910390a46112ba818787878787611ec8565b6112c8818787878787611ed0565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611337906133cc565b60405180910390fd5b8051825114611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b9061348c565b60405180910390fd5b600061138e610f5a565b90506113ae81856000868660405180602001604052806000815250611eb2565b60005b83518110156115475760008482815181106113f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061143a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d29061336c565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061153f906137cf565b9150506113b1565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115bf929190613278565b60405180910390a46115e581856000868660405180602001604052806000815250611ec8565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611718906134ac565b60405180910390fd5b600061172b610f5a565b90506000611738856120b7565b90506000611745856120b7565b905061175683600089858589611eb2565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117b59190613660565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516118339291906134e7565b60405180910390a461184a83600089858589611ec8565b6118598360008989898961217d565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c89061344c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119c291906132af565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a36906133ac565b60405180910390fd5b6000611a49610f5a565b90506000611a56856120b7565b90506000611a63856120b7565b9050611a73838989858589611eb2565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b01906133ec565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbf9190613660565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611c3c9291906134e7565b60405180910390a4611c52848a8a86868a611ec8565b611c60848a8a8a8a8a61217d565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd2906133cc565b60405180910390fd5b6000611ce5610f5a565b90506000611cf2846120b7565b90506000611cff846120b7565b9050611d1f83876000858560405180602001604052806000815250611eb2565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad9061336c565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611e839291906134e7565b60405180910390a4611ea984886000868660405180602001604052806000815250611ec8565b50505050505050565b611ec0868686868686612364565b505050505050565b505050505050565b611eef8473ffffffffffffffffffffffffffffffffffffffff166125ce565b156120af578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f35959493929190613194565b602060405180830381600087803b158015611f4f57600080fd5b505af1925050508015611f8057506040513d601f19601f82011682018060405250810190611f7d9190612db5565b60015b61202657611f8c6138a5565b806308c379a01415611fe95750611fa1613d60565b80611fac5750611feb565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe091906132ca565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d906132ec565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a49061332c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156120fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561212a5781602001602082028036833780820191505090505b5090508281600081518110612168577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b61219c8473ffffffffffffffffffffffffffffffffffffffff166125ce565b1561235c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121e29594939291906131fc565b602060405180830381600087803b1580156121fc57600080fd5b505af192505050801561222d57506040513d601f19601f8201168201806040525081019061222a9190612db5565b60015b6122d3576122396138a5565b806308c379a01415612296575061224e613d60565b806122595750612298565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d91906132ca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ca906132ec565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461235a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123519061332c565b60405180910390fd5b505b505050505050565b6123728686868686866125f1565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156124705760005b835181101561246e578281815181106123ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160046000868481518110612431577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546124569190613660565b9250508190555080612467906137cf565b90506123aa565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125c65760005b83518110156125c45760008482815181106124ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110612531577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006004600084815260200190815260200160002054905081811015612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d9061342c565b60405180910390fd5b8181036004600085815260200190815260200160002081905550505050806125bd906137cf565b90506124a8565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b8280546126059061376c565b90600052602060002090601f016020900481019282612627576000855561266e565b82601f1061264057805160ff191683800117855561266e565b8280016001018555821561266e579182015b8281111561266d578251825591602001919060010190612652565b5b50905061267b919061267f565b5090565b5b80821115612698576000816000905550600101612680565b5090565b60006126af6126aa84613535565b613510565b905080838252602082019050828560208602820111156126ce57600080fd5b60005b858110156126fe57816126e488826127f0565b8452602084019350602083019250506001810190506126d1565b5050509392505050565b600061271b61271684613561565b613510565b9050808382526020820190508285602086028201111561273a57600080fd5b60005b8581101561276a578161275088826128ec565b84526020840193506020830192505060018101905061273d565b5050509392505050565b60006127876127828461358d565b613510565b90508281526020810184848401111561279f57600080fd5b6127aa84828561372a565b509392505050565b60006127c56127c0846135be565b613510565b9050828152602081018484840111156127dd57600080fd5b6127e884828561372a565b509392505050565b6000813590506127ff81613df6565b92915050565b600082601f83011261281657600080fd5b813561282684826020860161269c565b91505092915050565b600082601f83011261284057600080fd5b8135612850848260208601612708565b91505092915050565b60008135905061286881613e0d565b92915050565b60008135905061287d81613e24565b92915050565b60008151905061289281613e24565b92915050565b600082601f8301126128a957600080fd5b81356128b9848260208601612774565b91505092915050565b600082601f8301126128d357600080fd5b81356128e38482602086016127b2565b91505092915050565b6000813590506128fb81613e3b565b92915050565b60006020828403121561291357600080fd5b6000612921848285016127f0565b91505092915050565b6000806040838503121561293d57600080fd5b600061294b858286016127f0565b925050602061295c858286016127f0565b9150509250929050565b600080600080600060a0868803121561297e57600080fd5b600061298c888289016127f0565b955050602061299d888289016127f0565b945050604086013567ffffffffffffffff8111156129ba57600080fd5b6129c68882890161282f565b935050606086013567ffffffffffffffff8111156129e357600080fd5b6129ef8882890161282f565b925050608086013567ffffffffffffffff811115612a0c57600080fd5b612a1888828901612898565b9150509295509295909350565b600080600080600060a08688031215612a3d57600080fd5b6000612a4b888289016127f0565b9550506020612a5c888289016127f0565b9450506040612a6d888289016128ec565b9350506060612a7e888289016128ec565b925050608086013567ffffffffffffffff811115612a9b57600080fd5b612aa788828901612898565b9150509295509295909350565b600080600060608486031215612ac957600080fd5b6000612ad7868287016127f0565b935050602084013567ffffffffffffffff811115612af457600080fd5b612b008682870161282f565b925050604084013567ffffffffffffffff811115612b1d57600080fd5b612b298682870161282f565b9150509250925092565b60008060008060808587031215612b4957600080fd5b6000612b57878288016127f0565b945050602085013567ffffffffffffffff811115612b7457600080fd5b612b808782880161282f565b935050604085013567ffffffffffffffff811115612b9d57600080fd5b612ba98782880161282f565b925050606085013567ffffffffffffffff811115612bc657600080fd5b612bd287828801612898565b91505092959194509250565b60008060408385031215612bf157600080fd5b6000612bff858286016127f0565b9250506020612c1085828601612859565b9150509250929050565b60008060408385031215612c2d57600080fd5b6000612c3b858286016127f0565b9250506020612c4c858286016128ec565b9150509250929050565b600080600060608486031215612c6b57600080fd5b6000612c79868287016127f0565b9350506020612c8a868287016128ec565b9250506040612c9b868287016128ec565b9150509250925092565b60008060008060808587031215612cbb57600080fd5b6000612cc9878288016127f0565b9450506020612cda878288016128ec565b9350506040612ceb878288016128ec565b925050606085013567ffffffffffffffff811115612d0857600080fd5b612d1487828801612898565b91505092959194509250565b60008060408385031215612d3357600080fd5b600083013567ffffffffffffffff811115612d4d57600080fd5b612d5985828601612805565b925050602083013567ffffffffffffffff811115612d7657600080fd5b612d828582860161282f565b9150509250929050565b600060208284031215612d9e57600080fd5b6000612dac8482850161286e565b91505092915050565b600060208284031215612dc757600080fd5b6000612dd584828501612883565b91505092915050565b600060208284031215612df057600080fd5b600082013567ffffffffffffffff811115612e0a57600080fd5b612e16848285016128c2565b91505092915050565b600060208284031215612e3157600080fd5b6000612e3f848285016128ec565b91505092915050565b6000612e54838361315b565b60208301905092915050565b612e69816136b6565b82525050565b6000612e7a826135ff565b612e84818561362d565b9350612e8f836135ef565b8060005b83811015612ec0578151612ea78882612e48565b9750612eb283613620565b925050600181019050612e93565b5085935050505092915050565b612ed6816136c8565b82525050565b6000612ee78261360a565b612ef1818561363e565b9350612f01818560208601613739565b612f0a816138c7565b840191505092915050565b6000612f2082613615565b612f2a818561364f565b9350612f3a818560208601613739565b612f43816138c7565b840191505092915050565b6000612f5b60348361364f565b9150612f66826138e5565b604082019050919050565b6000612f7e602f8361364f565b9150612f8982613934565b604082019050919050565b6000612fa160288361364f565b9150612fac82613983565b604082019050919050565b6000612fc460268361364f565b9150612fcf826139d2565b604082019050919050565b6000612fe760248361364f565b9150612ff282613a21565b604082019050919050565b600061300a602a8361364f565b915061301582613a70565b604082019050919050565b600061302d60258361364f565b915061303882613abf565b604082019050919050565b600061305060238361364f565b915061305b82613b0e565b604082019050919050565b6000613073602a8361364f565b915061307e82613b5d565b604082019050919050565b600061309660208361364f565b91506130a182613bac565b602082019050919050565b60006130b960288361364f565b91506130c482613bd5565b604082019050919050565b60006130dc60298361364f565b91506130e782613c24565b604082019050919050565b60006130ff60298361364f565b915061310a82613c73565b604082019050919050565b600061312260288361364f565b915061312d82613cc2565b604082019050919050565b600061314560218361364f565b915061315082613d11565b604082019050919050565b61316481613720565b82525050565b61317381613720565b82525050565b600060208201905061318e6000830184612e60565b92915050565b600060a0820190506131a96000830188612e60565b6131b66020830187612e60565b81810360408301526131c88186612e6f565b905081810360608301526131dc8185612e6f565b905081810360808301526131f08184612edc565b90509695505050505050565b600060a0820190506132116000830188612e60565b61321e6020830187612e60565b61322b604083018661316a565b613238606083018561316a565b818103608083015261324a8184612edc565b90509695505050505050565b600060208201905081810360008301526132708184612e6f565b905092915050565b600060408201905081810360008301526132928185612e6f565b905081810360208301526132a68184612e6f565b90509392505050565b60006020820190506132c46000830184612ecd565b92915050565b600060208201905081810360008301526132e48184612f15565b905092915050565b6000602082019050818103600083015261330581612f4e565b9050919050565b6000602082019050818103600083015261332581612f71565b9050919050565b6000602082019050818103600083015261334581612f94565b9050919050565b6000602082019050818103600083015261336581612fb7565b9050919050565b6000602082019050818103600083015261338581612fda565b9050919050565b600060208201905081810360008301526133a581612ffd565b9050919050565b600060208201905081810360008301526133c581613020565b9050919050565b600060208201905081810360008301526133e581613043565b9050919050565b6000602082019050818103600083015261340581613066565b9050919050565b6000602082019050818103600083015261342581613089565b9050919050565b60006020820190508181036000830152613445816130ac565b9050919050565b60006020820190508181036000830152613465816130cf565b9050919050565b60006020820190508181036000830152613485816130f2565b9050919050565b600060208201905081810360008301526134a581613115565b9050919050565b600060208201905081810360008301526134c581613138565b9050919050565b60006020820190506134e1600083018461316a565b92915050565b60006040820190506134fc600083018561316a565b613509602083018461316a565b9392505050565b600061351a61352b565b9050613526828261379e565b919050565b6000604051905090565b600067ffffffffffffffff8211156135505761354f613876565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561357c5761357b613876565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135a8576135a7613876565b5b6135b1826138c7565b9050602081019050919050565b600067ffffffffffffffff8211156135d9576135d8613876565b5b6135e2826138c7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061366b82613720565b915061367683613720565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136ab576136aa613818565b5b828201905092915050565b60006136c182613700565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561375757808201518184015260208101905061373c565b83811115613766576000848401525b50505050565b6000600282049050600182168061378457607f821691505b6020821081141561379857613797613847565b5b50919050565b6137a7826138c7565b810181811067ffffffffffffffff821117156137c6576137c5613876565b5b80604052505050565b60006137da82613720565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561380d5761380c613818565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156138c45760046000803e6138c16000516138d8565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613d7057613df3565b613d7861352b565b60043d036004823e80513d602482011167ffffffffffffffff82111715613da0575050613df3565b808201805167ffffffffffffffff811115613dbe5750505050613df3565b80602083010160043d038501811115613ddb575050505050613df3565b613dea8260200185018661379e565b82955050505050505b90565b613dff816136b6565b8114613e0a57600080fd5b50565b613e16816136c8565b8114613e2157600080fd5b50565b613e2d816136d4565b8114613e3857600080fd5b50565b613e4481613720565b8114613e4f57600080fd5b5056fea2646970667358221220a657d2fd554fb7eaa13e0442d340685c4cffca08916455f524c8a22863b30e8464736f6c63430008040033

Deployed Bytecode Sourcemap

42454:1024:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23624:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22647:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42641:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23368:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42915:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25568:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24020:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40102:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42018:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2776:103;;;:::i;:::-;;42738:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2128:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24617:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39891:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24844:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25084:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3034:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41683:327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23624:230;23710:7;23757:1;23738:21;;:7;:21;;;;23730:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23824:9;:13;23834:2;23824:13;;;;;;;;;;;:22;23838:7;23824:22;;;;;;;;;;;;;;;;23817:29;;23624:230;;;;:::o;22647:310::-;22749:4;22801:26;22786:41;;;:11;:41;;;;:110;;;;22859:37;22844:52;;;:11;:52;;;;22786:110;:163;;;;22913:36;22937:11;22913:23;:36::i;:::-;22786:163;22766:183;;22647:310;;;:::o;42641:89::-;2014:13;:11;:13::i;:::-;42707:15:::1;42715:6;42707:7;:15::i;:::-;42641:89:::0;:::o;23368:105::-;23428:13;23461:4;23454:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23368:105;;;:::o;42915:191::-;2014:13;:11;:13::i;:::-;43064:34:::1;43075:2;43079:3;43084:7;43093:4;43064:10;:34::i;:::-;42915:191:::0;;;;:::o;25568:439::-;25809:12;:10;:12::i;:::-;25801:20;;:4;:20;;;:60;;;;25825:36;25842:4;25848:12;:10;:12::i;:::-;25825:16;:36::i;:::-;25801:60;25779:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25947:52;25970:4;25976:2;25980:3;25985:7;25994:4;25947:22;:52::i;:::-;25568:439;;;;;:::o;24020:524::-;24176:16;24237:3;:10;24218:8;:15;:29;24210:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24306:30;24353:8;:15;24339:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24306:63;;24387:9;24382:122;24406:8;:15;24402:1;:19;24382:122;;;24462:30;24472:8;24481:1;24472:11;;;;;;;;;;;;;;;;;;;;;;24485:3;24489:1;24485:6;;;;;;;;;;;;;;;;;;;;;;24462:9;:30::i;:::-;24443:13;24457:1;24443:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;24423:3;;;;:::i;:::-;;;24382:122;;;;24523:13;24516:20;;;24020:524;;;;:::o;40102:122::-;40159:4;40215:1;40183:29;40209:2;40183:25;:29::i;:::-;:33;40176:40;;40102:122;;;:::o;42018:359::-;42194:12;:10;:12::i;:::-;42183:23;;:7;:23;;;:66;;;;42210:39;42227:7;42236:12;:10;:12::i;:::-;42210:16;:39::i;:::-;42183:66;42161:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;42337:32;42348:7;42357:3;42362:6;42337:10;:32::i;:::-;42018:359;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;42738:169::-;2014:13;:11;:13::i;:::-;42867:32:::1;42873:7;42882:2;42886:6;42894:4;42867:5;:32::i;:::-;42738:169:::0;;;;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;24617:155::-;24712:52;24731:12;:10;:12::i;:::-;24745:8;24755;24712:18;:52::i;:::-;24617:155;;:::o;39891:113::-;39953:7;39980:12;:16;39993:2;39980:16;;;;;;;;;;;;39973:23;;39891:113;;;:::o;24844:168::-;24943:4;24967:18;:27;24986:7;24967:27;;;;;;;;;;;;;;;:37;24995:8;24967:37;;;;;;;;;;;;;;;;;;;;;;;;;24960:44;;24844:168;;;;:::o;25084:407::-;25300:12;:10;:12::i;:::-;25292:20;;:4;:20;;;:60;;;;25316:36;25333:4;25339:12;:10;:12::i;:::-;25316:16;:36::i;:::-;25292:60;25270:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25438:45;25456:4;25462:2;25466;25470:6;25478:4;25438:17;:45::i;:::-;25084:407;;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;;;3115:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;41683:327::-;41834:12;:10;:12::i;:::-;41823:23;;:7;:23;;;:66;;;;41850:39;41867:7;41876:12;:10;:12::i;:::-;41850:16;:39::i;:::-;41823:66;41801:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;41977:25;41983:7;41992:2;41996:5;41977;:25::i;:::-;41683:327;;;:::o;13928:157::-;14013:4;14052:25;14037:40;;;:11;:40;;;;14030:47;;13928:157;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;29793:88::-;29867:6;29860:4;:13;;;;;;;;;;;;:::i;:::-;;29793:88;:::o;31399:813::-;31591:1;31577:16;;:2;:16;;;;31569:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31664:7;:14;31650:3;:10;:28;31642:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31736:16;31755:12;:10;:12::i;:::-;31736:31;;31780:66;31801:8;31819:1;31823:2;31827:3;31832:7;31841:4;31780:20;:66::i;:::-;31864:9;31859:103;31883:3;:10;31879:1;:14;31859:103;;;31940:7;31948:1;31940:10;;;;;;;;;;;;;;;;;;;;;;31915:9;:17;31925:3;31929:1;31925:6;;;;;;;;;;;;;;;;;;;;;;31915:17;;;;;;;;;;;:21;31933:2;31915:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;31895:3;;;;;:::i;:::-;;;;31859:103;;;;32015:2;31979:53;;32011:1;31979:53;;31993:8;31979:53;;;32019:3;32024:7;31979:53;;;;;;;:::i;:::-;;;;;;;;32045:65;32065:8;32083:1;32087:2;32091:3;32096:7;32105:4;32045:19;:65::i;:::-;32123:81;32159:8;32177:1;32181:2;32185:3;32190:7;32199:4;32123:35;:81::i;:::-;31399:813;;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;27803:1146::-;28030:7;:14;28016:3;:10;:28;28008:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28122:1;28108:16;;:2;:16;;;;28100:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28179:16;28198:12;:10;:12::i;:::-;28179:31;;28223:60;28244:8;28254:4;28260:2;28264:3;28269:7;28278:4;28223:20;:60::i;:::-;28301:9;28296:421;28320:3;:10;28316:1;:14;28296:421;;;28352:10;28365:3;28369:1;28365:6;;;;;;;;;;;;;;;;;;;;;;28352:19;;28386:14;28403:7;28411:1;28403:10;;;;;;;;;;;;;;;;;;;;;;28386:27;;28430:19;28452:9;:13;28462:2;28452:13;;;;;;;;;;;:19;28466:4;28452:19;;;;;;;;;;;;;;;;28430:41;;28509:6;28494:11;:21;;28486:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28642:6;28628:11;:20;28606:9;:13;28616:2;28606:13;;;;;;;;;;;:19;28620:4;28606:19;;;;;;;;;;;;;;;:42;;;;28699:6;28678:9;:13;28688:2;28678:13;;;;;;;;;;;:17;28692:2;28678:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28296:421;;;28332:3;;;;:::i;:::-;;;28296:421;;;;28764:2;28734:47;;28758:4;28734:47;;28748:8;28734:47;;;28768:3;28773:7;28734:47;;;;;;;:::i;:::-;;;;;;;;28794:59;28814:8;28824:4;28830:2;28834:3;28839:7;28848:4;28794:19;:59::i;:::-;28866:75;28902:8;28912:4;28918:2;28922:3;28927:7;28936:4;28866:35;:75::i;:::-;27803:1146;;;;;;:::o;33568:969::-;33736:1;33720:18;;:4;:18;;;;33712:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33811:7;:14;33797:3;:10;:28;33789:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33883:16;33902:12;:10;:12::i;:::-;33883:31;;33927:66;33948:8;33958:4;33972:1;33976:3;33981:7;33927:66;;;;;;;;;;;;:20;:66::i;:::-;34011:9;34006:373;34030:3;:10;34026:1;:14;34006:373;;;34062:10;34075:3;34079:1;34075:6;;;;;;;;;;;;;;;;;;;;;;34062:19;;34096:14;34113:7;34121:1;34113:10;;;;;;;;;;;;;;;;;;;;;;34096:27;;34140:19;34162:9;:13;34172:2;34162:13;;;;;;;;;;;:19;34176:4;34162:19;;;;;;;;;;;;;;;;34140:41;;34219:6;34204:11;:21;;34196:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34346:6;34332:11;:20;34310:9;:13;34320:2;34310:13;;;;;;;;;;;:19;34324:4;34310:19;;;;;;;;;;;;;;;:42;;;;34006:373;;;34042:3;;;;;:::i;:::-;;;;34006:373;;;;34434:1;34396:55;;34420:4;34396:55;;34410:8;34396:55;;;34438:3;34443:7;34396:55;;;;;;;:::i;:::-;;;;;;;;34464:65;34484:8;34494:4;34508:1;34512:3;34517:7;34464:65;;;;;;;;;;;;:19;:65::i;:::-;33568:969;;;;:::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3395:191;;:::o;30267:729::-;30434:1;30420:16;;:2;:16;;;;30412:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30487:16;30506:12;:10;:12::i;:::-;30487:31;;30529:20;30552:21;30570:2;30552:17;:21::i;:::-;30529:44;;30584:24;30611:25;30629:6;30611:17;:25::i;:::-;30584:52;;30649:66;30670:8;30688:1;30692:2;30696:3;30701:7;30710:4;30649:20;:66::i;:::-;30749:6;30728:9;:13;30738:2;30728:13;;;;;;;;;;;:17;30742:2;30728:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30808:2;30771:52;;30804:1;30771:52;;30786:8;30771:52;;;30812:2;30816:6;30771:52;;;;;;;:::i;:::-;;;;;;;;30836:65;30856:8;30874:1;30878:2;30882:3;30887:7;30896:4;30836:19;:65::i;:::-;30914:74;30945:8;30963:1;30967:2;30971;30975:6;30983:4;30914:30;:74::i;:::-;30267:729;;;;;;;:::o;34680:331::-;34835:8;34826:17;;:5;:17;;;;34818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34938:8;34900:18;:25;34919:5;34900:25;;;;;;;;;;;;;;;:35;34926:8;34900:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34984:8;34962:41;;34977:5;34962:41;;;34994:8;34962:41;;;;;;:::i;:::-;;;;;;;;34680:331;;;:::o;26471:974::-;26673:1;26659:16;;:2;:16;;;;26651:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26730:16;26749:12;:10;:12::i;:::-;26730:31;;26772:20;26795:21;26813:2;26795:17;:21::i;:::-;26772:44;;26827:24;26854:25;26872:6;26854:17;:25::i;:::-;26827:52;;26892:60;26913:8;26923:4;26929:2;26933:3;26938:7;26947:4;26892:20;:60::i;:::-;26965:19;26987:9;:13;26997:2;26987:13;;;;;;;;;;;:19;27001:4;26987:19;;;;;;;;;;;;;;;;26965:41;;27040:6;27025:11;:21;;27017:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27165:6;27151:11;:20;27129:9;:13;27139:2;27129:13;;;;;;;;;;;:19;27143:4;27129:19;;;;;;;;;;;;;;;:42;;;;27214:6;27193:9;:13;27203:2;27193:13;;;;;;;;;;;:17;27207:2;27193:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27269:2;27238:46;;27263:4;27238:46;;27253:8;27238:46;;;27273:2;27277:6;27238:46;;;;;;;:::i;:::-;;;;;;;;27297:59;27317:8;27327:4;27333:2;27337:3;27342:7;27351:4;27297:19;:59::i;:::-;27369:68;27400:8;27410:4;27416:2;27420;27424:6;27432:4;27369:30;:68::i;:::-;26471:974;;;;;;;;;:::o;32510:808::-;32653:1;32637:18;;:4;:18;;;;32629:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32708:16;32727:12;:10;:12::i;:::-;32708:31;;32750:20;32773:21;32791:2;32773:17;:21::i;:::-;32750:44;;32805:24;32832:25;32850:6;32832:17;:25::i;:::-;32805:52;;32870:66;32891:8;32901:4;32915:1;32919:3;32924:7;32870:66;;;;;;;;;;;;:20;:66::i;:::-;32949:19;32971:9;:13;32981:2;32971:13;;;;;;;;;;;:19;32985:4;32971:19;;;;;;;;;;;;;;;;32949:41;;33024:6;33009:11;:21;;33001:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33143:6;33129:11;:20;33107:9;:13;33117:2;33107:13;;;;;;;;;;;:19;33121:4;33107:19;;;;;;;;;;;;;;;:42;;;;33217:1;33178:54;;33203:4;33178:54;;33193:8;33178:54;;;33221:2;33225:6;33178:54;;;;;;;:::i;:::-;;;;;;;;33245:65;33265:8;33275:4;33289:1;33293:3;33298:7;33245:65;;;;;;;;;;;;:19;:65::i;:::-;32510:808;;;;;;;:::o;43184:291::-;43401:66;43428:8;43438:4;43444:2;43448:3;43453:7;43462:4;43401:26;:66::i;:::-;43184:291;;;;;;:::o;37145:220::-;;;;;;;:::o;38125:813::-;38365:15;:2;:13;;;:15::i;:::-;38361:570;;;38418:2;38401:43;;;38445:8;38455:4;38461:3;38466:7;38475:4;38401:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38397:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38793:6;38786:14;;;;;;;;;;;:::i;:::-;;;;;;;;38397:523;;;38842:62;;;;;;;;;;:::i;:::-;;;;;;;;38397:523;38574:48;;;38562:60;;;:8;:60;;;;38558:159;;38647:50;;;;;;;;;;:::i;:::-;;;;;;;;38558:159;38481:251;38361:570;38125:813;;;;;;:::o;38946:198::-;39012:16;39041:22;39080:1;39066:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39041:41;;39104:7;39093:5;39099:1;39093:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;39131:5;39124:12;;;38946:198;;;:::o;37373:744::-;37588:15;:2;:13;;;:15::i;:::-;37584:526;;;37641:2;37624:38;;;37663:8;37673:4;37679:2;37683:6;37691:4;37624:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37620:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37972:6;37965:14;;;;;;;;;;;:::i;:::-;;;;;;;;37620:479;;;38021:62;;;;;;;;;;:::i;:::-;;;;;;;;37620:479;37758:43;;;37746:55;;;:8;:55;;;;37742:154;;37826:50;;;;;;;;;;:::i;:::-;;;;;;;;37742:154;37697:214;37584:526;37373:744;;;;;;:::o;40299:931::-;40538:66;40565:8;40575:4;40581:2;40585:3;40590:7;40599:4;40538:26;:66::i;:::-;40637:1;40621:18;;:4;:18;;;40617:160;;;40661:9;40656:110;40680:3;:10;40676:1;:14;40656:110;;;40740:7;40748:1;40740:10;;;;;;;;;;;;;;;;;;;;;;40716:12;:20;40729:3;40733:1;40729:6;;;;;;;;;;;;;;;;;;;;;;40716:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;40692:3;;;;:::i;:::-;;;40656:110;;;;40617:160;40807:1;40793:16;;:2;:16;;;40789:434;;;40831:9;40826:386;40850:3;:10;40846:1;:14;40826:386;;;40886:10;40899:3;40903:1;40899:6;;;;;;;;;;;;;;;;;;;;;;40886:19;;40924:14;40941:7;40949:1;40941:10;;;;;;;;;;;;;;;;;;;;;;40924:27;;40970:14;40987:12;:16;41000:2;40987:16;;;;;;;;;;;;40970:33;;41040:6;41030;:16;;41022:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41171:6;41162;:15;41143:12;:16;41156:2;41143:16;;;;;;;;;;;:34;;;;40826:386;;;40862:3;;;;:::i;:::-;;;40826:386;;;;40789:434;40299:931;;;;;;:::o;4826:326::-;4886:4;5143:1;5121:7;:19;;;:23;5114:30;;4826:326;;;:::o;35969:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;3050:86;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3204:79;;;;:::o;3302:271::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:2;;3424:1;3421;3414:12;3373:2;3464:6;3451:20;3489:78;3563:3;3555:6;3548:4;3540:6;3536:17;3489:78;:::i;:::-;3480:87;;3363:210;;;;;:::o;3593:273::-;3649:5;3698:3;3691:4;3683:6;3679:17;3675:27;3665:2;;3716:1;3713;3706:12;3665:2;3756:6;3743:20;3781:79;3856:3;3848:6;3841:4;3833:6;3829:17;3781:79;:::i;:::-;3772:88;;3655:211;;;;;:::o;3872:139::-;3918:5;3956:6;3943:20;3934:29;;3972:33;3999:5;3972:33;:::i;:::-;3924:87;;;;:::o;4017:262::-;4076:6;4125:2;4113:9;4104:7;4100:23;4096:32;4093:2;;;4141:1;4138;4131:12;4093:2;4184:1;4209:53;4254:7;4245:6;4234:9;4230:22;4209:53;:::i;:::-;4199:63;;4155:117;4083:196;;;;:::o;4285:407::-;4353:6;4361;4410:2;4398:9;4389:7;4385:23;4381:32;4378:2;;;4426:1;4423;4416:12;4378:2;4469:1;4494:53;4539:7;4530:6;4519:9;4515:22;4494:53;:::i;:::-;4484:63;;4440:117;4596:2;4622:53;4667:7;4658:6;4647:9;4643:22;4622:53;:::i;:::-;4612:63;;4567:118;4368:324;;;;;:::o;4698:1241::-;4852:6;4860;4868;4876;4884;4933:3;4921:9;4912:7;4908:23;4904:33;4901:2;;;4950:1;4947;4940:12;4901:2;4993:1;5018:53;5063:7;5054:6;5043:9;5039:22;5018:53;:::i;:::-;5008:63;;4964:117;5120:2;5146:53;5191:7;5182:6;5171:9;5167:22;5146:53;:::i;:::-;5136:63;;5091:118;5276:2;5265:9;5261:18;5248:32;5307:18;5299:6;5296:30;5293:2;;;5339:1;5336;5329:12;5293:2;5367:78;5437:7;5428:6;5417:9;5413:22;5367:78;:::i;:::-;5357:88;;5219:236;5522:2;5511:9;5507:18;5494:32;5553:18;5545:6;5542:30;5539:2;;;5585:1;5582;5575:12;5539:2;5613:78;5683:7;5674:6;5663:9;5659:22;5613:78;:::i;:::-;5603:88;;5465:236;5768:3;5757:9;5753:19;5740:33;5800:18;5792:6;5789:30;5786:2;;;5832:1;5829;5822:12;5786:2;5860:62;5914:7;5905:6;5894:9;5890:22;5860:62;:::i;:::-;5850:72;;5711:221;4891:1048;;;;;;;;:::o;5945:955::-;6049:6;6057;6065;6073;6081;6130:3;6118:9;6109:7;6105:23;6101:33;6098:2;;;6147:1;6144;6137:12;6098:2;6190:1;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6161:117;6317:2;6343:53;6388:7;6379:6;6368:9;6364:22;6343:53;:::i;:::-;6333:63;;6288:118;6445:2;6471:53;6516:7;6507:6;6496:9;6492:22;6471:53;:::i;:::-;6461:63;;6416:118;6573:2;6599:53;6644:7;6635:6;6624:9;6620:22;6599:53;:::i;:::-;6589:63;;6544:118;6729:3;6718:9;6714:19;6701:33;6761:18;6753:6;6750:30;6747:2;;;6793:1;6790;6783:12;6747:2;6821:62;6875:7;6866:6;6855:9;6851:22;6821:62;:::i;:::-;6811:72;;6672:221;6088:812;;;;;;;;:::o;6906:838::-;7033:6;7041;7049;7098:2;7086:9;7077:7;7073:23;7069:32;7066:2;;;7114:1;7111;7104:12;7066:2;7157:1;7182:53;7227:7;7218:6;7207:9;7203:22;7182:53;:::i;:::-;7172:63;;7128:117;7312:2;7301:9;7297:18;7284:32;7343:18;7335:6;7332:30;7329:2;;;7375:1;7372;7365:12;7329:2;7403:78;7473:7;7464:6;7453:9;7449:22;7403:78;:::i;:::-;7393:88;;7255:236;7558:2;7547:9;7543:18;7530:32;7589:18;7581:6;7578:30;7575:2;;;7621:1;7618;7611:12;7575:2;7649:78;7719:7;7710:6;7699:9;7695:22;7649:78;:::i;:::-;7639:88;;7501:236;7056:688;;;;;:::o;7750:1095::-;7895:6;7903;7911;7919;7968:3;7956:9;7947:7;7943:23;7939:33;7936:2;;;7985:1;7982;7975:12;7936:2;8028:1;8053:53;8098:7;8089:6;8078:9;8074:22;8053:53;:::i;:::-;8043:63;;7999:117;8183:2;8172:9;8168:18;8155:32;8214:18;8206:6;8203:30;8200:2;;;8246:1;8243;8236:12;8200:2;8274:78;8344:7;8335:6;8324:9;8320:22;8274:78;:::i;:::-;8264:88;;8126:236;8429:2;8418:9;8414:18;8401:32;8460:18;8452:6;8449:30;8446:2;;;8492:1;8489;8482:12;8446:2;8520:78;8590:7;8581:6;8570:9;8566:22;8520:78;:::i;:::-;8510:88;;8372:236;8675:2;8664:9;8660:18;8647:32;8706:18;8698:6;8695:30;8692:2;;;8738:1;8735;8728:12;8692:2;8766:62;8820:7;8811:6;8800:9;8796:22;8766:62;:::i;:::-;8756:72;;8618:220;7926:919;;;;;;;:::o;8851:401::-;8916:6;8924;8973:2;8961:9;8952:7;8948:23;8944:32;8941:2;;;8989:1;8986;8979:12;8941:2;9032:1;9057:53;9102:7;9093:6;9082:9;9078:22;9057:53;:::i;:::-;9047:63;;9003:117;9159:2;9185:50;9227:7;9218:6;9207:9;9203:22;9185:50;:::i;:::-;9175:60;;9130:115;8931:321;;;;;:::o;9258:407::-;9326:6;9334;9383:2;9371:9;9362:7;9358:23;9354:32;9351:2;;;9399:1;9396;9389:12;9351:2;9442:1;9467:53;9512:7;9503:6;9492:9;9488:22;9467:53;:::i;:::-;9457:63;;9413:117;9569:2;9595:53;9640:7;9631:6;9620:9;9616:22;9595:53;:::i;:::-;9585:63;;9540:118;9341:324;;;;;:::o;9671:552::-;9748:6;9756;9764;9813:2;9801:9;9792:7;9788:23;9784:32;9781:2;;;9829:1;9826;9819:12;9781:2;9872:1;9897:53;9942:7;9933:6;9922:9;9918:22;9897:53;:::i;:::-;9887:63;;9843:117;9999:2;10025:53;10070:7;10061:6;10050:9;10046:22;10025:53;:::i;:::-;10015:63;;9970:118;10127:2;10153:53;10198:7;10189:6;10178:9;10174:22;10153:53;:::i;:::-;10143:63;;10098:118;9771:452;;;;;:::o;10229:809::-;10324:6;10332;10340;10348;10397:3;10385:9;10376:7;10372:23;10368:33;10365:2;;;10414:1;10411;10404:12;10365:2;10457:1;10482:53;10527:7;10518:6;10507:9;10503:22;10482:53;:::i;:::-;10472:63;;10428:117;10584:2;10610:53;10655:7;10646:6;10635:9;10631:22;10610:53;:::i;:::-;10600:63;;10555:118;10712:2;10738:53;10783:7;10774:6;10763:9;10759:22;10738:53;:::i;:::-;10728:63;;10683:118;10868:2;10857:9;10853:18;10840:32;10899:18;10891:6;10888:30;10885:2;;;10931:1;10928;10921:12;10885:2;10959:62;11013:7;11004:6;10993:9;10989:22;10959:62;:::i;:::-;10949:72;;10811:220;10355:683;;;;;;;:::o;11044:693::-;11162:6;11170;11219:2;11207:9;11198:7;11194:23;11190:32;11187:2;;;11235:1;11232;11225:12;11187:2;11306:1;11295:9;11291:17;11278:31;11336:18;11328:6;11325:30;11322:2;;;11368:1;11365;11358:12;11322:2;11396:78;11466:7;11457:6;11446:9;11442:22;11396:78;:::i;:::-;11386:88;;11249:235;11551:2;11540:9;11536:18;11523:32;11582:18;11574:6;11571:30;11568:2;;;11614:1;11611;11604:12;11568:2;11642:78;11712:7;11703:6;11692:9;11688:22;11642:78;:::i;:::-;11632:88;;11494:236;11177:560;;;;;:::o;11743:260::-;11801:6;11850:2;11838:9;11829:7;11825:23;11821:32;11818:2;;;11866:1;11863;11856:12;11818:2;11909:1;11934:52;11978:7;11969:6;11958:9;11954:22;11934:52;:::i;:::-;11924:62;;11880:116;11808:195;;;;:::o;12009:282::-;12078:6;12127:2;12115:9;12106:7;12102:23;12098:32;12095:2;;;12143:1;12140;12133:12;12095:2;12186:1;12211:63;12266:7;12257:6;12246:9;12242:22;12211:63;:::i;:::-;12201:73;;12157:127;12085:206;;;;:::o;12297:375::-;12366:6;12415:2;12403:9;12394:7;12390:23;12386:32;12383:2;;;12431:1;12428;12421:12;12383:2;12502:1;12491:9;12487:17;12474:31;12532:18;12524:6;12521:30;12518:2;;;12564:1;12561;12554:12;12518:2;12592:63;12647:7;12638:6;12627:9;12623:22;12592:63;:::i;:::-;12582:73;;12445:220;12373:299;;;;:::o;12678:262::-;12737:6;12786:2;12774:9;12765:7;12761:23;12757:32;12754:2;;;12802:1;12799;12792:12;12754:2;12845:1;12870:53;12915:7;12906:6;12895:9;12891:22;12870:53;:::i;:::-;12860:63;;12816:117;12744:196;;;;:::o;12946:179::-;13015:10;13036:46;13078:3;13070:6;13036:46;:::i;:::-;13114:4;13109:3;13105:14;13091:28;;13026:99;;;;:::o;13131:118::-;13218:24;13236:5;13218:24;:::i;:::-;13213:3;13206:37;13196:53;;:::o;13285:732::-;13404:3;13433:54;13481:5;13433:54;:::i;:::-;13503:86;13582:6;13577:3;13503:86;:::i;:::-;13496:93;;13613:56;13663:5;13613:56;:::i;:::-;13692:7;13723:1;13708:284;13733:6;13730:1;13727:13;13708:284;;;13809:6;13803:13;13836:63;13895:3;13880:13;13836:63;:::i;:::-;13829:70;;13922:60;13975:6;13922:60;:::i;:::-;13912:70;;13768:224;13755:1;13752;13748:9;13743:14;;13708:284;;;13712:14;14008:3;14001:10;;13409:608;;;;;;;:::o;14023:109::-;14104:21;14119:5;14104:21;:::i;:::-;14099:3;14092:34;14082:50;;:::o;14138:360::-;14224:3;14252:38;14284:5;14252:38;:::i;:::-;14306:70;14369:6;14364:3;14306:70;:::i;:::-;14299:77;;14385:52;14430:6;14425:3;14418:4;14411:5;14407:16;14385:52;:::i;:::-;14462:29;14484:6;14462:29;:::i;:::-;14457:3;14453:39;14446:46;;14228:270;;;;;:::o;14504:364::-;14592:3;14620:39;14653:5;14620:39;:::i;:::-;14675:71;14739:6;14734:3;14675:71;:::i;:::-;14668:78;;14755:52;14800:6;14795:3;14788:4;14781:5;14777:16;14755:52;:::i;:::-;14832:29;14854:6;14832:29;:::i;:::-;14827:3;14823:39;14816:46;;14596:272;;;;;:::o;14874:366::-;15016:3;15037:67;15101:2;15096:3;15037:67;:::i;:::-;15030:74;;15113:93;15202:3;15113:93;:::i;:::-;15231:2;15226:3;15222:12;15215:19;;15020:220;;;:::o;15246:366::-;15388:3;15409:67;15473:2;15468:3;15409:67;:::i;:::-;15402:74;;15485:93;15574:3;15485:93;:::i;:::-;15603:2;15598:3;15594:12;15587:19;;15392:220;;;:::o;15618:366::-;15760:3;15781:67;15845:2;15840:3;15781:67;:::i;:::-;15774:74;;15857:93;15946:3;15857:93;:::i;:::-;15975:2;15970:3;15966:12;15959:19;;15764:220;;;:::o;15990:366::-;16132:3;16153:67;16217:2;16212:3;16153:67;:::i;:::-;16146:74;;16229:93;16318:3;16229:93;:::i;:::-;16347:2;16342:3;16338:12;16331:19;;16136:220;;;:::o;16362:366::-;16504:3;16525:67;16589:2;16584:3;16525:67;:::i;:::-;16518:74;;16601:93;16690:3;16601:93;:::i;:::-;16719:2;16714:3;16710:12;16703:19;;16508:220;;;:::o;16734:366::-;16876:3;16897:67;16961:2;16956:3;16897:67;:::i;:::-;16890:74;;16973:93;17062:3;16973:93;:::i;:::-;17091:2;17086:3;17082:12;17075:19;;16880:220;;;:::o;17106:366::-;17248:3;17269:67;17333:2;17328:3;17269:67;:::i;:::-;17262:74;;17345:93;17434:3;17345:93;:::i;:::-;17463:2;17458:3;17454:12;17447:19;;17252:220;;;:::o;17478:366::-;17620:3;17641:67;17705:2;17700:3;17641:67;:::i;:::-;17634:74;;17717:93;17806:3;17717:93;:::i;:::-;17835:2;17830:3;17826:12;17819:19;;17624:220;;;:::o;17850:366::-;17992:3;18013:67;18077:2;18072:3;18013:67;:::i;:::-;18006:74;;18089:93;18178:3;18089:93;:::i;:::-;18207:2;18202:3;18198:12;18191:19;;17996:220;;;:::o;18222:366::-;18364:3;18385:67;18449:2;18444:3;18385:67;:::i;:::-;18378:74;;18461:93;18550:3;18461:93;:::i;:::-;18579:2;18574:3;18570:12;18563:19;;18368:220;;;:::o;18594:366::-;18736:3;18757:67;18821:2;18816:3;18757:67;:::i;:::-;18750:74;;18833:93;18922:3;18833:93;:::i;:::-;18951:2;18946:3;18942:12;18935:19;;18740:220;;;:::o;18966:366::-;19108:3;19129:67;19193:2;19188:3;19129:67;:::i;:::-;19122:74;;19205:93;19294:3;19205:93;:::i;:::-;19323:2;19318:3;19314:12;19307:19;;19112:220;;;:::o;19338:366::-;19480:3;19501:67;19565:2;19560:3;19501:67;:::i;:::-;19494:74;;19577:93;19666:3;19577:93;:::i;:::-;19695:2;19690:3;19686:12;19679:19;;19484:220;;;:::o;19710:366::-;19852:3;19873:67;19937:2;19932:3;19873:67;:::i;:::-;19866:74;;19949:93;20038:3;19949:93;:::i;:::-;20067:2;20062:3;20058:12;20051:19;;19856:220;;;:::o;20082:366::-;20224:3;20245:67;20309:2;20304:3;20245:67;:::i;:::-;20238:74;;20321:93;20410:3;20321:93;:::i;:::-;20439:2;20434:3;20430:12;20423:19;;20228:220;;;:::o;20454:108::-;20531:24;20549:5;20531:24;:::i;:::-;20526:3;20519:37;20509:53;;:::o;20568:118::-;20655:24;20673:5;20655:24;:::i;:::-;20650:3;20643:37;20633:53;;:::o;20692:222::-;20785:4;20823:2;20812:9;20808:18;20800:26;;20836:71;20904:1;20893:9;20889:17;20880:6;20836:71;:::i;:::-;20790:124;;;;:::o;20920:1053::-;21243:4;21281:3;21270:9;21266:19;21258:27;;21295:71;21363:1;21352:9;21348:17;21339:6;21295:71;:::i;:::-;21376:72;21444:2;21433:9;21429:18;21420:6;21376:72;:::i;:::-;21495:9;21489:4;21485:20;21480:2;21469:9;21465:18;21458:48;21523:108;21626:4;21617:6;21523:108;:::i;:::-;21515:116;;21678:9;21672:4;21668:20;21663:2;21652:9;21648:18;21641:48;21706:108;21809:4;21800:6;21706:108;:::i;:::-;21698:116;;21862:9;21856:4;21852:20;21846:3;21835:9;21831:19;21824:49;21890:76;21961:4;21952:6;21890:76;:::i;:::-;21882:84;;21248:725;;;;;;;;:::o;21979:751::-;22202:4;22240:3;22229:9;22225:19;22217:27;;22254:71;22322:1;22311:9;22307:17;22298:6;22254:71;:::i;:::-;22335:72;22403:2;22392:9;22388:18;22379:6;22335:72;:::i;:::-;22417;22485:2;22474:9;22470:18;22461:6;22417:72;:::i;:::-;22499;22567:2;22556:9;22552:18;22543:6;22499:72;:::i;:::-;22619:9;22613:4;22609:20;22603:3;22592:9;22588:19;22581:49;22647:76;22718:4;22709:6;22647:76;:::i;:::-;22639:84;;22207:523;;;;;;;;:::o;22736:373::-;22879:4;22917:2;22906:9;22902:18;22894:26;;22966:9;22960:4;22956:20;22952:1;22941:9;22937:17;22930:47;22994:108;23097:4;23088:6;22994:108;:::i;:::-;22986:116;;22884:225;;;;:::o;23115:634::-;23336:4;23374:2;23363:9;23359:18;23351:26;;23423:9;23417:4;23413:20;23409:1;23398:9;23394:17;23387:47;23451:108;23554:4;23545:6;23451:108;:::i;:::-;23443:116;;23606:9;23600:4;23596:20;23591:2;23580:9;23576:18;23569:48;23634:108;23737:4;23728:6;23634:108;:::i;:::-;23626:116;;23341:408;;;;;:::o;23755:210::-;23842:4;23880:2;23869:9;23865:18;23857:26;;23893:65;23955:1;23944:9;23940:17;23931:6;23893:65;:::i;:::-;23847:118;;;;:::o;23971:313::-;24084:4;24122:2;24111:9;24107:18;24099:26;;24171:9;24165:4;24161:20;24157:1;24146:9;24142:17;24135:47;24199:78;24272:4;24263:6;24199:78;:::i;:::-;24191:86;;24089:195;;;;:::o;24290:419::-;24456:4;24494:2;24483:9;24479:18;24471:26;;24543:9;24537:4;24533:20;24529:1;24518:9;24514:17;24507:47;24571:131;24697:4;24571:131;:::i;:::-;24563:139;;24461:248;;;:::o;24715:419::-;24881:4;24919:2;24908:9;24904:18;24896:26;;24968:9;24962:4;24958:20;24954:1;24943:9;24939:17;24932:47;24996:131;25122:4;24996:131;:::i;:::-;24988:139;;24886:248;;;:::o;25140:419::-;25306:4;25344:2;25333:9;25329:18;25321:26;;25393:9;25387:4;25383:20;25379:1;25368:9;25364:17;25357:47;25421:131;25547:4;25421:131;:::i;:::-;25413:139;;25311:248;;;:::o;25565:419::-;25731:4;25769:2;25758:9;25754:18;25746:26;;25818:9;25812:4;25808:20;25804:1;25793:9;25789:17;25782:47;25846:131;25972:4;25846:131;:::i;:::-;25838:139;;25736:248;;;:::o;25990:419::-;26156:4;26194:2;26183:9;26179:18;26171:26;;26243:9;26237:4;26233:20;26229:1;26218:9;26214:17;26207:47;26271:131;26397:4;26271:131;:::i;:::-;26263:139;;26161:248;;;:::o;26415:419::-;26581:4;26619:2;26608:9;26604:18;26596:26;;26668:9;26662:4;26658:20;26654:1;26643:9;26639:17;26632:47;26696:131;26822:4;26696:131;:::i;:::-;26688:139;;26586:248;;;:::o;26840:419::-;27006:4;27044:2;27033:9;27029:18;27021:26;;27093:9;27087:4;27083:20;27079:1;27068:9;27064:17;27057:47;27121:131;27247:4;27121:131;:::i;:::-;27113:139;;27011:248;;;:::o;27265:419::-;27431:4;27469:2;27458:9;27454:18;27446:26;;27518:9;27512:4;27508:20;27504:1;27493:9;27489:17;27482:47;27546:131;27672:4;27546:131;:::i;:::-;27538:139;;27436:248;;;:::o;27690:419::-;27856:4;27894:2;27883:9;27879:18;27871:26;;27943:9;27937:4;27933:20;27929:1;27918:9;27914:17;27907:47;27971:131;28097:4;27971:131;:::i;:::-;27963:139;;27861:248;;;:::o;28115:419::-;28281:4;28319:2;28308:9;28304:18;28296:26;;28368:9;28362:4;28358:20;28354:1;28343:9;28339:17;28332:47;28396:131;28522:4;28396:131;:::i;:::-;28388:139;;28286:248;;;:::o;28540:419::-;28706:4;28744:2;28733:9;28729:18;28721:26;;28793:9;28787:4;28783:20;28779:1;28768:9;28764:17;28757:47;28821:131;28947:4;28821:131;:::i;:::-;28813:139;;28711:248;;;:::o;28965:419::-;29131:4;29169:2;29158:9;29154:18;29146:26;;29218:9;29212:4;29208:20;29204:1;29193:9;29189:17;29182:47;29246:131;29372:4;29246:131;:::i;:::-;29238:139;;29136:248;;;:::o;29390:419::-;29556:4;29594:2;29583:9;29579:18;29571:26;;29643:9;29637:4;29633:20;29629:1;29618:9;29614:17;29607:47;29671:131;29797:4;29671:131;:::i;:::-;29663:139;;29561:248;;;:::o;29815:419::-;29981:4;30019:2;30008:9;30004:18;29996:26;;30068:9;30062:4;30058:20;30054:1;30043:9;30039:17;30032:47;30096:131;30222:4;30096:131;:::i;:::-;30088:139;;29986:248;;;:::o;30240:419::-;30406:4;30444:2;30433:9;30429:18;30421:26;;30493:9;30487:4;30483:20;30479:1;30468:9;30464:17;30457:47;30521:131;30647:4;30521:131;:::i;:::-;30513:139;;30411:248;;;:::o;30665:222::-;30758:4;30796:2;30785:9;30781:18;30773:26;;30809:71;30877:1;30866:9;30862:17;30853:6;30809:71;:::i;:::-;30763:124;;;;:::o;30893:332::-;31014:4;31052:2;31041:9;31037:18;31029:26;;31065:71;31133:1;31122:9;31118:17;31109:6;31065:71;:::i;:::-;31146:72;31214:2;31203:9;31199:18;31190:6;31146:72;:::i;:::-;31019:206;;;;;:::o;31231:129::-;31265:6;31292:20;;:::i;:::-;31282:30;;31321:33;31349:4;31341:6;31321:33;:::i;:::-;31272:88;;;:::o;31366:75::-;31399:6;31432:2;31426:9;31416:19;;31406:35;:::o;31447:311::-;31524:4;31614:18;31606:6;31603:30;31600:2;;;31636:18;;:::i;:::-;31600:2;31686:4;31678:6;31674:17;31666:25;;31746:4;31740;31736:15;31728:23;;31529:229;;;:::o;31764:311::-;31841:4;31931:18;31923:6;31920:30;31917:2;;;31953:18;;:::i;:::-;31917:2;32003:4;31995:6;31991:17;31983:25;;32063:4;32057;32053:15;32045:23;;31846:229;;;:::o;32081:307::-;32142:4;32232:18;32224:6;32221:30;32218:2;;;32254:18;;:::i;:::-;32218:2;32292:29;32314:6;32292:29;:::i;:::-;32284:37;;32376:4;32370;32366:15;32358:23;;32147:241;;;:::o;32394:308::-;32456:4;32546:18;32538:6;32535:30;32532:2;;;32568:18;;:::i;:::-;32532:2;32606:29;32628:6;32606:29;:::i;:::-;32598:37;;32690:4;32684;32680:15;32672:23;;32461:241;;;:::o;32708:132::-;32775:4;32798:3;32790:11;;32828:4;32823:3;32819:14;32811:22;;32780:60;;;:::o;32846:114::-;32913:6;32947:5;32941:12;32931:22;;32920:40;;;:::o;32966:98::-;33017:6;33051:5;33045:12;33035:22;;33024:40;;;:::o;33070:99::-;33122:6;33156:5;33150:12;33140:22;;33129:40;;;:::o;33175:113::-;33245:4;33277;33272:3;33268:14;33260:22;;33250:38;;;:::o;33294:184::-;33393:11;33427:6;33422:3;33415:19;33467:4;33462:3;33458:14;33443:29;;33405:73;;;;:::o;33484:168::-;33567:11;33601:6;33596:3;33589:19;33641:4;33636:3;33632:14;33617:29;;33579:73;;;;:::o;33658:169::-;33742:11;33776:6;33771:3;33764:19;33816:4;33811:3;33807:14;33792:29;;33754:73;;;;:::o;33833:305::-;33873:3;33892:20;33910:1;33892:20;:::i;:::-;33887:25;;33926:20;33944:1;33926:20;:::i;:::-;33921:25;;34080:1;34012:66;34008:74;34005:1;34002:81;33999:2;;;34086:18;;:::i;:::-;33999:2;34130:1;34127;34123:9;34116:16;;33877:261;;;;:::o;34144:96::-;34181:7;34210:24;34228:5;34210:24;:::i;:::-;34199:35;;34189:51;;;:::o;34246:90::-;34280:7;34323:5;34316:13;34309:21;34298:32;;34288:48;;;:::o;34342:149::-;34378:7;34418:66;34411:5;34407:78;34396:89;;34386:105;;;:::o;34497:126::-;34534:7;34574:42;34567:5;34563:54;34552:65;;34542:81;;;:::o;34629:77::-;34666:7;34695:5;34684:16;;34674:32;;;:::o;34712:154::-;34796:6;34791:3;34786;34773:30;34858:1;34849:6;34844:3;34840:16;34833:27;34763:103;;;:::o;34872:307::-;34940:1;34950:113;34964:6;34961:1;34958:13;34950:113;;;35049:1;35044:3;35040:11;35034:18;35030:1;35025:3;35021:11;35014:39;34986:2;34983:1;34979:10;34974:15;;34950:113;;;35081:6;35078:1;35075:13;35072:2;;;35161:1;35152:6;35147:3;35143:16;35136:27;35072:2;34921:258;;;;:::o;35185:320::-;35229:6;35266:1;35260:4;35256:12;35246:22;;35313:1;35307:4;35303:12;35334:18;35324:2;;35390:4;35382:6;35378:17;35368:27;;35324:2;35452;35444:6;35441:14;35421:18;35418:38;35415:2;;;35471:18;;:::i;:::-;35415:2;35236:269;;;;:::o;35511:281::-;35594:27;35616:4;35594:27;:::i;:::-;35586:6;35582:40;35724:6;35712:10;35709:22;35688:18;35676:10;35673:34;35670:62;35667:2;;;35735:18;;:::i;:::-;35667:2;35775:10;35771:2;35764:22;35554:238;;;:::o;35798:233::-;35837:3;35860:24;35878:5;35860:24;:::i;:::-;35851:33;;35906:66;35899:5;35896:77;35893:2;;;35976:18;;:::i;:::-;35893:2;36023:1;36016:5;36012:13;36005:20;;35841:190;;;:::o;36037:180::-;36085:77;36082:1;36075:88;36182:4;36179:1;36172:15;36206:4;36203:1;36196:15;36223:180;36271:77;36268:1;36261:88;36368:4;36365:1;36358:15;36392:4;36389:1;36382:15;36409:180;36457:77;36454:1;36447:88;36554:4;36551:1;36544:15;36578:4;36575:1;36568:15;36595:183;36630:3;36668:1;36650:16;36647:23;36644:2;;;36706:1;36703;36700;36685:23;36728:34;36759:1;36753:8;36728:34;:::i;:::-;36721:41;;36644:2;36634:144;:::o;36784:102::-;36825:6;36876:2;36872:7;36867:2;36860:5;36856:14;36852:28;36842:38;;36832:54;;;:::o;36892:106::-;36936:8;36985:5;36980:3;36976:15;36955:36;;36945:53;;;:::o;37004:239::-;37144:34;37140:1;37132:6;37128:14;37121:58;37213:22;37208:2;37200:6;37196:15;37189:47;37110:133;:::o;37249:234::-;37389:34;37385:1;37377:6;37373:14;37366:58;37458:17;37453:2;37445:6;37441:15;37434:42;37355:128;:::o;37489:227::-;37629:34;37625:1;37617:6;37613:14;37606:58;37698:10;37693:2;37685:6;37681:15;37674:35;37595:121;:::o;37722:225::-;37862:34;37858:1;37850:6;37846:14;37839:58;37931:8;37926:2;37918:6;37914:15;37907:33;37828:119;:::o;37953:223::-;38093:34;38089:1;38081:6;38077:14;38070:58;38162:6;38157:2;38149:6;38145:15;38138:31;38059:117;:::o;38182:229::-;38322:34;38318:1;38310:6;38306:14;38299:58;38391:12;38386:2;38378:6;38374:15;38367:37;38288:123;:::o;38417:224::-;38557:34;38553:1;38545:6;38541:14;38534:58;38626:7;38621:2;38613:6;38609:15;38602:32;38523:118;:::o;38647:222::-;38787:34;38783:1;38775:6;38771:14;38764:58;38856:5;38851:2;38843:6;38839:15;38832:30;38753:116;:::o;38875:229::-;39015:34;39011:1;39003:6;38999:14;38992:58;39084:12;39079:2;39071:6;39067:15;39060:37;38981:123;:::o;39110:182::-;39250:34;39246:1;39238:6;39234:14;39227:58;39216:76;:::o;39298:227::-;39438:34;39434:1;39426:6;39422:14;39415:58;39507:10;39502:2;39494:6;39490:15;39483:35;39404:121;:::o;39531:228::-;39671:34;39667:1;39659:6;39655:14;39648:58;39740:11;39735:2;39727:6;39723:15;39716:36;39637:122;:::o;39765:228::-;39905:34;39901:1;39893:6;39889:14;39882:58;39974:11;39969:2;39961:6;39957:15;39950:36;39871:122;:::o;39999:227::-;40139:34;40135:1;40127:6;40123:14;40116:58;40208:10;40203:2;40195:6;40191:15;40184:35;40105:121;:::o;40232:220::-;40372:34;40368:1;40360:6;40356:14;40349:58;40441:3;40436:2;40428:6;40424:15;40417:28;40338:114;:::o;40458:711::-;40497:3;40535:4;40517:16;40514:26;40511:2;;;40543:5;;40511:2;40572:20;;:::i;:::-;40647:1;40629:16;40625:24;40622:1;40616:4;40601:49;40680:4;40674:11;40779:16;40772:4;40764:6;40760:17;40757:39;40724:18;40716:6;40713:30;40697:113;40694:2;;;40825:5;;;;40694:2;40871:6;40865:4;40861:17;40907:3;40901:10;40934:18;40926:6;40923:30;40920:2;;;40956:5;;;;;;40920:2;41004:6;40997:4;40992:3;40988:14;40984:27;41063:1;41045:16;41041:24;41035:4;41031:35;41026:3;41023:44;41020:2;;;41070:5;;;;;;;41020:2;41087:57;41135:6;41129:4;41125:17;41117:6;41113:30;41107:4;41087:57;:::i;:::-;41160:3;41153:10;;40501:668;;;;;;;:::o;41175:122::-;41248:24;41266:5;41248:24;:::i;:::-;41241:5;41238:35;41228:2;;41287:1;41284;41277:12;41228:2;41218:79;:::o;41303:116::-;41373:21;41388:5;41373:21;:::i;:::-;41366:5;41363:32;41353:2;;41409:1;41406;41399:12;41353:2;41343:76;:::o;41425:120::-;41497:23;41514:5;41497:23;:::i;:::-;41490:5;41487:34;41477:2;;41535:1;41532;41525:12;41477:2;41467:78;:::o;41551:122::-;41624:24;41642:5;41624:24;:::i;:::-;41617:5;41614:35;41604:2;;41663:1;41660;41653:12;41604:2;41594:79;:::o

Swarm Source

ipfs://a657d2fd554fb7eaa13e0442d340685c4cffca08916455f524c8a22863b30e84
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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