ETH Price: $2,629.15 (-1.65%)

Token

Memories In Ether (MiE)
 

Overview

Max Total Supply

34 MiE

Holders

6

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
bigtrue.eth
Balance
7 MiE
0x3842dbe03ebe865d20d406f441b843dd54208c78
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:
memories

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-30
*/

// SPDX-License-Identifier: MIT

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// 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/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return currentIndex;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert('ERC721A: unable to get token of owner by index');
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        require(owner != address(0), 'ERC721A: balance query for the zero address');
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token');

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, 'ERC721A: approval to current owner');

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            'ERC721A: approve caller is not owner nor approved for all'
        );

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        require(_exists(tokenId), 'ERC721A: approved query for nonexistent token');

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), 'ERC721A: approve to caller');

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: transfer to non ERC721Receiver implementer'
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        require(quantity != 0, 'ERC721A: quantity must be greater than 0');

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe) {
                    require(
                        _checkOnERC721Received(address(0), to, updatedIndex, _data),
                        'ERC721A: transfer to non ERC721Receiver implementer'
                    );
                }

                updatedIndex++;
            }

            currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, prevOwnership.addr);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert('ERC721A: transfer to non ERC721Receiver implementer');
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
// File: memories.sol

// 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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

//newerc.sol
pragma solidity ^0.8.0;


