ETH Price: $2,843.14 (-10.04%)
Gas: 12 Gwei

Token

Dysto Mfers (DYSTOMFER)
 

Overview

Max Total Supply

341 DYSTOMFER

Holders

157

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 DYSTOMFER
0x75b05b242d36910646886c5098fd515ed9974544
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:
DystoMfers

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.4;

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

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

// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
/**
 * @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);
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
/**
 * @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`, 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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 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);

    /**
     * @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;
}

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)
/**
 * @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 tokenId);

    /**
     * @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);
}

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

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
/**
 * @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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)
/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a / b + (a % b == 0 ? 0 : 1);
    }
}

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

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

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

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

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

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

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

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

interface DystoPunks {
    function balanceOf(address ownwer) external view returns (uint256);
}

interface Mfers {
    function balanceOf(address ownwer) external view returns (uint256);
}

interface iCreds {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function burnFrom(address sender, uint256 amount) view external;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// Creator: Chiru Labs
/**
 * @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
 */
abstract 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 {}
}

contract DystoMfers is ERC721A, Ownable {
    using Strings for uint256;
    uint256 public constant maxSupply = 6969;

    uint256 public claimedFreeAmount = 0;
    uint256 public claimedDystosAmount = 0;
    uint256 public claimedMfersAmount = 0;
    uint256 public resFreeAmount = 1000;
    uint256 public resDystosAmount = 1000;
    uint256 public resMfersAmount = 1000;
    uint256 public mintPrice = 0.0069 ether;
    uint256 public mintPriceCREDS = 250 ether;
    uint256 public maxMintPerWallet = 10;

    address public DYSTOS = 0xbEA8123277142dE42571f1fAc045225a1D347977;
    address public MFERS = 0x79FCDEF22feeD20eDDacbB2587640e45491b757f;
    address public CREDS = 0xc13F4F0F865bAc08F62654B57E38669EbC4747a3;

    string private _baseURIExtended = "https://gateway.pinata.cloud/ipfs/Qmf87Cn2hqXipcTMWDyzoKZdP5jGDpwGoUdTNCKqmqb73s/";

    constructor() ERC721A("Dysto Mfers", "DYSTOMFER") {
        _safeMint(msg.sender, 69);
    }

    function setMintPrice(uint256 newMintPrice) external onlyOwner {
        mintPrice = newMintPrice;
    }

    function setMintCREDSPrice(uint256 newMintPrice) external onlyOwner {
        mintPriceCREDS = newMintPrice;
    }

    function setMaxMintPerWallet(uint256 newMaxMintPerWallet) external onlyOwner {
        maxMintPerWallet = newMaxMintPerWallet;
    }

    function setBaseURI(string memory baseURI) external onlyOwner {
        _baseURIExtended = baseURI;
    }

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

    function tokenURI(uint256 token) public view virtual override returns (string memory) {
        require(token >= 0 && token <= totalSupply(),"URI query for nonexistent token");
        return string(abi.encodePacked(_baseURIExtended, token.toString()));
    }

    function withdrawCreds() external onlyOwner {

        uint256 bal = iCreds(CREDS).balanceOf(address(this));

        iCreds(CREDS).approve(address(this), bal);
        iCreds(CREDS).transferFrom(address(this), msg.sender, bal);
    }

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        Address.sendValue(payable(msg.sender), balance);
    }

    mapping(address => uint256) public minted;
    mapping(address => uint256) public dystosminted;
    mapping(address => uint256) public mfersminted;
    mapping(address => uint256) public freeminted;

    function setDystosContract(address addr) public onlyOwner {
        DYSTOS = addr;
    }
    function setMfersContract(address addr) public onlyOwner {
        MFERS = addr;
    }
    function setCredsContract(address addr) public onlyOwner {
        CREDS = addr;
    }
    function setDystosMintSupply(uint newLimit) public onlyOwner {
        resDystosAmount = newLimit;
    }
    function setMfersMintSupply(uint newLimit) public onlyOwner {
        resMfersAmount = newLimit;
    }
    function setFreeMintSupply(uint newLimit) public onlyOwner {
        resFreeAmount = newLimit;
    }

    function claimByDysto() external {
        require(msg.sender == tx.origin, "Wallet required");
        require(dystosminted[msg.sender] < 1, "limit per wallet reached");
        require((claimedDystosAmount + 1) <= resDystosAmount, "No more free mints for dystos holders available!");

        uint256 nftamt = DystoPunks(DYSTOS).balanceOf(msg.sender);

        require(nftamt >= 1, "Only DystoPunks holders can claim!");

        claimedDystosAmount += 1;
        dystosminted[msg.sender] += 1;

        _safeMint(msg.sender, 1);
    }

    function claimByMfers() external {
        require(msg.sender == tx.origin, "Wallet required");
        require(mfersminted[msg.sender] < 1, "limit per wallet reached");
        require((claimedMfersAmount + 1) <= resMfersAmount, "No more free mints for mfers holders available!");

        uint256 nftamt = Mfers(MFERS).balanceOf(msg.sender);

        require(nftamt >= 1, "Only mfers holders can claim!");

        claimedMfersAmount += 1;
        mfersminted[msg.sender] += 1;

        _safeMint(msg.sender, 1);
    }

    function claimFreeDystoMfer() external {
        require(msg.sender == tx.origin, "User wallet required");
        require(freeminted[msg.sender] < 1, "limit per wallet reached");
        require((claimedFreeAmount + 1) <= resFreeAmount, "No more free mints available!");

        claimedFreeAmount += 1;
        freeminted[msg.sender] += 1;

        _safeMint(msg.sender, 1);
    }

    function mintDystoMfer(uint amount) external payable {
        require(msg.sender == tx.origin, "Wallet required");
        require(minted[msg.sender] + amount <= maxMintPerWallet, "limit per wallet reached");

        uint256 mintableAmount = amount;

        // check to ensure amount is not exceeded MAX_SUPPLY
        uint256 avail = maxSupply - totalSupply() - resDystosAmount - resMfersAmount - resFreeAmount;

        mintableAmount = Math.min(mintableAmount, avail);
        require(mintableAmount > 0, "Sold out!");

        uint256 totalMintCost = mintableAmount * mintPrice;
        require(msg.value >= totalMintCost, "Not enough ETH sent; check price!"); 

        minted[msg.sender] += mintableAmount;

        _safeMint(msg.sender, mintableAmount);

        // Refund unused fund
        uint256 changes = msg.value - totalMintCost;
        if (changes != 0) {
            Address.sendValue(payable(msg.sender), changes);
        }
    }

    function mintDystoMferWithCreds(uint amount) public  {
        require(msg.sender == tx.origin, "Wallet required");
        require(minted[msg.sender] + amount <= maxMintPerWallet, "limit per wallet reached");

        uint256 mintableAmount = amount;

        // check to ensure amount is not exceeded MAX_SUPPLY
        uint256 avail = maxSupply - totalSupply() - resDystosAmount - resMfersAmount - resFreeAmount;
        
        mintableAmount = Math.min(mintableAmount, avail);
        require(mintableAmount > 0, "Sold out!");

        uint valueHold = iCreds(CREDS).balanceOf(msg.sender);
        require(mintPriceCREDS * mintableAmount <= valueHold, "Not enough $CREDS available; check price!");

        uint256 totalMintCost = mintableAmount * mintPriceCREDS;

        iCreds(CREDS).transferFrom(msg.sender,address(this),totalMintCost);
        minted[msg.sender] += mintableAmount;
        _safeMint(msg.sender, mintableAmount);
    }
}

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":[],"name":"CREDS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYSTOS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MFERS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"claimByDysto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimByMfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFreeDystoMfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimedDystosAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimedFreeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimedMfersAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dystosminted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeminted","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":"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":"maxMintPerWallet","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":"address","name":"","type":"address"}],"name":"mfersminted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintDystoMfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintDystoMferWithCreds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPriceCREDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resDystosAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resFreeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resMfersAmount","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":"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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setCredsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setDystosContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setDystosMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setFreeMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMintPerWallet","type":"uint256"}],"name":"setMaxMintPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setMfersContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMfersMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintPrice","type":"uint256"}],"name":"setMintCREDSPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintPrice","type":"uint256"}],"name":"setMintPrice","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":"token","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawCreds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600060085560006009556000600a556103e8600b556103e8600c556103e8600d556618838370f34000600e55680d8d726b7177a80000600f55600a60105573bea8123277142de42571f1fac045225a1d347977601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507379fcdef22feed20eddacbb2587640e45491b757f601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c13f4f0f865bac08f62654b57e38669ebc4747a3601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180608001604052806051815260200162006c52605191396014908051906020019062000172929190620008e3565b503480156200018057600080fd5b506040518060400160405280600b81526020017f447973746f204d666572730000000000000000000000000000000000000000008152506040518060400160405280600981526020017f445953544f4d4645520000000000000000000000000000000000000000000000815250816001908051906020019062000205929190620008e3565b5080600290805190602001906200021e929190620008e3565b50505062000241620002356200025a60201b60201c565b6200026260201b60201c565b620002543360456200032860201b60201c565b62000dbd565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200034a8282604051806020016040528060008152506200034e60201b60201c565b5050565b6200036383838360016200036860201b60201c565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620003e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d89062000b2a565b60405180910390fd5b600084141562000428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041f9062000b4c565b60405180910390fd5b6200043d60008683876200070a60201b60201c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015620006e557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315620006cf576200068c60008884886200071060201b60201c565b620006ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006c59062000b08565b60405180910390fd5b5b818060010192505080806001019150506200060b565b508060008190555050620007036000868387620008ca60201b60201c565b5050505050565b50505050565b60006200073e8473ffffffffffffffffffffffffffffffffffffffff16620008d060201b62002fe01760201c565b15620008bd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620007706200025a60201b60201c565b8786866040518563ffffffff1660e01b815260040162000794949392919062000ab4565b602060405180830381600087803b158015620007af57600080fd5b505af1925050508015620007e357506040513d601f19601f82011682018060405250810190620007e09190620009aa565b60015b6200086c573d806000811462000816576040519150601f19603f3d011682016040523d82523d6000602084013e6200081b565b606091505b5060008151141562000864576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085b9062000b08565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008c2565b600190505b949350505050565b50505050565b600080823b905060008111915050919050565b828054620008f19062000c3b565b90600052602060002090601f01602090048101928262000915576000855562000961565b82601f106200093057805160ff191683800117855562000961565b8280016001018555821562000961579182015b828111156200096057825182559160200191906001019062000943565b5b50905062000970919062000974565b5090565b5b808211156200098f57600081600090555060010162000975565b5090565b600081519050620009a48162000da3565b92915050565b600060208284031215620009c357620009c262000ca0565b5b6000620009d38482850162000993565b91505092915050565b620009e78162000b9b565b82525050565b6000620009fa8262000b6e565b62000a06818562000b79565b935062000a1881856020860162000c05565b62000a238162000ca5565b840191505092915050565b600062000a3d60338362000b8a565b915062000a4a8262000cb6565b604082019050919050565b600062000a6460218362000b8a565b915062000a718262000d05565b604082019050919050565b600062000a8b60288362000b8a565b915062000a988262000d54565b604082019050919050565b62000aae8162000bfb565b82525050565b600060808201905062000acb6000830187620009dc565b62000ada6020830186620009dc565b62000ae9604083018562000aa3565b818103606083015262000afd8184620009ed565b905095945050505050565b6000602082019050818103600083015262000b238162000a2e565b9050919050565b6000602082019050818103600083015262000b458162000a55565b9050919050565b6000602082019050818103600083015262000b678162000a7c565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000ba88262000bdb565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000c2557808201518184015260208101905062000c08565b8381111562000c35576000848401525b50505050565b6000600282049050600182168062000c5457607f821691505b6020821081141562000c6b5762000c6a62000c71565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b62000dae8162000baf565b811462000dba57600080fd5b50565b615e858062000dcd6000396000f3fe60806040526004361061031a5760003560e01c8063777025c6116101ab578063c87b56dd116100f7578063ef56267e11610095578063f2ce0d651161006f578063f2ce0d6514610b9c578063f2fde38b14610bb8578063f4a0a52814610be1578063fd47949314610c0a5761031a565b8063ef56267e14610b1f578063ef5c64d014610b5c578063f14f1e8a14610b855761031a565b8063dc702702116100d1578063dc70270214610a75578063e6837e5b14610aa0578063e985e9c514610acb578063eb734d0214610b085761031a565b8063c87b56dd146109e4578063cfc802e114610a21578063d5abeb0114610a4a5761031a565b8063a785630611610164578063b373f02a1161013e578063b373f02a14610964578063b88d4fde1461097b578063bce17ca5146109a4578063c4c39ed5146109bb5761031a565b8063a7856306146108e7578063afdf613414610910578063b228d925146109395761031a565b8063777025c6146107e95780638da5cb5b146108125780638f65c6011461083d57806395d89b41146108685780639fee12dc14610893578063a22cb465146108be5761031a565b8063348d54031161026a57806355f804b3116102235780636352211e116101fd5780636352211e1461072d5780636817c76c1461076a57806370a0823114610795578063715018a6146107d25761031a565b806355f804b31461069c57806358b7e014146106c557806359687f8b146106f05761031a565b8063348d5403146105a05780633ccfd60b146105c957806342842e0e146105e0578063489de0e3146106095780634f6ccce7146106345780634f99eaae146106715761031a565b80630fafabca116102d75780631e7269c5116102b15780631e7269c5146104d257806323b872dd1461050f5780632d35e3fc146105385780632f745c59146105635761031a565b80630fafabca1461045357806312a9e4ed1461047e57806318160ddd146104a75761031a565b806301bd35131461031f57806301ffc9a71461034857806306fdde031461038557806307f12eb8146103b0578063081812fc146103ed578063095ea7b31461042a575b600080fd5b34801561032b57600080fd5b5061034660048036038101906103419190614566565b610c35565b005b34801561035457600080fd5b5061036f600480360381019061036a91906144c3565b610cbb565b60405161037c9190614c92565b60405180910390f35b34801561039157600080fd5b5061039a610e05565b6040516103a79190614cad565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d291906142d3565b610e97565b6040516103e491906150cf565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190614566565b610eaf565b6040516104219190614bcb565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190614456565b610f34565b005b34801561045f57600080fd5b5061046861104d565b60405161047591906150cf565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a091906142d3565b611053565b005b3480156104b357600080fd5b506104bc611113565b6040516104c991906150cf565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f491906142d3565b61111c565b60405161050691906150cf565b60405180910390f35b34801561051b57600080fd5b5061053660048036038101906105319190614340565b611134565b005b34801561054457600080fd5b5061054d611144565b60405161055a91906150cf565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190614456565b61114a565b60405161059791906150cf565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190614566565b61133c565b005b3480156105d557600080fd5b506105de6113c2565b005b3480156105ec57600080fd5b5061060760048036038101906106029190614340565b611450565b005b34801561061557600080fd5b5061061e611470565b60405161062b91906150cf565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190614566565b611476565b60405161066891906150cf565b60405180910390f35b34801561067d57600080fd5b506106866114c9565b60405161069391906150cf565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be919061451d565b6114cf565b005b3480156106d157600080fd5b506106da611565565b6040516106e79190614bcb565b60405180910390f35b3480156106fc57600080fd5b50610717600480360381019061071291906142d3565b61158b565b60405161072491906150cf565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190614566565b6115a3565b6040516107619190614bcb565b60405180910390f35b34801561077657600080fd5b5061077f6115b9565b60405161078c91906150cf565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906142d3565b6115bf565b6040516107c991906150cf565b60405180910390f35b3480156107de57600080fd5b506107e76116a8565b005b3480156107f557600080fd5b50610810600480360381019061080b9190614566565b611730565b005b34801561081e57600080fd5b50610827611aeb565b6040516108349190614bcb565b60405180910390f35b34801561084957600080fd5b50610852611b15565b60405161085f9190614bcb565b60405180910390f35b34801561087457600080fd5b5061087d611b3b565b60405161088a9190614cad565b60405180910390f35b34801561089f57600080fd5b506108a8611bcd565b6040516108b591906150cf565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e09190614416565b611bd3565b005b3480156108f357600080fd5b5061090e600480360381019061090991906142d3565b611d54565b005b34801561091c57600080fd5b5061093760048036038101906109329190614566565b611e14565b005b34801561094557600080fd5b5061094e611e9a565b60405161095b91906150cf565b60405180910390f35b34801561097057600080fd5b50610979611ea0565b005b34801561098757600080fd5b506109a2600480360381019061099d9190614393565b612130565b005b3480156109b057600080fd5b506109b961218c565b005b3480156109c757600080fd5b506109e260048036038101906109dd9190614566565b612441565b005b3480156109f057600080fd5b50610a0b6004803603810190610a069190614566565b6124c7565b604051610a189190614cad565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906142d3565b612552565b005b348015610a5657600080fd5b50610a5f612612565b604051610a6c91906150cf565b60405180910390f35b348015610a8157600080fd5b50610a8a612618565b604051610a9791906150cf565b60405180910390f35b348015610aac57600080fd5b50610ab561261e565b604051610ac29190614bcb565b60405180910390f35b348015610ad757600080fd5b50610af26004803603810190610aed9190614300565b612644565b604051610aff9190614c92565b60405180910390f35b348015610b1457600080fd5b50610b1d6126d8565b005b348015610b2b57600080fd5b50610b466004803603810190610b4191906142d3565b612899565b604051610b5391906150cf565b60405180910390f35b348015610b6857600080fd5b50610b836004803603810190610b7e9190614566565b6128b1565b005b348015610b9157600080fd5b50610b9a612937565b005b610bb66004803603810190610bb19190614566565b612bec565b005b348015610bc457600080fd5b50610bdf6004803603810190610bda91906142d3565b612e5c565b005b348015610bed57600080fd5b50610c086004803603810190610c039190614566565b612f54565b005b348015610c1657600080fd5b50610c1f612fda565b604051610c2c91906150cf565b60405180910390f35b610c3d612ff3565b73ffffffffffffffffffffffffffffffffffffffff16610c5b611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890614f0f565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d8657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dee57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dfe5750610dfd82612ffb565b5b9050919050565b606060018054610e149061539f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e409061539f565b8015610e8d5780601f10610e6257610100808354040283529160200191610e8d565b820191906000526020600020905b815481529060010190602001808311610e7057829003601f168201915b5050505050905090565b60176020528060005260406000206000915090505481565b6000610eba82613065565b610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061508f565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f3f826115a3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614f8f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fcf612ff3565b73ffffffffffffffffffffffffffffffffffffffff161480610ffe5750610ffd81610ff8612ff3565b612644565b5b61103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490614e6f565b60405180910390fd5b611048838383613072565b505050565b600b5481565b61105b612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611079611aeb565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690614f0f565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054905090565b60156020528060005260406000206000915090505481565b61113f838383613124565b505050565b600d5481565b6000611155836115bf565b8210611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90614ccf565b60405180910390fd5b60006111a0611113565b905060008060005b838110156112fa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461129a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ec57868414156112e3578195505050505050611336565b83806001019450505b5080806001019150506111a8565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061502f565b60405180910390fd5b92915050565b611344612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611362611aeb565b73ffffffffffffffffffffffffffffffffffffffff16146113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af90614f0f565b60405180910390fd5b80600d8190555050565b6113ca612ff3565b73ffffffffffffffffffffffffffffffffffffffff166113e8611aeb565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590614f0f565b60405180910390fd5b600047905061144d3382613664565b50565b61146b83838360405180602001604052806000815250612130565b505050565b60095481565b6000611480611113565b82106114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890614d8f565b60405180910390fd5b819050919050565b600a5481565b6114d7612ff3565b73ffffffffffffffffffffffffffffffffffffffff166114f5611aeb565b73ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614f0f565b60405180910390fd5b8060149080519060200190611561929190614083565b5050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60166020528060005260406000206000915090505481565b60006115ae82613758565b600001519050919050565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614eaf565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116b0612ff3565b73ffffffffffffffffffffffffffffffffffffffff166116ce611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90614f0f565b60405180910390fd5b61172e60006138f2565b565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590614ecf565b60405180910390fd5b60105481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ec91906151d4565b111561182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182490614d6f565b60405180910390fd5b60008190506000600b54600d54600c54611845611113565b611b3961185291906152b5565b61185c91906152b5565b61186691906152b5565b61187091906152b5565b905061187c82826139b8565b9150600082116118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b8906150af565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161191e9190614bcb565b60206040518083038186803b15801561193657600080fd5b505afa15801561194a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196e9190614593565b90508083600f5461197f919061525b565b11156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061500f565b60405180910390fd5b6000600f54846119d0919061525b565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611a3193929190614be6565b602060405180830381600087803b158015611a4b57600080fd5b505af1158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a839190614496565b5083601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ad391906151d4565b92505081905550611ae433856139d1565b5050505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060028054611b4a9061539f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b769061539f565b8015611bc35780601f10611b9857610100808354040283529160200191611bc3565b820191906000526020600020905b815481529060010190602001808311611ba657829003601f168201915b5050505050905090565b60085481565b611bdb612ff3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4090614f2f565b60405180910390fd5b8060066000611c56612ff3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d03612ff3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d489190614c92565b60405180910390a35050565b611d5c612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611d7a611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790614f0f565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e1c612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611e3a611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614f0f565b60405180910390fd5b8060108190555050565b60105481565b611ea8612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611ec6611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614f0f565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f799190614bcb565b60206040518083038186803b158015611f9157600080fd5b505afa158015611fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc99190614593565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330836040518363ffffffff1660e01b8152600401612028929190614c69565b602060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207a9190614496565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b81526004016120da93929190614be6565b602060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212c9190614496565b5050565b61213b848484613124565b612147848484846139ef565b612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d90614faf565b60405180910390fd5b50505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614ecf565b60405180910390fd5b6001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614d6f565b60405180910390fd5b600d546001600a5461228e91906151d4565b11156122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614d0f565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161232c9190614bcb565b60206040518083038186803b15801561234457600080fd5b505afa158015612358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237c9190614593565b905060018110156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614e4f565b60405180910390fd5b6001600a60008282546123d591906151d4565b925050819055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461242c91906151d4565b9250508190555061243e3360016139d1565b50565b612449612ff3565b73ffffffffffffffffffffffffffffffffffffffff16612467611aeb565b73ffffffffffffffffffffffffffffffffffffffff16146124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b490614f0f565b60405180910390fd5b80600b8190555050565b6060600082101580156124e157506124dd611113565b8211155b612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614cef565b60405180910390fd5b601461252b83613b86565b60405160200161253c929190614b92565b6040516020818303038152906040529050919050565b61255a612ff3565b73ffffffffffffffffffffffffffffffffffffffff16612578611aeb565b73ffffffffffffffffffffffffffffffffffffffff16146125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590614f0f565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b3981565b600f5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273d90614f6f565b60405180910390fd5b6001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf90614d6f565b60405180910390fd5b600b5460016008546127da91906151d4565b111561281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281290614e8f565b60405180910390fd5b60016008600082825461282e91906151d4565b925050819055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461288591906151d4565b925050819055506128973360016139d1565b565b60186020528060005260406000206000915090505481565b6128b9612ff3565b73ffffffffffffffffffffffffffffffffffffffff166128d7611aeb565b73ffffffffffffffffffffffffffffffffffffffff161461292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490614f0f565b60405180910390fd5b80600f8190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614ecf565b60405180910390fd5b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90614d6f565b60405180910390fd5b600c546001600954612a3991906151d4565b1115612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190614daf565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612ad79190614bcb565b60206040518083038186803b158015612aef57600080fd5b505afa158015612b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b279190614593565b90506001811015612b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6490614dcf565b60405180910390fd5b600160096000828254612b8091906151d4565b925050819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd791906151d4565b92505081905550612be93360016139d1565b50565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190614ecf565b60405180910390fd5b60105481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca891906151d4565b1115612ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce090614d6f565b60405180910390fd5b60008190506000600b54600d54600c54612d01611113565b611b39612d0e91906152b5565b612d1891906152b5565b612d2291906152b5565b612d2c91906152b5565b9050612d3882826139b8565b915060008211612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d74906150af565b60405180910390fd5b6000600e5483612d8d919061525b565b905080341015612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc99061504f565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e2191906151d4565b92505081905550612e3233846139d1565b60008134612e4091906152b5565b905060008114612e5557612e543382613664565b5b5050505050565b612e64612ff3565b73ffffffffffffffffffffffffffffffffffffffff16612e82611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614612ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecf90614f0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3f90614d2f565b60405180910390fd5b612f51816138f2565b50565b612f5c612ff3565b73ffffffffffffffffffffffffffffffffffffffff16612f7a611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614612fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc790614f0f565b60405180910390fd5b80600e8190555050565b600c5481565b600080823b905060008111915050919050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061312f82613758565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16613156612ff3565b73ffffffffffffffffffffffffffffffffffffffff1614806131b2575061317b612ff3565b73ffffffffffffffffffffffffffffffffffffffff1661319a84610eaf565b73ffffffffffffffffffffffffffffffffffffffff16145b806131ce57506131cd82600001516131c8612ff3565b612644565b5b905080613210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320790614f4f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614613282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327990614eef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156132f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e990614def565b60405180910390fd5b6132ff8585856001613ce7565b61330f6000848460000151613072565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156135f45761355381613065565b156135f35782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461365d8585856001613ced565b5050505050565b804710156136a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369e90614e2f565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516136cd90614bb6565b60006040518083038185875af1925050503d806000811461370a576040519150601f19603f3d011682016040523d82523d6000602084013e61370f565b606091505b5050905080613753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374a90614e0f565b60405180910390fd5b505050565b613760614109565b61376982613065565b6137a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379f90614d4f565b60405180910390fd5b60008290505b600081106138b1576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146138a25780925050506138ed565b508080600190039150506137ae565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e49061506f565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183106139c757816139c9565b825b905092915050565b6139eb828260405180602001604052806000815250613cf3565b5050565b6000613a108473ffffffffffffffffffffffffffffffffffffffff16612fe0565b15613b79578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a39612ff3565b8786866040518563ffffffff1660e01b8152600401613a5b9493929190614c1d565b602060405180830381600087803b158015613a7557600080fd5b505af1925050508015613aa657506040513d601f19601f82011682018060405250810190613aa391906144f0565b60015b613b29573d8060008114613ad6576040519150601f19603f3d011682016040523d82523d6000602084013e613adb565b606091505b50600081511415613b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1890614faf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613b7e565b600190505b949350505050565b60606000821415613bce576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613ce2565b600082905060005b60008214613c00578080613be990615402565b915050600a82613bf9919061522a565b9150613bd6565b60008167ffffffffffffffff811115613c1c57613c1b615538565b5b6040519080825280601f01601f191660200182016040528015613c4e5781602001600182028036833780820191505090505b5090505b60008514613cdb57600182613c6791906152b5565b9150600a85613c76919061544b565b6030613c8291906151d4565b60f81b818381518110613c9857613c97615509565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613cd4919061522a565b9450613c52565b8093505050505b919050565b50505050565b50505050565b613d008383836001613d05565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d7290614fcf565b60405180910390fd5b6000841415613dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db690614fef565b60405180910390fd5b613dcc6000868387613ce7565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561406657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156140515761401160008884886139ef565b614050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161404790614faf565b60405180910390fd5b5b81806001019250508080600101915050613f9a565b50806000819055505061407c6000868387613ced565b5050505050565b82805461408f9061539f565b90600052602060002090601f0160209004810192826140b157600085556140f8565b82601f106140ca57805160ff19168380011785556140f8565b828001600101855582156140f8579182015b828111156140f75782518255916020019190600101906140dc565b5b5090506141059190614143565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561415c576000816000905550600101614144565b5090565b600061417361416e8461510f565b6150ea565b90508281526020810184848401111561418f5761418e61556c565b5b61419a84828561535d565b509392505050565b60006141b56141b084615140565b6150ea565b9050828152602081018484840111156141d1576141d061556c565b5b6141dc84828561535d565b509392505050565b6000813590506141f381615df3565b92915050565b60008135905061420881615e0a565b92915050565b60008151905061421d81615e0a565b92915050565b60008135905061423281615e21565b92915050565b60008151905061424781615e21565b92915050565b600082601f83011261426257614261615567565b5b8135614272848260208601614160565b91505092915050565b600082601f8301126142905761428f615567565b5b81356142a08482602086016141a2565b91505092915050565b6000813590506142b881615e38565b92915050565b6000815190506142cd81615e38565b92915050565b6000602082840312156142e9576142e8615576565b5b60006142f7848285016141e4565b91505092915050565b6000806040838503121561431757614316615576565b5b6000614325858286016141e4565b9250506020614336858286016141e4565b9150509250929050565b60008060006060848603121561435957614358615576565b5b6000614367868287016141e4565b9350506020614378868287016141e4565b9250506040614389868287016142a9565b9150509250925092565b600080600080608085870312156143ad576143ac615576565b5b60006143bb878288016141e4565b94505060206143cc878288016141e4565b93505060406143dd878288016142a9565b925050606085013567ffffffffffffffff8111156143fe576143fd615571565b5b61440a8782880161424d565b91505092959194509250565b6000806040838503121561442d5761442c615576565b5b600061443b858286016141e4565b925050602061444c858286016141f9565b9150509250929050565b6000806040838503121561446d5761446c615576565b5b600061447b858286016141e4565b925050602061448c858286016142a9565b9150509250929050565b6000602082840312156144ac576144ab615576565b5b60006144ba8482850161420e565b91505092915050565b6000602082840312156144d9576144d8615576565b5b60006144e784828501614223565b91505092915050565b60006020828403121561450657614505615576565b5b600061451484828501614238565b91505092915050565b60006020828403121561453357614532615576565b5b600082013567ffffffffffffffff81111561455157614550615571565b5b61455d8482850161427b565b91505092915050565b60006020828403121561457c5761457b615576565b5b600061458a848285016142a9565b91505092915050565b6000602082840312156145a9576145a8615576565b5b60006145b7848285016142be565b91505092915050565b6145c9816152e9565b82525050565b6145d8816152fb565b82525050565b60006145e982615186565b6145f3818561519c565b935061460381856020860161536c565b61460c8161557b565b840191505092915050565b600061462282615191565b61462c81856151b8565b935061463c81856020860161536c565b6146458161557b565b840191505092915050565b600061465b82615191565b61466581856151c9565b935061467581856020860161536c565b80840191505092915050565b6000815461468e8161539f565b61469881866151c9565b945060018216600081146146b357600181146146c4576146f7565b60ff198316865281860193506146f7565b6146cd85615171565b60005b838110156146ef578154818901526001820191506020810190506146d0565b838801955050505b50505092915050565b600061470d6022836151b8565b91506147188261558c565b604082019050919050565b6000614730601f836151b8565b915061473b826155db565b602082019050919050565b6000614753602f836151b8565b915061475e82615604565b604082019050919050565b60006147766026836151b8565b915061478182615653565b604082019050919050565b6000614799602a836151b8565b91506147a4826156a2565b604082019050919050565b60006147bc6018836151b8565b91506147c7826156f1565b602082019050919050565b60006147df6023836151b8565b91506147ea8261571a565b604082019050919050565b60006148026030836151b8565b915061480d82615769565b604082019050919050565b60006148256022836151b8565b9150614830826157b8565b604082019050919050565b60006148486025836151b8565b915061485382615807565b604082019050919050565b600061486b603a836151b8565b915061487682615856565b604082019050919050565b600061488e601d836151b8565b9150614899826158a5565b602082019050919050565b60006148b1601d836151b8565b91506148bc826158ce565b602082019050919050565b60006148d46039836151b8565b91506148df826158f7565b604082019050919050565b60006148f7601d836151b8565b915061490282615946565b602082019050919050565b600061491a602b836151b8565b91506149258261596f565b604082019050919050565b600061493d600f836151b8565b9150614948826159be565b602082019050919050565b60006149606026836151b8565b915061496b826159e7565b604082019050919050565b60006149836020836151b8565b915061498e82615a36565b602082019050919050565b60006149a6601a836151b8565b91506149b182615a5f565b602082019050919050565b60006149c96032836151b8565b91506149d482615a88565b604082019050919050565b60006149ec6014836151b8565b91506149f782615ad7565b602082019050919050565b6000614a0f6022836151b8565b9150614a1a82615b00565b604082019050919050565b6000614a326000836151ad565b9150614a3d82615b4f565b600082019050919050565b6000614a556033836151b8565b9150614a6082615b52565b604082019050919050565b6000614a786021836151b8565b9150614a8382615ba1565b604082019050919050565b6000614a9b6028836151b8565b9150614aa682615bf0565b604082019050919050565b6000614abe6029836151b8565b9150614ac982615c3f565b604082019050919050565b6000614ae1602e836151b8565b9150614aec82615c8e565b604082019050919050565b6000614b046021836151b8565b9150614b0f82615cdd565b604082019050919050565b6000614b27602f836151b8565b9150614b3282615d2c565b604082019050919050565b6000614b4a602d836151b8565b9150614b5582615d7b565b604082019050919050565b6000614b6d6009836151b8565b9150614b7882615dca565b602082019050919050565b614b8c81615353565b82525050565b6000614b9e8285614681565b9150614baa8284614650565b91508190509392505050565b6000614bc182614a25565b9150819050919050565b6000602082019050614be060008301846145c0565b92915050565b6000606082019050614bfb60008301866145c0565b614c0860208301856145c0565b614c156040830184614b83565b949350505050565b6000608082019050614c3260008301876145c0565b614c3f60208301866145c0565b614c4c6040830185614b83565b8181036060830152614c5e81846145de565b905095945050505050565b6000604082019050614c7e60008301856145c0565b614c8b6020830184614b83565b9392505050565b6000602082019050614ca760008301846145cf565b92915050565b60006020820190508181036000830152614cc78184614617565b905092915050565b60006020820190508181036000830152614ce881614700565b9050919050565b60006020820190508181036000830152614d0881614723565b9050919050565b60006020820190508181036000830152614d2881614746565b9050919050565b60006020820190508181036000830152614d4881614769565b9050919050565b60006020820190508181036000830152614d688161478c565b9050919050565b60006020820190508181036000830152614d88816147af565b9050919050565b60006020820190508181036000830152614da8816147d2565b9050919050565b60006020820190508181036000830152614dc8816147f5565b9050919050565b60006020820190508181036000830152614de881614818565b9050919050565b60006020820190508181036000830152614e088161483b565b9050919050565b60006020820190508181036000830152614e288161485e565b9050919050565b60006020820190508181036000830152614e4881614881565b9050919050565b60006020820190508181036000830152614e68816148a4565b9050919050565b60006020820190508181036000830152614e88816148c7565b9050919050565b60006020820190508181036000830152614ea8816148ea565b9050919050565b60006020820190508181036000830152614ec88161490d565b9050919050565b60006020820190508181036000830152614ee881614930565b9050919050565b60006020820190508181036000830152614f0881614953565b9050919050565b60006020820190508181036000830152614f2881614976565b9050919050565b60006020820190508181036000830152614f4881614999565b9050919050565b60006020820190508181036000830152614f68816149bc565b9050919050565b60006020820190508181036000830152614f88816149df565b9050919050565b60006020820190508181036000830152614fa881614a02565b9050919050565b60006020820190508181036000830152614fc881614a48565b9050919050565b60006020820190508181036000830152614fe881614a6b565b9050919050565b6000602082019050818103600083015261500881614a8e565b9050919050565b6000602082019050818103600083015261502881614ab1565b9050919050565b6000602082019050818103600083015261504881614ad4565b9050919050565b6000602082019050818103600083015261506881614af7565b9050919050565b6000602082019050818103600083015261508881614b1a565b9050919050565b600060208201905081810360008301526150a881614b3d565b9050919050565b600060208201905081810360008301526150c881614b60565b9050919050565b60006020820190506150e46000830184614b83565b92915050565b60006150f4615105565b905061510082826153d1565b919050565b6000604051905090565b600067ffffffffffffffff82111561512a57615129615538565b5b6151338261557b565b9050602081019050919050565b600067ffffffffffffffff82111561515b5761515a615538565b5b6151648261557b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006151df82615353565b91506151ea83615353565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561521f5761521e61547c565b5b828201905092915050565b600061523582615353565b915061524083615353565b9250826152505761524f6154ab565b5b828204905092915050565b600061526682615353565b915061527183615353565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152aa576152a961547c565b5b828202905092915050565b60006152c082615353565b91506152cb83615353565b9250828210156152de576152dd61547c565b5b828203905092915050565b60006152f482615333565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561538a57808201518184015260208101905061536f565b83811115615399576000848401525b50505050565b600060028204905060018216806153b757607f821691505b602082108114156153cb576153ca6154da565b5b50919050565b6153da8261557b565b810181811067ffffffffffffffff821117156153f9576153f8615538565b5b80604052505050565b600061540d82615353565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154405761543f61547c565b5b600182019050919050565b600061545682615353565b915061546183615353565b925082615471576154706154ab565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f4e6f206d6f72652066726565206d696e747320666f72206d6665727320686f6c60008201527f6465727320617661696c61626c65210000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6c696d6974207065722077616c6c657420726561636865640000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f72652066726565206d696e747320666f7220647973746f7320686f60008201527f6c6465727320617661696c61626c652100000000000000000000000000000000602082015250565b7f4f6e6c7920447973746f50756e6b7320686f6c646572732063616e20636c616960008201527f6d21000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f6e6c79206d6665727320686f6c646572732063616e20636c61696d21000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f4e6f206d6f72652066726565206d696e747320617661696c61626c6521000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f57616c6c65742072657175697265640000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f557365722077616c6c6574207265717569726564000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682024435245445320617661696c61626c653b2063686560008201527f636b207072696365210000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e743b20636865636b20707269636560008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b615dfc816152e9565b8114615e0757600080fd5b50565b615e13816152fb565b8114615e1e57600080fd5b50565b615e2a81615307565b8114615e3557600080fd5b50565b615e4181615353565b8114615e4c57600080fd5b5056fea264697066735822122006b5d32fae68548cce30ce720e91ec5fc4e1c9a37b19911f656c74298600dcbb64736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d663837436e32687158697063544d5744797a6f4b5a6450356a47447077476f5564544e434b716d71623733732f