contract memories is ERC721A, Ownable, ReentrancyGuard {
    using Strings for uint256;
    string public uriPrefix = "";
    string public uriSuffix = ".json";
    string public hiddenMetadataUri;
    
    uint256 public cost = 0 ether;
    uint256 public maxSupply = 7777;
    uint256 public maxMintAmountPerTx = 7;
    uint256 public maxLimitPerWallet = 7;

    
    bool public revealed = false;
    bool public paused = true;

    constructor() ERC721A("Memories In Ether", "MiE") {
     setHiddenMetadataUri("https://memoriesinether.com/unrevealedV2.gif");
    }


    function mint(uint256 _mintAmount) public payable nonReentrant {
        uint256 s = totalSupply();
        require(_mintAmount > 0, "Cant mint 0");
        require(balanceOf(msg.sender) + _mintAmount <= maxLimitPerWallet, "Max mint per wallet exceeded!");
        require(s + _mintAmount <= maxSupply, "Cant go over supply");
        require(msg.value >= cost * _mintAmount);
        _safeMint(msg.sender, _mintAmount);
        delete s;
    }

    function gift(uint256[] calldata quantity, address[] calldata recipient)
        external
        onlyOwner
    {
        require(
            quantity.length == recipient.length,
            "Provide quantities and recipients"
        );
        uint256 totalQuantity = 0;
        uint256 s = totalSupply();
        for (uint256 i = 0; i < quantity.length; ++i) {
            totalQuantity += quantity[i];
        }
        require(s + totalQuantity <= maxSupply, "Too many");
        delete totalQuantity;
        for (uint256 i = 0; i < recipient.length; ++i) {
            _safeMint(recipient[i], quantity[i]);
        }
        delete s;
    }

    function tokenURI(uint256 _tokenId)
      public
      view
      virtual
      override
      returns (string memory)
    {
     require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : "";
    }

    function setRevealed(bool _state) public onlyOwner {
     revealed = _state;
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setmaxSupply(uint256 _newMaxSupply) public onlyOwner {
        require(_newMaxSupply <= maxSupply, "Cannot increase max supply");
        maxSupply = _newMaxSupply;
    }

    function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
     hiddenMetadataUri = _hiddenMetadataUri;
    }

    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
     uriPrefix = _uriPrefix;
    }

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
     uriSuffix = _uriSuffix;
    }

    function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
     maxMintAmountPerTx = _maxMintAmountPerTx;
    }

    function setMaxperAddressPublicMint(uint256 _amount) public onlyOwner {
        maxLimitPerWallet = _amount;
    }

    function pause(bool _state) public onlyOwner {
     paused = _state;
    }

    function withdraw() public onlyOwner {
     (bool os, ) = payable(owner()).call{value: address(this).balance}("");
     require(os);
    }

    function _baseURI() internal view virtual override returns (string memory) {
     return uriPrefix;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600990805190602001906200002b9291906200036e565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a9080519060200190620000799291906200036e565b506000600c55611e61600d556007600e556007600f556000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280601181526020017f4d656d6f7269657320496e2045746865720000000000000000000000000000008152506040518060400160405280600381526020017f4d694500000000000000000000000000000000000000000000000000000000008152508160019080519060200190620001579291906200036e565b508060029080519060200190620001709291906200036e565b5050506200019362000187620001cb60201b60201c565b620001d360201b60201c565b6001600881905550620001c56040518060600160405280602c81526020016200527b602c91396200029960201b60201c565b62000506565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a9620001cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002cf6200034460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000328576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031f9062000445565b60405180910390fd5b80600b9080519060200190620003409291906200036e565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200037c9062000478565b90600052602060002090601f016020900481019282620003a05760008555620003ec565b82601f10620003bb57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003eb578251825591602001919060010190620003ce565b5b509050620003fb9190620003ff565b5090565b5b808211156200041a57600081600090555060010162000400565b5090565b60006200042d60208362000467565b91506200043a82620004dd565b602082019050919050565b6000602082019050818103600083015262000460816200041e565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200049157607f821691505b60208210811415620004a857620004a7620004ae565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614d6580620005166000396000f3fe60806040526004361061023b5760003560e01c80635c975abb1161012e578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd1461083a578063d5abeb0114610877578063e0a80853146108a2578063e985e9c5146108cb578063f2fde38b146109085761023b565b8063a0712d6814610778578063a22cb46514610794578063a45ba8e7146107bd578063b071401b146107e8578063b88d4fde146108115761023b565b80637ec4a659116100f25780637ec4a659146106a55780638da5cb5b146106ce57806394354fd0146106f957806395d89b411461072457806396ea3a471461074f5761023b565b80635c975abb146105be57806362b99ad4146105e95780636352211e1461061457806370a0823114610651578063715018a61461068e5761023b565b806323b872dd116101bc5780634f6ccce7116101805780634f6ccce7146104d75780634fdd43cb14610514578063518302271461053d5780635503a0e8146105685780635a0b8b23146105935761023b565b806323b872dd146104085780632f745c59146104315780633ccfd60b1461046e57806342842e0e1461048557806344a0d68a146104ae5761023b565b8063095ea7b311610203578063095ea7b31461033757806313faede61461036057806316ba10e01461038b57806318160ddd146103b4578063228025e8146103df5761023b565b806301ffc9a714610240578063022d67dd1461027d57806302329a29146102a657806306fdde03146102cf578063081812fc146102fa575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613739565b610931565b6040516102749190613db6565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f91906137dc565b610a7b565b005b3480156102b257600080fd5b506102cd60048036038101906102c8919061370c565b610b01565b005b3480156102db57600080fd5b506102e4610b9a565b6040516102f19190613dd1565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c91906137dc565b610c2c565b60405161032e9190613d4f565b60405180910390f35b34801561034357600080fd5b5061035e6004803603810190610359919061364b565b610cb1565b005b34801561036c57600080fd5b50610375610dca565b6040516103829190614133565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613793565b610dd0565b005b3480156103c057600080fd5b506103c9610e66565b6040516103d69190614133565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906137dc565b610e6f565b005b34801561041457600080fd5b5061042f600480360381019061042a9190613535565b610f3a565b005b34801561043d57600080fd5b506104586004803603810190610453919061364b565b610f4a565b6040516104659190614133565b60405180910390f35b34801561047a57600080fd5b5061048361113c565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613535565b611238565b005b3480156104ba57600080fd5b506104d560048036038101906104d091906137dc565b611258565b005b3480156104e357600080fd5b506104fe60048036038101906104f991906137dc565b6112de565b60405161050b9190614133565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613793565b611331565b005b34801561054957600080fd5b506105526113c7565b60405161055f9190613db6565b60405180910390f35b34801561057457600080fd5b5061057d6113da565b60405161058a9190613dd1565b60405180910390f35b34801561059f57600080fd5b506105a8611468565b6040516105b59190614133565b60405180910390f35b3480156105ca57600080fd5b506105d361146e565b6040516105e09190613db6565b60405180910390f35b3480156105f557600080fd5b506105fe611481565b60405161060b9190613dd1565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906137dc565b61150f565b6040516106489190613d4f565b60405180910390f35b34801561065d57600080fd5b50610678600480360381019061067391906134c8565b611525565b6040516106859190614133565b60405180910390f35b34801561069a57600080fd5b506106a361160e565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190613793565b611696565b005b3480156106da57600080fd5b506106e361172c565b6040516106f09190613d4f565b60405180910390f35b34801561070557600080fd5b5061070e611756565b60405161071b9190614133565b60405180910390f35b34801561073057600080fd5b5061073961175c565b6040516107469190613dd1565b60405180910390f35b34801561075b57600080fd5b506107766004803603810190610771919061368b565b6117ee565b005b610792600480360381019061078d91906137dc565b6119d0565b005b3480156107a057600080fd5b506107bb60048036038101906107b6919061360b565b611b49565b005b3480156107c957600080fd5b506107d2611cca565b6040516107df9190613dd1565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906137dc565b611d58565b005b34801561081d57600080fd5b5061083860048036038101906108339190613588565b611dde565b005b34801561084657600080fd5b50610861600480360381019061085c91906137dc565b611e3a565b60405161086e9190613dd1565b60405180910390f35b34801561088357600080fd5b5061088c611f93565b6040516108999190614133565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c4919061370c565b611f99565b005b3480156108d757600080fd5b506108f260048036038101906108ed91906134f5565b612032565b6040516108ff9190613db6565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a91906134c8565b6120c6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109fc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a745750610a73826121be565b5b9050919050565b610a83612228565b73ffffffffffffffffffffffffffffffffffffffff16610aa161172c565b73ffffffffffffffffffffffffffffffffffffffff1614610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90613fb3565b60405180910390fd5b80600f8190555050565b610b09612228565b73ffffffffffffffffffffffffffffffffffffffff16610b2761172c565b73ffffffffffffffffffffffffffffffffffffffff1614610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7490613fb3565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b606060018054610ba990614403565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590614403565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b5050505050905090565b6000610c3782612230565b610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90614113565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cbc8261150f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490614033565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d4c612228565b73ffffffffffffffffffffffffffffffffffffffff161480610d7b5750610d7a81610d75612228565b612032565b5b610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613ef3565b60405180910390fd5b610dc583838361223d565b505050565b600c5481565b610dd8612228565b73ffffffffffffffffffffffffffffffffffffffff16610df661172c565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390613fb3565b60405180910390fd5b80600a9080519060200190610e629291906131f6565b5050565b60008054905090565b610e77612228565b73ffffffffffffffffffffffffffffffffffffffff16610e9561172c565b73ffffffffffffffffffffffffffffffffffffffff1614610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290613fb3565b60405180910390fd5b600d54811115610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790613f13565b60405180910390fd5b80600d8190555050565b610f458383836122ef565b505050565b6000610f5583611525565b8210610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613df3565b60405180910390fd5b6000610fa0610e66565b905060008060005b838110156110fa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461109a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ec57868414156110e3578195505050505050611136565b83806001019450505b508080600101915050610fa8565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d906140b3565b60405180910390fd5b92915050565b611144612228565b73ffffffffffffffffffffffffffffffffffffffff1661116261172c565b73ffffffffffffffffffffffffffffffffffffffff16146111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af90613fb3565b60405180910390fd5b60006111c261172c565b73ffffffffffffffffffffffffffffffffffffffff16476040516111e590613d3a565b60006040518083038185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b505090508061123557600080fd5b50565b61125383838360405180602001604052806000815250611dde565b505050565b611260612228565b73ffffffffffffffffffffffffffffffffffffffff1661127e61172c565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90613fb3565b60405180910390fd5b80600c8190555050565b60006112e8610e66565b8210611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090613e73565b60405180910390fd5b819050919050565b611339612228565b73ffffffffffffffffffffffffffffffffffffffff1661135761172c565b73ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490613fb3565b60405180910390fd5b80600b90805190602001906113c39291906131f6565b5050565b601060009054906101000a900460ff1681565b600a80546113e790614403565b80601f016020809104026020016040519081016040528092919081815260200182805461141390614403565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b505050505081565b600f5481565b601060019054906101000a900460ff1681565b6009805461148e90614403565b80601f01602080910402602001604051908101604052809291908181526020018280546114ba90614403565b80156115075780601f106114dc57610100808354040283529160200191611507565b820191906000526020600020905b8154815290600101906020018083116114ea57829003601f168201915b505050505081565b600061151a8261282f565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613f33565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611616612228565b73ffffffffffffffffffffffffffffffffffffffff1661163461172c565b73ffffffffffffffffffffffffffffffffffffffff161461168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168190613fb3565b60405180910390fd5b61169460006129c9565b565b61169e612228565b73ffffffffffffffffffffffffffffffffffffffff166116bc61172c565b73ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990613fb3565b60405180910390fd5b80600990805190602001906117289291906131f6565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606002805461176b90614403565b80601f016020809104026020016040519081016040528092919081815260200182805461179790614403565b80156117e45780601f106117b9576101008083540402835291602001916117e4565b820191906000526020600020905b8154815290600101906020018083116117c757829003601f168201915b5050505050905090565b6117f6612228565b73ffffffffffffffffffffffffffffffffffffffff1661181461172c565b73ffffffffffffffffffffffffffffffffffffffff161461186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613fb3565b60405180910390fd5b8181905084849050146118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990613eb3565b60405180910390fd5b6000806118bd610e66565b905060005b86869050811015611905578686828181106118e0576118df61456d565b5b90506020020135836118f29190614238565b9250806118fe90614466565b90506118c2565b50600d5482826119159190614238565b1115611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613f93565b60405180910390fd5b6000915060005b848490508110156119c3576119b285858381811061197e5761197d61456d565b5b905060200201602081019061199391906134c8565b8888848181106119a6576119a561456d565b5b90506020020135612a8f565b806119bc90614466565b905061195d565b5060009050505050505050565b60026008541415611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d906140d3565b60405180910390fd5b60026008819055506000611a28610e66565b905060008211611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613e13565b60405180910390fd5b600f5482611a7a33611525565b611a849190614238565b1115611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc90613ed3565b60405180910390fd5b600d548282611ad49190614238565b1115611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c90613f53565b60405180910390fd5b81600c54611b2391906142bf565b341015611b2f57600080fd5b611b393383612a8f565b6000905050600160088190555050565b611b51612228565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690613ff3565b60405180910390fd5b8060066000611bcc612228565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c79612228565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cbe9190613db6565b60405180910390a35050565b600b8054611cd790614403565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0390614403565b8015611d505780601f10611d2557610100808354040283529160200191611d50565b820191906000526020600020905b815481529060010190602001808311611d3357829003601f168201915b505050505081565b611d60612228565b73ffffffffffffffffffffffffffffffffffffffff16611d7e61172c565b73ffffffffffffffffffffffffffffffffffffffff1614611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb90613fb3565b60405180910390fd5b80600e8190555050565b611de98484846122ef565b611df584848484612aad565b611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614053565b60405180910390fd5b50505050565b6060611e4582612230565b611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613fd3565b60405180910390fd5b60001515601060009054906101000a900460ff1615151415611f3257600b8054611ead90614403565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed990614403565b8015611f265780601f10611efb57610100808354040283529160200191611f26565b820191906000526020600020905b815481529060010190602001808311611f0957829003601f168201915b50505050509050611f8e565b6000611f3c612c44565b90506000815111611f5c5760405180602001604052806000815250611f8a565b80611f6684612cd6565b600a604051602001611f7a93929190613d09565b6040516020818303038152906040525b9150505b919050565b600d5481565b611fa1612228565b73ffffffffffffffffffffffffffffffffffffffff16611fbf61172c565b73ffffffffffffffffffffffffffffffffffffffff1614612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90613fb3565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120ce612228565b73ffffffffffffffffffffffffffffffffffffffff166120ec61172c565b73ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213990613fb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990613e33565b60405180910390fd5b6121bb816129c9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006122fa8261282f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612321612228565b73ffffffffffffffffffffffffffffffffffffffff16148061237d5750612346612228565b73ffffffffffffffffffffffffffffffffffffffff1661236584610c2c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061239957506123988260000151612393612228565b612032565b5b9050806123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290614013565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244490613f73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b490613e93565b60405180910390fd5b6124ca8585856001612e37565b6124da600084846000015161223d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127bf5761271e81612230565b156127be5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128288585856001612e3d565b5050505050565b61283761327c565b61284082612230565b61287f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287690613e53565b60405180910390fd5b60008290505b60008110612988576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129795780925050506129c4565b50808060019003915050612885565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb906140f3565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612aa9828260405180602001604052806000815250612e43565b5050565b6000612ace8473ffffffffffffffffffffffffffffffffffffffff16612e55565b15612c37578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612af7612228565b8786866040518563ffffffff1660e01b8152600401612b199493929190613d6a565b602060405180830381600087803b158015612b3357600080fd5b505af1925050508015612b6457506040513d601f19601f82011682018060405250810190612b619190613766565b60015b612be7573d8060008114612b94576040519150601f19603f3d011682016040523d82523d6000602084013e612b99565b606091505b50600081511415612bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd690614053565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c3c565b600190505b949350505050565b606060098054612c5390614403565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7f90614403565b8015612ccc5780601f10612ca157610100808354040283529160200191612ccc565b820191906000526020600020905b815481529060010190602001808311612caf57829003601f168201915b5050505050905090565b60606000821415612d1e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e32565b600082905060005b60008214612d50578080612d3990614466565b915050600a82612d49919061428e565b9150612d26565b60008167ffffffffffffffff811115612d6c57612d6b61459c565b5b6040519080825280601f01601f191660200182016040528015612d9e5781602001600182028036833780820191505090505b5090505b60008514612e2b57600182612db79190614319565b9150600a85612dc691906144af565b6030612dd29190614238565b60f81b818381518110612de857612de761456d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e24919061428e565b9450612da2565b8093505050505b919050565b50505050565b50505050565b612e508383836001612e78565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee590614073565b60405180910390fd5b6000841415612f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2990614093565b60405180910390fd5b612f3f6000868387612e37565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156131d957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156131c4576131846000888488612aad565b6131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90614053565b60405180910390fd5b5b8180600101925050808060010191505061310d565b5080600081905550506131ef6000868387612e3d565b5050505050565b82805461320290614403565b90600052602060002090601f016020900481019282613224576000855561326b565b82601f1061323d57805160ff191683800117855561326b565b8280016001018555821561326b579182015b8281111561326a57825182559160200191906001019061324f565b5b50905061327891906132b6565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156132cf5760008160009055506001016132b7565b5090565b60006132e66132e184614173565b61414e565b905082815260208101848484011115613302576133016145da565b5b61330d8482856143c1565b509392505050565b6000613328613323846141a4565b61414e565b905082815260208101848484011115613344576133436145da565b5b61334f8482856143c1565b509392505050565b60008135905061336681614cd3565b92915050565b60008083601f840112613382576133816145d0565b5b8235905067ffffffffffffffff81111561339f5761339e6145cb565b5b6020830191508360208202830111156133bb576133ba6145d5565b5b9250929050565b60008083601f8401126133d8576133d76145d0565b5b8235905067ffffffffffffffff8111156133f5576133f46145cb565b5b602083019150836020820283011115613411576134106145d5565b5b9250929050565b60008135905061342781614cea565b92915050565b60008135905061343c81614d01565b92915050565b60008151905061345181614d01565b92915050565b600082601f83011261346c5761346b6145d0565b5b813561347c8482602086016132d3565b91505092915050565b600082601f83011261349a576134996145d0565b5b81356134aa848260208601613315565b91505092915050565b6000813590506134c281614d18565b92915050565b6000602082840312156134de576134dd6145e4565b5b60006134ec84828501613357565b91505092915050565b6000806040838503121561350c5761350b6145e4565b5b600061351a85828601613357565b925050602061352b85828601613357565b9150509250929050565b60008060006060848603121561354e5761354d6145e4565b5b600061355c86828701613357565b935050602061356d86828701613357565b925050604061357e868287016134b3565b9150509250925092565b600080600080608085870312156135a2576135a16145e4565b5b60006135b087828801613357565b94505060206135c187828801613357565b93505060406135d2878288016134b3565b925050606085013567ffffffffffffffff8111156135f3576135f26145df565b5b6135ff87828801613457565b91505092959194509250565b60008060408385031215613622576136216145e4565b5b600061363085828601613357565b925050602061364185828601613418565b9150509250929050565b60008060408385031215613662576136616145e4565b5b600061367085828601613357565b9250506020613681858286016134b3565b9150509250929050565b600080600080604085870312156136a5576136a46145e4565b5b600085013567ffffffffffffffff8111156136c3576136c26145df565b5b6136cf878288016133c2565b9450945050602085013567ffffffffffffffff8111156136f2576136f16145df565b5b6136fe8782880161336c565b925092505092959194509250565b600060208284031215613722576137216145e4565b5b600061373084828501613418565b91505092915050565b60006020828403121561374f5761374e6145e4565b5b600061375d8482850161342d565b91505092915050565b60006020828403121561377c5761377b6145e4565b5b600061378a84828501613442565b91505092915050565b6000602082840312156137a9576137a86145e4565b5b600082013567ffffffffffffffff8111156137c7576137c66145df565b5b6137d384828501613485565b91505092915050565b6000602082840312156137f2576137f16145e4565b5b6000613800848285016134b3565b91505092915050565b6138128161434d565b82525050565b6138218161435f565b82525050565b6000613832826141ea565b61383c8185614200565b935061384c8185602086016143d0565b613855816145e9565b840191505092915050565b600061386b826141f5565b613875818561421c565b93506138858185602086016143d0565b61388e816145e9565b840191505092915050565b60006138a4826141f5565b6138ae818561422d565b93506138be8185602086016143d0565b80840191505092915050565b600081546138d781614403565b6138e1818661422d565b945060018216600081146138fc576001811461390d57613940565b60ff19831686528186019350613940565b613916856141d5565b60005b8381101561393857815481890152600182019150602081019050613919565b838801955050505b50505092915050565b600061395660228361421c565b9150613961826145fa565b604082019050919050565b6000613979600b8361421c565b915061398482614649565b602082019050919050565b600061399c60268361421c565b91506139a782614672565b604082019050919050565b60006139bf602a8361421c565b91506139ca826146c1565b604082019050919050565b60006139e260238361421c565b91506139ed82614710565b604082019050919050565b6000613a0560258361421c565b9150613a108261475f565b604082019050919050565b6000613a2860218361421c565b9150613a33826147ae565b604082019050919050565b6000613a4b601d8361421c565b9150613a56826147fd565b602082019050919050565b6000613a6e60398361421c565b9150613a7982614826565b604082019050919050565b6000613a91601a8361421c565b9150613a9c82614875565b602082019050919050565b6000613ab4602b8361421c565b9150613abf8261489e565b604082019050919050565b6000613ad760138361421c565b9150613ae2826148ed565b602082019050919050565b6000613afa60268361421c565b9150613b0582614916565b604082019050919050565b6000613b1d60088361421c565b9150613b2882614965565b602082019050919050565b6000613b4060208361421c565b9150613b4b8261498e565b602082019050919050565b6000613b63602f8361421c565b9150613b6e826149b7565b604082019050919050565b6000613b86601a8361421c565b9150613b9182614a06565b602082019050919050565b6000613ba960328361421c565b9150613bb482614a2f565b604082019050919050565b6000613bcc60228361421c565b9150613bd782614a7e565b604082019050919050565b6000613bef600083614211565b9150613bfa82614acd565b600082019050919050565b6000613c1260338361421c565b9150613c1d82614ad0565b604082019050919050565b6000613c3560218361421c565b9150613c4082614b1f565b604082019050919050565b6000613c5860288361421c565b9150613c6382614b6e565b604082019050919050565b6000613c7b602e8361421c565b9150613c8682614bbd565b604082019050919050565b6000613c9e601f8361421c565b9150613ca982614c0c565b602082019050919050565b6000613cc1602f8361421c565b9150613ccc82614c35565b604082019050919050565b6000613ce4602d8361421c565b9150613cef82614c84565b604082019050919050565b613d03816143b7565b82525050565b6000613d158286613899565b9150613d218285613899565b9150613d2d82846138ca565b9150819050949350505050565b6000613d4582613be2565b9150819050919050565b6000602082019050613d646000830184613809565b92915050565b6000608082019050613d7f6000830187613809565b613d8c6020830186613809565b613d996040830185613cfa565b8181036060830152613dab8184613827565b905095945050505050565b6000602082019050613dcb6000830184613818565b92915050565b60006020820190508181036000830152613deb8184613860565b905092915050565b60006020820190508181036000830152613e0c81613949565b9050919050565b60006020820190508181036000830152613e2c8161396c565b9050919050565b60006020820190508181036000830152613e4c8161398f565b9050919050565b60006020820190508181036000830152613e6c816139b2565b9050919050565b60006020820190508181036000830152613e8c816139d5565b9050919050565b60006020820190508181036000830152613eac816139f8565b9050919050565b60006020820190508181036000830152613ecc81613a1b565b9050919050565b60006020820190508181036000830152613eec81613a3e565b9050919050565b60006020820190508181036000830152613f0c81613a61565b9050919050565b60006020820190508181036000830152613f2c81613a84565b9050919050565b60006020820190508181036000830152613f4c81613aa7565b9050919050565b60006020820190508181036000830152613f6c81613aca565b9050919050565b60006020820190508181036000830152613f8c81613aed565b9050919050565b60006020820190508181036000830152613fac81613b10565b9050919050565b60006020820190508181036000830152613fcc81613b33565b9050919050565b60006020820190508181036000830152613fec81613b56565b9050919050565b6000602082019050818103600083015261400c81613b79565b9050919050565b6000602082019050818103600083015261402c81613b9c565b9050919050565b6000602082019050818103600083015261404c81613bbf565b9050919050565b6000602082019050818103600083015261406c81613c05565b9050919050565b6000602082019050818103600083015261408c81613c28565b9050919050565b600060208201905081810360008301526140ac81613c4b565b9050919050565b600060208201905081810360008301526140cc81613c6e565b9050919050565b600060208201905081810360008301526140ec81613c91565b9050919050565b6000602082019050818103600083015261410c81613cb4565b9050919050565b6000602082019050818103600083015261412c81613cd7565b9050919050565b60006020820190506141486000830184613cfa565b92915050565b6000614158614169565b90506141648282614435565b919050565b6000604051905090565b600067ffffffffffffffff82111561418e5761418d61459c565b5b614197826145e9565b9050602081019050919050565b600067ffffffffffffffff8211156141bf576141be61459c565b5b6141c8826145e9565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614243826143b7565b915061424e836143b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614283576142826144e0565b5b828201905092915050565b6000614299826143b7565b91506142a4836143b7565b9250826142b4576142b361450f565b5b828204905092915050565b60006142ca826143b7565b91506142d5836143b7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561430e5761430d6144e0565b5b828202905092915050565b6000614324826143b7565b915061432f836143b7565b925082821015614342576143416144e0565b5b828203905092915050565b600061435882614397565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143ee5780820151818401526020810190506143d3565b838111156143fd576000848401525b50505050565b6000600282049050600182168061441b57607f821691505b6020821081141561442f5761442e61453e565b5b50919050565b61443e826145e9565b810181811067ffffffffffffffff8211171561445d5761445c61459c565b5b80604052505050565b6000614471826143b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144a4576144a36144e0565b5b600182019050919050565b60006144ba826143b7565b91506144c5836143b7565b9250826144d5576144d461450f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f50726f76696465207175616e74697469657320616e6420726563697069656e7460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e74207065722077616c6c657420657863656564656421000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614cdc8161434d565b8114614ce757600080fd5b50565b614cf38161435f565b8114614cfe57600080fd5b50565b614d0a8161436b565b8114614d1557600080fd5b50565b614d21816143b7565b8114614d2c57600080fd5b5056fea26469706673582212206a88bd1f4d9bbe22b4fdadf618970319b4547eb7a5ad7e210aaf05b5d01a880c64736f6c6343000807003368747470733a2f2f6d656d6f72696573696e65746865722e636f6d2f756e72657665616c656456322e676966

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80635c975abb1161012e578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd1461083a578063d5abeb0114610877578063e0a80853146108a2578063e985e9c5146108cb578063f2fde38b146109085761023b565b8063a0712d6814610778578063a22cb46514610794578063a45ba8e7146107bd578063b071401b146107e8578063b88d4fde146108115761023b565b80637ec4a659116100f25780637ec4a659146106a55780638da5cb5b146106ce57806394354fd0146106f957806395d89b411461072457806396ea3a471461074f5761023b565b80635c975abb146105be57806362b99ad4146105e95780636352211e1461061457806370a0823114610651578063715018a61461068e5761023b565b806323b872dd116101bc5780634f6ccce7116101805780634f6ccce7146104d75780634fdd43cb14610514578063518302271461053d5780635503a0e8146105685780635a0b8b23146105935761023b565b806323b872dd146104085780632f745c59146104315780633ccfd60b1461046e57806342842e0e1461048557806344a0d68a146104ae5761023b565b8063095ea7b311610203578063095ea7b31461033757806313faede61461036057806316ba10e01461038b57806318160ddd146103b4578063228025e8146103df5761023b565b806301ffc9a714610240578063022d67dd1461027d57806302329a29146102a657806306fdde03146102cf578063081812fc146102fa575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613739565b610931565b6040516102749190613db6565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f91906137dc565b610a7b565b005b3480156102b257600080fd5b506102cd60048036038101906102c8919061370c565b610b01565b005b3480156102db57600080fd5b506102e4610b9a565b6040516102f19190613dd1565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c91906137dc565b610c2c565b60405161032e9190613d4f565b60405180910390f35b34801561034357600080fd5b5061035e6004803603810190610359919061364b565b610cb1565b005b34801561036c57600080fd5b50610375610dca565b6040516103829190614133565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613793565b610dd0565b005b3480156103c057600080fd5b506103c9610e66565b6040516103d69190614133565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906137dc565b610e6f565b005b34801561041457600080fd5b5061042f600480360381019061042a9190613535565b610f3a565b005b34801561043d57600080fd5b506104586004803603810190610453919061364b565b610f4a565b6040516104659190614133565b60405180910390f35b34801561047a57600080fd5b5061048361113c565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613535565b611238565b005b3480156104ba57600080fd5b506104d560048036038101906104d091906137dc565b611258565b005b3480156104e357600080fd5b506104fe60048036038101906104f991906137dc565b6112de565b60405161050b9190614133565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613793565b611331565b005b34801561054957600080fd5b506105526113c7565b60405161055f9190613db6565b60405180910390f35b34801561057457600080fd5b5061057d6113da565b60405161058a9190613dd1565b60405180910390f35b34801561059f57600080fd5b506105a8611468565b6040516105b59190614133565b60405180910390f35b3480156105ca57600080fd5b506105d361146e565b6040516105e09190613db6565b60405180910390f35b3480156105f557600080fd5b506105fe611481565b60405161060b9190613dd1565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906137dc565b61150f565b6040516106489190613d4f565b60405180910390f35b34801561065d57600080fd5b50610678600480360381019061067391906134c8565b611525565b6040516106859190614133565b60405180910390f35b34801561069a57600080fd5b506106a361160e565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190613793565b611696565b005b3480156106da57600080fd5b506106e361172c565b6040516106f09190613d4f565b60405180910390f35b34801561070557600080fd5b5061070e611756565b60405161071b9190614133565b60405180910390f35b34801561073057600080fd5b5061073961175c565b6040516107469190613dd1565b60405180910390f35b34801561075b57600080fd5b506107766004803603810190610771919061368b565b6117ee565b005b610792600480360381019061078d91906137dc565b6119d0565b005b3480156107a057600080fd5b506107bb60048036038101906107b6919061360b565b611b49565b005b3480156107c957600080fd5b506107d2611cca565b6040516107df9190613dd1565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906137dc565b611d58565b005b34801561081d57600080fd5b5061083860048036038101906108339190613588565b611dde565b005b34801561084657600080fd5b50610861600480360381019061085c91906137dc565b611e3a565b60405161086e9190613dd1565b60405180910390f35b34801561088357600080fd5b5061088c611f93565b6040516108999190614133565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c4919061370c565b611f99565b005b3480156108d757600080fd5b506108f260048036038101906108ed91906134f5565b612032565b6040516108ff9190613db6565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a91906134c8565b6120c6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109fc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a745750610a73826121be565b5b9050919050565b610a83612228565b73ffffffffffffffffffffffffffffffffffffffff16610aa161172c565b73ffffffffffffffffffffffffffffffffffffffff1614610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90613fb3565b60405180910390fd5b80600f8190555050565b610b09612228565b73ffffffffffffffffffffffffffffffffffffffff16610b2761172c565b73ffffffffffffffffffffffffffffffffffffffff1614610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7490613fb3565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b606060018054610ba990614403565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590614403565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b5050505050905090565b6000610c3782612230565b610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90614113565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cbc8261150f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490614033565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d4c612228565b73ffffffffffffffffffffffffffffffffffffffff161480610d7b5750610d7a81610d75612228565b612032565b5b610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613ef3565b60405180910390fd5b610dc583838361223d565b505050565b600c5481565b610dd8612228565b73ffffffffffffffffffffffffffffffffffffffff16610df661172c565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390613fb3565b60405180910390fd5b80600a9080519060200190610e629291906131f6565b5050565b60008054905090565b610e77612228565b73ffffffffffffffffffffffffffffffffffffffff16610e9561172c565b73ffffffffffffffffffffffffffffffffffffffff1614610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290613fb3565b60405180910390fd5b600d54811115610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790613f13565b60405180910390fd5b80600d8190555050565b610f458383836122ef565b505050565b6000610f5583611525565b8210610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613df3565b60405180910390fd5b6000610fa0610e66565b905060008060005b838110156110fa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461109a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ec57868414156110e3578195505050505050611136565b83806001019450505b508080600101915050610fa8565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d906140b3565b60405180910390fd5b92915050565b611144612228565b73ffffffffffffffffffffffffffffffffffffffff1661116261172c565b73ffffffffffffffffffffffffffffffffffffffff16146111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af90613fb3565b60405180910390fd5b60006111c261172c565b73ffffffffffffffffffffffffffffffffffffffff16476040516111e590613d3a565b60006040518083038185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b505090508061123557600080fd5b50565b61125383838360405180602001604052806000815250611dde565b505050565b611260612228565b73ffffffffffffffffffffffffffffffffffffffff1661127e61172c565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90613fb3565b60405180910390fd5b80600c8190555050565b60006112e8610e66565b8210611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090613e73565b60405180910390fd5b819050919050565b611339612228565b73ffffffffffffffffffffffffffffffffffffffff1661135761172c565b73ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490613fb3565b60405180910390fd5b80600b90805190602001906113c39291906131f6565b5050565b601060009054906101000a900460ff1681565b600a80546113e790614403565b80601f016020809104026020016040519081016040528092919081815260200182805461141390614403565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b505050505081565b600f5481565b601060019054906101000a900460ff1681565b6009805461148e90614403565b80601f01602080910402602001604051908101604052809291908181526020018280546114ba90614403565b80156115075780601f106114dc57610100808354040283529160200191611507565b820191906000526020600020905b8154815290600101906020018083116114ea57829003601f168201915b505050505081565b600061151a8261282f565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613f33565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611616612228565b73ffffffffffffffffffffffffffffffffffffffff1661163461172c565b73ffffffffffffffffffffffffffffffffffffffff161461168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168190613fb3565b60405180910390fd5b61169460006129c9565b565b61169e612228565b73ffffffffffffffffffffffffffffffffffffffff166116bc61172c565b73ffffffffffffffffffffffffffffffffffffffff1614611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990613fb3565b60405180910390fd5b80600990805190602001906117289291906131f6565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606002805461176b90614403565b80601f016020809104026020016040519081016040528092919081815260200182805461179790614403565b80156117e45780601f106117b9576101008083540402835291602001916117e4565b820191906000526020600020905b8154815290600101906020018083116117c757829003601f168201915b5050505050905090565b6117f6612228565b73ffffffffffffffffffffffffffffffffffffffff1661181461172c565b73ffffffffffffffffffffffffffffffffffffffff161461186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613fb3565b60405180910390fd5b8181905084849050146118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990613eb3565b60405180910390fd5b6000806118bd610e66565b905060005b86869050811015611905578686828181106118e0576118df61456d565b5b90506020020135836118f29190614238565b9250806118fe90614466565b90506118c2565b50600d5482826119159190614238565b1115611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613f93565b60405180910390fd5b6000915060005b848490508110156119c3576119b285858381811061197e5761197d61456d565b5b905060200201602081019061199391906134c8565b8888848181106119a6576119a561456d565b5b90506020020135612a8f565b806119bc90614466565b905061195d565b5060009050505050505050565b60026008541415611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d906140d3565b60405180910390fd5b60026008819055506000611a28610e66565b905060008211611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613e13565b60405180910390fd5b600f5482611a7a33611525565b611a849190614238565b1115611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc90613ed3565b60405180910390fd5b600d548282611ad49190614238565b1115611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c90613f53565b60405180910390fd5b81600c54611b2391906142bf565b341015611b2f57600080fd5b611b393383612a8f565b6000905050600160088190555050565b611b51612228565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690613ff3565b60405180910390fd5b8060066000611bcc612228565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c79612228565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cbe9190613db6565b60405180910390a35050565b600b8054611cd790614403565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0390614403565b8015611d505780601f10611d2557610100808354040283529160200191611d50565b820191906000526020600020905b815481529060010190602001808311611d3357829003601f168201915b505050505081565b611d60612228565b73ffffffffffffffffffffffffffffffffffffffff16611d7e61172c565b73ffffffffffffffffffffffffffffffffffffffff1614611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb90613fb3565b60405180910390fd5b80600e8190555050565b611de98484846122ef565b611df584848484612aad565b611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614053565b60405180910390fd5b50505050565b6060611e4582612230565b611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613fd3565b60405180910390fd5b60001515601060009054906101000a900460ff1615151415611f3257600b8054611ead90614403565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed990614403565b8015611f265780601f10611efb57610100808354040283529160200191611f26565b820191906000526020600020905b815481529060010190602001808311611f0957829003601f168201915b50505050509050611f8e565b6000611f3c612c44565b90506000815111611f5c5760405180602001604052806000815250611f8a565b80611f6684612cd6565b600a604051602001611f7a93929190613d09565b6040516020818303038152906040525b9150505b919050565b600d5481565b611fa1612228565b73ffffffffffffffffffffffffffffffffffffffff16611fbf61172c565b73ffffffffffffffffffffffffffffffffffffffff1614612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90613fb3565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120ce612228565b73ffffffffffffffffffffffffffffffffffffffff166120ec61172c565b73ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213990613fb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990613e33565b60405180910390fd5b6121bb816129c9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006122fa8261282f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612321612228565b73ffffffffffffffffffffffffffffffffffffffff16148061237d5750612346612228565b73ffffffffffffffffffffffffffffffffffffffff1661236584610c2c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061239957506123988260000151612393612228565b612032565b5b9050806123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290614013565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244490613f73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b490613e93565b60405180910390fd5b6124ca8585856001612e37565b6124da600084846000015161223d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127bf5761271e81612230565b156127be5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128288585856001612e3d565b5050505050565b61283761327c565b61284082612230565b61287f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287690613e53565b60405180910390fd5b60008290505b60008110612988576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129795780925050506129c4565b50808060019003915050612885565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb906140f3565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612aa9828260405180602001604052806000815250612e43565b5050565b6000612ace8473ffffffffffffffffffffffffffffffffffffffff16612e55565b15612c37578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612af7612228565b8786866040518563ffffffff1660e01b8152600401612b199493929190613d6a565b602060405180830381600087803b158015612b3357600080fd5b505af1925050508015612b6457506040513d601f19601f82011682018060405250810190612b619190613766565b60015b612be7573d8060008114612b94576040519150601f19603f3d011682016040523d82523d6000602084013e612b99565b606091505b50600081511415612bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd690614053565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c3c565b600190505b949350505050565b606060098054612c5390614403565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7f90614403565b8015612ccc5780601f10612ca157610100808354040283529160200191612ccc565b820191906000526020600020905b815481529060010190602001808311612caf57829003601f168201915b5050505050905090565b60606000821415612d1e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e32565b600082905060005b60008214612d50578080612d3990614466565b915050600a82612d49919061428e565b9150612d26565b60008167ffffffffffffffff811115612d6c57612d6b61459c565b5b6040519080825280601f01601f191660200182016040528015612d9e5781602001600182028036833780820191505090505b5090505b60008514612e2b57600182612db79190614319565b9150600a85612dc691906144af565b6030612dd29190614238565b60f81b818381518110612de857612de761456d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e24919061428e565b9450612da2565b8093505050505b919050565b50505050565b50505050565b612e508383836001612e78565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee590614073565b60405180910390fd5b6000841415612f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2990614093565b60405180910390fd5b612f3f6000868387612e37565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156131d957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156131c4576131846000888488612aad565b6131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90614053565b60405180910390fd5b5b8180600101925050808060010191505061310d565b5080600081905550506131ef6000868387612e3d565b5050505050565b82805461320290614403565b90600052602060002090601f016020900481019282613224576000855561326b565b82601f1061323d57805160ff191683800117855561326b565b8280016001018555821561326b579182015b8281111561326a57825182559160200191906001019061324f565b5b50905061327891906132b6565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156132cf5760008160009055506001016132b7565b5090565b60006132e66132e184614173565b61414e565b905082815260208101848484011115613302576133016145da565b5b61330d8482856143c1565b509392505050565b6000613328613323846141a4565b61414e565b905082815260208101848484011115613344576133436145da565b5b61334f8482856143c1565b509392505050565b60008135905061336681614cd3565b92915050565b60008083601f840112613382576133816145d0565b5b8235905067ffffffffffffffff81111561339f5761339e6145cb565b5b6020830191508360208202830111156133bb576133ba6145d5565b5b9250929050565b60008083601f8401126133d8576133d76145d0565b5b8235905067ffffffffffffffff8111156133f5576133f46145cb565b5b602083019150836020820283011115613411576134106145d5565b5b9250929050565b60008135905061342781614cea565b92915050565b60008135905061343c81614d01565b92915050565b60008151905061345181614d01565b92915050565b600082601f83011261346c5761346b6145d0565b5b813561347c8482602086016132d3565b91505092915050565b600082601f83011261349a576134996145d0565b5b81356134aa848260208601613315565b91505092915050565b6000813590506134c281614d18565b92915050565b6000602082840312156134de576134dd6145e4565b5b60006134ec84828501613357565b91505092915050565b6000806040838503121561350c5761350b6145e4565b5b600061351a85828601613357565b925050602061352b85828601613357565b9150509250929050565b60008060006060848603121561354e5761354d6145e4565b5b600061355c86828701613357565b935050602061356d86828701613357565b925050604061357e868287016134b3565b9150509250925092565b600080600080608085870312156135a2576135a16145e4565b5b60006135b087828801613357565b94505060206135c187828801613357565b93505060406135d2878288016134b3565b925050606085013567ffffffffffffffff8111156135f3576135f26145df565b5b6135ff87828801613457565b91505092959194509250565b60008060408385031215613622576136216145e4565b5b600061363085828601613357565b925050602061364185828601613418565b9150509250929050565b60008060408385031215613662576136616145e4565b5b600061367085828601613357565b9250506020613681858286016134b3565b9150509250929050565b600080600080604085870312156136a5576136a46145e4565b5b600085013567ffffffffffffffff8111156136c3576136c26145df565b5b6136cf878288016133c2565b9450945050602085013567ffffffffffffffff8111156136f2576136f16145df565b5b6136fe8782880161336c565b925092505092959194509250565b600060208284031215613722576137216145e4565b5b600061373084828501613418565b91505092915050565b60006020828403121561374f5761374e6145e4565b5b600061375d8482850161342d565b91505092915050565b60006020828403121561377c5761377b6145e4565b5b600061378a84828501613442565b91505092915050565b6000602082840312156137a9576137a86145e4565b5b600082013567ffffffffffffffff8111156137c7576137c66145df565b5b6137d384828501613485565b91505092915050565b6000602082840312156137f2576137f16145e4565b5b6000613800848285016134b3565b91505092915050565b6138128161434d565b82525050565b6138218161435f565b82525050565b6000613832826141ea565b61383c8185614200565b935061384c8185602086016143d0565b613855816145e9565b840191505092915050565b600061386b826141f5565b613875818561421c565b93506138858185602086016143d0565b61388e816145e9565b840191505092915050565b60006138a4826141f5565b6138ae818561422d565b93506138be8185602086016143d0565b80840191505092915050565b600081546138d781614403565b6138e1818661422d565b945060018216600081146138fc576001811461390d57613940565b60ff19831686528186019350613940565b613916856141d5565b60005b8381101561393857815481890152600182019150602081019050613919565b838801955050505b50505092915050565b600061395660228361421c565b9150613961826145fa565b604082019050919050565b6000613979600b8361421c565b915061398482614649565b602082019050919050565b600061399c60268361421c565b91506139a782614672565b604082019050919050565b60006139bf602a8361421c565b91506139ca826146c1565b604082019050919050565b60006139e260238361421c565b91506139ed82614710565b604082019050919050565b6000613a0560258361421c565b9150613a108261475f565b604082019050919050565b6000613a2860218361421c565b9150613a33826147ae565b604082019050919050565b6000613a4b601d8361421c565b9150613a56826147fd565b602082019050919050565b6000613a6e60398361421c565b9150613a7982614826565b604082019050919050565b6000613a91601a8361421c565b9150613a9c82614875565b602082019050919050565b6000613ab4602b8361421c565b9150613abf8261489e565b604082019050919050565b6000613ad760138361421c565b9150613ae2826148ed565b602082019050919050565b6000613afa60268361421c565b9150613b0582614916565b604082019050919050565b6000613b1d60088361421c565b9150613b2882614965565b602082019050919050565b6000613b4060208361421c565b9150613b4b8261498e565b602082019050919050565b6000613b63602f8361421c565b9150613b6e826149b7565b604082019050919050565b6000613b86601a8361421c565b9150613b9182614a06565b602082019050919050565b6000613ba960328361421c565b9150613bb482614a2f565b604082019050919050565b6000613bcc60228361421c565b9150613bd782614a7e565b604082019050919050565b6000613bef600083614211565b9150613bfa82614acd565b600082019050919050565b6000613c1260338361421c565b9150613c1d82614ad0565b604082019050919050565b6000613c3560218361421c565b9150613c4082614b1f565b604082019050919050565b6000613c5860288361421c565b9150613c6382614b6e565b604082019050919050565b6000613c7b602e8361421c565b9150613c8682614bbd565b604082019050919050565b6000613c9e601f8361421c565b9150613ca982614c0c565b602082019050919050565b6000613cc1602f8361421c565b9150613ccc82614c35565b604082019050919050565b6000613ce4602d8361421c565b9150613cef82614c84565b604082019050919050565b613d03816143b7565b82525050565b6000613d158286613899565b9150613d218285613899565b9150613d2d82846138ca565b9150819050949350505050565b6000613d4582613be2565b9150819050919050565b6000602082019050613d646000830184613809565b92915050565b6000608082019050613d7f6000830187613809565b613d8c6020830186613809565b613d996040830185613cfa565b8181036060830152613dab8184613827565b905095945050505050565b6000602082019050613dcb6000830184613818565b92915050565b60006020820190508181036000830152613deb8184613860565b905092915050565b60006020820190508181036000830152613e0c81613949565b9050919050565b60006020820190508181036000830152613e2c8161396c565b9050919050565b60006020820190508181036000830152613e4c8161398f565b9050919050565b60006020820190508181036000830152613e6c816139b2565b9050919050565b60006020820190508181036000830152613e8c816139d5565b9050919050565b60006020820190508181036000830152613eac816139f8565b9050919050565b60006020820190508181036000830152613ecc81613a1b565b9050919050565b60006020820190508181036000830152613eec81613a3e565b9050919050565b60006020820190508181036000830152613f0c81613a61565b9050919050565b60006020820190508181036000830152613f2c81613a84565b9050919050565b60006020820190508181036000830152613f4c81613aa7565b9050919050565b60006020820190508181036000830152613f6c81613aca565b9050919050565b60006020820190508181036000830152613f8c81613aed565b9050919050565b60006020820190508181036000830152613fac81613b10565b9050919050565b60006020820190508181036000830152613fcc81613b33565b9050919050565b60006020820190508181036000830152613fec81613b56565b9050919050565b6000602082019050818103600083015261400c81613b79565b9050919050565b6000602082019050818103600083015261402c81613b9c565b9050919050565b6000602082019050818103600083015261404c81613bbf565b9050919050565b6000602082019050818103600083015261406c81613c05565b9050919050565b6000602082019050818103600083015261408c81613c28565b9050919050565b600060208201905081810360008301526140ac81613c4b565b9050919050565b600060208201905081810360008301526140cc81613c6e565b9050919050565b600060208201905081810360008301526140ec81613c91565b9050919050565b6000602082019050818103600083015261410c81613cb4565b9050919050565b6000602082019050818103600083015261412c81613cd7565b9050919050565b60006020820190506141486000830184613cfa565b92915050565b6000614158614169565b90506141648282614435565b919050565b6000604051905090565b600067ffffffffffffffff82111561418e5761418d61459c565b5b614197826145e9565b9050602081019050919050565b600067ffffffffffffffff8211156141bf576141be61459c565b5b6141c8826145e9565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614243826143b7565b915061424e836143b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614283576142826144e0565b5b828201905092915050565b6000614299826143b7565b91506142a4836143b7565b9250826142b4576142b361450f565b5b828204905092915050565b60006142ca826143b7565b91506142d5836143b7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561430e5761430d6144e0565b5b828202905092915050565b6000614324826143b7565b915061432f836143b7565b925082821015614342576143416144e0565b5b828203905092915050565b600061435882614397565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143ee5780820151818401526020810190506143d3565b838111156143fd576000848401525b50505050565b6000600282049050600182168061441b57607f821691505b6020821081141561442f5761442e61453e565b5b50919050565b61443e826145e9565b810181811067ffffffffffffffff8211171561445d5761445c61459c565b5b80604052505050565b6000614471826143b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144a4576144a36144e0565b5b600182019050919050565b60006144ba826143b7565b91506144c5836143b7565b9250826144d5576144d461450f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f50726f76696465207175616e74697469657320616e6420726563697069656e7460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e74207065722077616c6c657420657863656564656421000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614cdc8161434d565b8114614ce757600080fd5b50565b614cf38161435f565b8114614cfe57600080fd5b50565b614d0a8161436b565b8114614d1557600080fd5b50565b614d21816143b7565b8114614d2c57600080fd5b5056fea26469706673582212206a88bd1f4d9bbe22b4fdadf618970319b4547eb7a5ad7e210aaf05b5d01a880c64736f6c63430008070033

Deployed Bytecode Sourcemap

42981:3596:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24871:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46110:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46234:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26757:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28319:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27840:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43194:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45858:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23128:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45414:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29195:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23792:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46318:141;;;;;;;;;;;;;:::i;:::-;;29428:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45320:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23305:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45604:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43363:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43110:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43312:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43398:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43075:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26566:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25307:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39649:94;;;;;;;;;;;;;:::i;:::-;;45747:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38998:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43268:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26926:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44036:667;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43576:452;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28605:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43150:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45969:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29676:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44711:509;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43230:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45228:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28964:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39898:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24871:372;24973:4;25025:25;25010:40;;;:11;:40;;;;:105;;;;25082:33;25067:48;;;:11;:48;;;;25010:105;:172;;;;25147:35;25132:50;;;:11;:50;;;;25010:172;:225;;;;25199:36;25223:11;25199:23;:36::i;:::-;25010:225;24990:245;;24871:372;;;:::o;46110:116::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46211:7:::1;46191:17;:27;;;;46110:116:::0;:::o;46234:76::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46296:6:::1;46287;;:15;;;;;;;;;;;;;;;;;;46234:76:::0;:::o;26757:100::-;26811:13;26844:5;26837:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26757:100;:::o;28319:214::-;28387:7;28415:16;28423:7;28415;:16::i;:::-;28407:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28501:15;:24;28517:7;28501:24;;;;;;;;;;;;;;;;;;;;;28494:31;;28319:214;;;:::o;27840:413::-;27913:13;27929:24;27945:7;27929:15;:24::i;:::-;27913:40;;27978:5;27972:11;;:2;:11;;;;27964:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28073:5;28057:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28082:37;28099:5;28106:12;:10;:12::i;:::-;28082:16;:37::i;:::-;28057:62;28035:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28217:28;28226:2;28230:7;28239:5;28217:8;:28::i;:::-;27902:351;27840:413;;:::o;43194:29::-;;;;:::o;45858:103::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45943:10:::1;45931:9;:22;;;;;;;;;;;;:::i;:::-;;45858:103:::0;:::o;23128:100::-;23181:7;23208:12;;23201:19;;23128:100;:::o;45414:182::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45512:9:::1;;45495:13;:26;;45487:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45575:13;45563:9;:25;;;;45414:182:::0;:::o;29195:162::-;29321:28;29331:4;29337:2;29341:7;29321:9;:28::i;:::-;29195:162;;;:::o;23792:1007::-;23881:7;23917:16;23927:5;23917:9;:16::i;:::-;23909:5;:24;23901:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23983:22;24008:13;:11;:13::i;:::-;23983:38;;24032:19;24062:25;24251:9;24246:466;24266:14;24262:1;:18;24246:466;;;24306:31;24340:11;:14;24352:1;24340:14;;;;;;;;;;;24306:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24403:1;24377:28;;:9;:14;;;:28;;;24373:111;;24450:9;:14;;;24430:34;;24373:111;24527:5;24506:26;;:17;:26;;;24502:195;;;24576:5;24561:11;:20;24557:85;;;24617:1;24610:8;;;;;;;;;24557:85;24664:13;;;;;;;24502:195;24287:425;24282:3;;;;;;;24246:466;;;;24735:56;;;;;;;;;;:::i;:::-;;;;;;;;23792:1007;;;;;:::o;46318:141::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46364:7:::1;46385;:5;:7::i;:::-;46377:21;;46406;46377:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46363:69;;;46448:2;46440:11;;;::::0;::::1;;46355:104;46318:141::o:0;29428:177::-;29558:39;29575:4;29581:2;29585:7;29558:39;;;;;;;;;;;;:16;:39::i;:::-;29428:177;;;:::o;45320:86::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45390:8:::1;45383:4;:15;;;;45320:86:::0;:::o;23305:187::-;23372:7;23408:13;:11;:13::i;:::-;23400:5;:21;23392:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23479:5;23472:12;;23305:187;;;:::o;45604:135::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45713:18:::1;45693:17;:38;;;;;;;;;;;;:::i;:::-;;45604:135:::0;:::o;43363:28::-;;;;;;;;;;;;;:::o;43110:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43312:36::-;;;;:::o;43398:25::-;;;;;;;;;;;;;:::o;43075:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26566:124::-;26630:7;26657:20;26669:7;26657:11;:20::i;:::-;:25;;;26650:32;;26566:124;;;:::o;25307:221::-;25371:7;25416:1;25399:19;;:5;:19;;;;25391:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25492:12;:19;25505:5;25492:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25484:36;;25477:43;;25307:221;;;:::o;39649:94::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39714:21:::1;39732:1;39714:9;:21::i;:::-;39649:94::o:0;45747:103::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45832:10:::1;45820:9;:22;;;;;;;;;;;;:::i;:::-;;45747:103:::0;:::o;38998:87::-;39044:7;39071:6;;;;;;;;;;;39064:13;;38998:87;:::o;43268:37::-;;;;:::o;26926:104::-;26982:13;27015:7;27008:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26926:104;:::o;44036:667::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44203:9:::1;;:16;;44184:8;;:15;;:35;44162:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;44291:21;44327:9:::0;44339:13:::1;:11;:13::i;:::-;44327:25;;44368:9;44363:101;44387:8;;:15;;44383:1;:19;44363:101;;;44441:8;;44450:1;44441:11;;;;;;;:::i;:::-;;;;;;;;44424:28;;;;;:::i;:::-;;;44404:3;;;;:::i;:::-;;;44363:101;;;;44503:9;;44486:13;44482:1;:17;;;;:::i;:::-;:30;;44474:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44536:20;;;44572:9;44567:110;44591:9;;:16;;44587:1;:20;44567:110;;;44629:36;44639:9;;44649:1;44639:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44653:8;;44662:1;44653:11;;;;;;;:::i;:::-;;;;;;;;44629:9;:36::i;:::-;44609:3;;;;:::i;:::-;;;44567:110;;;;44687:8;;;44151:552;;44036:667:::0;;;;:::o;43576:452::-;41993:1;42589:7;;:19;;42581:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41993:1;42722:7;:18;;;;43650:9:::1;43662:13;:11;:13::i;:::-;43650:25;;43708:1;43694:11;:15;43686:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;43783:17;;43768:11;43744:21;43754:10;43744:9;:21::i;:::-;:35;;;;:::i;:::-;:56;;43736:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;43872:9;;43857:11;43853:1;:15;;;;:::i;:::-;:28;;43845:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43944:11;43937:4;;:18;;;;:::i;:::-;43924:9;:31;;43916:40;;;::::0;::::1;;43967:34;43977:10;43989:11;43967:9;:34::i;:::-;44012:8;;;43639:389;41949:1:::0;42901:7;:22;;;;43576:452;:::o;28605:288::-;28712:12;:10;:12::i;:::-;28700:24;;:8;:24;;;;28692:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28813:8;28768:18;:32;28787:12;:10;:12::i;:::-;28768:32;;;;;;;;;;;;;;;:42;28801:8;28768:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28866:8;28837:48;;28852:12;:10;:12::i;:::-;28837:48;;;28876:8;28837:48;;;;;;:::i;:::-;;;;;;;;28605:288;;:::o;43150:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45969:133::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46075:19:::1;46054:18;:40;;;;45969:133:::0;:::o;29676:355::-;29835:28;29845:4;29851:2;29855:7;29835:9;:28::i;:::-;29896:48;29919:4;29925:2;29929:7;29938:5;29896:22;:48::i;:::-;29874:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:355;;;;:::o;44711:509::-;44820:13;44864:17;44872:8;44864:7;:17::i;:::-;44848:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;44971:5;44959:17;;:8;;;;;;;;;;;:17;;;44955:64;;;44994:17;44987:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44955:64;45027:28;45058:10;:8;:10::i;:::-;45027:41;;45113:1;45088:14;45082:28;:32;:130;;;;;;;;;;;;;;;;;45150:14;45166:19;:8;:17;:19::i;:::-;45187:9;45133:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45082:130;45075:137;;;44711:509;;;;:::o;43230:31::-;;;;:::o;45228:84::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45298:6:::1;45287:8;;:17;;;;;;;;;;;;;;;;;;45228:84:::0;:::o;28964:164::-;29061:4;29085:18;:25;29104:5;29085:25;;;;;;;;;;;;;;;:35;29111:8;29085:35;;;;;;;;;;;;;;;;;;;;;;;;;29078:42;;28964:164;;;;:::o;39898:229::-;39229:12;:10;:12::i;:::-;39218:23;;:7;:5;:7::i;:::-;:23;;;39210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40021:1:::1;40001:22;;:8;:22;;;;39979:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;40100:19;40110:8;40100:9;:19::i;:::-;39898:229:::0;:::o;14391:157::-;14476:4;14515:25;14500:40;;;:11;:40;;;;14493:47;;14391:157;;;:::o;2838:98::-;2891:7;2918:10;2911:17;;2838:98;:::o;30286:111::-;30343:4;30377:12;;30367:7;:22;30360:29;;30286:111;;;:::o;35206:196::-;35348:2;35321:15;:24;35337:7;35321:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35386:7;35382:2;35366:28;;35375:5;35366:28;;;;;;;;;;;;35206:196;;;:::o;33086:2002::-;33201:35;33239:20;33251:7;33239:11;:20::i;:::-;33201:58;;33272:22;33314:13;:18;;;33298:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33373:12;:10;:12::i;:::-;33349:36;;:20;33361:7;33349:11;:20::i;:::-;:36;;;33298:87;:154;;;;33402:50;33419:13;:18;;;33439:12;:10;:12::i;:::-;33402:16;:50::i;:::-;33298:154;33272:181;;33474:17;33466:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33589:4;33567:26;;:13;:18;;;:26;;;33559:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33669:1;33655:16;;:2;:16;;;;33647:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33726:43;33748:4;33754:2;33758:7;33767:1;33726:21;:43::i;:::-;33834:49;33851:1;33855:7;33864:13;:18;;;33834:8;:49::i;:::-;34209:1;34179:12;:18;34192:4;34179:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34253:1;34225:12;:16;34238:2;34225:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34299:2;34271:11;:20;34283:7;34271:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34361:15;34316:11;:20;34328:7;34316:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34629:19;34661:1;34651:7;:11;34629:33;;34722:1;34681:43;;:11;:24;34693:11;34681:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34677:295;;;34749:20;34757:11;34749:7;:20::i;:::-;34745:212;;;34826:13;:18;;;34794:11;:24;34806:11;34794:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34909:13;:28;;;34867:11;:24;34879:11;34867:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34745:212;34677:295;34154:829;35019:7;35015:2;35000:27;;35009:4;35000:27;;;;;;;;;;;;35038:42;35059:4;35065:2;35069:7;35078:1;35038:20;:42::i;:::-;33190:1898;;33086:2002;;;:::o;25967:537::-;26028:21;;:::i;:::-;26070:16;26078:7;26070;:16::i;:::-;26062:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26176:12;26191:7;26176:22;;26171:245;26208:1;26200:4;:9;26171:245;;26238:31;26272:11;:17;26284:4;26272:17;;;;;;;;;;;26238:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26338:1;26312:28;;:9;:14;;;:28;;;26308:93;;26372:9;26365:16;;;;;;26308:93;26219:197;26211:6;;;;;;;;26171:245;;;;26439:57;;;;;;;;;;:::i;:::-;;;;;;;;25967:537;;;;:::o;40135:173::-;40191:16;40210:6;;;;;;;;;;;40191:25;;40236:8;40227:6;;:17;;;;;;;;;;;;;;;;;;40291:8;40260:40;;40281:8;40260:40;;;;;;;;;;;;40180:128;40135:173;:::o;30405:104::-;30474:27;30484:2;30488:8;30474:27;;;;;;;;;;;;:9;:27::i;:::-;30405:104;;:::o;35967:804::-;36122:4;36143:15;:2;:13;;;:15::i;:::-;36139:625;;;36195:2;36179:36;;;36216:12;:10;:12::i;:::-;36230:4;36236:7;36245:5;36179:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36175:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36442:1;36425:6;:13;:18;36421:273;;;36468:61;;;;;;;;;;:::i;:::-;;;;;;;;36421:273;36644:6;36638:13;36629:6;36625:2;36621:15;36614:38;36175:534;36312:45;;;36302:55;;;:6;:55;;;;36295:62;;;;;36139:625;36748:4;36741:11;;35967:804;;;;;;;:::o;46467:107::-;46527:13;46557:9;46550:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46467:107;:::o;400:723::-;456:13;686:1;677:5;:10;673:53;;;704:10;;;;;;;;;;;;;;;;;;;;;673:53;736:12;751:5;736:20;;767:14;792:78;807:1;799:4;:9;792:78;;825:8;;;;;:::i;:::-;;;;856:2;848:10;;;;;:::i;:::-;;;792:78;;;880:19;912:6;902:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:39;;930:154;946:1;937:5;:10;930:154;;974:1;964:11;;;;;:::i;:::-;;;1041:2;1033:5;:10;;;;:::i;:::-;1020:2;:24;;;;:::i;:::-;1007:39;;990:6;997;990:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1070:2;1061:11;;;;;:::i;:::-;;;930:154;;;1108:6;1094:21;;;;;400:723;;;;:::o;37259:159::-;;;;;:::o;37830:158::-;;;;;:::o;30872:163::-;30995:32;31001:2;31005:8;31015:5;31022:4;30995:5;:32::i;:::-;30872:163;;;:::o;4285:326::-;4345:4;4602:1;4580:7;:19;;;:23;4573:30;;4285:326;;;:::o;31294:1538::-;31433:20;31456:12;;31433:35;;31501:1;31487:16;;:2;:16;;;;31479:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31572:1;31560:8;:13;;31552:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31631:61;31661:1;31665:2;31669:12;31683:8;31631:21;:61::i;:::-;32006:8;31970:12;:16;31983:2;31970:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32071:8;32030:12;:16;32043:2;32030:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32130:2;32097:11;:25;32109:12;32097:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32197:15;32147:11;:25;32159:12;32147:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32230:20;32253:12;32230:35;;32287:9;32282:415;32302:8;32298:1;:12;32282:415;;;32366:12;32362:2;32341:38;;32358:1;32341:38;;;;;;;;;;;;32402:4;32398:249;;;32465:59;32496:1;32500:2;32504:12;32518:5;32465:22;:59::i;:::-;32431:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32398:249;32667:14;;;;;;;32312:3;;;;;;;32282:415;;;;32728:12;32713;:27;;;;31945:807;32764:60;32793:1;32797:2;32801:12;32815:8;32764:20;:60::i;:::-;31422:1410;31294:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:329::-;3518:6;3567:2;3555:9;3546:7;3542:23;3538:32;3535:119;;;3573:79;;:::i;:::-;3535:119;3693:1;3718:53;3763:7;3754:6;3743:9;3739:22;3718:53;:::i;:::-;3708:63;;3664:117;3459:329;;;;:::o;3794:474::-;3862:6;3870;3919:2;3907:9;3898:7;3894:23;3890:32;3887:119;;;3925:79;;:::i;:::-;3887:119;4045:1;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4016:117;4172:2;4198:53;4243:7;4234:6;4223:9;4219:22;4198:53;:::i;:::-;4188:63;;4143:118;3794:474;;;;;:::o;4274:619::-;4351:6;4359;4367;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4669:2;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4640:118;4797:2;4823:53;4868:7;4859:6;4848:9;4844:22;4823:53;:::i;:::-;4813:63;;4768:118;4274:619;;;;;:::o;4899:943::-;4994:6;5002;5010;5018;5067:3;5055:9;5046:7;5042:23;5038:33;5035:120;;;5074:79;;:::i;:::-;5035:120;5194:1;5219:53;5264:7;5255:6;5244:9;5240:22;5219:53;:::i;:::-;5209:63;;5165:117;5321:2;5347:53;5392:7;5383:6;5372:9;5368:22;5347:53;:::i;:::-;5337:63;;5292:118;5449:2;5475:53;5520:7;5511:6;5500:9;5496:22;5475:53;:::i;:::-;5465:63;;5420:118;5605:2;5594:9;5590:18;5577:32;5636:18;5628:6;5625:30;5622:117;;;5658:79;;:::i;:::-;5622:117;5763:62;5817:7;5808:6;5797:9;5793:22;5763:62;:::i;:::-;5753:72;;5548:287;4899:943;;;;;;;:::o;5848:468::-;5913:6;5921;5970:2;5958:9;5949:7;5945:23;5941:32;5938:119;;;5976:79;;:::i;:::-;5938:119;6096:1;6121:53;6166:7;6157:6;6146:9;6142:22;6121:53;:::i;:::-;6111:63;;6067:117;6223:2;6249:50;6291:7;6282:6;6271:9;6267:22;6249:50;:::i;:::-;6239:60;;6194:115;5848:468;;;;;:::o;6322:474::-;6390:6;6398;6447:2;6435:9;6426:7;6422:23;6418:32;6415:119;;;6453:79;;:::i;:::-;6415:119;6573:1;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6544:117;6700:2;6726:53;6771:7;6762:6;6751:9;6747:22;6726:53;:::i;:::-;6716:63;;6671:118;6322:474;;;;;:::o;6802:934::-;6924:6;6932;6940;6948;6997:2;6985:9;6976:7;6972:23;6968:32;6965:119;;;7003:79;;:::i;:::-;6965:119;7151:1;7140:9;7136:17;7123:31;7181:18;7173:6;7170:30;7167:117;;;7203:79;;:::i;:::-;7167:117;7316:80;7388:7;7379:6;7368:9;7364:22;7316:80;:::i;:::-;7298:98;;;;7094:312;7473:2;7462:9;7458:18;7445:32;7504:18;7496:6;7493:30;7490:117;;;7526:79;;:::i;:::-;7490:117;7639:80;7711:7;7702:6;7691:9;7687:22;7639:80;:::i;:::-;7621:98;;;;7416:313;6802:934;;;;;;;:::o;7742:323::-;7798:6;7847:2;7835:9;7826:7;7822:23;7818:32;7815:119;;;7853:79;;:::i;:::-;7815:119;7973:1;7998:50;8040:7;8031:6;8020:9;8016:22;7998:50;:::i;:::-;7988:60;;7944:114;7742:323;;;;:::o;8071:327::-;8129:6;8178:2;8166:9;8157:7;8153:23;8149:32;8146:119;;;8184:79;;:::i;:::-;8146:119;8304:1;8329:52;8373:7;8364:6;8353:9;8349:22;8329:52;:::i;:::-;8319:62;;8275:116;8071:327;;;;:::o;8404:349::-;8473:6;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:63;8728:7;8719:6;8708:9;8704:22;8673:63;:::i;:::-;8663:73;;8619:127;8404:349;;;;:::o;8759:509::-;8828:6;8877:2;8865:9;8856:7;8852:23;8848:32;8845:119;;;8883:79;;:::i;:::-;8845:119;9031:1;9020:9;9016:17;9003:31;9061:18;9053:6;9050:30;9047:117;;;9083:79;;:::i;:::-;9047:117;9188:63;9243:7;9234:6;9223:9;9219:22;9188:63;:::i;:::-;9178:73;;8974:287;8759:509;;;;:::o;9274:329::-;9333:6;9382:2;9370:9;9361:7;9357:23;9353:32;9350:119;;;9388:79;;:::i;:::-;9350:119;9508:1;9533:53;9578:7;9569:6;9558:9;9554:22;9533:53;:::i;:::-;9523:63;;9479:117;9274:329;;;;:::o;9609:118::-;9696:24;9714:5;9696:24;:::i;:::-;9691:3;9684:37;9609:118;;:::o;9733:109::-;9814:21;9829:5;9814:21;:::i;:::-;9809:3;9802:34;9733:109;;:::o;9848:360::-;9934:3;9962:38;9994:5;9962:38;:::i;:::-;10016:70;10079:6;10074:3;10016:70;:::i;:::-;10009:77;;10095:52;10140:6;10135:3;10128:4;10121:5;10117:16;10095:52;:::i;:::-;10172:29;10194:6;10172:29;:::i;:::-;10167:3;10163:39;10156:46;;9938:270;9848:360;;;;:::o;10214:364::-;10302:3;10330:39;10363:5;10330:39;:::i;:::-;10385:71;10449:6;10444:3;10385:71;:::i;:::-;10378:78;;10465:52;10510:6;10505:3;10498:4;10491:5;10487:16;10465:52;:::i;:::-;10542:29;10564:6;10542:29;:::i;:::-;10537:3;10533:39;10526:46;;10306:272;10214:364;;;;:::o;10584:377::-;10690:3;10718:39;10751:5;10718:39;:::i;:::-;10773:89;10855:6;10850:3;10773:89;:::i;:::-;10766:96;;10871:52;10916:6;10911:3;10904:4;10897:5;10893:16;10871:52;:::i;:::-;10948:6;10943:3;10939:16;10932:23;;10694:267;10584:377;;;;:::o;10991:845::-;11094:3;11131:5;11125:12;11160:36;11186:9;11160:36;:::i;:::-;11212:89;11294:6;11289:3;11212:89;:::i;:::-;11205:96;;11332:1;11321:9;11317:17;11348:1;11343:137;;;;11494:1;11489:341;;;;11310:520;;11343:137;11427:4;11423:9;11412;11408:25;11403:3;11396:38;11463:6;11458:3;11454:16;11447:23;;11343:137;;11489:341;11556:38;11588:5;11556:38;:::i;:::-;11616:1;11630:154;11644:6;11641:1;11638:13;11630:154;;;11718:7;11712:14;11708:1;11703:3;11699:11;11692:35;11768:1;11759:7;11755:15;11744:26;;11666:4;11663:1;11659:12;11654:17;;11630:154;;;11813:6;11808:3;11804:16;11797:23;;11496:334;;11310:520;;11098:738;;10991:845;;;;:::o;11842:366::-;11984:3;12005:67;12069:2;12064:3;12005:67;:::i;:::-;11998:74;;12081:93;12170:3;12081:93;:::i;:::-;12199:2;12194:3;12190:12;12183:19;;11842:366;;;:::o;12214:::-;12356:3;12377:67;12441:2;12436:3;12377:67;:::i;:::-;12370:74;;12453:93;12542:3;12453:93;:::i;:::-;12571:2;12566:3;12562:12;12555:19;;12214:366;;;:::o;12586:::-;12728:3;12749:67;12813:2;12808:3;12749:67;:::i;:::-;12742:74;;12825:93;12914:3;12825:93;:::i;:::-;12943:2;12938:3;12934:12;12927:19;;12586:366;;;:::o;12958:::-;13100:3;13121:67;13185:2;13180:3;13121:67;:::i;:::-;13114:74;;13197:93;13286:3;13197:93;:::i;:::-;13315:2;13310:3;13306:12;13299:19;;12958:366;;;:::o;13330:::-;13472:3;13493:67;13557:2;13552:3;13493:67;:::i;:::-;13486:74;;13569:93;13658:3;13569:93;:::i;:::-;13687:2;13682:3;13678:12;13671:19;;13330:366;;;:::o;13702:::-;13844:3;13865:67;13929:2;13924:3;13865:67;:::i;:::-;13858:74;;13941:93;14030:3;13941:93;:::i;:::-;14059:2;14054:3;14050:12;14043:19;;13702:366;;;:::o;14074:::-;14216:3;14237:67;14301:2;14296:3;14237:67;:::i;:::-;14230:74;;14313:93;14402:3;14313:93;:::i;:::-;14431:2;14426:3;14422:12;14415:19;;14074:366;;;:::o;14446:::-;14588:3;14609:67;14673:2;14668:3;14609:67;:::i;:::-;14602:74;;14685:93;14774:3;14685:93;:::i;:::-;14803:2;14798:3;14794:12;14787:19;;14446:366;;;:::o;14818:::-;14960:3;14981:67;15045:2;15040:3;14981:67;:::i;:::-;14974:74;;15057:93;15146:3;15057:93;:::i;:::-;15175:2;15170:3;15166:12;15159:19;;14818:366;;;:::o;15190:::-;15332:3;15353:67;15417:2;15412:3;15353:67;:::i;:::-;15346:74;;15429:93;15518:3;15429:93;:::i;:::-;15547:2;15542:3;15538:12;15531:19;;15190:366;;;:::o;15562:::-;15704:3;15725:67;15789:2;15784:3;15725:67;:::i;:::-;15718:74;;15801:93;15890:3;15801:93;:::i;:::-;15919:2;15914:3;15910:12;15903:19;;15562:366;;;:::o;15934:::-;16076:3;16097:67;16161:2;16156:3;16097:67;:::i;:::-;16090:74;;16173:93;16262:3;16173:93;:::i;:::-;16291:2;16286:3;16282:12;16275:19;;15934:366;;;:::o;16306:::-;16448:3;16469:67;16533:2;16528:3;16469:67;:::i;:::-;16462:74;;16545:93;16634:3;16545:93;:::i;:::-;16663:2;16658:3;16654:12;16647:19;;16306:366;;;:::o;16678:365::-;16820:3;16841:66;16905:1;16900:3;16841:66;:::i;:::-;16834:73;;16916:93;17005:3;16916:93;:::i;:::-;17034:2;17029:3;17025:12;17018:19;;16678:365;;;:::o;17049:366::-;17191:3;17212:67;17276:2;17271:3;17212:67;:::i;:::-;17205:74;;17288:93;17377:3;17288:93;:::i;:::-;17406:2;17401:3;17397:12;17390:19;;17049:366;;;:::o;17421:::-;17563:3;17584:67;17648:2;17643:3;17584:67;:::i;:::-;17577:74;;17660:93;17749:3;17660:93;:::i;:::-;17778:2;17773:3;17769:12;17762:19;;17421:366;;;:::o;17793:::-;17935:3;17956:67;18020:2;18015:3;17956:67;:::i;:::-;17949:74;;18032:93;18121:3;18032:93;:::i;:::-;18150:2;18145:3;18141:12;18134:19;;17793:366;;;:::o;18165:::-;18307:3;18328:67;18392:2;18387:3;18328:67;:::i;:::-;18321:74;;18404:93;18493:3;18404:93;:::i;:::-;18522:2;18517:3;18513:12;18506:19;;18165:366;;;:::o;18537:::-;18679:3;18700:67;18764:2;18759:3;18700:67;:::i;:::-;18693:74;;18776:93;18865:3;18776:93;:::i;:::-;18894:2;18889:3;18885:12;18878:19;;18537:366;;;:::o;18909:398::-;19068:3;19089:83;19170:1;19165:3;19089:83;:::i;:::-;19082:90;;19181:93;19270:3;19181:93;:::i;:::-;19299:1;19294:3;19290:11;19283:18;;18909:398;;;:::o;19313:366::-;19455:3;19476:67;19540:2;19535:3;19476:67;:::i;:::-;19469:74;;19552:93;19641:3;19552:93;:::i;:::-;19670:2;19665:3;19661:12;19654:19;;19313:366;;;:::o;19685:::-;19827:3;19848:67;19912:2;19907:3;19848:67;:::i;:::-;19841:74;;19924:93;20013:3;19924:93;:::i;:::-;20042:2;20037:3;20033:12;20026:19;;19685:366;;;:::o;20057:::-;20199:3;20220:67;20284:2;20279:3;20220:67;:::i;:::-;20213:74;;20296:93;20385:3;20296:93;:::i;:::-;20414:2;20409:3;20405:12;20398:19;;20057:366;;;:::o;20429:::-;20571:3;20592:67;20656:2;20651:3;20592:67;:::i;:::-;20585:74;;20668:93;20757:3;20668:93;:::i;:::-;20786:2;20781:3;20777:12;20770:19;;20429:366;;;:::o;20801:::-;20943:3;20964:67;21028:2;21023:3;20964:67;:::i;:::-;20957:74;;21040:93;21129:3;21040:93;:::i;:::-;21158:2;21153:3;21149:12;21142:19;;20801:366;;;:::o;21173:::-;21315:3;21336:67;21400:2;21395:3;21336:67;:::i;:::-;21329:74;;21412:93;21501:3;21412:93;:::i;:::-;21530:2;21525:3;21521:12;21514:19;;21173:366;;;:::o;21545:::-;21687:3;21708:67;21772:2;21767:3;21708:67;:::i;:::-;21701:74;;21784:93;21873:3;21784:93;:::i;:::-;21902:2;21897:3;21893:12;21886:19;;21545:366;;;:::o;21917:118::-;22004:24;22022:5;22004:24;:::i;:::-;21999:3;21992:37;21917:118;;:::o;22041:589::-;22266:3;22288:95;22379:3;22370:6;22288:95;:::i;:::-;22281:102;;22400:95;22491:3;22482:6;22400:95;:::i;:::-;22393:102;;22512:92;22600:3;22591:6;22512:92;:::i;:::-;22505:99;;22621:3;22614:10;;22041:589;;;;;;:::o;22636:379::-;22820:3;22842:147;22985:3;22842:147;:::i;:::-;22835:154;;23006:3;22999:10;;22636:379;;;:::o;23021:222::-;23114:4;23152:2;23141:9;23137:18;23129:26;;23165:71;23233:1;23222:9;23218:17;23209:6;23165:71;:::i;:::-;23021:222;;;;:::o;23249:640::-;23444:4;23482:3;23471:9;23467:19;23459:27;;23496:71;23564:1;23553:9;23549:17;23540:6;23496:71;:::i;:::-;23577:72;23645:2;23634:9;23630:18;23621:6;23577:72;:::i;:::-;23659;23727:2;23716:9;23712:18;23703:6;23659:72;:::i;:::-;23778:9;23772:4;23768:20;23763:2;23752:9;23748:18;23741:48;23806:76;23877:4;23868:6;23806:76;:::i;:::-;23798:84;;23249:640;;;;;;;:::o;23895:210::-;23982:4;24020:2;24009:9;24005:18;23997:26;;24033:65;24095:1;24084:9;24080:17;24071:6;24033:65;:::i;:::-;23895:210;;;;:::o;24111:313::-;24224:4;24262:2;24251:9;24247:18;24239:26;;24311:9;24305:4;24301:20;24297:1;24286:9;24282:17;24275:47;24339:78;24412:4;24403:6;24339:78;:::i;:::-;24331:86;;24111:313;;;;:::o;24430:419::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24683:9;24677:4;24673:20;24669:1;24658:9;24654:17;24647:47;24711:131;24837:4;24711:131;:::i;:::-;24703:139;;24430:419;;;:::o;24855:::-;25021:4;25059:2;25048:9;25044:18;25036:26;;25108:9;25102:4;25098:20;25094:1;25083:9;25079:17;25072:47;25136:131;25262:4;25136:131;:::i;:::-;25128:139;;24855:419;;;:::o;25280:::-;25446:4;25484:2;25473:9;25469:18;25461:26;;25533:9;25527:4;25523:20;25519:1;25508:9;25504:17;25497:47;25561:131;25687:4;25561:131;:::i;:::-;25553:139;;25280:419;;;:::o;25705:::-;25871:4;25909:2;25898:9;25894:18;25886:26;;25958:9;25952:4;25948:20;25944:1;25933:9;25929:17;25922:47;25986:131;26112:4;25986:131;:::i;:::-;25978:139;;25705:419;;;:::o;26130:::-;26296:4;26334:2;26323:9;26319:18;26311:26;;26383:9;26377:4;26373:20;26369:1;26358:9;26354:17;26347:47;26411:131;26537:4;26411:131;:::i;:::-;26403:139;;26130:419;;;:::o;26555:::-;26721:4;26759:2;26748:9;26744:18;26736:26;;26808:9;26802:4;26798:20;26794:1;26783:9;26779:17;26772:47;26836:131;26962:4;26836:131;:::i;:::-;26828:139;;26555:419;;;:::o;26980:::-;27146:4;27184:2;27173:9;27169:18;27161:26;;27233:9;27227:4;27223:20;27219:1;27208:9;27204:17;27197:47;27261:131;27387:4;27261:131;:::i;:::-;27253:139;;26980:419;;;:::o;27405:::-;27571:4;27609:2;27598:9;27594:18;27586:26;;27658:9;27652:4;27648:20;27644:1;27633:9;27629:17;27622:47;27686:131;27812:4;27686:131;:::i;:::-;27678:139;;27405:419;;;:::o;27830:::-;27996:4;28034:2;28023:9;28019:18;28011:26;;28083:9;28077:4;28073:20;28069:1;28058:9;28054:17;28047:47;28111:131;28237:4;28111:131;:::i;:::-;28103:139;;27830:419;;;:::o;28255:::-;28421:4;28459:2;28448:9;28444:18;28436:26;;28508:9;28502:4;28498:20;28494:1;28483:9;28479:17;28472:47;28536:131;28662:4;28536:131;:::i;:::-;28528:139;;28255:419;;;:::o;28680:::-;28846:4;28884:2;28873:9;28869:18;28861:26;;28933:9;28927:4;28923:20;28919:1;28908:9;28904:17;28897:47;28961:131;29087:4;28961:131;:::i;:::-;28953:139;;28680:419;;;:::o;29105:::-;29271:4;29309:2;29298:9;29294:18;29286:26;;29358:9;29352:4;29348:20;29344:1;29333:9;29329:17;29322:47;29386:131;29512:4;29386:131;:::i;:::-;29378:139;;29105:419;;;:::o;29530:::-;29696:4;29734:2;29723:9;29719:18;29711:26;;29783:9;29777:4;29773:20;29769:1;29758:9;29754:17;29747:47;29811:131;29937:4;29811:131;:::i;:::-;29803:139;;29530:419;;;:::o;29955:::-;30121:4;30159:2;30148:9;30144:18;30136:26;;30208:9;30202:4;30198:20;30194:1;30183:9;30179:17;30172:47;30236:131;30362:4;30236:131;:::i;:::-;30228:139;;29955:419;;;:::o;30380:::-;30546:4;30584:2;30573:9;30569:18;30561:26;;30633:9;30627:4;30623:20;30619:1;30608:9;30604:17;30597:47;30661:131;30787:4;30661:131;:::i;:::-;30653:139;;30380:419;;;:::o;30805:::-;30971:4;31009:2;30998:9;30994:18;30986:26;;31058:9;31052:4;31048:20;31044:1;31033:9;31029:17;31022:47;31086:131;31212:4;31086:131;:::i;:::-;31078:139;;30805:419;;;:::o;31230:::-;31396:4;31434:2;31423:9;31419:18;31411:26;;31483:9;31477:4;31473:20;31469:1;31458:9;31454:17;31447:47;31511:131;31637:4;31511:131;:::i;:::-;31503:139;;31230:419;;;:::o;31655:::-;31821:4;31859:2;31848:9;31844:18;31836:26;;31908:9;31902:4;31898:20;31894:1;31883:9;31879:17;31872:47;31936:131;32062:4;31936:131;:::i;:::-;31928:139;;31655:419;;;:::o;32080:::-;32246:4;32284:2;32273:9;32269:18;32261:26;;32333:9;32327:4;32323:20;32319:1;32308:9;32304:17;32297:47;32361:131;32487:4;32361:131;:::i;:::-;32353:139;;32080:419;;;:::o;32505:::-;32671:4;32709:2;32698:9;32694:18;32686:26;;32758:9;32752:4;32748:20;32744:1;32733:9;32729:17;32722:47;32786:131;32912:4;32786:131;:::i;:::-;32778:139;;32505:419;;;:::o;32930:::-;33096:4;33134:2;33123:9;33119:18;33111:26;;33183:9;33177:4;33173:20;33169:1;33158:9;33154:17;33147:47;33211:131;33337:4;33211:131;:::i;:::-;33203:139;;32930:419;;;:::o;33355:::-;33521:4;33559:2;33548:9;33544:18;33536:26;;33608:9;33602:4;33598:20;33594:1;33583:9;33579:17;33572:47;33636:131;33762:4;33636:131;:::i;:::-;33628:139;;33355:419;;;:::o;33780:::-;33946:4;33984:2;33973:9;33969:18;33961:26;;34033:9;34027:4;34023:20;34019:1;34008:9;34004:17;33997:47;34061:131;34187:4;34061:131;:::i;:::-;34053:139;;33780:419;;;:::o;34205:::-;34371:4;34409:2;34398:9;34394:18;34386:26;;34458:9;34452:4;34448:20;34444:1;34433:9;34429:17;34422:47;34486:131;34612:4;34486:131;:::i;:::-;34478:139;;34205:419;;;:::o;34630:::-;34796:4;34834:2;34823:9;34819:18;34811:26;;34883:9;34877:4;34873:20;34869:1;34858:9;34854:17;34847:47;34911:131;35037:4;34911:131;:::i;:::-;34903:139;;34630:419;;;:::o;35055:::-;35221:4;35259:2;35248:9;35244:18;35236:26;;35308:9;35302:4;35298:20;35294:1;35283:9;35279:17;35272:47;35336:131;35462:4;35336:131;:::i;:::-;35328:139;;35055:419;;;:::o;35480:222::-;35573:4;35611:2;35600:9;35596:18;35588:26;;35624:71;35692:1;35681:9;35677:17;35668:6;35624:71;:::i;:::-;35480:222;;;;:::o;35708:129::-;35742:6;35769:20;;:::i;:::-;35759:30;;35798:33;35826:4;35818:6;35798:33;:::i;:::-;35708:129;;;:::o;35843:75::-;35876:6;35909:2;35903:9;35893:19;;35843:75;:::o;35924:307::-;35985:4;36075:18;36067:6;36064:30;36061:56;;;36097:18;;:::i;:::-;36061:56;36135:29;36157:6;36135:29;:::i;:::-;36127:37;;36219:4;36213;36209:15;36201:23;;35924:307;;;:::o;36237:308::-;36299:4;36389:18;36381:6;36378:30;36375:56;;;36411:18;;:::i;:::-;36375:56;36449:29;36471:6;36449:29;:::i;:::-;36441:37;;36533:4;36527;36523:15;36515:23;;36237:308;;;:::o;36551:141::-;36600:4;36623:3;36615:11;;36646:3;36643:1;36636:14;36680:4;36677:1;36667:18;36659:26;;36551:141;;;:::o;36698:98::-;36749:6;36783:5;36777:12;36767:22;;36698:98;;;:::o;36802:99::-;36854:6;36888:5;36882:12;36872:22;;36802:99;;;:::o;36907:168::-;36990:11;37024:6;37019:3;37012:19;37064:4;37059:3;37055:14;37040:29;;36907:168;;;;:::o;37081:147::-;37182:11;37219:3;37204:18;;37081:147;;;;:::o;37234:169::-;37318:11;37352:6;37347:3;37340:19;37392:4;37387:3;37383:14;37368:29;;37234:169;;;;:::o;37409:148::-;37511:11;37548:3;37533:18;;37409:148;;;;:::o;37563:305::-;37603:3;37622:20;37640:1;37622:20;:::i;:::-;37617:25;;37656:20;37674:1;37656:20;:::i;:::-;37651:25;;37810:1;37742:66;37738:74;37735:1;37732:81;37729:107;;;37816:18;;:::i;:::-;37729:107;37860:1;37857;37853:9;37846:16;;37563:305;;;;:::o;37874:185::-;37914:1;37931:20;37949:1;37931:20;:::i;:::-;37926:25;;37965:20;37983:1;37965:20;:::i;:::-;37960:25;;38004:1;37994:35;;38009:18;;:::i;:::-;37994:35;38051:1;38048;38044:9;38039:14;;37874:185;;;;:::o;38065:348::-;38105:7;38128:20;38146:1;38128:20;:::i;:::-;38123:25;;38162:20;38180:1;38162:20;:::i;:::-;38157:25;;38350:1;38282:66;38278:74;38275:1;38272:81;38267:1;38260:9;38253:17;38249:105;38246:131;;;38357:18;;:::i;:::-;38246:131;38405:1;38402;38398:9;38387:20;;38065:348;;;;:::o;38419:191::-;38459:4;38479:20;38497:1;38479:20;:::i;:::-;38474:25;;38513:20;38531:1;38513:20;:::i;:::-;38508:25;;38552:1;38549;38546:8;38543:34;;;38557:18;;:::i;:::-;38543:34;38602:1;38599;38595:9;38587:17;;38419:191;;;;:::o;38616:96::-;38653:7;38682:24;38700:5;38682:24;:::i;:::-;38671:35;;38616:96;;;:::o;38718:90::-;38752:7;38795:5;38788:13;38781:21;38770:32;;38718:90;;;:::o;38814:149::-;38850:7;38890:66;38883:5;38879:78;38868:89;;38814:149;;;:::o;38969:126::-;39006:7;39046:42;39039:5;39035:54;39024:65;;38969:126;;;:::o;39101:77::-;39138:7;39167:5;39156:16;;39101:77;;;:::o;39184:154::-;39268:6;39263:3;39258;39245:30;39330:1;39321:6;39316:3;39312:16;39305:27;39184:154;;;:::o;39344:307::-;39412:1;39422:113;39436:6;39433:1;39430:13;39422:113;;;39521:1;39516:3;39512:11;39506:18;39502:1;39497:3;39493:11;39486:39;39458:2;39455:1;39451:10;39446:15;;39422:113;;;39553:6;39550:1;39547:13;39544:101;;;39633:1;39624:6;39619:3;39615:16;39608:27;39544:101;39393:258;39344:307;;;:::o;39657:320::-;39701:6;39738:1;39732:4;39728:12;39718:22;;39785:1;39779:4;39775:12;39806:18;39796:81;;39862:4;39854:6;39850:17;39840:27;;39796:81;39924:2;39916:6;39913:14;39893:18;39890:38;39887:84;;;39943:18;;:::i;:::-;39887:84;39708:269;39657:320;;;:::o;39983:281::-;40066:27;40088:4;40066:27;:::i;:::-;40058:6;40054:40;40196:6;40184:10;40181:22;40160:18;40148:10;40145:34;40142:62;40139:88;;;40207:18;;:::i;:::-;40139:88;40247:10;40243:2;40236:22;40026:238;39983:281;;:::o;40270:233::-;40309:3;40332:24;40350:5;40332:24;:::i;:::-;40323:33;;40378:66;40371:5;40368:77;40365:103;;;40448:18;;:::i;:::-;40365:103;40495:1;40488:5;40484:13;40477:20;;40270:233;;;:::o;40509:176::-;40541:1;40558:20;40576:1;40558:20;:::i;:::-;40553:25;;40592:20;40610:1;40592:20;:::i;:::-;40587:25;;40631:1;40621:35;;40636:18;;:::i;:::-;40621:35;40677:1;40674;40670:9;40665:14;;40509:176;;;;:::o;40691:180::-;40739:77;40736:1;40729:88;40836:4;40833:1;40826:15;40860:4;40857:1;40850:15;40877:180;40925:77;40922:1;40915:88;41022:4;41019:1;41012:15;41046:4;41043:1;41036:15;41063:180;41111:77;41108:1;41101:88;41208:4;41205:1;41198:15;41232:4;41229:1;41222:15;41249:180;41297:77;41294:1;41287:88;41394:4;41391:1;41384:15;41418:4;41415:1;41408:15;41435:180;41483:77;41480:1;41473:88;41580:4;41577:1;41570:15;41604:4;41601:1;41594:15;41621:117;41730:1;41727;41720:12;41744:117;41853:1;41850;41843:12;41867:117;41976:1;41973;41966:12;41990:117;42099:1;42096;42089:12;42113:117;42222:1;42219;42212:12;42236:117;42345:1;42342;42335:12;42359:102;42400:6;42451:2;42447:7;42442:2;42435:5;42431:14;42427:28;42417:38;;42359:102;;;:::o;42467:221::-;42607:34;42603:1;42595:6;42591:14;42584:58;42676:4;42671:2;42663:6;42659:15;42652:29;42467:221;:::o;42694:161::-;42834:13;42830:1;42822:6;42818:14;42811:37;42694:161;:::o;42861:225::-;43001:34;42997:1;42989:6;42985:14;42978:58;43070:8;43065:2;43057:6;43053:15;43046:33;42861:225;:::o;43092:229::-;43232:34;43228:1;43220:6;43216:14;43209:58;43301:12;43296:2;43288:6;43284:15;43277:37;43092:229;:::o;43327:222::-;43467:34;43463:1;43455:6;43451:14;43444:58;43536:5;43531:2;43523:6;43519:15;43512:30;43327:222;:::o;43555:224::-;43695:34;43691:1;43683:6;43679:14;43672:58;43764:7;43759:2;43751:6;43747:15;43740:32;43555:224;:::o;43785:220::-;43925:34;43921:1;43913:6;43909:14;43902:58;43994:3;43989:2;43981:6;43977:15;43970:28;43785:220;:::o;44011:179::-;44151:31;44147:1;44139:6;44135:14;44128:55;44011:179;:::o;44196:244::-;44336:34;44332:1;44324:6;44320:14;44313:58;44405:27;44400:2;44392:6;44388:15;44381:52;44196:244;:::o;44446:176::-;44586:28;44582:1;44574:6;44570:14;44563:52;44446:176;:::o;44628:230::-;44768:34;44764:1;44756:6;44752:14;44745:58;44837:13;44832:2;44824:6;44820:15;44813:38;44628:230;:::o;44864:169::-;45004:21;45000:1;44992:6;44988:14;44981:45;44864:169;:::o;45039:225::-;45179:34;45175:1;45167:6;45163:14;45156:58;45248:8;45243:2;45235:6;45231:15;45224:33;45039:225;:::o;45270:158::-;45410:10;45406:1;45398:6;45394:14;45387:34;45270:158;:::o;45434:182::-;45574:34;45570:1;45562:6;45558:14;45551:58;45434:182;:::o;45622:234::-;45762:34;45758:1;45750:6;45746:14;45739:58;45831:17;45826:2;45818:6;45814:15;45807:42;45622:234;:::o;45862:176::-;46002:28;45998:1;45990:6;45986:14;45979:52;45862:176;:::o;46044:237::-;46184:34;46180:1;46172:6;46168:14;46161:58;46253:20;46248:2;46240:6;46236:15;46229:45;46044:237;:::o;46287:221::-;46427:34;46423:1;46415:6;46411:14;46404:58;46496:4;46491:2;46483:6;46479:15;46472:29;46287:221;:::o;46514:114::-;;:::o;46634:238::-;46774:34;46770:1;46762:6;46758:14;46751:58;46843:21;46838:2;46830:6;46826:15;46819:46;46634:238;:::o;46878:220::-;47018:34;47014:1;47006:6;47002:14;46995:58;47087:3;47082:2;47074:6;47070:15;47063:28;46878:220;:::o;47104:227::-;47244:34;47240:1;47232:6;47228:14;47221:58;47313:10;47308:2;47300:6;47296:15;47289:35;47104:227;:::o;47337:233::-;47477:34;47473:1;47465:6;47461:14;47454:58;47546:16;47541:2;47533:6;47529:15;47522:41;47337:233;:::o;47576:181::-;47716:33;47712:1;47704:6;47700:14;47693:57;47576:181;:::o;47763:234::-;47903:34;47899:1;47891:6;47887:14;47880:58;47972:17;47967:2;47959:6;47955:15;47948:42;47763:234;:::o;48003:232::-;48143:34;48139:1;48131:6;48127:14;48120:58;48212:15;48207:2;48199:6;48195:15;48188:40;48003:232;:::o;48241:122::-;48314:24;48332:5;48314:24;:::i;:::-;48307:5;48304:35;48294:63;;48353:1;48350;48343:12;48294:63;48241:122;:::o;48369:116::-;48439:21;48454:5;48439:21;:::i;:::-;48432:5;48429:32;48419:60;;48475:1;48472;48465:12;48419:60;48369:116;:::o;48491:120::-;48563:23;48580:5;48563:23;:::i;:::-;48556:5;48553:34;48543:62;;48601:1;48598;48591:12;48543:62;48491:120;:::o;48617:122::-;48690:24;48708:5;48690:24;:::i;:::-;48683:5;48680:35;48670:63;;48729:1;48726;48719:12;48670:63;48617:122;:::o

Swarm Source

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