Deployed Bytecode

0x60806040526004361061031a5760003560e01c8063777025c6116101ab578063c87b56dd116100f7578063ef56267e11610095578063f2ce0d651161006f578063f2ce0d6514610b9c578063f2fde38b14610bb8578063f4a0a52814610be1578063fd47949314610c0a5761031a565b8063ef56267e14610b1f578063ef5c64d014610b5c578063f14f1e8a14610b855761031a565b8063dc702702116100d1578063dc70270214610a75578063e6837e5b14610aa0578063e985e9c514610acb578063eb734d0214610b085761031a565b8063c87b56dd146109e4578063cfc802e114610a21578063d5abeb0114610a4a5761031a565b8063a785630611610164578063b373f02a1161013e578063b373f02a14610964578063b88d4fde1461097b578063bce17ca5146109a4578063c4c39ed5146109bb5761031a565b8063a7856306146108e7578063afdf613414610910578063b228d925146109395761031a565b8063777025c6146107e95780638da5cb5b146108125780638f65c6011461083d57806395d89b41146108685780639fee12dc14610893578063a22cb465146108be5761031a565b8063348d54031161026a57806355f804b3116102235780636352211e116101fd5780636352211e1461072d5780636817c76c1461076a57806370a0823114610795578063715018a6146107d25761031a565b806355f804b31461069c57806358b7e014146106c557806359687f8b146106f05761031a565b8063348d5403146105a05780633ccfd60b146105c957806342842e0e146105e0578063489de0e3146106095780634f6ccce7146106345780634f99eaae146106715761031a565b80630fafabca116102d75780631e7269c5116102b15780631e7269c5146104d257806323b872dd1461050f5780632d35e3fc146105385780632f745c59146105635761031a565b80630fafabca1461045357806312a9e4ed1461047e57806318160ddd146104a75761031a565b806301bd35131461031f57806301ffc9a71461034857806306fdde031461038557806307f12eb8146103b0578063081812fc146103ed578063095ea7b31461042a575b600080fd5b34801561032b57600080fd5b5061034660048036038101906103419190614566565b610c35565b005b34801561035457600080fd5b5061036f600480360381019061036a91906144c3565b610cbb565b60405161037c9190614c92565b60405180910390f35b34801561039157600080fd5b5061039a610e05565b6040516103a79190614cad565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d291906142d3565b610e97565b6040516103e491906150cf565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190614566565b610eaf565b6040516104219190614bcb565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190614456565b610f34565b005b34801561045f57600080fd5b5061046861104d565b60405161047591906150cf565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a091906142d3565b611053565b005b3480156104b357600080fd5b506104bc611113565b6040516104c991906150cf565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f491906142d3565b61111c565b60405161050691906150cf565b60405180910390f35b34801561051b57600080fd5b5061053660048036038101906105319190614340565b611134565b005b34801561054457600080fd5b5061054d611144565b60405161055a91906150cf565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190614456565b61114a565b60405161059791906150cf565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190614566565b61133c565b005b3480156105d557600080fd5b506105de6113c2565b005b3480156105ec57600080fd5b5061060760048036038101906106029190614340565b611450565b005b34801561061557600080fd5b5061061e611470565b60405161062b91906150cf565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190614566565b611476565b60405161066891906150cf565b60405180910390f35b34801561067d57600080fd5b506106866114c9565b60405161069391906150cf565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be919061451d565b6114cf565b005b3480156106d157600080fd5b506106da611565565b6040516106e79190614bcb565b60405180910390f35b3480156106fc57600080fd5b50610717600480360381019061071291906142d3565b61158b565b60405161072491906150cf565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190614566565b6115a3565b6040516107619190614bcb565b60405180910390f35b34801561077657600080fd5b5061077f6115b9565b60405161078c91906150cf565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906142d3565b6115bf565b6040516107c991906150cf565b60405180910390f35b3480156107de57600080fd5b506107e76116a8565b005b3480156107f557600080fd5b50610810600480360381019061080b9190614566565b611730565b005b34801561081e57600080fd5b50610827611aeb565b6040516108349190614bcb565b60405180910390f35b34801561084957600080fd5b50610852611b15565b60405161085f9190614bcb565b60405180910390f35b34801561087457600080fd5b5061087d611b3b565b60405161088a9190614cad565b60405180910390f35b34801561089f57600080fd5b506108a8611bcd565b6040516108b591906150cf565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e09190614416565b611bd3565b005b3480156108f357600080fd5b5061090e600480360381019061090991906142d3565b611d54565b005b34801561091c57600080fd5b5061093760048036038101906109329190614566565b611e14565b005b34801561094557600080fd5b5061094e611e9a565b60405161095b91906150cf565b60405180910390f35b34801561097057600080fd5b50610979611ea0565b005b34801561098757600080fd5b506109a2600480360381019061099d9190614393565b612130565b005b3480156109b057600080fd5b506109b961218c565b005b3480156109c757600080fd5b506109e260048036038101906109dd9190614566565b612441565b005b3480156109f057600080fd5b50610a0b6004803603810190610a069190614566565b6124c7565b604051610a189190614cad565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906142d3565b612552565b005b348015610a5657600080fd5b50610a5f612612565b604051610a6c91906150cf565b60405180910390f35b348015610a8157600080fd5b50610a8a612618565b604051610a9791906150cf565b60405180910390f35b348015610aac57600080fd5b50610ab561261e565b604051610ac29190614bcb565b60405180910390f35b348015610ad757600080fd5b50610af26004803603810190610aed9190614300565b612644565b604051610aff9190614c92565b60405180910390f35b348015610b1457600080fd5b50610b1d6126d8565b005b348015610b2b57600080fd5b50610b466004803603810190610b4191906142d3565b612899565b604051610b5391906150cf565b60405180910390f35b348015610b6857600080fd5b50610b836004803603810190610b7e9190614566565b6128b1565b005b348015610b9157600080fd5b50610b9a612937565b005b610bb66004803603810190610bb19190614566565b612bec565b005b348015610bc457600080fd5b50610bdf6004803603810190610bda91906142d3565b612e5c565b005b348015610bed57600080fd5b50610c086004803603810190610c039190614566565b612f54565b005b348015610c1657600080fd5b50610c1f612fda565b604051610c2c91906150cf565b60405180910390f35b610c3d612ff3565b73ffffffffffffffffffffffffffffffffffffffff16610c5b611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890614f0f565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d8657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dee57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dfe5750610dfd82612ffb565b5b9050919050565b606060018054610e149061539f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e409061539f565b8015610e8d5780601f10610e6257610100808354040283529160200191610e8d565b820191906000526020600020905b815481529060010190602001808311610e7057829003601f168201915b5050505050905090565b60176020528060005260406000206000915090505481565b6000610eba82613065565b610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061508f565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f3f826115a3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614f8f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fcf612ff3565b73ffffffffffffffffffffffffffffffffffffffff161480610ffe5750610ffd81610ff8612ff3565b612644565b5b61103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490614e6f565b60405180910390fd5b611048838383613072565b505050565b600b5481565b61105b612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611079611aeb565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690614f0f565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054905090565b60156020528060005260406000206000915090505481565b61113f838383613124565b505050565b600d5481565b6000611155836115bf565b8210611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90614ccf565b60405180910390fd5b60006111a0611113565b905060008060005b838110156112fa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461129a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ec57868414156112e3578195505050505050611336565b83806001019450505b5080806001019150506111a8565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061502f565b60405180910390fd5b92915050565b611344612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611362611aeb565b73ffffffffffffffffffffffffffffffffffffffff16146113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af90614f0f565b60405180910390fd5b80600d8190555050565b6113ca612ff3565b73ffffffffffffffffffffffffffffffffffffffff166113e8611aeb565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590614f0f565b60405180910390fd5b600047905061144d3382613664565b50565b61146b83838360405180602001604052806000815250612130565b505050565b60095481565b6000611480611113565b82106114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890614d8f565b60405180910390fd5b819050919050565b600a5481565b6114d7612ff3565b73ffffffffffffffffffffffffffffffffffffffff166114f5611aeb565b73ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614f0f565b60405180910390fd5b8060149080519060200190611561929190614083565b5050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60166020528060005260406000206000915090505481565b60006115ae82613758565b600001519050919050565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614eaf565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116b0612ff3565b73ffffffffffffffffffffffffffffffffffffffff166116ce611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90614f0f565b60405180910390fd5b61172e60006138f2565b565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590614ecf565b60405180910390fd5b60105481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ec91906151d4565b111561182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182490614d6f565b60405180910390fd5b60008190506000600b54600d54600c54611845611113565b611b3961185291906152b5565b61185c91906152b5565b61186691906152b5565b61187091906152b5565b905061187c82826139b8565b9150600082116118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b8906150af565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161191e9190614bcb565b60206040518083038186803b15801561193657600080fd5b505afa15801561194a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196e9190614593565b90508083600f5461197f919061525b565b11156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061500f565b60405180910390fd5b6000600f54846119d0919061525b565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611a3193929190614be6565b602060405180830381600087803b158015611a4b57600080fd5b505af1158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a839190614496565b5083601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ad391906151d4565b92505081905550611ae433856139d1565b5050505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060028054611b4a9061539f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b769061539f565b8015611bc35780601f10611b9857610100808354040283529160200191611bc3565b820191906000526020600020905b815481529060010190602001808311611ba657829003601f168201915b5050505050905090565b60085481565b611bdb612ff3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4090614f2f565b60405180910390fd5b8060066000611c56612ff3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d03612ff3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d489190614c92565b60405180910390a35050565b611d5c612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611d7a611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790614f0f565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e1c612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611e3a611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614f0f565b60405180910390fd5b8060108190555050565b60105481565b611ea8612ff3565b73ffffffffffffffffffffffffffffffffffffffff16611ec6611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614f0f565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f799190614bcb565b60206040518083038186803b158015611f9157600080fd5b505afa158015611fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc99190614593565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330836040518363ffffffff1660e01b8152600401612028929190614c69565b602060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207a9190614496565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b81526004016120da93929190614be6565b602060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212c9190614496565b5050565b61213b848484613124565b612147848484846139ef565b612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d90614faf565b60405180910390fd5b50505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614ecf565b60405180910390fd5b6001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614d6f565b60405180910390fd5b600d546001600a5461228e91906151d4565b11156122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614d0f565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161232c9190614bcb565b60206040518083038186803b15801561234457600080fd5b505afa158015612358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237c9190614593565b905060018110156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614e4f565b60405180910390fd5b6001600a60008282546123d591906151d4565b925050819055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461242c91906151d4565b9250508190555061243e3360016139d1565b50565b612449612ff3565b73ffffffffffffffffffffffffffffffffffffffff16612467611aeb565b73ffffffffffffffffffffffffffffffffffffffff16146124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b490614f0f565b60405180910390fd5b80600b8190555050565b6060600082101580156124e157506124dd611113565b8211155b612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614cef565b60405180910390fd5b601461252b83613b86565b60405160200161253c929190614b92565b6040516020818303038152906040529050919050565b61255a612ff3565b73ffffffffffffffffffffffffffffffffffffffff16612578611aeb565b73ffffffffffffffffffffffffffffffffffffffff16146125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590614f0f565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b3981565b600f5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273d90614f6f565b60405180910390fd5b6001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf90614d6f565b60405180910390fd5b600b5460016008546127da91906151d4565b111561281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281290614e8f565b60405180910390fd5b60016008600082825461282e91906151d4565b925050819055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461288591906151d4565b925050819055506128973360016139d1565b565b60186020528060005260406000206000915090505481565b6128b9612ff3565b73ffffffffffffffffffffffffffffffffffffffff166128d7611aeb565b73ffffffffffffffffffffffffffffffffffffffff161461292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490614f0f565b60405180910390fd5b80600f8190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614ecf565b60405180910390fd5b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90614d6f565b60405180910390fd5b600c546001600954612a3991906151d4565b1115612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190614daf565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612ad79190614bcb565b60206040518083038186803b158015612aef57600080fd5b505afa158015612b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b279190614593565b90506001811015612b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6490614dcf565b60405180910390fd5b600160096000828254612b8091906151d4565b925050819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd791906151d4565b92505081905550612be93360016139d1565b50565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190614ecf565b60405180910390fd5b60105481601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca891906151d4565b1115612ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce090614d6f565b60405180910390fd5b60008190506000600b54600d54600c54612d01611113565b611b39612d0e91906152b5565b612d1891906152b5565b612d2291906152b5565b612d2c91906152b5565b9050612d3882826139b8565b915060008211612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d74906150af565b60405180910390fd5b6000600e5483612d8d919061525b565b905080341015612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc99061504f565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e2191906151d4565b92505081905550612e3233846139d1565b60008134612e4091906152b5565b905060008114612e5557612e543382613664565b5b5050505050565b612e64612ff3565b73ffffffffffffffffffffffffffffffffffffffff16612e82611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614612ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecf90614f0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3f90614d2f565b60405180910390fd5b612f51816138f2565b50565b612f5c612ff3565b73ffffffffffffffffffffffffffffffffffffffff16612f7a611aeb565b73ffffffffffffffffffffffffffffffffffffffff1614612fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc790614f0f565b60405180910390fd5b80600e8190555050565b600c5481565b600080823b905060008111915050919050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061312f82613758565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16613156612ff3565b73ffffffffffffffffffffffffffffffffffffffff1614806131b2575061317b612ff3565b73ffffffffffffffffffffffffffffffffffffffff1661319a84610eaf565b73ffffffffffffffffffffffffffffffffffffffff16145b806131ce57506131cd82600001516131c8612ff3565b612644565b5b905080613210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320790614f4f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614613282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327990614eef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156132f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e990614def565b60405180910390fd5b6132ff8585856001613ce7565b61330f6000848460000151613072565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156135f45761355381613065565b156135f35782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461365d8585856001613ced565b5050505050565b804710156136a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369e90614e2f565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516136cd90614bb6565b60006040518083038185875af1925050503d806000811461370a576040519150601f19603f3d011682016040523d82523d6000602084013e61370f565b606091505b5050905080613753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374a90614e0f565b60405180910390fd5b505050565b613760614109565b61376982613065565b6137a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379f90614d4f565b60405180910390fd5b60008290505b600081106138b1576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146138a25780925050506138ed565b508080600190039150506137ae565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e49061506f565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183106139c757816139c9565b825b905092915050565b6139eb828260405180602001604052806000815250613cf3565b5050565b6000613a108473ffffffffffffffffffffffffffffffffffffffff16612fe0565b15613b79578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a39612ff3565b8786866040518563ffffffff1660e01b8152600401613a5b9493929190614c1d565b602060405180830381600087803b158015613a7557600080fd5b505af1925050508015613aa657506040513d601f19601f82011682018060405250810190613aa391906144f0565b60015b613b29573d8060008114613ad6576040519150601f19603f3d011682016040523d82523d6000602084013e613adb565b606091505b50600081511415613b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1890614faf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613b7e565b600190505b949350505050565b60606000821415613bce576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613ce2565b600082905060005b60008214613c00578080613be990615402565b915050600a82613bf9919061522a565b9150613bd6565b60008167ffffffffffffffff811115613c1c57613c1b615538565b5b6040519080825280601f01601f191660200182016040528015613c4e5781602001600182028036833780820191505090505b5090505b60008514613cdb57600182613c6791906152b5565b9150600a85613c76919061544b565b6030613c8291906151d4565b60f81b818381518110613c9857613c97615509565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613cd4919061522a565b9450613c52565b8093505050505b919050565b50505050565b50505050565b613d008383836001613d05565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d7290614fcf565b60405180910390fd5b6000841415613dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db690614fef565b60405180910390fd5b613dcc6000868387613ce7565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561406657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156140515761401160008884886139ef565b614050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161404790614faf565b60405180910390fd5b5b81806001019250508080600101915050613f9a565b50806000819055505061407c6000868387613ced565b5050505050565b82805461408f9061539f565b90600052602060002090601f0160209004810192826140b157600085556140f8565b82601f106140ca57805160ff19168380011785556140f8565b828001600101855582156140f8579182015b828111156140f75782518255916020019190600101906140dc565b5b5090506141059190614143565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561415c576000816000905550600101614144565b5090565b600061417361416e8461510f565b6150ea565b90508281526020810184848401111561418f5761418e61556c565b5b61419a84828561535d565b509392505050565b60006141b56141b084615140565b6150ea565b9050828152602081018484840111156141d1576141d061556c565b5b6141dc84828561535d565b509392505050565b6000813590506141f381615df3565b92915050565b60008135905061420881615e0a565b92915050565b60008151905061421d81615e0a565b92915050565b60008135905061423281615e21565b92915050565b60008151905061424781615e21565b92915050565b600082601f83011261426257614261615567565b5b8135614272848260208601614160565b91505092915050565b600082601f8301126142905761428f615567565b5b81356142a08482602086016141a2565b91505092915050565b6000813590506142b881615e38565b92915050565b6000815190506142cd81615e38565b92915050565b6000602082840312156142e9576142e8615576565b5b60006142f7848285016141e4565b91505092915050565b6000806040838503121561431757614316615576565b5b6000614325858286016141e4565b9250506020614336858286016141e4565b9150509250929050565b60008060006060848603121561435957614358615576565b5b6000614367868287016141e4565b9350506020614378868287016141e4565b9250506040614389868287016142a9565b9150509250925092565b600080600080608085870312156143ad576143ac615576565b5b60006143bb878288016141e4565b94505060206143cc878288016141e4565b93505060406143dd878288016142a9565b925050606085013567ffffffffffffffff8111156143fe576143fd615571565b5b61440a8782880161424d565b91505092959194509250565b6000806040838503121561442d5761442c615576565b5b600061443b858286016141e4565b925050602061444c858286016141f9565b9150509250929050565b6000806040838503121561446d5761446c615576565b5b600061447b858286016141e4565b925050602061448c858286016142a9565b9150509250929050565b6000602082840312156144ac576144ab615576565b5b60006144ba8482850161420e565b91505092915050565b6000602082840312156144d9576144d8615576565b5b60006144e784828501614223565b91505092915050565b60006020828403121561450657614505615576565b5b600061451484828501614238565b91505092915050565b60006020828403121561453357614532615576565b5b600082013567ffffffffffffffff81111561455157614550615571565b5b61455d8482850161427b565b91505092915050565b60006020828403121561457c5761457b615576565b5b600061458a848285016142a9565b91505092915050565b6000602082840312156145a9576145a8615576565b5b60006145b7848285016142be565b91505092915050565b6145c9816152e9565b82525050565b6145d8816152fb565b82525050565b60006145e982615186565b6145f3818561519c565b935061460381856020860161536c565b61460c8161557b565b840191505092915050565b600061462282615191565b61462c81856151b8565b935061463c81856020860161536c565b6146458161557b565b840191505092915050565b600061465b82615191565b61466581856151c9565b935061467581856020860161536c565b80840191505092915050565b6000815461468e8161539f565b61469881866151c9565b945060018216600081146146b357600181146146c4576146f7565b60ff198316865281860193506146f7565b6146cd85615171565b60005b838110156146ef578154818901526001820191506020810190506146d0565b838801955050505b50505092915050565b600061470d6022836151b8565b91506147188261558c565b604082019050919050565b6000614730601f836151b8565b915061473b826155db565b602082019050919050565b6000614753602f836151b8565b915061475e82615604565b604082019050919050565b60006147766026836151b8565b915061478182615653565b604082019050919050565b6000614799602a836151b8565b91506147a4826156a2565b604082019050919050565b60006147bc6018836151b8565b91506147c7826156f1565b602082019050919050565b60006147df6023836151b8565b91506147ea8261571a565b604082019050919050565b60006148026030836151b8565b915061480d82615769565b604082019050919050565b60006148256022836151b8565b9150614830826157b8565b604082019050919050565b60006148486025836151b8565b915061485382615807565b604082019050919050565b600061486b603a836151b8565b915061487682615856565b604082019050919050565b600061488e601d836151b8565b9150614899826158a5565b602082019050919050565b60006148b1601d836151b8565b91506148bc826158ce565b602082019050919050565b60006148d46039836151b8565b91506148df826158f7565b604082019050919050565b60006148f7601d836151b8565b915061490282615946565b602082019050919050565b600061491a602b836151b8565b91506149258261596f565b604082019050919050565b600061493d600f836151b8565b9150614948826159be565b602082019050919050565b60006149606026836151b8565b915061496b826159e7565b604082019050919050565b60006149836020836151b8565b915061498e82615a36565b602082019050919050565b60006149a6601a836151b8565b91506149b182615a5f565b602082019050919050565b60006149c96032836151b8565b91506149d482615a88565b604082019050919050565b60006149ec6014836151b8565b91506149f782615ad7565b602082019050919050565b6000614a0f6022836151b8565b9150614a1a82615b00565b604082019050919050565b6000614a326000836151ad565b9150614a3d82615b4f565b600082019050919050565b6000614a556033836151b8565b9150614a6082615b52565b604082019050919050565b6000614a786021836151b8565b9150614a8382615ba1565b604082019050919050565b6000614a9b6028836151b8565b9150614aa682615bf0565b604082019050919050565b6000614abe6029836151b8565b9150614ac982615c3f565b604082019050919050565b6000614ae1602e836151b8565b9150614aec82615c8e565b604082019050919050565b6000614b046021836151b8565b9150614b0f82615cdd565b604082019050919050565b6000614b27602f836151b8565b9150614b3282615d2c565b604082019050919050565b6000614b4a602d836151b8565b9150614b5582615d7b565b604082019050919050565b6000614b6d6009836151b8565b9150614b7882615dca565b602082019050919050565b614b8c81615353565b82525050565b6000614b9e8285614681565b9150614baa8284614650565b91508190509392505050565b6000614bc182614a25565b9150819050919050565b6000602082019050614be060008301846145c0565b92915050565b6000606082019050614bfb60008301866145c0565b614c0860208301856145c0565b614c156040830184614b83565b949350505050565b6000608082019050614c3260008301876145c0565b614c3f60208301866145c0565b614c4c6040830185614b83565b8181036060830152614c5e81846145de565b905095945050505050565b6000604082019050614c7e60008301856145c0565b614c8b6020830184614b83565b9392505050565b6000602082019050614ca760008301846145cf565b92915050565b60006020820190508181036000830152614cc78184614617565b905092915050565b60006020820190508181036000830152614ce881614700565b9050919050565b60006020820190508181036000830152614d0881614723565b9050919050565b60006020820190508181036000830152614d2881614746565b9050919050565b60006020820190508181036000830152614d4881614769565b9050919050565b60006020820190508181036000830152614d688161478c565b9050919050565b60006020820190508181036000830152614d88816147af565b9050919050565b60006020820190508181036000830152614da8816147d2565b9050919050565b60006020820190508181036000830152614dc8816147f5565b9050919050565b60006020820190508181036000830152614de881614818565b9050919050565b60006020820190508181036000830152614e088161483b565b9050919050565b60006020820190508181036000830152614e288161485e565b9050919050565b60006020820190508181036000830152614e4881614881565b9050919050565b60006020820190508181036000830152614e68816148a4565b9050919050565b60006020820190508181036000830152614e88816148c7565b9050919050565b60006020820190508181036000830152614ea8816148ea565b9050919050565b60006020820190508181036000830152614ec88161490d565b9050919050565b60006020820190508181036000830152614ee881614930565b9050919050565b60006020820190508181036000830152614f0881614953565b9050919050565b60006020820190508181036000830152614f2881614976565b9050919050565b60006020820190508181036000830152614f4881614999565b9050919050565b60006020820190508181036000830152614f68816149bc565b9050919050565b60006020820190508181036000830152614f88816149df565b9050919050565b60006020820190508181036000830152614fa881614a02565b9050919050565b60006020820190508181036000830152614fc881614a48565b9050919050565b60006020820190508181036000830152614fe881614a6b565b9050919050565b6000602082019050818103600083015261500881614a8e565b9050919050565b6000602082019050818103600083015261502881614ab1565b9050919050565b6000602082019050818103600083015261504881614ad4565b9050919050565b6000602082019050818103600083015261506881614af7565b9050919050565b6000602082019050818103600083015261508881614b1a565b9050919050565b600060208201905081810360008301526150a881614b3d565b9050919050565b600060208201905081810360008301526150c881614b60565b9050919050565b60006020820190506150e46000830184614b83565b92915050565b60006150f4615105565b905061510082826153d1565b919050565b6000604051905090565b600067ffffffffffffffff82111561512a57615129615538565b5b6151338261557b565b9050602081019050919050565b600067ffffffffffffffff82111561515b5761515a615538565b5b6151648261557b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006151df82615353565b91506151ea83615353565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561521f5761521e61547c565b5b828201905092915050565b600061523582615353565b915061524083615353565b9250826152505761524f6154ab565b5b828204905092915050565b600061526682615353565b915061527183615353565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152aa576152a961547c565b5b828202905092915050565b60006152c082615353565b91506152cb83615353565b9250828210156152de576152dd61547c565b5b828203905092915050565b60006152f482615333565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561538a57808201518184015260208101905061536f565b83811115615399576000848401525b50505050565b600060028204905060018216806153b757607f821691505b602082108114156153cb576153ca6154da565b5b50919050565b6153da8261557b565b810181811067ffffffffffffffff821117156153f9576153f8615538565b5b80604052505050565b600061540d82615353565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154405761543f61547c565b5b600182019050919050565b600061545682615353565b915061546183615353565b925082615471576154706154ab565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f4e6f206d6f72652066726565206d696e747320666f72206d6665727320686f6c60008201527f6465727320617661696c61626c65210000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6c696d6974207065722077616c6c657420726561636865640000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f72652066726565206d696e747320666f7220647973746f7320686f60008201527f6c6465727320617661696c61626c652100000000000000000000000000000000602082015250565b7f4f6e6c7920447973746f50756e6b7320686f6c646572732063616e20636c616960008201527f6d21000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f6e6c79206d6665727320686f6c646572732063616e20636c61696d21000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f4e6f206d6f72652066726565206d696e747320617661696c61626c6521000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f57616c6c65742072657175697265640000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f557365722077616c6c6574207265717569726564000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682024435245445320617661696c61626c653b2063686560008201527f636b207072696365210000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e743b20636865636b20707269636560008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b615dfc816152e9565b8114615e0757600080fd5b50565b615e13816152fb565b8114615e1e57600080fd5b50565b615e2a81615307565b8114615e3557600080fd5b50565b615e4181615353565b8114615e4c57600080fd5b5056fea264697066735822122006b5d32fae68548cce30ce720e91ec5fc4e1c9a37b19911f656c74298600dcbb64736f6c63430008070033

Deployed Bytecode Sourcemap

41274:6549:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44041:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28150:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30036:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43650:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31598:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31119:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41534:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43947:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26407:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43548:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32474:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41620:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27071:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44153:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43387:153;;;;;;;;;;;;;:::i;:::-;;32707:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41445:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26584:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41490:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42629:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41875:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43596:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29845:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41663:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28586:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22897:103;;;;;;;;;;;;;:::i;:::-;;46855:965;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22246:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41802:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30205:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41402:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31884:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43757:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42487:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41757:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43139:240;;;;;;;;;;;;;:::i;:::-;;32955:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44931:533;;;;;;;;;;;;;:::i;:::-;;44263:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42869:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43853:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41353:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41709:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41947:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32243:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45472:391;;;;;;;;;;;;;:::i;:::-;;43703:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42363:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44373:550;;;;;;;;;;;;;:::i;:::-;;45871:976;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23155:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42249:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41576:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44041:106;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44131:8:::1;44113:15;:26;;;;44041:106:::0;:::o;28150:372::-;28252:4;28304:25;28289:40;;;:11;:40;;;;:105;;;;28361:33;28346:48;;;:11;:48;;;;28289:105;:172;;;;28426:35;28411:50;;;:11;:50;;;;28289:172;:225;;;;28478:36;28502:11;28478:23;:36::i;:::-;28289:225;28269:245;;28150:372;;;:::o;30036:100::-;30090:13;30123:5;30116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30036:100;:::o;43650:46::-;;;;;;;;;;;;;;;;;:::o;31598:214::-;31666:7;31694:16;31702:7;31694;:16::i;:::-;31686:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31780:15;:24;31796:7;31780:24;;;;;;;;;;;;;;;;;;;;;31773:31;;31598:214;;;:::o;31119:413::-;31192:13;31208:24;31224:7;31208:15;:24::i;:::-;31192:40;;31257:5;31251:11;;:2;:11;;;;31243:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31352:5;31336:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31361:37;31378:5;31385:12;:10;:12::i;:::-;31361:16;:37::i;:::-;31336:62;31314:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;31496:28;31505:2;31509:7;31518:5;31496:8;:28::i;:::-;31181:351;31119:413;;:::o;41534:35::-;;;;:::o;43947:88::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44023:4:::1;44015:5;;:12;;;;;;;;;;;;;;;;;;43947:88:::0;:::o;26407:100::-;26460:7;26487:12;;26480:19;;26407:100;:::o;43548:41::-;;;;;;;;;;;;;;;;;:::o;32474:162::-;32600:28;32610:4;32616:2;32620:7;32600:9;:28::i;:::-;32474:162;;;:::o;41620:36::-;;;;:::o;27071:1007::-;27160:7;27196:16;27206:5;27196:9;:16::i;:::-;27188:5;:24;27180:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27262:22;27287:13;:11;:13::i;:::-;27262:38;;27311:19;27341:25;27530:9;27525:466;27545:14;27541:1;:18;27525:466;;;27585:31;27619:11;:14;27631:1;27619:14;;;;;;;;;;;27585:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27682:1;27656:28;;:9;:14;;;:28;;;27652:111;;27729:9;:14;;;27709:34;;27652:111;27806:5;27785:26;;:17;:26;;;27781:195;;;27855:5;27840:11;:20;27836:85;;;27896:1;27889:8;;;;;;;;;27836:85;27943:13;;;;;;;27781:195;27566:425;27561:3;;;;;;;27525:466;;;;28014:56;;;;;;;;;;:::i;:::-;;;;;;;;27071:1007;;;;;:::o;44153:104::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44241:8:::1;44224:14;:25;;;;44153:104:::0;:::o;43387:153::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43435:15:::1;43453:21;43435:39;;43485:47;43511:10;43524:7;43485:17;:47::i;:::-;43424:116;43387:153::o:0;32707:177::-;32837:39;32854:4;32860:2;32864:7;32837:39;;;;;;;;;;;;:16;:39::i;:::-;32707:177;;;:::o;41445:38::-;;;;:::o;26584:187::-;26651:7;26687:13;:11;:13::i;:::-;26679:5;:21;26671:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26758:5;26751:12;;26584:187;;;:::o;41490:37::-;;;;:::o;42629:107::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42721:7:::1;42702:16;:26;;;;;;;;;;;;:::i;:::-;;42629:107:::0;:::o;41875:65::-;;;;;;;;;;;;;:::o;43596:47::-;;;;;;;;;;;;;;;;;:::o;29845:124::-;29909:7;29936:20;29948:7;29936:11;:20::i;:::-;:25;;;29929:32;;29845:124;;;:::o;41663:39::-;;;;:::o;28586:221::-;28650:7;28695:1;28678:19;;:5;:19;;;;28670:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28771:12;:19;28784:5;28771:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28763:36;;28756:43;;28586:221;;;:::o;22897:103::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22962:30:::1;22989:1;22962:18;:30::i;:::-;22897:103::o:0;46855:965::-;46941:9;46927:23;;:10;:23;;;46919:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;47020:16;;47010:6;46989;:18;46996:10;46989:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:47;;46981:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;47078:22;47103:6;47078:31;;47184:13;47263;;47246:14;;47228:15;;47212:13;:11;:13::i;:::-;41389:4;47200:25;;;;:::i;:::-;:43;;;;:::i;:::-;:60;;;;:::i;:::-;:76;;;;:::i;:::-;47184:92;;47314:31;47323:14;47339:5;47314:8;:31::i;:::-;47297:48;;47381:1;47364:14;:18;47356:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;47409:14;47433:5;;;;;;;;;;;47426:23;;;47450:10;47426:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47409:52;;47515:9;47497:14;47480;;:31;;;;:::i;:::-;:44;;47472:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;47583:21;47624:14;;47607;:31;;;;:::i;:::-;47583:55;;47658:5;;;;;;;;;;;47651:26;;;47678:10;47697:4;47703:13;47651:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47750:14;47728:6;:18;47735:10;47728:18;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;47775:37;47785:10;47797:14;47775:9;:37::i;:::-;46908:912;;;;46855:965;:::o;22246:87::-;22292:7;22319:6;;;;;;;;;;;22312:13;;22246:87;:::o;41802:66::-;;;;;;;;;;;;;:::o;30205:104::-;30261:13;30294:7;30287:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30205:104;:::o;41402:36::-;;;;:::o;31884:288::-;31991:12;:10;:12::i;:::-;31979:24;;:8;:24;;;;31971:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32092:8;32047:18;:32;32066:12;:10;:12::i;:::-;32047:32;;;;;;;;;;;;;;;:42;32080:8;32047:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32145:8;32116:48;;32131:12;:10;:12::i;:::-;32116:48;;;32155:8;32116:48;;;;;;:::i;:::-;;;;;;;;31884:288;;:::o;43757:90::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43835:4:::1;43826:6;;:13;;;;;;;;;;;;;;;;;;43757:90:::0;:::o;42487:134::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42594:19:::1;42575:16;:38;;;;42487:134:::0;:::o;41757:36::-;;;;:::o;43139:240::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43196:11:::1;43217:5;;;;;;;;;;;43210:23;;;43242:4;43210:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43196:52;;43268:5;;;;;;;;;;;43261:21;;;43291:4;43298:3;43261:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43320:5;;;;;;;;;;;43313:26;;;43348:4;43355:10;43367:3;43313:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43183:196;43139:240::o:0;32955:355::-;33114:28;33124:4;33130:2;33134:7;33114:9;:28::i;:::-;33175:48;33198:4;33204:2;33208:7;33217:5;33175:22;:48::i;:::-;33153:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;32955:355;;;;:::o;44931:533::-;44997:9;44983:23;;:10;:23;;;44975:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45071:1;45045:11;:23;45057:10;45045:23;;;;;;;;;;;;;;;;:27;45037:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45148:14;;45142:1;45121:18;;:22;;;;:::i;:::-;45120:42;;45112:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;45227:14;45250:5;;;;;;;;;;;45244:22;;;45267:10;45244:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45227:51;;45309:1;45299:6;:11;;45291:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45379:1;45357:18;;:23;;;;;;;:::i;:::-;;;;;;;;45418:1;45391:11;:23;45403:10;45391:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;45432:24;45442:10;45454:1;45432:9;:24::i;:::-;44964:500;44931:533::o;44263:102::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44349:8:::1;44333:13;:24;;;;44263:102:::0;:::o;42869:262::-;42940:13;42983:1;42974:5;:10;;:36;;;;;42997:13;:11;:13::i;:::-;42988:5;:22;;42974:36;42966:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;43087:16;43105;:5;:14;:16::i;:::-;43070:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43056:67;;42869:262;;;:::o;43853:88::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43929:4:::1;43921:5;;:12;;;;;;;;;;;;;;;;;;43853:88:::0;:::o;41353:40::-;41389:4;41353:40;:::o;41709:41::-;;;;:::o;41947:65::-;;;;;;;;;;;;;:::o;32243:164::-;32340:4;32364:18;:25;32383:5;32364:25;;;;;;;;;;;;;;;:35;32390:8;32364:35;;;;;;;;;;;;;;;;;;;;;;;;;32357:42;;32243:164;;;;:::o;45472:391::-;45544:9;45530:23;;:10;:23;;;45522:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;45622:1;45597:10;:22;45608:10;45597:22;;;;;;;;;;;;;;;;:26;45589:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45698:13;;45692:1;45672:17;;:21;;;;:::i;:::-;45671:40;;45663:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45779:1;45758:17;;:22;;;;;;;:::i;:::-;;;;;;;;45817:1;45791:10;:22;45802:10;45791:22;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;45831:24;45841:10;45853:1;45831:9;:24::i;:::-;45472:391::o;43703:45::-;;;;;;;;;;;;;;;;;:::o;42363:116::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42459:12:::1;42442:14;:29;;;;42363:116:::0;:::o;44373:550::-;44439:9;44425:23;;:10;:23;;;44417:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44514:1;44487:12;:24;44500:10;44487:24;;;;;;;;;;;;;;;;:28;44479:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44592:15;;44586:1;44564:19;;:23;;;;:::i;:::-;44563:44;;44555:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;44673:14;44701:6;;;;;;;;;;;44690:28;;;44719:10;44690:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44673:57;;44761:1;44751:6;:11;;44743:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44837:1;44814:19;;:24;;;;;;;:::i;:::-;;;;;;;;44877:1;44849:12;:24;44862:10;44849:24;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;44891:24;44901:10;44913:1;44891:9;:24::i;:::-;44406:517;44373:550::o;45871:976::-;45957:9;45943:23;;:10;:23;;;45935:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46036:16;;46026:6;46005;:18;46012:10;46005:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:47;;45997:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;46094:22;46119:6;46094:31;;46200:13;46279;;46262:14;;46244:15;;46228:13;:11;:13::i;:::-;41389:4;46216:25;;;;:::i;:::-;:43;;;;:::i;:::-;:60;;;;:::i;:::-;:76;;;;:::i;:::-;46200:92;;46322:31;46331:14;46347:5;46322:8;:31::i;:::-;46305:48;;46389:1;46372:14;:18;46364:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46417:21;46458:9;;46441:14;:26;;;;:::i;:::-;46417:50;;46499:13;46486:9;:26;;46478:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;46586:14;46564:6;:18;46571:10;46564:18;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;46613:37;46623:10;46635:14;46613:9;:37::i;:::-;46694:15;46724:13;46712:9;:25;;;;:::i;:::-;46694:43;;46763:1;46752:7;:12;46748:92;;46781:47;46807:10;46820:7;46781:17;:47::i;:::-;46748:92;45924:923;;;;45871:976;:::o;23155:201::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23264:1:::1;23244:22;;:8;:22;;;;23236:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23320:28;23339:8;23320:18;:28::i;:::-;23155:201:::0;:::o;42249:106::-;22477:12;:10;:12::i;:::-;22466:23;;:7;:5;:7::i;:::-;:23;;;22458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42335:12:::1;42323:9;:24;;;;42249:106:::0;:::o;41576:37::-;;;;:::o;5389:387::-;5449:4;5657:12;5724:7;5712:20;5704:28;;5767:1;5760:4;:8;5753:15;;;5389:387;;;:::o;4440:98::-;4493:7;4520:10;4513:17;;4440:98;:::o;1643:157::-;1728:4;1767:25;1752:40;;;:11;:40;;;;1745:47;;1643:157;;;:::o;33565:111::-;33622:4;33656:12;;33646:7;:22;33639:29;;33565:111;;;:::o;38485:196::-;38627:2;38600:15;:24;38616:7;38600:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38665:7;38661:2;38645:28;;38654:5;38645:28;;;;;;;;;;;;38485:196;;;:::o;36365:2002::-;36480:35;36518:20;36530:7;36518:11;:20::i;:::-;36480:58;;36551:22;36593:13;:18;;;36577:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;36652:12;:10;:12::i;:::-;36628:36;;:20;36640:7;36628:11;:20::i;:::-;:36;;;36577:87;:154;;;;36681:50;36698:13;:18;;;36718:12;:10;:12::i;:::-;36681:16;:50::i;:::-;36577:154;36551:181;;36753:17;36745:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;36868:4;36846:26;;:13;:18;;;:26;;;36838:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36948:1;36934:16;;:2;:16;;;;36926:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37005:43;37027:4;37033:2;37037:7;37046:1;37005:21;:43::i;:::-;37113:49;37130:1;37134:7;37143:13;:18;;;37113:8;:49::i;:::-;37488:1;37458:12;:18;37471:4;37458:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37532:1;37504:12;:16;37517:2;37504:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37578:2;37550:11;:20;37562:7;37550:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;37640:15;37595:11;:20;37607:7;37595:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;37908:19;37940:1;37930:7;:11;37908:33;;38001:1;37960:43;;:11;:24;37972:11;37960:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;37956:295;;;38028:20;38036:11;38028:7;:20::i;:::-;38024:212;;;38105:13;:18;;;38073:11;:24;38085:11;38073:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;38188:13;:28;;;38146:11;:24;38158:11;38146:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;38024:212;37956:295;37433:829;38298:7;38294:2;38279:27;;38288:4;38279:27;;;;;;;;;;;;38317:42;38338:4;38344:2;38348:7;38357:1;38317:20;:42::i;:::-;36469:1898;;36365:2002;;;:::o;6711:317::-;6826:6;6801:21;:31;;6793:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6880:12;6898:9;:14;;6920:6;6898:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6879:52;;;6950:7;6942:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6782:246;6711:317;;:::o;29246:537::-;29307:21;;:::i;:::-;29349:16;29357:7;29349;:16::i;:::-;29341:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29455:12;29470:7;29455:22;;29450:245;29487:1;29479:4;:9;29450:245;;29517:31;29551:11;:17;29563:4;29551:17;;;;;;;;;;;29517:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29617:1;29591:28;;:9;:14;;;:28;;;29587:93;;29651:9;29644:16;;;;;;29587:93;29498:197;29490:6;;;;;;;;29450:245;;;;29718:57;;;;;;;;;;:::i;:::-;;;;;;;;29246:537;;;;:::o;23516:191::-;23590:16;23609:6;;;;;;;;;;;23590:25;;23635:8;23626:6;;:17;;;;;;;;;;;;;;;;;;23690:8;23659:40;;23680:8;23659:40;;;;;;;;;;;;23579:128;23516:191;:::o;20480:106::-;20538:7;20569:1;20565;:5;:13;;20577:1;20565:13;;;20573:1;20565:13;20558:20;;20480:106;;;;:::o;33684:104::-;33753:27;33763:2;33767:8;33753:27;;;;;;;;;;;;:9;:27::i;:::-;33684:104;;:::o;39246:804::-;39401:4;39422:15;:2;:13;;;:15::i;:::-;39418:625;;;39474:2;39458:36;;;39495:12;:10;:12::i;:::-;39509:4;39515:7;39524:5;39458:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39454:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39721:1;39704:6;:13;:18;39700:273;;;39747:61;;;;;;;;;;:::i;:::-;;;;;;;;39700:273;39923:6;39917:13;39908:6;39904:2;39900:15;39893:38;39454:534;39591:45;;;39581:55;;;:6;:55;;;;39574:62;;;;;39418:625;40027:4;40020:11;;39246:804;;;;;;;:::o;2087:723::-;2143:13;2373:1;2364:5;:10;2360:53;;;2391:10;;;;;;;;;;;;;;;;;;;;;2360:53;2423:12;2438:5;2423:20;;2454:14;2479:78;2494:1;2486:4;:9;2479:78;;2512:8;;;;;:::i;:::-;;;;2543:2;2535:10;;;;;:::i;:::-;;;2479:78;;;2567:19;2599:6;2589:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2567:39;;2617:154;2633:1;2624:5;:10;2617:154;;2661:1;2651:11;;;;;:::i;:::-;;;2728:2;2720:5;:10;;;;:::i;:::-;2707:2;:24;;;;:::i;:::-;2694:39;;2677:6;2684;2677:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2757:2;2748:11;;;;;:::i;:::-;;;2617:154;;;2795:6;2781:21;;;;;2087:723;;;;:::o;40538:159::-;;;;;:::o;41109:158::-;;;;;:::o;34151:163::-;34274:32;34280:2;34284:8;34294:5;34301:4;34274:5;:32::i;:::-;34151:163;;;:::o;34573:1538::-;34712:20;34735:12;;34712:35;;34780:1;34766:16;;:2;:16;;;;34758:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34851:1;34839:8;:13;;34831:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34910:61;34940:1;34944:2;34948:12;34962:8;34910:21;:61::i;:::-;35285:8;35249:12;:16;35262:2;35249:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35350:8;35309:12;:16;35322:2;35309:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35409:2;35376:11;:25;35388:12;35376:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;35476:15;35426:11;:25;35438:12;35426:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;35509:20;35532:12;35509:35;;35566:9;35561:415;35581:8;35577:1;:12;35561:415;;;35645:12;35641:2;35620:38;;35637:1;35620:38;;;;;;;;;;;;35681:4;35677:249;;;35744:59;35775:1;35779:2;35783:12;35797:5;35744:22;:59::i;:::-;35710:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;35677:249;35946:14;;;;;;;35591:3;;;;;;;35561:415;;;;36007:12;35992;:27;;;;35224:807;36043:60;36072:1;36076:2;36080:12;36094:8;36043:20;:60::i;:::-;34701:1410;34573: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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1929:340::-;1985:5;2034:3;2027:4;2019:6;2015:17;2011:27;2001:122;;2042:79;;:::i;:::-;2001:122;2159:6;2146:20;2184:79;2259:3;2251:6;2244:4;2236:6;2232:17;2184:79;:::i;:::-;2175:88;;1991:278;1929:340;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:143::-;2477:5;2508:6;2502:13;2493:22;;2524:33;2551:5;2524:33;:::i;:::-;2420:143;;;;:::o;2569:329::-;2628:6;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:53;2873:7;2864:6;2853:9;2849:22;2828:53;:::i;:::-;2818:63;;2774:117;2569:329;;;;:::o;2904:474::-;2972:6;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;2904:474;;;;;:::o;3384:619::-;3461:6;3469;3477;3526:2;3514:9;3505:7;3501:23;3497:32;3494:119;;;3532:79;;:::i;:::-;3494:119;3652:1;3677:53;3722:7;3713:6;3702:9;3698:22;3677:53;:::i;:::-;3667:63;;3623:117;3779:2;3805:53;3850:7;3841:6;3830:9;3826:22;3805:53;:::i;:::-;3795:63;;3750:118;3907:2;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3878:118;3384:619;;;;;:::o;4009:943::-;4104:6;4112;4120;4128;4177:3;4165:9;4156:7;4152:23;4148:33;4145:120;;;4184:79;;:::i;:::-;4145:120;4304:1;4329:53;4374:7;4365:6;4354:9;4350:22;4329:53;:::i;:::-;4319:63;;4275:117;4431:2;4457:53;4502:7;4493:6;4482:9;4478:22;4457:53;:::i;:::-;4447:63;;4402:118;4559:2;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4530:118;4715:2;4704:9;4700:18;4687:32;4746:18;4738:6;4735:30;4732:117;;;4768:79;;:::i;:::-;4732:117;4873:62;4927:7;4918:6;4907:9;4903:22;4873:62;:::i;:::-;4863:72;;4658:287;4009:943;;;;;;;:::o;4958:468::-;5023:6;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:50;5401:7;5392:6;5381:9;5377:22;5359:50;:::i;:::-;5349:60;;5304:115;4958:468;;;;;:::o;5432:474::-;5500:6;5508;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5810:2;5836:53;5881:7;5872:6;5861:9;5857:22;5836:53;:::i;:::-;5826:63;;5781:118;5432:474;;;;;:::o;5912:345::-;5979:6;6028:2;6016:9;6007:7;6003:23;5999:32;5996:119;;;6034:79;;:::i;:::-;5996:119;6154:1;6179:61;6232:7;6223:6;6212:9;6208:22;6179:61;:::i;:::-;6169:71;;6125:125;5912:345;;;;:::o;6263:327::-;6321:6;6370:2;6358:9;6349:7;6345:23;6341:32;6338:119;;;6376:79;;:::i;:::-;6338:119;6496:1;6521:52;6565:7;6556:6;6545:9;6541:22;6521:52;:::i;:::-;6511:62;;6467:116;6263:327;;;;:::o;6596:349::-;6665:6;6714:2;6702:9;6693:7;6689:23;6685:32;6682:119;;;6720:79;;:::i;:::-;6682:119;6840:1;6865:63;6920:7;6911:6;6900:9;6896:22;6865:63;:::i;:::-;6855:73;;6811:127;6596:349;;;;:::o;6951:509::-;7020:6;7069:2;7057:9;7048:7;7044:23;7040:32;7037:119;;;7075:79;;:::i;:::-;7037:119;7223:1;7212:9;7208:17;7195:31;7253:18;7245:6;7242:30;7239:117;;;7275:79;;:::i;:::-;7239:117;7380:63;7435:7;7426:6;7415:9;7411:22;7380:63;:::i;:::-;7370:73;;7166:287;6951:509;;;;:::o;7466:329::-;7525:6;7574:2;7562:9;7553:7;7549:23;7545:32;7542:119;;;7580:79;;:::i;:::-;7542:119;7700:1;7725:53;7770:7;7761:6;7750:9;7746:22;7725:53;:::i;:::-;7715:63;;7671:117;7466:329;;;;:::o;7801:351::-;7871:6;7920:2;7908:9;7899:7;7895:23;7891:32;7888:119;;;7926:79;;:::i;:::-;7888:119;8046:1;8071:64;8127:7;8118:6;8107:9;8103:22;8071:64;:::i;:::-;8061:74;;8017:128;7801:351;;;;:::o;8158:118::-;8245:24;8263:5;8245:24;:::i;:::-;8240:3;8233:37;8158:118;;:::o;8282:109::-;8363:21;8378:5;8363:21;:::i;:::-;8358:3;8351:34;8282:109;;:::o;8397:360::-;8483:3;8511:38;8543:5;8511:38;:::i;:::-;8565:70;8628:6;8623:3;8565:70;:::i;:::-;8558:77;;8644:52;8689:6;8684:3;8677:4;8670:5;8666:16;8644:52;:::i;:::-;8721:29;8743:6;8721:29;:::i;:::-;8716:3;8712:39;8705:46;;8487:270;8397:360;;;;:::o;8763:364::-;8851:3;8879:39;8912:5;8879:39;:::i;:::-;8934:71;8998:6;8993:3;8934:71;:::i;:::-;8927:78;;9014:52;9059:6;9054:3;9047:4;9040:5;9036:16;9014:52;:::i;:::-;9091:29;9113:6;9091:29;:::i;:::-;9086:3;9082:39;9075:46;;8855:272;8763:364;;;;:::o;9133:377::-;9239:3;9267:39;9300:5;9267:39;:::i;:::-;9322:89;9404:6;9399:3;9322:89;:::i;:::-;9315:96;;9420:52;9465:6;9460:3;9453:4;9446:5;9442:16;9420:52;:::i;:::-;9497:6;9492:3;9488:16;9481:23;;9243:267;9133:377;;;;:::o;9540:845::-;9643:3;9680:5;9674:12;9709:36;9735:9;9709:36;:::i;:::-;9761:89;9843:6;9838:3;9761:89;:::i;:::-;9754:96;;9881:1;9870:9;9866:17;9897:1;9892:137;;;;10043:1;10038:341;;;;9859:520;;9892:137;9976:4;9972:9;9961;9957:25;9952:3;9945:38;10012:6;10007:3;10003:16;9996:23;;9892:137;;10038:341;10105:38;10137:5;10105:38;:::i;:::-;10165:1;10179:154;10193:6;10190:1;10187:13;10179:154;;;10267:7;10261:14;10257:1;10252:3;10248:11;10241:35;10317:1;10308:7;10304:15;10293:26;;10215:4;10212:1;10208:12;10203:17;;10179:154;;;10362:6;10357:3;10353:16;10346:23;;10045:334;;9859:520;;9647:738;;9540:845;;;;:::o;10391:366::-;10533:3;10554:67;10618:2;10613:3;10554:67;:::i;:::-;10547:74;;10630:93;10719:3;10630:93;:::i;:::-;10748:2;10743:3;10739:12;10732:19;;10391:366;;;:::o;10763:::-;10905:3;10926:67;10990:2;10985:3;10926:67;:::i;:::-;10919:74;;11002:93;11091:3;11002:93;:::i;:::-;11120:2;11115:3;11111:12;11104:19;;10763:366;;;:::o;11135:::-;11277:3;11298:67;11362:2;11357:3;11298:67;:::i;:::-;11291:74;;11374:93;11463:3;11374:93;:::i;:::-;11492:2;11487:3;11483:12;11476:19;;11135:366;;;:::o;11507:::-;11649:3;11670:67;11734:2;11729:3;11670:67;:::i;:::-;11663:74;;11746:93;11835:3;11746:93;:::i;:::-;11864:2;11859:3;11855:12;11848:19;;11507:366;;;:::o;11879:::-;12021:3;12042:67;12106:2;12101:3;12042:67;:::i;:::-;12035:74;;12118:93;12207:3;12118:93;:::i;:::-;12236:2;12231:3;12227:12;12220:19;;11879:366;;;:::o;12251:::-;12393:3;12414:67;12478:2;12473:3;12414:67;:::i;:::-;12407:74;;12490:93;12579:3;12490:93;:::i;:::-;12608:2;12603:3;12599:12;12592:19;;12251:366;;;:::o;12623:::-;12765:3;12786:67;12850:2;12845:3;12786:67;:::i;:::-;12779:74;;12862:93;12951:3;12862:93;:::i;:::-;12980:2;12975:3;12971:12;12964:19;;12623:366;;;:::o;12995:::-;13137:3;13158:67;13222:2;13217:3;13158:67;:::i;:::-;13151:74;;13234:93;13323:3;13234:93;:::i;:::-;13352:2;13347:3;13343:12;13336:19;;12995:366;;;:::o;13367:::-;13509:3;13530:67;13594:2;13589:3;13530:67;:::i;:::-;13523:74;;13606:93;13695:3;13606:93;:::i;:::-;13724:2;13719:3;13715:12;13708:19;;13367:366;;;:::o;13739:::-;13881:3;13902:67;13966:2;13961:3;13902:67;:::i;:::-;13895:74;;13978:93;14067:3;13978:93;:::i;:::-;14096:2;14091:3;14087:12;14080:19;;13739:366;;;:::o;14111:::-;14253:3;14274:67;14338:2;14333:3;14274:67;:::i;:::-;14267:74;;14350:93;14439:3;14350:93;:::i;:::-;14468:2;14463:3;14459:12;14452:19;;14111:366;;;:::o;14483:::-;14625:3;14646:67;14710:2;14705:3;14646:67;:::i;:::-;14639:74;;14722:93;14811:3;14722:93;:::i;:::-;14840:2;14835:3;14831:12;14824:19;;14483:366;;;:::o;14855:::-;14997:3;15018:67;15082:2;15077:3;15018:67;:::i;:::-;15011:74;;15094:93;15183:3;15094:93;:::i;:::-;15212:2;15207:3;15203:12;15196:19;;14855:366;;;:::o;15227:::-;15369:3;15390:67;15454:2;15449:3;15390:67;:::i;:::-;15383:74;;15466:93;15555:3;15466:93;:::i;:::-;15584:2;15579:3;15575:12;15568:19;;15227:366;;;:::o;15599:::-;15741:3;15762:67;15826:2;15821:3;15762:67;:::i;:::-;15755:74;;15838:93;15927:3;15838:93;:::i;:::-;15956:2;15951:3;15947:12;15940:19;;15599:366;;;:::o;15971:::-;16113:3;16134:67;16198:2;16193:3;16134:67;:::i;:::-;16127:74;;16210:93;16299:3;16210:93;:::i;:::-;16328:2;16323:3;16319:12;16312:19;;15971:366;;;:::o;16343:::-;16485:3;16506:67;16570:2;16565:3;16506:67;:::i;:::-;16499:74;;16582:93;16671:3;16582:93;:::i;:::-;16700:2;16695:3;16691:12;16684:19;;16343:366;;;:::o;16715:::-;16857:3;16878:67;16942:2;16937:3;16878:67;:::i;:::-;16871:74;;16954:93;17043:3;16954:93;:::i;:::-;17072:2;17067:3;17063:12;17056:19;;16715:366;;;:::o;17087:::-;17229:3;17250:67;17314:2;17309:3;17250:67;:::i;:::-;17243:74;;17326:93;17415:3;17326:93;:::i;:::-;17444:2;17439:3;17435:12;17428:19;;17087:366;;;:::o;17459:::-;17601:3;17622:67;17686:2;17681:3;17622:67;:::i;:::-;17615:74;;17698:93;17787:3;17698:93;:::i;:::-;17816:2;17811:3;17807:12;17800:19;;17459:366;;;:::o;17831:::-;17973:3;17994:67;18058:2;18053:3;17994:67;:::i;:::-;17987:74;;18070:93;18159:3;18070:93;:::i;:::-;18188:2;18183:3;18179:12;18172:19;;17831:366;;;:::o;18203:::-;18345:3;18366:67;18430:2;18425:3;18366:67;:::i;:::-;18359:74;;18442:93;18531:3;18442:93;:::i;:::-;18560:2;18555:3;18551:12;18544:19;;18203:366;;;:::o;18575:::-;18717:3;18738:67;18802:2;18797:3;18738:67;:::i;:::-;18731:74;;18814:93;18903:3;18814:93;:::i;:::-;18932:2;18927:3;18923:12;18916:19;;18575:366;;;:::o;18947:398::-;19106:3;19127:83;19208:1;19203:3;19127:83;:::i;:::-;19120:90;;19219:93;19308:3;19219:93;:::i;:::-;19337:1;19332:3;19328:11;19321:18;;18947:398;;;:::o;19351:366::-;19493:3;19514:67;19578:2;19573:3;19514:67;:::i;:::-;19507:74;;19590:93;19679:3;19590:93;:::i;:::-;19708:2;19703:3;19699:12;19692:19;;19351:366;;;:::o;19723:::-;19865:3;19886:67;19950:2;19945:3;19886:67;:::i;:::-;19879:74;;19962:93;20051:3;19962:93;:::i;:::-;20080:2;20075:3;20071:12;20064:19;;19723:366;;;:::o;20095:::-;20237:3;20258:67;20322:2;20317:3;20258:67;:::i;:::-;20251:74;;20334:93;20423:3;20334:93;:::i;:::-;20452:2;20447:3;20443:12;20436:19;;20095:366;;;:::o;20467:::-;20609:3;20630:67;20694:2;20689:3;20630:67;:::i;:::-;20623:74;;20706:93;20795:3;20706:93;:::i;:::-;20824:2;20819:3;20815:12;20808:19;;20467:366;;;:::o;20839:::-;20981:3;21002:67;21066:2;21061:3;21002:67;:::i;:::-;20995:74;;21078:93;21167:3;21078:93;:::i;:::-;21196:2;21191:3;21187:12;21180:19;;20839:366;;;:::o;21211:::-;21353:3;21374:67;21438:2;21433:3;21374:67;:::i;:::-;21367:74;;21450:93;21539:3;21450:93;:::i;:::-;21568:2;21563:3;21559:12;21552:19;;21211:366;;;:::o;21583:::-;21725:3;21746:67;21810:2;21805:3;21746:67;:::i;:::-;21739:74;;21822:93;21911:3;21822:93;:::i;:::-;21940:2;21935:3;21931:12;21924:19;;21583:366;;;:::o;21955:::-;22097:3;22118:67;22182:2;22177:3;22118:67;:::i;:::-;22111:74;;22194:93;22283:3;22194:93;:::i;:::-;22312:2;22307:3;22303:12;22296:19;;21955:366;;;:::o;22327:365::-;22469:3;22490:66;22554:1;22549:3;22490:66;:::i;:::-;22483:73;;22565:93;22654:3;22565:93;:::i;:::-;22683:2;22678:3;22674:12;22667:19;;22327:365;;;:::o;22698:118::-;22785:24;22803:5;22785:24;:::i;:::-;22780:3;22773:37;22698:118;;:::o;22822:429::-;22999:3;23021:92;23109:3;23100:6;23021:92;:::i;:::-;23014:99;;23130:95;23221:3;23212:6;23130:95;:::i;:::-;23123:102;;23242:3;23235:10;;22822:429;;;;;:::o;23257:379::-;23441:3;23463:147;23606:3;23463:147;:::i;:::-;23456:154;;23627:3;23620:10;;23257:379;;;:::o;23642:222::-;23735:4;23773:2;23762:9;23758:18;23750:26;;23786:71;23854:1;23843:9;23839:17;23830:6;23786:71;:::i;:::-;23642:222;;;;:::o;23870:442::-;24019:4;24057:2;24046:9;24042:18;24034:26;;24070:71;24138:1;24127:9;24123:17;24114:6;24070:71;:::i;:::-;24151:72;24219:2;24208:9;24204:18;24195:6;24151:72;:::i;:::-;24233;24301:2;24290:9;24286:18;24277:6;24233:72;:::i;:::-;23870:442;;;;;;:::o;24318:640::-;24513:4;24551:3;24540:9;24536:19;24528:27;;24565:71;24633:1;24622:9;24618:17;24609:6;24565:71;:::i;:::-;24646:72;24714:2;24703:9;24699:18;24690:6;24646:72;:::i;:::-;24728;24796:2;24785:9;24781:18;24772:6;24728:72;:::i;:::-;24847:9;24841:4;24837:20;24832:2;24821:9;24817:18;24810:48;24875:76;24946:4;24937:6;24875:76;:::i;:::-;24867:84;;24318:640;;;;;;;:::o;24964:332::-;25085:4;25123:2;25112:9;25108:18;25100:26;;25136:71;25204:1;25193:9;25189:17;25180:6;25136:71;:::i;:::-;25217:72;25285:2;25274:9;25270:18;25261:6;25217:72;:::i;:::-;24964:332;;;;;:::o;25302:210::-;25389:4;25427:2;25416:9;25412:18;25404:26;;25440:65;25502:1;25491:9;25487:17;25478:6;25440:65;:::i;:::-;25302:210;;;;:::o;25518:313::-;25631:4;25669:2;25658:9;25654:18;25646:26;;25718:9;25712:4;25708:20;25704:1;25693:9;25689:17;25682:47;25746:78;25819:4;25810:6;25746:78;:::i;:::-;25738:86;;25518:313;;;;:::o;25837:419::-;26003:4;26041:2;26030:9;26026:18;26018:26;;26090:9;26084:4;26080:20;26076:1;26065:9;26061:17;26054:47;26118:131;26244:4;26118:131;:::i;:::-;26110:139;;25837:419;;;:::o;26262:::-;26428:4;26466:2;26455:9;26451:18;26443:26;;26515:9;26509:4;26505:20;26501:1;26490:9;26486:17;26479:47;26543:131;26669:4;26543:131;:::i;:::-;26535:139;;26262:419;;;:::o;26687:::-;26853:4;26891:2;26880:9;26876:18;26868:26;;26940:9;26934:4;26930:20;26926:1;26915:9;26911:17;26904:47;26968:131;27094:4;26968:131;:::i;:::-;26960:139;;26687:419;;;:::o;27112:::-;27278:4;27316:2;27305:9;27301:18;27293:26;;27365:9;27359:4;27355:20;27351:1;27340:9;27336:17;27329:47;27393:131;27519:4;27393:131;:::i;:::-;27385:139;;27112:419;;;:::o;27537:::-;27703:4;27741:2;27730:9;27726:18;27718:26;;27790:9;27784:4;27780:20;27776:1;27765:9;27761:17;27754:47;27818:131;27944:4;27818:131;:::i;:::-;27810:139;;27537:419;;;:::o;27962:::-;28128:4;28166:2;28155:9;28151:18;28143:26;;28215:9;28209:4;28205:20;28201:1;28190:9;28186:17;28179:47;28243:131;28369:4;28243:131;:::i;:::-;28235:139;;27962:419;;;:::o;28387:::-;28553:4;28591:2;28580:9;28576:18;28568:26;;28640:9;28634:4;28630:20;28626:1;28615:9;28611:17;28604:47;28668:131;28794:4;28668:131;:::i;:::-;28660:139;;28387:419;;;:::o;28812:::-;28978:4;29016:2;29005:9;29001:18;28993:26;;29065:9;29059:4;29055:20;29051:1;29040:9;29036:17;29029:47;29093:131;29219:4;29093:131;:::i;:::-;29085:139;;28812:419;;;:::o;29237:::-;29403:4;29441:2;29430:9;29426:18;29418:26;;29490:9;29484:4;29480:20;29476:1;29465:9;29461:17;29454:47;29518:131;29644:4;29518:131;:::i;:::-;29510:139;;29237:419;;;:::o;29662:::-;29828:4;29866:2;29855:9;29851:18;29843:26;;29915:9;29909:4;29905:20;29901:1;29890:9;29886:17;29879:47;29943:131;30069:4;29943:131;:::i;:::-;29935:139;;29662:419;;;:::o;30087:::-;30253:4;30291:2;30280:9;30276:18;30268:26;;30340:9;30334:4;30330:20;30326:1;30315:9;30311:17;30304:47;30368:131;30494:4;30368:131;:::i;:::-;30360:139;;30087:419;;;:::o;30512:::-;30678:4;30716:2;30705:9;30701:18;30693:26;;30765:9;30759:4;30755:20;30751:1;30740:9;30736:17;30729:47;30793:131;30919:4;30793:131;:::i;:::-;30785:139;;30512:419;;;:::o;30937:::-;31103:4;31141:2;31130:9;31126:18;31118:26;;31190:9;31184:4;31180:20;31176:1;31165:9;31161:17;31154:47;31218:131;31344:4;31218:131;:::i;:::-;31210:139;;30937:419;;;:::o;31362:::-;31528:4;31566:2;31555:9;31551:18;31543:26;;31615:9;31609:4;31605:20;31601:1;31590:9;31586:17;31579:47;31643:131;31769:4;31643:131;:::i;:::-;31635:139;;31362:419;;;:::o;31787:::-;31953:4;31991:2;31980:9;31976:18;31968:26;;32040:9;32034:4;32030:20;32026:1;32015:9;32011:17;32004:47;32068:131;32194:4;32068:131;:::i;:::-;32060:139;;31787:419;;;:::o;32212:::-;32378:4;32416:2;32405:9;32401:18;32393:26;;32465:9;32459:4;32455:20;32451:1;32440:9;32436:17;32429:47;32493:131;32619:4;32493:131;:::i;:::-;32485:139;;32212:419;;;:::o;32637:::-;32803:4;32841:2;32830:9;32826:18;32818:26;;32890:9;32884:4;32880:20;32876:1;32865:9;32861:17;32854:47;32918:131;33044:4;32918:131;:::i;:::-;32910:139;;32637:419;;;:::o;33062:::-;33228:4;33266:2;33255:9;33251:18;33243:26;;33315:9;33309:4;33305:20;33301:1;33290:9;33286:17;33279:47;33343:131;33469:4;33343:131;:::i;:::-;33335:139;;33062:419;;;:::o;33487:::-;33653:4;33691:2;33680:9;33676:18;33668:26;;33740:9;33734:4;33730:20;33726:1;33715:9;33711:17;33704:47;33768:131;33894:4;33768:131;:::i;:::-;33760:139;;33487:419;;;:::o;33912:::-;34078:4;34116:2;34105:9;34101:18;34093:26;;34165:9;34159:4;34155:20;34151:1;34140:9;34136:17;34129:47;34193:131;34319:4;34193:131;:::i;:::-;34185:139;;33912:419;;;:::o;34337:::-;34503:4;34541:2;34530:9;34526:18;34518:26;;34590:9;34584:4;34580:20;34576:1;34565:9;34561:17;34554:47;34618:131;34744:4;34618:131;:::i;:::-;34610:139;;34337:419;;;:::o;34762:::-;34928:4;34966:2;34955:9;34951:18;34943:26;;35015:9;35009:4;35005:20;35001:1;34990:9;34986:17;34979:47;35043:131;35169:4;35043:131;:::i;:::-;35035:139;;34762:419;;;:::o;35187:::-;35353:4;35391:2;35380:9;35376:18;35368:26;;35440:9;35434:4;35430:20;35426:1;35415:9;35411:17;35404:47;35468:131;35594:4;35468:131;:::i;:::-;35460:139;;35187:419;;;:::o;35612:::-;35778:4;35816:2;35805:9;35801:18;35793:26;;35865:9;35859:4;35855:20;35851:1;35840:9;35836:17;35829:47;35893:131;36019:4;35893:131;:::i;:::-;35885:139;;35612:419;;;:::o;36037:::-;36203:4;36241:2;36230:9;36226:18;36218:26;;36290:9;36284:4;36280:20;36276:1;36265:9;36261:17;36254:47;36318:131;36444:4;36318:131;:::i;:::-;36310:139;;36037:419;;;:::o;36462:::-;36628:4;36666:2;36655:9;36651:18;36643:26;;36715:9;36709:4;36705:20;36701:1;36690:9;36686:17;36679:47;36743:131;36869:4;36743:131;:::i;:::-;36735:139;;36462:419;;;:::o;36887:::-;37053:4;37091:2;37080:9;37076:18;37068:26;;37140:9;37134:4;37130:20;37126:1;37115:9;37111:17;37104:47;37168:131;37294:4;37168:131;:::i;:::-;37160:139;;36887:419;;;:::o;37312:::-;37478:4;37516:2;37505:9;37501:18;37493:26;;37565:9;37559:4;37555:20;37551:1;37540:9;37536:17;37529:47;37593:131;37719:4;37593:131;:::i;:::-;37585:139;;37312:419;;;:::o;37737:::-;37903:4;37941:2;37930:9;37926:18;37918:26;;37990:9;37984:4;37980:20;37976:1;37965:9;37961:17;37954:47;38018:131;38144:4;38018:131;:::i;:::-;38010:139;;37737:419;;;:::o;38162:::-;38328:4;38366:2;38355:9;38351:18;38343:26;;38415:9;38409:4;38405:20;38401:1;38390:9;38386:17;38379:47;38443:131;38569:4;38443:131;:::i;:::-;38435:139;;38162:419;;;:::o;38587:::-;38753:4;38791:2;38780:9;38776:18;38768:26;;38840:9;38834:4;38830:20;38826:1;38815:9;38811:17;38804:47;38868:131;38994:4;38868:131;:::i;:::-;38860:139;;38587:419;;;:::o;39012:::-;39178:4;39216:2;39205:9;39201:18;39193:26;;39265:9;39259:4;39255:20;39251:1;39240:9;39236:17;39229:47;39293:131;39419:4;39293:131;:::i;:::-;39285:139;;39012:419;;;:::o;39437:222::-;39530:4;39568:2;39557:9;39553:18;39545:26;;39581:71;39649:1;39638:9;39634:17;39625:6;39581:71;:::i;:::-;39437:222;;;;:::o;39665:129::-;39699:6;39726:20;;:::i;:::-;39716:30;;39755:33;39783:4;39775:6;39755:33;:::i;:::-;39665:129;;;:::o;39800:75::-;39833:6;39866:2;39860:9;39850:19;;39800:75;:::o;39881:307::-;39942:4;40032:18;40024:6;40021:30;40018:56;;;40054:18;;:::i;:::-;40018:56;40092:29;40114:6;40092:29;:::i;:::-;40084:37;;40176:4;40170;40166:15;40158:23;;39881:307;;;:::o;40194:308::-;40256:4;40346:18;40338:6;40335:30;40332:56;;;40368:18;;:::i;:::-;40332:56;40406:29;40428:6;40406:29;:::i;:::-;40398:37;;40490:4;40484;40480:15;40472:23;;40194:308;;;:::o;40508:141::-;40557:4;40580:3;40572:11;;40603:3;40600:1;40593:14;40637:4;40634:1;40624:18;40616:26;;40508:141;;;:::o;40655:98::-;40706:6;40740:5;40734:12;40724:22;;40655:98;;;:::o;40759:99::-;40811:6;40845:5;40839:12;40829:22;;40759:99;;;:::o;40864:168::-;40947:11;40981:6;40976:3;40969:19;41021:4;41016:3;41012:14;40997:29;;40864:168;;;;:::o;41038:147::-;41139:11;41176:3;41161:18;;41038:147;;;;:::o;41191:169::-;41275:11;41309:6;41304:3;41297:19;41349:4;41344:3;41340:14;41325:29;;41191:169;;;;:::o;41366:148::-;41468:11;41505:3;41490:18;;41366:148;;;;:::o;41520:305::-;41560:3;41579:20;41597:1;41579:20;:::i;:::-;41574:25;;41613:20;41631:1;41613:20;:::i;:::-;41608:25;;41767:1;41699:66;41695:74;41692:1;41689:81;41686:107;;;41773:18;;:::i;:::-;41686:107;41817:1;41814;41810:9;41803:16;;41520:305;;;;:::o;41831:185::-;41871:1;41888:20;41906:1;41888:20;:::i;:::-;41883:25;;41922:20;41940:1;41922:20;:::i;:::-;41917:25;;41961:1;41951:35;;41966:18;;:::i;:::-;41951:35;42008:1;42005;42001:9;41996:14;;41831:185;;;;:::o;42022:348::-;42062:7;42085:20;42103:1;42085:20;:::i;:::-;42080:25;;42119:20;42137:1;42119:20;:::i;:::-;42114:25;;42307:1;42239:66;42235:74;42232:1;42229:81;42224:1;42217:9;42210:17;42206:105;42203:131;;;42314:18;;:::i;:::-;42203:131;42362:1;42359;42355:9;42344:20;;42022:348;;;;:::o;42376:191::-;42416:4;42436:20;42454:1;42436:20;:::i;:::-;42431:25;;42470:20;42488:1;42470:20;:::i;:::-;42465:25;;42509:1;42506;42503:8;42500:34;;;42514:18;;:::i;:::-;42500:34;42559:1;42556;42552:9;42544:17;;42376:191;;;;:::o;42573:96::-;42610:7;42639:24;42657:5;42639:24;:::i;:::-;42628:35;;42573:96;;;:::o;42675:90::-;42709:7;42752:5;42745:13;42738:21;42727:32;;42675:90;;;:::o;42771:149::-;42807:7;42847:66;42840:5;42836:78;42825:89;;42771:149;;;:::o;42926:126::-;42963:7;43003:42;42996:5;42992:54;42981:65;;42926:126;;;:::o;43058:77::-;43095:7;43124:5;43113:16;;43058:77;;;:::o;43141:154::-;43225:6;43220:3;43215;43202:30;43287:1;43278:6;43273:3;43269:16;43262:27;43141:154;;;:::o;43301:307::-;43369:1;43379:113;43393:6;43390:1;43387:13;43379:113;;;43478:1;43473:3;43469:11;43463:18;43459:1;43454:3;43450:11;43443:39;43415:2;43412:1;43408:10;43403:15;;43379:113;;;43510:6;43507:1;43504:13;43501:101;;;43590:1;43581:6;43576:3;43572:16;43565:27;43501:101;43350:258;43301:307;;;:::o;43614:320::-;43658:6;43695:1;43689:4;43685:12;43675:22;;43742:1;43736:4;43732:12;43763:18;43753:81;;43819:4;43811:6;43807:17;43797:27;;43753:81;43881:2;43873:6;43870:14;43850:18;43847:38;43844:84;;;43900:18;;:::i;:::-;43844:84;43665:269;43614:320;;;:::o;43940:281::-;44023:27;44045:4;44023:27;:::i;:::-;44015:6;44011:40;44153:6;44141:10;44138:22;44117:18;44105:10;44102:34;44099:62;44096:88;;;44164:18;;:::i;:::-;44096:88;44204:10;44200:2;44193:22;43983:238;43940:281;;:::o;44227:233::-;44266:3;44289:24;44307:5;44289:24;:::i;:::-;44280:33;;44335:66;44328:5;44325:77;44322:103;;;44405:18;;:::i;:::-;44322:103;44452:1;44445:5;44441:13;44434:20;;44227:233;;;:::o;44466:176::-;44498:1;44515:20;44533:1;44515:20;:::i;:::-;44510:25;;44549:20;44567:1;44549:20;:::i;:::-;44544:25;;44588:1;44578:35;;44593:18;;:::i;:::-;44578:35;44634:1;44631;44627:9;44622:14;;44466:176;;;;:::o;44648:180::-;44696:77;44693:1;44686:88;44793:4;44790:1;44783:15;44817:4;44814:1;44807:15;44834:180;44882:77;44879:1;44872:88;44979:4;44976:1;44969:15;45003:4;45000:1;44993:15;45020:180;45068:77;45065:1;45058:88;45165:4;45162:1;45155:15;45189:4;45186:1;45179:15;45206:180;45254:77;45251:1;45244:88;45351:4;45348:1;45341:15;45375:4;45372:1;45365:15;45392:180;45440:77;45437:1;45430:88;45537:4;45534:1;45527:15;45561:4;45558:1;45551:15;45578:117;45687:1;45684;45677:12;45701:117;45810:1;45807;45800:12;45824:117;45933:1;45930;45923:12;45947:117;46056:1;46053;46046:12;46070:102;46111:6;46162:2;46158:7;46153:2;46146:5;46142:14;46138:28;46128:38;;46070:102;;;:::o;46178:221::-;46318:34;46314:1;46306:6;46302:14;46295:58;46387:4;46382:2;46374:6;46370:15;46363:29;46178:221;:::o;46405:181::-;46545:33;46541:1;46533:6;46529:14;46522:57;46405:181;:::o;46592:234::-;46732:34;46728:1;46720:6;46716:14;46709:58;46801:17;46796:2;46788:6;46784:15;46777:42;46592:234;:::o;46832:225::-;46972:34;46968:1;46960:6;46956:14;46949:58;47041:8;47036:2;47028:6;47024:15;47017:33;46832:225;:::o;47063:229::-;47203:34;47199:1;47191:6;47187:14;47180:58;47272:12;47267:2;47259:6;47255:15;47248:37;47063:229;:::o;47298:174::-;47438:26;47434:1;47426:6;47422:14;47415:50;47298:174;:::o;47478:222::-;47618:34;47614:1;47606:6;47602:14;47595:58;47687:5;47682:2;47674:6;47670:15;47663:30;47478:222;:::o;47706:235::-;47846:34;47842:1;47834:6;47830:14;47823:58;47915:18;47910:2;47902:6;47898:15;47891:43;47706:235;:::o;47947:221::-;48087:34;48083:1;48075:6;48071:14;48064:58;48156:4;48151:2;48143:6;48139:15;48132:29;47947:221;:::o;48174:224::-;48314:34;48310:1;48302:6;48298:14;48291:58;48383:7;48378:2;48370:6;48366:15;48359:32;48174:224;:::o;48404:245::-;48544:34;48540:1;48532:6;48528:14;48521:58;48613:28;48608:2;48600:6;48596:15;48589:53;48404:245;:::o;48655:179::-;48795:31;48791:1;48783:6;48779:14;48772:55;48655:179;:::o;48840:::-;48980:31;48976:1;48968:6;48964:14;48957:55;48840:179;:::o;49025:244::-;49165:34;49161:1;49153:6;49149:14;49142:58;49234:27;49229:2;49221:6;49217:15;49210:52;49025:244;:::o;49275:179::-;49415:31;49411:1;49403:6;49399:14;49392:55;49275:179;:::o;49460:230::-;49600:34;49596:1;49588:6;49584:14;49577:58;49669:13;49664:2;49656:6;49652:15;49645:38;49460:230;:::o;49696:165::-;49836:17;49832:1;49824:6;49820:14;49813:41;49696:165;:::o;49867:225::-;50007:34;50003:1;49995:6;49991:14;49984:58;50076:8;50071:2;50063:6;50059:15;50052:33;49867:225;:::o;50098:182::-;50238:34;50234:1;50226:6;50222:14;50215:58;50098:182;:::o;50286:176::-;50426:28;50422:1;50414:6;50410:14;50403:52;50286:176;:::o;50468:237::-;50608:34;50604:1;50596:6;50592:14;50585:58;50677:20;50672:2;50664:6;50660:15;50653:45;50468:237;:::o;50711:170::-;50851:22;50847:1;50839:6;50835:14;50828:46;50711:170;:::o;50887:221::-;51027:34;51023:1;51015:6;51011:14;51004:58;51096:4;51091:2;51083:6;51079:15;51072:29;50887:221;:::o;51114:114::-;;:::o;51234:238::-;51374:34;51370:1;51362:6;51358:14;51351:58;51443:21;51438:2;51430:6;51426:15;51419:46;51234:238;:::o;51478:220::-;51618:34;51614:1;51606:6;51602:14;51595:58;51687:3;51682:2;51674:6;51670:15;51663:28;51478:220;:::o;51704:227::-;51844:34;51840:1;51832:6;51828:14;51821:58;51913:10;51908:2;51900:6;51896:15;51889:35;51704:227;:::o;51937:228::-;52077:34;52073:1;52065:6;52061:14;52054:58;52146:11;52141:2;52133:6;52129:15;52122:36;51937:228;:::o;52171:233::-;52311:34;52307:1;52299:6;52295:14;52288:58;52380:16;52375:2;52367:6;52363:15;52356:41;52171:233;:::o;52410:220::-;52550:34;52546:1;52538:6;52534:14;52527:58;52619:3;52614:2;52606:6;52602:15;52595:28;52410:220;:::o;52636:234::-;52776:34;52772:1;52764:6;52760:14;52753:58;52845:17;52840:2;52832:6;52828:15;52821:42;52636:234;:::o;52876:232::-;53016:34;53012:1;53004:6;53000:14;52993:58;53085:15;53080:2;53072:6;53068:15;53061:40;52876:232;:::o;53114:159::-;53254:11;53250:1;53242:6;53238:14;53231:35;53114:159;:::o;53279:122::-;53352:24;53370:5;53352:24;:::i;:::-;53345:5;53342:35;53332:63;;53391:1;53388;53381:12;53332:63;53279:122;:::o;53407:116::-;53477:21;53492:5;53477:21;:::i;:::-;53470:5;53467:32;53457:60;;53513:1;53510;53503:12;53457:60;53407:116;:::o;53529:120::-;53601:23;53618:5;53601:23;:::i;:::-;53594:5;53591:34;53581:62;;53639:1;53636;53629:12;53581:62;53529:120;:::o;53655:122::-;53728:24;53746:5;53728:24;:::i;:::-;53721:5;53718:35;53708:63;;53767:1;53764;53757:12;53708:63;53655:122;:::o

Swarm Source

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