ETH Price: $3,954.00 (+1.47%)

Token

NobodyNxt (NobodyNxt)
 

Overview

Max Total Supply

3,210 NobodyNxt

Holders

928

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
3 NobodyNxt
0x8361e1862b5608ebc2f78d0c8e77e82943d79696
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:
NobodyNxt

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-21
*/

// File: node_modules\@openzeppelin\contracts\utils\Counters.sol";

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}
// File: node_modules\@openzeppelin\contracts\utils\math\SafeMath.sol";

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
// File: node_modules\@openzeppelin\contracts\utils\Context.sol



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

// File: node_modules\@openzeppelin\contracts\token\ERC721\IERC721.sol



pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, 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;
}

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 ||
            super.supportsInterface(interfaceId);
    }

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @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 virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: 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 virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), 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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts\nobodyv2.sol
// SPDX-License-Identifier: MIT


//             ¸ ..
//           « *‡ ‰  ›
//             ª ¨ ™
//        _--- -- -- ---_ 
//       /   ¸ ¸ ¸       \       ¸    
//      ¦|  [  X ]  (  •}|¦      º±_
//      ¦|            ¨¨¨|¦      ”\\ 
//       \   =# # # #=   /                
//        ¯--- -- -- ---¯ 
//
//      _.    _.           ¦|                      |¦
//      _|\\  _|           ¦|                      |¦   _.   _. 
//      _| \\ _|   //¨¸¨\  ¦|ˆˆ¸ˆ\   //¨¸¨\   /ˆ¸ˆˆ|¦   _|   _|
//      _|  \\_|   \____/   \\___/   \____/   \____//   _|____|
//                                                            |
//                                                        _| _|

pragma solidity ^0.8.0;
pragma experimental ABIEncoderV2;

interface nobodyinterface
{
    function nobody (uint256 tokenid) external view returns (string memory);
}

contract NobodyNxt is ERC721, Ownable {
  using SafeMath for uint256;
  using Counters for Counters.Counter;


  uint public maxNobody = 3210;
  uint public maxNobodyPerPurchase = 10;
  uint256 public price = 30000000000000000; // 0.03 Ether

  bool public isSaleActive = false;
  bool public isPreSaleActive = false;
  string public baseURI;

  Counters.Counter private _tokenIds;

  address public nobodyaddress = 0x219463D0675C3fa01C1edf537Ec5Dc693B6410AE; 

  nobodyinterface nobodycontract = nobodyinterface(nobodyaddress);  
    
  address public creator = 0x7ddD43C63aa73CDE4c5aa6b5De5D9681882D88f8; 

  mapping(address => uint256) presaleAllowance;

  constructor (uint _maxNobody, uint _maxNobodyPerPurchase ) ERC721("NobodyNxt", "NobodyNxt") {
    maxNobody = _maxNobody;
    maxNobodyPerPurchase = _maxNobodyPerPurchase;
    _mintnobody(creator, 1);
  }

  function totalSupply() public view returns (uint256) {
    return _tokenIds.current();
  }
  
  function presalemint(uint256 _count ) public payable {
    require(isPreSaleActive, "Sale is not active!" );
    require(isWhitelisted(msg.sender,_count), "Insufficient reserved tokens for your address");
    require(totalSupply().add(_count) <= maxNobody, "Sorry too many nobody!");
    require(msg.value >= price.mul(_count), "Ether value sent is not correct!");

    _mintnobody(msg.sender, _count);
    presaleAllowance[msg.sender] -= _count;
  }

  function mint(uint256 _count ) public payable {
    require(isSaleActive, "Sale is not active!" );
    require(_count > 0 && _count <= maxNobodyPerPurchase, 'Max is 10 at a time');
    require(totalSupply().add(_count) <= maxNobody, "Sorry too many nobody!");
    require(msg.value >= price.mul(_count), "Ether value sent is not correct!");

    _mintnobody(msg.sender, _count);
  }

  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId), "URI query for nonexistent token");
    return string(abi.encodePacked(_baseURI(), "/", nobodycontract.nobody(_tokenId)));
  }

  function _mintnobody(address _to, uint256 _count ) internal {
    for (uint256 i = 0; i < _count; i++) {
        uint256 newItemId = _tokenIds.current();
        _tokenIds.increment();
        _safeMint(_to, newItemId);
    }
  }
  function getNobodyDNA(uint256 _tokenId) public view returns (string memory) {
      require(_exists(_tokenId), "nonexistent token");
      return nobodycontract.nobody(_tokenId);
  }

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

  //whitelist
  function setWhitelistAllowance(address[] memory _to, uint256 _allowance) public onlyOwner {
      for (uint256 i = 0; i < _to.length; i++) {
          presaleAllowance[_to[i]] = _allowance;
      }
  }

  function setWhitelistAllowance(address[] memory _to, uint256[] memory _allowance) public onlyOwner {
      for (uint256 i = 0; i < _to.length; i++) {
          presaleAllowance[_to[i]] = _allowance[i];
      }
  }

  function getWhitelistAllowance(address _to) public view returns (uint256) {
      return presaleAllowance[_to];
  }

  function isWhitelisted(address _account) public view returns (bool) {
      return presaleAllowance[_account] > 0;
  }

  function isWhitelisted(address _account, uint256 _count) public view returns (bool) {
      return presaleAllowance[_account] >= _count;
  }

  //owner only
  function flipSaleState() public onlyOwner {
      isSaleActive = !isSaleActive;
  }

  function flipPreSaleState() public onlyOwner {
      isPreSaleActive = !isPreSaleActive;
  }

  function setPrice(uint256 _newPrice) public onlyOwner {
      price = _newPrice;
  }
  
  function setBaseURI(string memory _newBaseURI) public onlyOwner {
      baseURI = _newBaseURI;
  }

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

  function airdropNobody(address[] memory _to, uint256 _count ) public onlyOwner {        
      for (uint256 i = 0; i < _to.length; i++) {
      _mintnobody(_to[i], _count);
      }
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_maxNobody","type":"uint256"},{"internalType":"uint256","name":"_maxNobodyPerPurchase","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"airdropNobody","outputs":[],"stateMutability":"nonpayable","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getNobodyDNA","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"getWhitelistAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isPreSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNobody","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNobodyPerPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nobodyaddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"presalemint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_allowance","type":"uint256"}],"name":"setWhitelistAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_allowance","type":"uint256[]"}],"name":"setWhitelistAllowance","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":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052610c8a600755600a600855666a94d74f4300006009556000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff02191690831515021790555073219463d0675c3fa01c1edf537ec5dc693b6410ae600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737ddd43c63aa73cde4c5aa6b5de5d9681882d88f8600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200016a57600080fd5b506040516200514b3803806200514b8339818101604052810190620001909190620009bb565b6040518060400160405280600981526020017f4e6f626f64794e787400000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4e6f626f64794e78740000000000000000000000000000000000000000000000815250816000908051906020019062000214929190620008b1565b5080600190805190602001906200022d929190620008b1565b50505062000250620002446200029b60201b60201c565b620002a360201b60201c565b816007819055508060088190555062000293600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200036960201b60201c565b505062000e56565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015620003d05760006200038e600c620003d560201b620020891760201c565b9050620003a7600c620003e360201b620020971760201c565b620003b98482620003f960201b60201c565b508080620003c79062000d65565b9150506200036c565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6200041b8282604051806020016040528060008152506200041f60201b60201c565b5050565b6200043183836200048d60201b60201c565b6200044660008484846200067360201b60201c565b62000488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047f9062000b9f565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000500576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f79062000be3565b60405180910390fd5b62000511816200082d60201b60201c565b1562000554576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054b9062000bc1565b60405180910390fd5b62000568600083836200089960201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005ba919062000c32565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006a18473ffffffffffffffffffffffffffffffffffffffff166200089e60201b620020ad1760201c565b1562000820578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006d36200029b60201b60201c565b8786866040518563ffffffff1660e01b8152600401620006f7949392919062000b4b565b602060405180830381600087803b1580156200071257600080fd5b505af19250505080156200074657506040513d601f19601f820116820180604052508101906200074391906200098f565b60015b620007cf573d806000811462000779576040519150601f19603f3d011682016040523d82523d6000602084013e6200077e565b606091505b50600081511415620007c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007be9062000b9f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000825565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b828054620008bf9062000d2f565b90600052602060002090601f016020900481019282620008e357600085556200092f565b82601f10620008fe57805160ff19168380011785556200092f565b828001600101855582156200092f579182015b828111156200092e57825182559160200191906001019062000911565b5b5090506200093e919062000942565b5090565b5b808211156200095d57600081600090555060010162000943565b5090565b600081519050620009728162000e22565b92915050565b600081519050620009898162000e3c565b92915050565b600060208284031215620009a257600080fd5b6000620009b28482850162000961565b91505092915050565b60008060408385031215620009cf57600080fd5b6000620009df8582860162000978565b9250506020620009f28582860162000978565b9150509250929050565b62000a078162000c8f565b82525050565b600062000a1a8262000c05565b62000a26818562000c10565b935062000a3881856020860162000cf9565b62000a438162000e11565b840191505092915050565b600062000a5d60328362000c21565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600062000ac5601c8362000c21565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600062000b0760208362000c21565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b62000b458162000cef565b82525050565b600060808201905062000b626000830187620009fc565b62000b716020830186620009fc565b62000b80604083018562000b3a565b818103606083015262000b94818462000a0d565b905095945050505050565b6000602082019050818103600083015262000bba8162000a4e565b9050919050565b6000602082019050818103600083015262000bdc8162000ab6565b9050919050565b6000602082019050818103600083015262000bfe8162000af8565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000c3f8262000cef565b915062000c4c8362000cef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c845762000c8362000db3565b5b828201905092915050565b600062000c9c8262000ccf565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000d1957808201518184015260208101905062000cfc565b8381111562000d29576000848401525b50505050565b6000600282049050600182168062000d4857607f821691505b6020821081141562000d5f5762000d5e62000de2565b5b50919050565b600062000d728262000cef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000da85762000da762000db3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b62000e2d8162000ca3565b811462000e3957600080fd5b50565b62000e478162000cef565b811462000e5357600080fd5b50565b6142e58062000e666000396000f3fe6080604052600436106102305760003560e01c806370a082311161012e578063a22cb465116100ab578063e985e9c51161006f578063e985e9c51461082e578063f03255491461086b578063f27dac4214610882578063f2fde38b146108ad578063ff2e666c146108d657610230565b8063a22cb4651461074b578063b88d4fde14610774578063c598e7f21461079d578063c87b56dd146107c8578063d95b1d331461080557610230565b806391b7f5ed116100f257806391b7f5ed1461068557806395d89b41146106ae5780639d044ed3146106d9578063a035b1fe14610704578063a0712d681461072f57610230565b806370a08231146105a0578063715018a6146105dd57806374f314f1146105f4578063830639ac1461061d5780638da5cb5b1461065a57610230565b80633af32abf116101bc57806355f804b31161018057806355f804b3146104a7578063564566a8146104d057806360063c60146104fb5780636352211e146105385780636c0360eb1461057557610230565b80633af32abf146103c25780633b16687c146103ff5780633ccfd60b1461042a57806342842e0e146104415780634dab7d241461046a57610230565b8063095ea7b311610203578063095ea7b31461030557806318160ddd1461032e57806323b872dd14610359578063335d409c1461038257806334918dfd146103ab57610230565b806301ffc9a71461023557806302d05d3f1461027257806306fdde031461029d578063081812fc146102c8575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613171565b6108f2565b6040516102699190613b5c565b60405180910390f35b34801561027e57600080fd5b506102876109d4565b6040516102949190613af5565b60405180910390f35b3480156102a957600080fd5b506102b26109fa565b6040516102bf9190613b77565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190613245565b610a8c565b6040516102fc9190613af5565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190613075565b610b11565b005b34801561033a57600080fd5b50610343610c29565b6040516103509190613e59565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190612f6f565b610c3a565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061311d565b610c9a565b005b3480156103b757600080fd5b506103c0610dbe565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190612f0a565b610e66565b6040516103f69190613b5c565b60405180910390f35b34801561040b57600080fd5b50610414610eb1565b6040516104219190613af5565b60405180910390f35b34801561043657600080fd5b5061043f610ed7565b005b34801561044d57600080fd5b5061046860048036038101906104639190612f6f565b610fa2565b005b34801561047657600080fd5b50610491600480360381019061048c9190612f0a565b610fc2565b60405161049e9190613e59565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906131c3565b61100b565b005b3480156104dc57600080fd5b506104e56110a1565b6040516104f29190613b5c565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613245565b6110b4565b60405161052f9190613b77565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613245565b6111b5565b60405161056c9190613af5565b60405180910390f35b34801561058157600080fd5b5061058a611267565b6040516105979190613b77565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190612f0a565b6112f5565b6040516105d49190613e59565b60405180910390f35b3480156105e957600080fd5b506105f26113ad565b005b34801561060057600080fd5b5061061b600480360381019061061691906130b1565b611435565b005b34801561062957600080fd5b50610644600480360381019061063f9190613075565b611599565b6040516106519190613b5c565b60405180910390f35b34801561066657600080fd5b5061066f6115e6565b60405161067c9190613af5565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190613245565b611610565b005b3480156106ba57600080fd5b506106c3611696565b6040516106d09190613b77565b60405180910390f35b3480156106e557600080fd5b506106ee611728565b6040516106fb9190613b5c565b60405180910390f35b34801561071057600080fd5b5061071961173b565b6040516107269190613e59565b60405180910390f35b61074960048036038101906107449190613245565b611741565b005b34801561075757600080fd5b50610772600480360381019061076d9190613039565b6118a3565b005b34801561078057600080fd5b5061079b60048036038101906107969190612fbe565b611a24565b005b3480156107a957600080fd5b506107b2611a86565b6040516107bf9190613e59565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613245565b611a8c565b6040516107fc9190613b77565b60405180910390f35b34801561081157600080fd5b5061082c6004803603810190610827919061311d565b611bb5565b005b34801561083a57600080fd5b5061085560048036038101906108509190612f33565b611c9f565b6040516108629190613b5c565b60405180910390f35b34801561087757600080fd5b50610880611d33565b005b34801561088e57600080fd5b50610897611ddb565b6040516108a49190613e59565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190612f0a565b611de1565b005b6108f060048036038101906108eb9190613245565b611ed9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109bd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cd57506109cc826120c0565b5b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008054610a099061413a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a359061413a565b8015610a825780601f10610a5757610100808354040283529160200191610a82565b820191906000526020600020905b815481529060010190602001808311610a6557829003601f168201915b5050505050905090565b6000610a978261212a565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90613d79565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1c826111b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613e19565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bac612196565b73ffffffffffffffffffffffffffffffffffffffff161480610bdb5750610bda81610bd5612196565b611c9f565b5b610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190613cb9565b60405180910390fd5b610c24838361219e565b505050565b6000610c35600c612089565b905090565b610c4b610c45612196565b82612257565b610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190613e39565b60405180910390fd5b610c95838383612335565b505050565b610ca2612196565b73ffffffffffffffffffffffffffffffffffffffff16610cc06115e6565b73ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613db9565b60405180910390fd5b60005b8251811015610db9578160106000858481518110610d60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610db19061416c565b915050610d19565b505050565b610dc6612196565b73ffffffffffffffffffffffffffffffffffffffff16610de46115e6565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613db9565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610edf612196565b73ffffffffffffffffffffffffffffffffffffffff16610efd6115e6565b73ffffffffffffffffffffffffffffffffffffffff1614610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a90613db9565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f9e573d6000803e3d6000fd5b5050565b610fbd83838360405180602001604052806000815250611a24565b505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611013612196565b73ffffffffffffffffffffffffffffffffffffffff166110316115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613db9565b60405180910390fd5b80600b908051906020019061109d929190612b9a565b5050565b600a60009054906101000a900460ff1681565b60606110bf8261212a565b6110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590613d99565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c84c31b836040518263ffffffff1660e01b81526004016111599190613e59565b60006040518083038186803b15801561117157600080fd5b505afa158015611185573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906111ae9190613204565b9050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590613cf9565b60405180910390fd5b80915050919050565b600b80546112749061413a565b80601f01602080910402602001604051908101604052809291908181526020018280546112a09061413a565b80156112ed5780601f106112c2576101008083540402835291602001916112ed565b820191906000526020600020905b8154815290600101906020018083116112d057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613cd9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113b5612196565b73ffffffffffffffffffffffffffffffffffffffff166113d36115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090613db9565b60405180910390fd5b6114336000612591565b565b61143d612196565b73ffffffffffffffffffffffffffffffffffffffff1661145b6115e6565b73ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613db9565b60405180910390fd5b60005b8251811015611594578181815181106114f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516010600085848151811061153b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061158c9061416c565b9150506114b4565b505050565b600081601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611618612196565b73ffffffffffffffffffffffffffffffffffffffff166116366115e6565b73ffffffffffffffffffffffffffffffffffffffff161461168c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168390613db9565b60405180910390fd5b8060098190555050565b6060600180546116a59061413a565b80601f01602080910402602001604051908101604052809291908181526020018280546116d19061413a565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b5050505050905090565b600a60019054906101000a900460ff1681565b60095481565b600a60009054906101000a900460ff16611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790613df9565b60405180910390fd5b6000811180156117a257506008548111155b6117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890613b99565b60405180910390fd5b6007546117fe826117f0610c29565b61265790919063ffffffff16565b111561183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690613c79565b60405180910390fd5b6118548160095461266d90919063ffffffff16565b341015611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90613d19565b60405180910390fd5b6118a03382612683565b50565b6118ab612196565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090613c59565b60405180910390fd5b8060056000611926612196565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119d3612196565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a189190613b5c565b60405180910390a35050565b611a35611a2f612196565b83612257565b611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90613e39565b60405180910390fd5b611a80848484846126c9565b50505050565b60085481565b6060611a978261212a565b611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613bb9565b60405180910390fd5b611ade612725565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c84c31b846040518263ffffffff1660e01b8152600401611b399190613e59565b60006040518083038186803b158015611b5157600080fd5b505afa158015611b65573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b8e9190613204565b604051602001611b9f929190613ac6565b6040516020818303038152906040529050919050565b611bbd612196565b73ffffffffffffffffffffffffffffffffffffffff16611bdb6115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2890613db9565b60405180910390fd5b60005b8251811015611c9a57611c87838281518110611c79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183612683565b8080611c929061416c565b915050611c34565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d3b612196565b73ffffffffffffffffffffffffffffffffffffffff16611d596115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690613db9565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b60075481565b611de9612196565b73ffffffffffffffffffffffffffffffffffffffff16611e076115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490613db9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613bf9565b60405180910390fd5b611ed681612591565b50565b600a60019054906101000a900460ff16611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90613df9565b60405180910390fd5b611f323382611599565b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613d59565b60405180910390fd5b600754611f8e82611f80610c29565b61265790919063ffffffff16565b1115611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc690613c79565b60405180910390fd5b611fe48160095461266d90919063ffffffff16565b341015612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90613d19565b60405180910390fd5b6120303382612683565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461207f9190614050565b9250508190555050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612211836111b5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122628261212a565b6122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613c99565b60405180910390fd5b60006122ac836111b5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061231b57508373ffffffffffffffffffffffffffffffffffffffff1661230384610a8c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061232c575061232b8185611c9f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612355826111b5565b73ffffffffffffffffffffffffffffffffffffffff16146123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a290613dd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561241b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241290613c39565b60405180910390fd5b6124268383836127b7565b61243160008261219e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124819190614050565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d89190613fa0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836126659190613fa0565b905092915050565b6000818361267b9190613ff6565b905092915050565b60005b818110156126c457600061269a600c612089565b90506126a6600c612097565b6126b084826127bc565b5080806126bc9061416c565b915050612686565b505050565b6126d4848484612335565b6126e0848484846127da565b61271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613bd9565b60405180910390fd5b50505050565b6060600b80546127349061413a565b80601f01602080910402602001604051908101604052809291908181526020018280546127609061413a565b80156127ad5780601f10612782576101008083540402835291602001916127ad565b820191906000526020600020905b81548152906001019060200180831161279057829003601f168201915b5050505050905090565b505050565b6127d6828260405180602001604052806000815250612971565b5050565b60006127fb8473ffffffffffffffffffffffffffffffffffffffff166120ad565b15612964578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612824612196565b8786866040518563ffffffff1660e01b81526004016128469493929190613b10565b602060405180830381600087803b15801561286057600080fd5b505af192505050801561289157506040513d601f19601f8201168201806040525081019061288e919061319a565b60015b612914573d80600081146128c1576040519150601f19603f3d011682016040523d82523d6000602084013e6128c6565b606091505b5060008151141561290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390613bd9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612969565b600190505b949350505050565b61297b83836129cc565b61298860008484846127da565b6129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90613bd9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3390613d39565b60405180910390fd5b612a458161212a565b15612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c90613c19565b60405180910390fd5b612a91600083836127b7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ae19190613fa0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612ba69061413a565b90600052602060002090601f016020900481019282612bc85760008555612c0f565b82601f10612be157805160ff1916838001178555612c0f565b82800160010185558215612c0f579182015b82811115612c0e578251825591602001919060010190612bf3565b5b509050612c1c9190612c20565b5090565b5b80821115612c39576000816000905550600101612c21565b5090565b6000612c50612c4b84613ea5565b613e74565b90508083825260208201905082856020860282011115612c6f57600080fd5b60005b85811015612c9f5781612c858882612dcf565b845260208401935060208301925050600181019050612c72565b5050509392505050565b6000612cbc612cb784613ed1565b613e74565b90508083825260208201905082856020860282011115612cdb57600080fd5b60005b85811015612d0b5781612cf18882612ef5565b845260208401935060208301925050600181019050612cde565b5050509392505050565b6000612d28612d2384613efd565b613e74565b905082815260208101848484011115612d4057600080fd5b612d4b8482856140f8565b509392505050565b6000612d66612d6184613f2d565b613e74565b905082815260208101848484011115612d7e57600080fd5b612d898482856140f8565b509392505050565b6000612da4612d9f84613f2d565b613e74565b905082815260208101848484011115612dbc57600080fd5b612dc7848285614107565b509392505050565b600081359050612dde81614253565b92915050565b600082601f830112612df557600080fd5b8135612e05848260208601612c3d565b91505092915050565b600082601f830112612e1f57600080fd5b8135612e2f848260208601612ca9565b91505092915050565b600081359050612e478161426a565b92915050565b600081359050612e5c81614281565b92915050565b600081519050612e7181614281565b92915050565b600082601f830112612e8857600080fd5b8135612e98848260208601612d15565b91505092915050565b600082601f830112612eb257600080fd5b8135612ec2848260208601612d53565b91505092915050565b600082601f830112612edc57600080fd5b8151612eec848260208601612d91565b91505092915050565b600081359050612f0481614298565b92915050565b600060208284031215612f1c57600080fd5b6000612f2a84828501612dcf565b91505092915050565b60008060408385031215612f4657600080fd5b6000612f5485828601612dcf565b9250506020612f6585828601612dcf565b9150509250929050565b600080600060608486031215612f8457600080fd5b6000612f9286828701612dcf565b9350506020612fa386828701612dcf565b9250506040612fb486828701612ef5565b9150509250925092565b60008060008060808587031215612fd457600080fd5b6000612fe287828801612dcf565b9450506020612ff387828801612dcf565b935050604061300487828801612ef5565b925050606085013567ffffffffffffffff81111561302157600080fd5b61302d87828801612e77565b91505092959194509250565b6000806040838503121561304c57600080fd5b600061305a85828601612dcf565b925050602061306b85828601612e38565b9150509250929050565b6000806040838503121561308857600080fd5b600061309685828601612dcf565b92505060206130a785828601612ef5565b9150509250929050565b600080604083850312156130c457600080fd5b600083013567ffffffffffffffff8111156130de57600080fd5b6130ea85828601612de4565b925050602083013567ffffffffffffffff81111561310757600080fd5b61311385828601612e0e565b9150509250929050565b6000806040838503121561313057600080fd5b600083013567ffffffffffffffff81111561314a57600080fd5b61315685828601612de4565b925050602061316785828601612ef5565b9150509250929050565b60006020828403121561318357600080fd5b600061319184828501612e4d565b91505092915050565b6000602082840312156131ac57600080fd5b60006131ba84828501612e62565b91505092915050565b6000602082840312156131d557600080fd5b600082013567ffffffffffffffff8111156131ef57600080fd5b6131fb84828501612ea1565b91505092915050565b60006020828403121561321657600080fd5b600082015167ffffffffffffffff81111561323057600080fd5b61323c84828501612ecb565b91505092915050565b60006020828403121561325757600080fd5b600061326584828501612ef5565b91505092915050565b61327781614084565b82525050565b61328681614096565b82525050565b600061329782613f5d565b6132a18185613f73565b93506132b1818560208601614107565b6132ba81614242565b840191505092915050565b60006132d082613f68565b6132da8185613f84565b93506132ea818560208601614107565b6132f381614242565b840191505092915050565b600061330982613f68565b6133138185613f95565b9350613323818560208601614107565b80840191505092915050565b600061333c601383613f84565b91507f4d617820697320313020617420612074696d65000000000000000000000000006000830152602082019050919050565b600061337c601f83613f84565b91507f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006000830152602082019050919050565b60006133bc603283613f84565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613422602683613f84565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613488601c83613f84565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006134c8602483613f84565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061352e601983613f84565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061356e601683613f84565b91507f536f72727920746f6f206d616e79206e6f626f647921000000000000000000006000830152602082019050919050565b60006135ae602c83613f84565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613614603883613f84565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061367a602a83613f84565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006136e0602983613f84565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613746602083613f84565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374216000830152602082019050919050565b6000613786602083613f84565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006137c6602d83613f84565b91507f496e73756666696369656e7420726573657276656420746f6b656e7320666f7260008301527f20796f75722061646472657373000000000000000000000000000000000000006020830152604082019050919050565b600061382c602c83613f84565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613892601183613f84565b91507f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006000830152602082019050919050565b60006138d2602083613f84565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613912602983613f84565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613978601383613f84565b91507f53616c65206973206e6f742061637469766521000000000000000000000000006000830152602082019050919050565b60006139b8602183613f84565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a1e603183613f84565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613a84600183613f95565b91507f2f000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b613ac0816140ee565b82525050565b6000613ad282856132fe565b9150613add82613a77565b9150613ae982846132fe565b91508190509392505050565b6000602082019050613b0a600083018461326e565b92915050565b6000608082019050613b25600083018761326e565b613b32602083018661326e565b613b3f6040830185613ab7565b8181036060830152613b51818461328c565b905095945050505050565b6000602082019050613b71600083018461327d565b92915050565b60006020820190508181036000830152613b9181846132c5565b905092915050565b60006020820190508181036000830152613bb28161332f565b9050919050565b60006020820190508181036000830152613bd28161336f565b9050919050565b60006020820190508181036000830152613bf2816133af565b9050919050565b60006020820190508181036000830152613c1281613415565b9050919050565b60006020820190508181036000830152613c328161347b565b9050919050565b60006020820190508181036000830152613c52816134bb565b9050919050565b60006020820190508181036000830152613c7281613521565b9050919050565b60006020820190508181036000830152613c9281613561565b9050919050565b60006020820190508181036000830152613cb2816135a1565b9050919050565b60006020820190508181036000830152613cd281613607565b9050919050565b60006020820190508181036000830152613cf28161366d565b9050919050565b60006020820190508181036000830152613d12816136d3565b9050919050565b60006020820190508181036000830152613d3281613739565b9050919050565b60006020820190508181036000830152613d5281613779565b9050919050565b60006020820190508181036000830152613d72816137b9565b9050919050565b60006020820190508181036000830152613d928161381f565b9050919050565b60006020820190508181036000830152613db281613885565b9050919050565b60006020820190508181036000830152613dd2816138c5565b9050919050565b60006020820190508181036000830152613df281613905565b9050919050565b60006020820190508181036000830152613e128161396b565b9050919050565b60006020820190508181036000830152613e32816139ab565b9050919050565b60006020820190508181036000830152613e5281613a11565b9050919050565b6000602082019050613e6e6000830184613ab7565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613e9b57613e9a614213565b5b8060405250919050565b600067ffffffffffffffff821115613ec057613ebf614213565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613eec57613eeb614213565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f1857613f17614213565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613f4857613f47614213565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fab826140ee565b9150613fb6836140ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613feb57613fea6141b5565b5b828201905092915050565b6000614001826140ee565b915061400c836140ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614045576140446141b5565b5b828202905092915050565b600061405b826140ee565b9150614066836140ee565b925082821015614079576140786141b5565b5b828203905092915050565b600061408f826140ce565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561412557808201518184015260208101905061410a565b83811115614134576000848401525b50505050565b6000600282049050600182168061415257607f821691505b60208210811415614166576141656141e4565b5b50919050565b6000614177826140ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141aa576141a96141b5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61425c81614084565b811461426757600080fd5b50565b61427381614096565b811461427e57600080fd5b50565b61428a816140a2565b811461429557600080fd5b50565b6142a1816140ee565b81146142ac57600080fd5b5056fea26469706673582212204cea5cdc10653a59caa99cccf743d8295f635778f690c2212930d2a05b4d84b264736f6c634300080000330000000000000000000000000000000000000000000000000000000000000c8a000000000000000000000000000000000000000000000000000000000000000a

Deployed Bytecode

0x6080604052600436106102305760003560e01c806370a082311161012e578063a22cb465116100ab578063e985e9c51161006f578063e985e9c51461082e578063f03255491461086b578063f27dac4214610882578063f2fde38b146108ad578063ff2e666c146108d657610230565b8063a22cb4651461074b578063b88d4fde14610774578063c598e7f21461079d578063c87b56dd146107c8578063d95b1d331461080557610230565b806391b7f5ed116100f257806391b7f5ed1461068557806395d89b41146106ae5780639d044ed3146106d9578063a035b1fe14610704578063a0712d681461072f57610230565b806370a08231146105a0578063715018a6146105dd57806374f314f1146105f4578063830639ac1461061d5780638da5cb5b1461065a57610230565b80633af32abf116101bc57806355f804b31161018057806355f804b3146104a7578063564566a8146104d057806360063c60146104fb5780636352211e146105385780636c0360eb1461057557610230565b80633af32abf146103c25780633b16687c146103ff5780633ccfd60b1461042a57806342842e0e146104415780634dab7d241461046a57610230565b8063095ea7b311610203578063095ea7b31461030557806318160ddd1461032e57806323b872dd14610359578063335d409c1461038257806334918dfd146103ab57610230565b806301ffc9a71461023557806302d05d3f1461027257806306fdde031461029d578063081812fc146102c8575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613171565b6108f2565b6040516102699190613b5c565b60405180910390f35b34801561027e57600080fd5b506102876109d4565b6040516102949190613af5565b60405180910390f35b3480156102a957600080fd5b506102b26109fa565b6040516102bf9190613b77565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190613245565b610a8c565b6040516102fc9190613af5565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190613075565b610b11565b005b34801561033a57600080fd5b50610343610c29565b6040516103509190613e59565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190612f6f565b610c3a565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061311d565b610c9a565b005b3480156103b757600080fd5b506103c0610dbe565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190612f0a565b610e66565b6040516103f69190613b5c565b60405180910390f35b34801561040b57600080fd5b50610414610eb1565b6040516104219190613af5565b60405180910390f35b34801561043657600080fd5b5061043f610ed7565b005b34801561044d57600080fd5b5061046860048036038101906104639190612f6f565b610fa2565b005b34801561047657600080fd5b50610491600480360381019061048c9190612f0a565b610fc2565b60405161049e9190613e59565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906131c3565b61100b565b005b3480156104dc57600080fd5b506104e56110a1565b6040516104f29190613b5c565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613245565b6110b4565b60405161052f9190613b77565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613245565b6111b5565b60405161056c9190613af5565b60405180910390f35b34801561058157600080fd5b5061058a611267565b6040516105979190613b77565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190612f0a565b6112f5565b6040516105d49190613e59565b60405180910390f35b3480156105e957600080fd5b506105f26113ad565b005b34801561060057600080fd5b5061061b600480360381019061061691906130b1565b611435565b005b34801561062957600080fd5b50610644600480360381019061063f9190613075565b611599565b6040516106519190613b5c565b60405180910390f35b34801561066657600080fd5b5061066f6115e6565b60405161067c9190613af5565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190613245565b611610565b005b3480156106ba57600080fd5b506106c3611696565b6040516106d09190613b77565b60405180910390f35b3480156106e557600080fd5b506106ee611728565b6040516106fb9190613b5c565b60405180910390f35b34801561071057600080fd5b5061071961173b565b6040516107269190613e59565b60405180910390f35b61074960048036038101906107449190613245565b611741565b005b34801561075757600080fd5b50610772600480360381019061076d9190613039565b6118a3565b005b34801561078057600080fd5b5061079b60048036038101906107969190612fbe565b611a24565b005b3480156107a957600080fd5b506107b2611a86565b6040516107bf9190613e59565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613245565b611a8c565b6040516107fc9190613b77565b60405180910390f35b34801561081157600080fd5b5061082c6004803603810190610827919061311d565b611bb5565b005b34801561083a57600080fd5b5061085560048036038101906108509190612f33565b611c9f565b6040516108629190613b5c565b60405180910390f35b34801561087757600080fd5b50610880611d33565b005b34801561088e57600080fd5b50610897611ddb565b6040516108a49190613e59565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190612f0a565b611de1565b005b6108f060048036038101906108eb9190613245565b611ed9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109bd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cd57506109cc826120c0565b5b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008054610a099061413a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a359061413a565b8015610a825780601f10610a5757610100808354040283529160200191610a82565b820191906000526020600020905b815481529060010190602001808311610a6557829003601f168201915b5050505050905090565b6000610a978261212a565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90613d79565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1c826111b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613e19565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bac612196565b73ffffffffffffffffffffffffffffffffffffffff161480610bdb5750610bda81610bd5612196565b611c9f565b5b610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190613cb9565b60405180910390fd5b610c24838361219e565b505050565b6000610c35600c612089565b905090565b610c4b610c45612196565b82612257565b610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190613e39565b60405180910390fd5b610c95838383612335565b505050565b610ca2612196565b73ffffffffffffffffffffffffffffffffffffffff16610cc06115e6565b73ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613db9565b60405180910390fd5b60005b8251811015610db9578160106000858481518110610d60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610db19061416c565b915050610d19565b505050565b610dc6612196565b73ffffffffffffffffffffffffffffffffffffffff16610de46115e6565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613db9565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610edf612196565b73ffffffffffffffffffffffffffffffffffffffff16610efd6115e6565b73ffffffffffffffffffffffffffffffffffffffff1614610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a90613db9565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f9e573d6000803e3d6000fd5b5050565b610fbd83838360405180602001604052806000815250611a24565b505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611013612196565b73ffffffffffffffffffffffffffffffffffffffff166110316115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613db9565b60405180910390fd5b80600b908051906020019061109d929190612b9a565b5050565b600a60009054906101000a900460ff1681565b60606110bf8261212a565b6110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590613d99565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c84c31b836040518263ffffffff1660e01b81526004016111599190613e59565b60006040518083038186803b15801561117157600080fd5b505afa158015611185573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906111ae9190613204565b9050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590613cf9565b60405180910390fd5b80915050919050565b600b80546112749061413a565b80601f01602080910402602001604051908101604052809291908181526020018280546112a09061413a565b80156112ed5780601f106112c2576101008083540402835291602001916112ed565b820191906000526020600020905b8154815290600101906020018083116112d057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613cd9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113b5612196565b73ffffffffffffffffffffffffffffffffffffffff166113d36115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090613db9565b60405180910390fd5b6114336000612591565b565b61143d612196565b73ffffffffffffffffffffffffffffffffffffffff1661145b6115e6565b73ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613db9565b60405180910390fd5b60005b8251811015611594578181815181106114f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516010600085848151811061153b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061158c9061416c565b9150506114b4565b505050565b600081601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611618612196565b73ffffffffffffffffffffffffffffffffffffffff166116366115e6565b73ffffffffffffffffffffffffffffffffffffffff161461168c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168390613db9565b60405180910390fd5b8060098190555050565b6060600180546116a59061413a565b80601f01602080910402602001604051908101604052809291908181526020018280546116d19061413a565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b5050505050905090565b600a60019054906101000a900460ff1681565b60095481565b600a60009054906101000a900460ff16611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790613df9565b60405180910390fd5b6000811180156117a257506008548111155b6117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890613b99565b60405180910390fd5b6007546117fe826117f0610c29565b61265790919063ffffffff16565b111561183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690613c79565b60405180910390fd5b6118548160095461266d90919063ffffffff16565b341015611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90613d19565b60405180910390fd5b6118a03382612683565b50565b6118ab612196565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090613c59565b60405180910390fd5b8060056000611926612196565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119d3612196565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a189190613b5c565b60405180910390a35050565b611a35611a2f612196565b83612257565b611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90613e39565b60405180910390fd5b611a80848484846126c9565b50505050565b60085481565b6060611a978261212a565b611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613bb9565b60405180910390fd5b611ade612725565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c84c31b846040518263ffffffff1660e01b8152600401611b399190613e59565b60006040518083038186803b158015611b5157600080fd5b505afa158015611b65573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b8e9190613204565b604051602001611b9f929190613ac6565b6040516020818303038152906040529050919050565b611bbd612196565b73ffffffffffffffffffffffffffffffffffffffff16611bdb6115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2890613db9565b60405180910390fd5b60005b8251811015611c9a57611c87838281518110611c79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183612683565b8080611c929061416c565b915050611c34565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d3b612196565b73ffffffffffffffffffffffffffffffffffffffff16611d596115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690613db9565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b60075481565b611de9612196565b73ffffffffffffffffffffffffffffffffffffffff16611e076115e6565b73ffffffffffffffffffffffffffffffffffffffff1614611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490613db9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613bf9565b60405180910390fd5b611ed681612591565b50565b600a60019054906101000a900460ff16611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90613df9565b60405180910390fd5b611f323382611599565b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613d59565b60405180910390fd5b600754611f8e82611f80610c29565b61265790919063ffffffff16565b1115611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc690613c79565b60405180910390fd5b611fe48160095461266d90919063ffffffff16565b341015612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90613d19565b60405180910390fd5b6120303382612683565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461207f9190614050565b9250508190555050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612211836111b5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122628261212a565b6122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613c99565b60405180910390fd5b60006122ac836111b5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061231b57508373ffffffffffffffffffffffffffffffffffffffff1661230384610a8c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061232c575061232b8185611c9f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612355826111b5565b73ffffffffffffffffffffffffffffffffffffffff16146123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a290613dd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561241b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241290613c39565b60405180910390fd5b6124268383836127b7565b61243160008261219e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124819190614050565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d89190613fa0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836126659190613fa0565b905092915050565b6000818361267b9190613ff6565b905092915050565b60005b818110156126c457600061269a600c612089565b90506126a6600c612097565b6126b084826127bc565b5080806126bc9061416c565b915050612686565b505050565b6126d4848484612335565b6126e0848484846127da565b61271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613bd9565b60405180910390fd5b50505050565b6060600b80546127349061413a565b80601f01602080910402602001604051908101604052809291908181526020018280546127609061413a565b80156127ad5780601f10612782576101008083540402835291602001916127ad565b820191906000526020600020905b81548152906001019060200180831161279057829003601f168201915b5050505050905090565b505050565b6127d6828260405180602001604052806000815250612971565b5050565b60006127fb8473ffffffffffffffffffffffffffffffffffffffff166120ad565b15612964578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612824612196565b8786866040518563ffffffff1660e01b81526004016128469493929190613b10565b602060405180830381600087803b15801561286057600080fd5b505af192505050801561289157506040513d601f19601f8201168201806040525081019061288e919061319a565b60015b612914573d80600081146128c1576040519150601f19603f3d011682016040523d82523d6000602084013e6128c6565b606091505b5060008151141561290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390613bd9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612969565b600190505b949350505050565b61297b83836129cc565b61298860008484846127da565b6129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90613bd9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3390613d39565b60405180910390fd5b612a458161212a565b15612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c90613c19565b60405180910390fd5b612a91600083836127b7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ae19190613fa0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612ba69061413a565b90600052602060002090601f016020900481019282612bc85760008555612c0f565b82601f10612be157805160ff1916838001178555612c0f565b82800160010185558215612c0f579182015b82811115612c0e578251825591602001919060010190612bf3565b5b509050612c1c9190612c20565b5090565b5b80821115612c39576000816000905550600101612c21565b5090565b6000612c50612c4b84613ea5565b613e74565b90508083825260208201905082856020860282011115612c6f57600080fd5b60005b85811015612c9f5781612c858882612dcf565b845260208401935060208301925050600181019050612c72565b5050509392505050565b6000612cbc612cb784613ed1565b613e74565b90508083825260208201905082856020860282011115612cdb57600080fd5b60005b85811015612d0b5781612cf18882612ef5565b845260208401935060208301925050600181019050612cde565b5050509392505050565b6000612d28612d2384613efd565b613e74565b905082815260208101848484011115612d4057600080fd5b612d4b8482856140f8565b509392505050565b6000612d66612d6184613f2d565b613e74565b905082815260208101848484011115612d7e57600080fd5b612d898482856140f8565b509392505050565b6000612da4612d9f84613f2d565b613e74565b905082815260208101848484011115612dbc57600080fd5b612dc7848285614107565b509392505050565b600081359050612dde81614253565b92915050565b600082601f830112612df557600080fd5b8135612e05848260208601612c3d565b91505092915050565b600082601f830112612e1f57600080fd5b8135612e2f848260208601612ca9565b91505092915050565b600081359050612e478161426a565b92915050565b600081359050612e5c81614281565b92915050565b600081519050612e7181614281565b92915050565b600082601f830112612e8857600080fd5b8135612e98848260208601612d15565b91505092915050565b600082601f830112612eb257600080fd5b8135612ec2848260208601612d53565b91505092915050565b600082601f830112612edc57600080fd5b8151612eec848260208601612d91565b91505092915050565b600081359050612f0481614298565b92915050565b600060208284031215612f1c57600080fd5b6000612f2a84828501612dcf565b91505092915050565b60008060408385031215612f4657600080fd5b6000612f5485828601612dcf565b9250506020612f6585828601612dcf565b9150509250929050565b600080600060608486031215612f8457600080fd5b6000612f9286828701612dcf565b9350506020612fa386828701612dcf565b9250506040612fb486828701612ef5565b9150509250925092565b60008060008060808587031215612fd457600080fd5b6000612fe287828801612dcf565b9450506020612ff387828801612dcf565b935050604061300487828801612ef5565b925050606085013567ffffffffffffffff81111561302157600080fd5b61302d87828801612e77565b91505092959194509250565b6000806040838503121561304c57600080fd5b600061305a85828601612dcf565b925050602061306b85828601612e38565b9150509250929050565b6000806040838503121561308857600080fd5b600061309685828601612dcf565b92505060206130a785828601612ef5565b9150509250929050565b600080604083850312156130c457600080fd5b600083013567ffffffffffffffff8111156130de57600080fd5b6130ea85828601612de4565b925050602083013567ffffffffffffffff81111561310757600080fd5b61311385828601612e0e565b9150509250929050565b6000806040838503121561313057600080fd5b600083013567ffffffffffffffff81111561314a57600080fd5b61315685828601612de4565b925050602061316785828601612ef5565b9150509250929050565b60006020828403121561318357600080fd5b600061319184828501612e4d565b91505092915050565b6000602082840312156131ac57600080fd5b60006131ba84828501612e62565b91505092915050565b6000602082840312156131d557600080fd5b600082013567ffffffffffffffff8111156131ef57600080fd5b6131fb84828501612ea1565b91505092915050565b60006020828403121561321657600080fd5b600082015167ffffffffffffffff81111561323057600080fd5b61323c84828501612ecb565b91505092915050565b60006020828403121561325757600080fd5b600061326584828501612ef5565b91505092915050565b61327781614084565b82525050565b61328681614096565b82525050565b600061329782613f5d565b6132a18185613f73565b93506132b1818560208601614107565b6132ba81614242565b840191505092915050565b60006132d082613f68565b6132da8185613f84565b93506132ea818560208601614107565b6132f381614242565b840191505092915050565b600061330982613f68565b6133138185613f95565b9350613323818560208601614107565b80840191505092915050565b600061333c601383613f84565b91507f4d617820697320313020617420612074696d65000000000000000000000000006000830152602082019050919050565b600061337c601f83613f84565b91507f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006000830152602082019050919050565b60006133bc603283613f84565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613422602683613f84565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613488601c83613f84565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006134c8602483613f84565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061352e601983613f84565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061356e601683613f84565b91507f536f72727920746f6f206d616e79206e6f626f647921000000000000000000006000830152602082019050919050565b60006135ae602c83613f84565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613614603883613f84565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061367a602a83613f84565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006136e0602983613f84565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613746602083613f84565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374216000830152602082019050919050565b6000613786602083613f84565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006137c6602d83613f84565b91507f496e73756666696369656e7420726573657276656420746f6b656e7320666f7260008301527f20796f75722061646472657373000000000000000000000000000000000000006020830152604082019050919050565b600061382c602c83613f84565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613892601183613f84565b91507f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006000830152602082019050919050565b60006138d2602083613f84565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613912602983613f84565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613978601383613f84565b91507f53616c65206973206e6f742061637469766521000000000000000000000000006000830152602082019050919050565b60006139b8602183613f84565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a1e603183613f84565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613a84600183613f95565b91507f2f000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b613ac0816140ee565b82525050565b6000613ad282856132fe565b9150613add82613a77565b9150613ae982846132fe565b91508190509392505050565b6000602082019050613b0a600083018461326e565b92915050565b6000608082019050613b25600083018761326e565b613b32602083018661326e565b613b3f6040830185613ab7565b8181036060830152613b51818461328c565b905095945050505050565b6000602082019050613b71600083018461327d565b92915050565b60006020820190508181036000830152613b9181846132c5565b905092915050565b60006020820190508181036000830152613bb28161332f565b9050919050565b60006020820190508181036000830152613bd28161336f565b9050919050565b60006020820190508181036000830152613bf2816133af565b9050919050565b60006020820190508181036000830152613c1281613415565b9050919050565b60006020820190508181036000830152613c328161347b565b9050919050565b60006020820190508181036000830152613c52816134bb565b9050919050565b60006020820190508181036000830152613c7281613521565b9050919050565b60006020820190508181036000830152613c9281613561565b9050919050565b60006020820190508181036000830152613cb2816135a1565b9050919050565b60006020820190508181036000830152613cd281613607565b9050919050565b60006020820190508181036000830152613cf28161366d565b9050919050565b60006020820190508181036000830152613d12816136d3565b9050919050565b60006020820190508181036000830152613d3281613739565b9050919050565b60006020820190508181036000830152613d5281613779565b9050919050565b60006020820190508181036000830152613d72816137b9565b9050919050565b60006020820190508181036000830152613d928161381f565b9050919050565b60006020820190508181036000830152613db281613885565b9050919050565b60006020820190508181036000830152613dd2816138c5565b9050919050565b60006020820190508181036000830152613df281613905565b9050919050565b60006020820190508181036000830152613e128161396b565b9050919050565b60006020820190508181036000830152613e32816139ab565b9050919050565b60006020820190508181036000830152613e5281613a11565b9050919050565b6000602082019050613e6e6000830184613ab7565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613e9b57613e9a614213565b5b8060405250919050565b600067ffffffffffffffff821115613ec057613ebf614213565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613eec57613eeb614213565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f1857613f17614213565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613f4857613f47614213565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fab826140ee565b9150613fb6836140ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613feb57613fea6141b5565b5b828201905092915050565b6000614001826140ee565b915061400c836140ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614045576140446141b5565b5b828202905092915050565b600061405b826140ee565b9150614066836140ee565b925082821015614079576140786141b5565b5b828203905092915050565b600061408f826140ce565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561412557808201518184015260208101905061410a565b83811115614134576000848401525b50505050565b6000600282049050600182168061415257607f821691505b60208210811415614166576141656141e4565b5b50919050565b6000614177826140ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141aa576141a96141b5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61425c81614084565b811461426757600080fd5b50565b61427381614096565b811461427e57600080fd5b50565b61428a816140a2565b811461429557600080fd5b50565b6142a1816140ee565b81146142ac57600080fd5b5056fea26469706673582212204cea5cdc10653a59caa99cccf743d8295f635778f690c2212930d2a05b4d84b264736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000c8a000000000000000000000000000000000000000000000000000000000000000a

-----Decoded View---------------
Arg [0] : _maxNobody (uint256): 3210
Arg [1] : _maxNobodyPerPurchase (uint256): 10

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000c8a
Arg [1] : 000000000000000000000000000000000000000000000000000000000000000a


Deployed Bytecode Sourcemap

44502:4242:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31412:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45059:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32357:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33916:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33439:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45399:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34806:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47170:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48017:85;;;;;;;;;;;;;:::i;:::-;;47727:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44902:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48408:137;;;;;;;;;;;;;:::i;:::-;;35216:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47604:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48302:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44756:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46854:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32051:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44833:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31781:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10886:94;;;;;;;;;;;;;:::i;:::-;;47381:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47853:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10235:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48208:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32526:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44793:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44695:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45963:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34209:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35472:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44653:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46358:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48551:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34575:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48108:94;;;;;;;;;;;;;:::i;:::-;;44620:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11135:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45499:458;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31412:305;31514:4;31566:25;31551:40;;;:11;:40;;;;:105;;;;31623:33;31608:48;;;:11;:48;;;;31551:105;:158;;;;31673:36;31697:11;31673:23;:36::i;:::-;31551:158;31531:178;;31412:305;;;:::o;45059:67::-;;;;;;;;;;;;;:::o;32357:100::-;32411:13;32444:5;32437:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32357:100;:::o;33916:221::-;33992:7;34020:16;34028:7;34020;:16::i;:::-;34012:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34105:15;:24;34121:7;34105:24;;;;;;;;;;;;;;;;;;;;;34098:31;;33916:221;;;:::o;33439:411::-;33520:13;33536:23;33551:7;33536:14;:23::i;:::-;33520:39;;33584:5;33578:11;;:2;:11;;;;33570:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33678:5;33662:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33687:37;33704:5;33711:12;:10;:12::i;:::-;33687:16;:37::i;:::-;33662:62;33640:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33821:21;33830:2;33834:7;33821:8;:21::i;:::-;33439:411;;;:::o;45399:92::-;45443:7;45466:19;:9;:17;:19::i;:::-;45459:26;;45399:92;:::o;34806:339::-;35001:41;35020:12;:10;:12::i;:::-;35034:7;35001:18;:41::i;:::-;34993:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35109:28;35119:4;35125:2;35129:7;35109:9;:28::i;:::-;34806:339;;;:::o;47170:205::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47274:9:::1;47269:101;47293:3;:10;47289:1;:14;47269:101;;;47350:10;47323:16;:24;47340:3;47344:1;47340:6;;;;;;;;;;;;;;;;;;;;;;47323:24;;;;;;;;;;;;;;;:37;;;;47305:3;;;;;:::i;:::-;;;;47269:101;;;;47170:205:::0;;:::o;48017:85::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48084:12:::1;;;;;;;;;;;48083:13;48068:12;;:28;;;;;;;;;;;;;;;;;;48017:85::o:0;47727:120::-;47789:4;47840:1;47811:16;:26;47828:8;47811:26;;;;;;;;;;;;;;;;:30;47804:37;;47727:120;;;:::o;44902:73::-;;;;;;;;;;;;;:::o;48408:137::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48454:15:::1;48472:21;48454:39;;48510:10;48502:28;;:37;48531:7;48502:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;10526:1;48408:137::o:0;35216:185::-;35354:39;35371:4;35377:2;35381:7;35354:39;;;;;;;;;;;;:16;:39::i;:::-;35216:185;;;:::o;47604:117::-;47669:7;47694:16;:21;47711:3;47694:21;;;;;;;;;;;;;;;;47687:28;;47604:117;;;:::o;48302:100::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48385:11:::1;48375:7;:21;;;;;;;;;;;;:::i;:::-;;48302:100:::0;:::o;44756:32::-;;;;;;;;;;;;;:::o;46854:185::-;46915:13;46947:17;46955:8;46947:7;:17::i;:::-;46939:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;47002:14;;;;;;;;;;;:21;;;47024:8;47002:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46995:38;;46854:185;;;:::o;32051:239::-;32123:7;32143:13;32159:7;:16;32167:7;32159:16;;;;;;;;;;;;;;;;;;;;;32143:32;;32211:1;32194:19;;:5;:19;;;;32186:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32277:5;32270:12;;;32051:239;;;:::o;44833:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31781:208::-;31853:7;31898:1;31881:19;;:5;:19;;;;31873:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31965:9;:16;31975:5;31965:16;;;;;;;;;;;;;;;;31958:23;;31781:208;;;:::o;10886:94::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10951:21:::1;10969:1;10951:9;:21::i;:::-;10886:94::o:0;47381:217::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47494:9:::1;47489:104;47513:3;:10;47509:1;:14;47489:104;;;47570:10;47581:1;47570:13;;;;;;;;;;;;;;;;;;;;;;47543:16;:24;47560:3;47564:1;47560:6;;;;;;;;;;;;;;;;;;;;;;47543:24;;;;;;;;;;;;;;;:40;;;;47525:3;;;;;:::i;:::-;;;;47489:104;;;;47381:217:::0;;:::o;47853:142::-;47931:4;47983:6;47953:16;:26;47970:8;47953:26;;;;;;;;;;;;;;;;:36;;47946:43;;47853:142;;;;:::o;10235:87::-;10281:7;10308:6;;;;;;;;;;;10301:13;;10235:87;:::o;48208:86::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48279:9:::1;48271:5;:17;;;;48208:86:::0;:::o;32526:104::-;32582:13;32615:7;32608:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32526:104;:::o;44793:35::-;;;;;;;;;;;;;:::o;44695:40::-;;;;:::o;45963:389::-;46024:12;;;;;;;;;;;46016:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46085:1;46076:6;:10;:44;;;;;46100:20;;46090:6;:30;;46076:44;46068:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46188:9;;46159:25;46177:6;46159:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:38;;46151:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46252:17;46262:6;46252:5;;:9;;:17;;;;:::i;:::-;46239:9;:30;;46231:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46315:31;46327:10;46339:6;46315:11;:31::i;:::-;45963:389;:::o;34209:295::-;34324:12;:10;:12::i;:::-;34312:24;;:8;:24;;;;34304:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34424:8;34379:18;:32;34398:12;:10;:12::i;:::-;34379:32;;;;;;;;;;;;;;;:42;34412:8;34379:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34477:8;34448:48;;34463:12;:10;:12::i;:::-;34448:48;;;34487:8;34448:48;;;;;;:::i;:::-;;;;;;;;34209:295;;:::o;35472:328::-;35647:41;35666:12;:10;:12::i;:::-;35680:7;35647:18;:41::i;:::-;35639:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35753:39;35767:4;35773:2;35777:7;35786:5;35753:13;:39::i;:::-;35472:328;;;;:::o;44653:37::-;;;;:::o;46358:251::-;46432:13;46462:17;46470:8;46462:7;:17::i;:::-;46454:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46553:10;:8;:10::i;:::-;46570:14;;;;;;;;;;;:21;;;46592:8;46570:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46536:66;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46522:81;;46358:251;;;:::o;48551:188::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48652:9:::1;48647:87;48671:3;:10;48667:1;:14;48647:87;;;48697:27;48709:3;48713:1;48709:6;;;;;;;;;;;;;;;;;;;;;;48717;48697:11;:27::i;:::-;48683:3;;;;;:::i;:::-;;;;48647:87;;;;48551:188:::0;;:::o;34575:164::-;34672:4;34696:18;:25;34715:5;34696:25;;;;;;;;;;;;;;;:35;34722:8;34696:35;;;;;;;;;;;;;;;;;;;;;;;;;34689:42;;34575:164;;;;:::o;48108:94::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48181:15:::1;;;;;;;;;;;48180:16;48162:15;;:34;;;;;;;;;;;;;;;;;;48108:94::o:0;44620:28::-;;;;:::o;11135:192::-;10466:12;:10;:12::i;:::-;10455:23;;:7;:5;:7::i;:::-;:23;;;10447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11244:1:::1;11224:22;;:8;:22;;;;11216:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11300:19;11310:8;11300:9;:19::i;:::-;11135:192:::0;:::o;45499:458::-;45567:15;;;;;;;;;;;45559:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;45622:32;45636:10;45647:6;45622:13;:32::i;:::-;45614:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45748:9;;45719:25;45737:6;45719:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:38;;45711:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45812:17;45822:6;45812:5;;:9;;:17;;;;:::i;:::-;45799:9;:30;;45791:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;45875:31;45887:10;45899:6;45875:11;:31::i;:::-;45945:6;45913:16;:28;45930:10;45913:28;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;45499:458;:::o;828:114::-;893:7;920;:14;;;913:21;;828:114;;;:::o;950:127::-;1057:1;1039:7;:14;;;:19;;;;;;;;;;;950:127;:::o;19691:387::-;19751:4;19959:12;20026:7;20014:20;20006:28;;20069:1;20062:4;:8;20055:15;;;19691:387;;;:::o;29916:157::-;30001:4;30040:25;30025:40;;;:11;:40;;;;30018:47;;29916:157;;;:::o;37310:127::-;37375:4;37427:1;37399:30;;:7;:16;37407:7;37399:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37392:37;;37310:127;;;:::o;9023:98::-;9076:7;9103:10;9096:17;;9023:98;:::o;41292:174::-;41394:2;41367:15;:24;41383:7;41367:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41450:7;41446:2;41412:46;;41421:23;41436:7;41421:14;:23::i;:::-;41412:46;;;;;;;;;;;;41292:174;;:::o;37604:348::-;37697:4;37722:16;37730:7;37722;:16::i;:::-;37714:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37798:13;37814:23;37829:7;37814:14;:23::i;:::-;37798:39;;37867:5;37856:16;;:7;:16;;;:51;;;;37900:7;37876:31;;:20;37888:7;37876:11;:20::i;:::-;:31;;;37856:51;:87;;;;37911:32;37928:5;37935:7;37911:16;:32::i;:::-;37856:87;37848:96;;;37604:348;;;;:::o;40596:578::-;40755:4;40728:31;;:23;40743:7;40728:14;:23::i;:::-;:31;;;40720:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40838:1;40824:16;;:2;:16;;;;40816:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40894:39;40915:4;40921:2;40925:7;40894:20;:39::i;:::-;40998:29;41015:1;41019:7;40998:8;:29::i;:::-;41059:1;41040:9;:15;41050:4;41040:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41088:1;41071:9;:13;41081:2;41071:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41119:2;41100:7;:16;41108:7;41100:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41158:7;41154:2;41139:27;;41148:4;41139:27;;;;;;;;;;;;40596:578;;;:::o;11335:173::-;11391:16;11410:6;;;;;;;;;;;11391:25;;11436:8;11427:6;;:17;;;;;;;;;;;;;;;;;;11491:8;11460:40;;11481:8;11460:40;;;;;;;;;;;;11335:173;;:::o;4222:98::-;4280:7;4311:1;4307;:5;;;;:::i;:::-;4300:12;;4222:98;;;;:::o;4960:::-;5018:7;5049:1;5045;:5;;;;:::i;:::-;5038:12;;4960:98;;;;:::o;46615:235::-;46687:9;46682:163;46706:6;46702:1;:10;46682:163;;;46730:17;46750:19;:9;:17;:19::i;:::-;46730:39;;46780:21;:9;:19;:21::i;:::-;46812:25;46822:3;46827:9;46812;:25::i;:::-;46682:163;46714:3;;;;;:::i;:::-;;;;46682:163;;;;46615:235;;:::o;36682:315::-;36839:28;36849:4;36855:2;36859:7;36839:9;:28::i;:::-;36886:48;36909:4;36915:2;36919:7;36928:5;36886:22;:48::i;:::-;36878:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36682:315;;;;:::o;47045:104::-;47105:13;47136:7;47129:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47045:104;:::o;43402:126::-;;;;:::o;38294:110::-;38370:26;38380:2;38384:7;38370:26;;;;;;;;;;;;:9;:26::i;:::-;38294:110;;:::o;42031:799::-;42186:4;42207:15;:2;:13;;;:15::i;:::-;42203:620;;;42259:2;42243:36;;;42280:12;:10;:12::i;:::-;42294:4;42300:7;42309:5;42243:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42239:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42502:1;42485:6;:13;:18;42481:272;;;42528:60;;;;;;;;;;:::i;:::-;;;;;;;;42481:272;42703:6;42697:13;42688:6;42684:2;42680:15;42673:38;42239:529;42376:41;;;42366:51;;;:6;:51;;;;42359:58;;;;;42203:620;42807:4;42800:11;;42031:799;;;;;;;:::o;38631:321::-;38761:18;38767:2;38771:7;38761:5;:18::i;:::-;38812:54;38843:1;38847:2;38851:7;38860:5;38812:22;:54::i;:::-;38790:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38631:321;;;:::o;39288:382::-;39382:1;39368:16;;:2;:16;;;;39360:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39441:16;39449:7;39441;:16::i;:::-;39440:17;39432:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39503:45;39532:1;39536:2;39540:7;39503:20;:45::i;:::-;39578:1;39561:9;:13;39571:2;39561:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39609:2;39590:7;:16;39598:7;39590:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39654:7;39650:2;39629:33;;39646:1;39629:33;;;;;;;;;;;;39288:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:353::-;;2109:65;2124:49;2166:6;2124:49;:::i;:::-;2109:65;:::i;:::-;2100:74;;2197:6;2190:5;2183:21;2235:4;2228:5;2224:16;2273:3;2264:6;2259:3;2255:16;2252:25;2249:2;;;2290:1;2287;2280:12;2249:2;2303:39;2335:6;2330:3;2325;2303:39;:::i;:::-;2090:258;;;;;;:::o;2354:139::-;;2438:6;2425:20;2416:29;;2454:33;2481:5;2454:33;:::i;:::-;2406:87;;;;:::o;2516:303::-;;2636:3;2629:4;2621:6;2617:17;2613:27;2603:2;;2654:1;2651;2644:12;2603:2;2694:6;2681:20;2719:94;2809:3;2801:6;2794:4;2786:6;2782:17;2719:94;:::i;:::-;2710:103;;2593:226;;;;;:::o;2842:303::-;;2962:3;2955:4;2947:6;2943:17;2939:27;2929:2;;2980:1;2977;2970:12;2929:2;3020:6;3007:20;3045:94;3135:3;3127:6;3120:4;3112:6;3108:17;3045:94;:::i;:::-;3036:103;;2919:226;;;;;:::o;3151:133::-;;3232:6;3219:20;3210:29;;3248:30;3272:5;3248:30;:::i;:::-;3200:84;;;;:::o;3290:137::-;;3373:6;3360:20;3351:29;;3389:32;3415:5;3389:32;:::i;:::-;3341:86;;;;:::o;3433:141::-;;3520:6;3514:13;3505:22;;3536:32;3562:5;3536:32;:::i;:::-;3495:79;;;;:::o;3593:271::-;;3697:3;3690:4;3682:6;3678:17;3674:27;3664:2;;3715:1;3712;3705:12;3664:2;3755:6;3742:20;3780:78;3854:3;3846:6;3839:4;3831:6;3827:17;3780:78;:::i;:::-;3771:87;;3654:210;;;;;:::o;3884:273::-;;3989:3;3982:4;3974:6;3970:17;3966:27;3956:2;;4007:1;4004;3997:12;3956:2;4047:6;4034:20;4072:79;4147:3;4139:6;4132:4;4124:6;4120:17;4072:79;:::i;:::-;4063:88;;3946:211;;;;;:::o;4177:288::-;;4293:3;4286:4;4278:6;4274:17;4270:27;4260:2;;4311:1;4308;4301:12;4260:2;4344:6;4338:13;4369:90;4455:3;4447:6;4440:4;4432:6;4428:17;4369:90;:::i;:::-;4360:99;;4250:215;;;;;:::o;4471:139::-;;4555:6;4542:20;4533:29;;4571:33;4598:5;4571:33;:::i;:::-;4523:87;;;;:::o;4616:262::-;;4724:2;4712:9;4703:7;4699:23;4695:32;4692:2;;;4740:1;4737;4730:12;4692:2;4783:1;4808:53;4853:7;4844:6;4833:9;4829:22;4808:53;:::i;:::-;4798:63;;4754:117;4682:196;;;;:::o;4884:407::-;;;5009:2;4997:9;4988:7;4984:23;4980:32;4977:2;;;5025:1;5022;5015:12;4977:2;5068:1;5093:53;5138:7;5129:6;5118:9;5114:22;5093:53;:::i;:::-;5083:63;;5039:117;5195:2;5221:53;5266:7;5257:6;5246:9;5242:22;5221:53;:::i;:::-;5211:63;;5166:118;4967:324;;;;;:::o;5297:552::-;;;;5439:2;5427:9;5418:7;5414:23;5410:32;5407:2;;;5455:1;5452;5445:12;5407:2;5498:1;5523:53;5568:7;5559:6;5548:9;5544:22;5523:53;:::i;:::-;5513:63;;5469:117;5625:2;5651:53;5696:7;5687:6;5676:9;5672:22;5651:53;:::i;:::-;5641:63;;5596:118;5753:2;5779:53;5824:7;5815:6;5804:9;5800:22;5779:53;:::i;:::-;5769:63;;5724:118;5397:452;;;;;:::o;5855:809::-;;;;;6023:3;6011:9;6002:7;5998:23;5994:33;5991:2;;;6040:1;6037;6030:12;5991:2;6083:1;6108:53;6153:7;6144:6;6133:9;6129:22;6108:53;:::i;:::-;6098:63;;6054:117;6210:2;6236:53;6281:7;6272:6;6261:9;6257:22;6236:53;:::i;:::-;6226:63;;6181:118;6338:2;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6309:118;6494:2;6483:9;6479:18;6466:32;6525:18;6517:6;6514:30;6511:2;;;6557:1;6554;6547:12;6511:2;6585:62;6639:7;6630:6;6619:9;6615:22;6585:62;:::i;:::-;6575:72;;6437:220;5981:683;;;;;;;:::o;6670:401::-;;;6792:2;6780:9;6771:7;6767:23;6763:32;6760:2;;;6808:1;6805;6798:12;6760:2;6851:1;6876:53;6921:7;6912:6;6901:9;6897:22;6876:53;:::i;:::-;6866:63;;6822:117;6978:2;7004:50;7046:7;7037:6;7026:9;7022:22;7004:50;:::i;:::-;6994:60;;6949:115;6750:321;;;;;:::o;7077:407::-;;;7202:2;7190:9;7181:7;7177:23;7173:32;7170:2;;;7218:1;7215;7208:12;7170:2;7261:1;7286:53;7331:7;7322:6;7311:9;7307:22;7286:53;:::i;:::-;7276:63;;7232:117;7388:2;7414:53;7459:7;7450:6;7439:9;7435:22;7414:53;:::i;:::-;7404:63;;7359:118;7160:324;;;;;:::o;7490:693::-;;;7665:2;7653:9;7644:7;7640:23;7636:32;7633:2;;;7681:1;7678;7671:12;7633:2;7752:1;7741:9;7737:17;7724:31;7782:18;7774:6;7771:30;7768:2;;;7814:1;7811;7804:12;7768:2;7842:78;7912:7;7903:6;7892:9;7888:22;7842:78;:::i;:::-;7832:88;;7695:235;7997:2;7986:9;7982:18;7969:32;8028:18;8020:6;8017:30;8014:2;;;8060:1;8057;8050:12;8014:2;8088:78;8158:7;8149:6;8138:9;8134:22;8088:78;:::i;:::-;8078:88;;7940:236;7623:560;;;;;:::o;8189:550::-;;;8339:2;8327:9;8318:7;8314:23;8310:32;8307:2;;;8355:1;8352;8345:12;8307:2;8426:1;8415:9;8411:17;8398:31;8456:18;8448:6;8445:30;8442:2;;;8488:1;8485;8478:12;8442:2;8516:78;8586:7;8577:6;8566:9;8562:22;8516:78;:::i;:::-;8506:88;;8369:235;8643:2;8669:53;8714:7;8705:6;8694:9;8690:22;8669:53;:::i;:::-;8659:63;;8614:118;8297:442;;;;;:::o;8745:260::-;;8852:2;8840:9;8831:7;8827:23;8823:32;8820:2;;;8868:1;8865;8858:12;8820:2;8911:1;8936:52;8980:7;8971:6;8960:9;8956:22;8936:52;:::i;:::-;8926:62;;8882:116;8810:195;;;;:::o;9011:282::-;;9129:2;9117:9;9108:7;9104:23;9100:32;9097:2;;;9145:1;9142;9135:12;9097:2;9188:1;9213:63;9268:7;9259:6;9248:9;9244:22;9213:63;:::i;:::-;9203:73;;9159:127;9087:206;;;;:::o;9299:375::-;;9417:2;9405:9;9396:7;9392:23;9388:32;9385:2;;;9433:1;9430;9423:12;9385:2;9504:1;9493:9;9489:17;9476:31;9534:18;9526:6;9523:30;9520:2;;;9566:1;9563;9556:12;9520:2;9594:63;9649:7;9640:6;9629:9;9625:22;9594:63;:::i;:::-;9584:73;;9447:220;9375:299;;;;:::o;9680:390::-;;9809:2;9797:9;9788:7;9784:23;9780:32;9777:2;;;9825:1;9822;9815:12;9777:2;9889:1;9878:9;9874:17;9868:24;9919:18;9911:6;9908:30;9905:2;;;9951:1;9948;9941:12;9905:2;9979:74;10045:7;10036:6;10025:9;10021:22;9979:74;:::i;:::-;9969:84;;9839:224;9767:303;;;;:::o;10076:262::-;;10184:2;10172:9;10163:7;10159:23;10155:32;10152:2;;;10200:1;10197;10190:12;10152:2;10243:1;10268:53;10313:7;10304:6;10293:9;10289:22;10268:53;:::i;:::-;10258:63;;10214:117;10142:196;;;;:::o;10344:118::-;10431:24;10449:5;10431:24;:::i;:::-;10426:3;10419:37;10409:53;;:::o;10468:109::-;10549:21;10564:5;10549:21;:::i;:::-;10544:3;10537:34;10527:50;;:::o;10583:360::-;;10697:38;10729:5;10697:38;:::i;:::-;10751:70;10814:6;10809:3;10751:70;:::i;:::-;10744:77;;10830:52;10875:6;10870:3;10863:4;10856:5;10852:16;10830:52;:::i;:::-;10907:29;10929:6;10907:29;:::i;:::-;10902:3;10898:39;10891:46;;10673:270;;;;;:::o;10949:364::-;;11065:39;11098:5;11065:39;:::i;:::-;11120:71;11184:6;11179:3;11120:71;:::i;:::-;11113:78;;11200:52;11245:6;11240:3;11233:4;11226:5;11222:16;11200:52;:::i;:::-;11277:29;11299:6;11277:29;:::i;:::-;11272:3;11268:39;11261:46;;11041:272;;;;;:::o;11319:377::-;;11453:39;11486:5;11453:39;:::i;:::-;11508:89;11590:6;11585:3;11508:89;:::i;:::-;11501:96;;11606:52;11651:6;11646:3;11639:4;11632:5;11628:16;11606:52;:::i;:::-;11683:6;11678:3;11674:16;11667:23;;11429:267;;;;;:::o;11702:317::-;;11865:67;11929:2;11924:3;11865:67;:::i;:::-;11858:74;;11962:21;11958:1;11953:3;11949:11;11942:42;12010:2;12005:3;12001:12;11994:19;;11848:171;;;:::o;12025:329::-;;12188:67;12252:2;12247:3;12188:67;:::i;:::-;12181:74;;12285:33;12281:1;12276:3;12272:11;12265:54;12345:2;12340:3;12336:12;12329:19;;12171:183;;;:::o;12360:382::-;;12523:67;12587:2;12582:3;12523:67;:::i;:::-;12516:74;;12620:34;12616:1;12611:3;12607:11;12600:55;12686:20;12681:2;12676:3;12672:12;12665:42;12733:2;12728:3;12724:12;12717:19;;12506:236;;;:::o;12748:370::-;;12911:67;12975:2;12970:3;12911:67;:::i;:::-;12904:74;;13008:34;13004:1;12999:3;12995:11;12988:55;13074:8;13069:2;13064:3;13060:12;13053:30;13109:2;13104:3;13100:12;13093:19;;12894:224;;;:::o;13124:326::-;;13287:67;13351:2;13346:3;13287:67;:::i;:::-;13280:74;;13384:30;13380:1;13375:3;13371:11;13364:51;13441:2;13436:3;13432:12;13425:19;;13270:180;;;:::o;13456:368::-;;13619:67;13683:2;13678:3;13619:67;:::i;:::-;13612:74;;13716:34;13712:1;13707:3;13703:11;13696:55;13782:6;13777:2;13772:3;13768:12;13761:28;13815:2;13810:3;13806:12;13799:19;;13602:222;;;:::o;13830:323::-;;13993:67;14057:2;14052:3;13993:67;:::i;:::-;13986:74;;14090:27;14086:1;14081:3;14077:11;14070:48;14144:2;14139:3;14135:12;14128:19;;13976:177;;;:::o;14159:320::-;;14322:67;14386:2;14381:3;14322:67;:::i;:::-;14315:74;;14419:24;14415:1;14410:3;14406:11;14399:45;14470:2;14465:3;14461:12;14454:19;;14305:174;;;:::o;14485:376::-;;14648:67;14712:2;14707:3;14648:67;:::i;:::-;14641:74;;14745:34;14741:1;14736:3;14732:11;14725:55;14811:14;14806:2;14801:3;14797:12;14790:36;14852:2;14847:3;14843:12;14836:19;;14631:230;;;:::o;14867:388::-;;15030:67;15094:2;15089:3;15030:67;:::i;:::-;15023:74;;15127:34;15123:1;15118:3;15114:11;15107:55;15193:26;15188:2;15183:3;15179:12;15172:48;15246:2;15241:3;15237:12;15230:19;;15013:242;;;:::o;15261:374::-;;15424:67;15488:2;15483:3;15424:67;:::i;:::-;15417:74;;15521:34;15517:1;15512:3;15508:11;15501:55;15587:12;15582:2;15577:3;15573:12;15566:34;15626:2;15621:3;15617:12;15610:19;;15407:228;;;:::o;15641:373::-;;15804:67;15868:2;15863:3;15804:67;:::i;:::-;15797:74;;15901:34;15897:1;15892:3;15888:11;15881:55;15967:11;15962:2;15957:3;15953:12;15946:33;16005:2;16000:3;15996:12;15989:19;;15787:227;;;:::o;16020:330::-;;16183:67;16247:2;16242:3;16183:67;:::i;:::-;16176:74;;16280:34;16276:1;16271:3;16267:11;16260:55;16341:2;16336:3;16332:12;16325:19;;16166:184;;;:::o;16356:330::-;;16519:67;16583:2;16578:3;16519:67;:::i;:::-;16512:74;;16616:34;16612:1;16607:3;16603:11;16596:55;16677:2;16672:3;16668:12;16661:19;;16502:184;;;:::o;16692:377::-;;16855:67;16919:2;16914:3;16855:67;:::i;:::-;16848:74;;16952:34;16948:1;16943:3;16939:11;16932:55;17018:15;17013:2;17008:3;17004:12;16997:37;17060:2;17055:3;17051:12;17044:19;;16838:231;;;:::o;17075:376::-;;17238:67;17302:2;17297:3;17238:67;:::i;:::-;17231:74;;17335:34;17331:1;17326:3;17322:11;17315:55;17401:14;17396:2;17391:3;17387:12;17380:36;17442:2;17437:3;17433:12;17426:19;;17221:230;;;:::o;17457:315::-;;17620:67;17684:2;17679:3;17620:67;:::i;:::-;17613:74;;17717:19;17713:1;17708:3;17704:11;17697:40;17763:2;17758:3;17754:12;17747:19;;17603:169;;;:::o;17778:330::-;;17941:67;18005:2;18000:3;17941:67;:::i;:::-;17934:74;;18038:34;18034:1;18029:3;18025:11;18018:55;18099:2;18094:3;18090:12;18083:19;;17924:184;;;:::o;18114:373::-;;18277:67;18341:2;18336:3;18277:67;:::i;:::-;18270:74;;18374:34;18370:1;18365:3;18361:11;18354:55;18440:11;18435:2;18430:3;18426:12;18419:33;18478:2;18473:3;18469:12;18462:19;;18260:227;;;:::o;18493:317::-;;18656:67;18720:2;18715:3;18656:67;:::i;:::-;18649:74;;18753:21;18749:1;18744:3;18740:11;18733:42;18801:2;18796:3;18792:12;18785:19;;18639:171;;;:::o;18816:365::-;;18979:67;19043:2;19038:3;18979:67;:::i;:::-;18972:74;;19076:34;19072:1;19067:3;19063:11;19056:55;19142:3;19137:2;19132:3;19128:12;19121:25;19172:2;19167:3;19163:12;19156:19;;18962:219;;;:::o;19187:381::-;;19350:67;19414:2;19409:3;19350:67;:::i;:::-;19343:74;;19447:34;19443:1;19438:3;19434:11;19427:55;19513:19;19508:2;19503:3;19499:12;19492:41;19559:2;19554:3;19550:12;19543:19;;19333:235;;;:::o;19574:333::-;;19755:84;19837:1;19832:3;19755:84;:::i;:::-;19748:91;;19869:3;19865:1;19860:3;19856:11;19849:24;19899:1;19894:3;19890:11;19883:18;;19738:169;;;:::o;19913:118::-;20000:24;20018:5;20000:24;:::i;:::-;19995:3;19988:37;19978:53;;:::o;20037:701::-;;20340:95;20431:3;20422:6;20340:95;:::i;:::-;20333:102;;20452:148;20596:3;20452:148;:::i;:::-;20445:155;;20617:95;20708:3;20699:6;20617:95;:::i;:::-;20610:102;;20729:3;20722:10;;20322:416;;;;;:::o;20744:222::-;;20875:2;20864:9;20860:18;20852:26;;20888:71;20956:1;20945:9;20941:17;20932:6;20888:71;:::i;:::-;20842:124;;;;:::o;20972:640::-;;21205:3;21194:9;21190:19;21182:27;;21219:71;21287:1;21276:9;21272:17;21263:6;21219:71;:::i;:::-;21300:72;21368:2;21357:9;21353:18;21344:6;21300:72;:::i;:::-;21382;21450:2;21439:9;21435:18;21426:6;21382:72;:::i;:::-;21501:9;21495:4;21491:20;21486:2;21475:9;21471:18;21464:48;21529:76;21600:4;21591:6;21529:76;:::i;:::-;21521:84;;21172:440;;;;;;;:::o;21618:210::-;;21743:2;21732:9;21728:18;21720:26;;21756:65;21818:1;21807:9;21803:17;21794:6;21756:65;:::i;:::-;21710:118;;;;:::o;21834:313::-;;21985:2;21974:9;21970:18;21962:26;;22034:9;22028:4;22024:20;22020:1;22009:9;22005:17;21998:47;22062:78;22135:4;22126:6;22062:78;:::i;:::-;22054:86;;21952:195;;;;:::o;22153:419::-;;22357:2;22346:9;22342:18;22334:26;;22406:9;22400:4;22396:20;22392:1;22381:9;22377:17;22370:47;22434:131;22560:4;22434:131;:::i;:::-;22426:139;;22324:248;;;:::o;22578:419::-;;22782:2;22771:9;22767:18;22759:26;;22831:9;22825:4;22821:20;22817:1;22806:9;22802:17;22795:47;22859:131;22985:4;22859:131;:::i;:::-;22851:139;;22749:248;;;:::o;23003:419::-;;23207:2;23196:9;23192:18;23184:26;;23256:9;23250:4;23246:20;23242:1;23231:9;23227:17;23220:47;23284:131;23410:4;23284:131;:::i;:::-;23276:139;;23174:248;;;:::o;23428:419::-;;23632:2;23621:9;23617:18;23609:26;;23681:9;23675:4;23671:20;23667:1;23656:9;23652:17;23645:47;23709:131;23835:4;23709:131;:::i;:::-;23701:139;;23599:248;;;:::o;23853:419::-;;24057:2;24046:9;24042:18;24034:26;;24106:9;24100:4;24096:20;24092:1;24081:9;24077:17;24070:47;24134:131;24260:4;24134:131;:::i;:::-;24126:139;;24024:248;;;:::o;24278:419::-;;24482:2;24471:9;24467:18;24459:26;;24531:9;24525:4;24521:20;24517:1;24506:9;24502:17;24495:47;24559:131;24685:4;24559:131;:::i;:::-;24551:139;;24449:248;;;:::o;24703:419::-;;24907:2;24896:9;24892:18;24884:26;;24956:9;24950:4;24946:20;24942:1;24931:9;24927:17;24920:47;24984:131;25110:4;24984:131;:::i;:::-;24976:139;;24874:248;;;:::o;25128:419::-;;25332:2;25321:9;25317:18;25309:26;;25381:9;25375:4;25371:20;25367:1;25356:9;25352:17;25345:47;25409:131;25535:4;25409:131;:::i;:::-;25401:139;;25299:248;;;:::o;25553:419::-;;25757:2;25746:9;25742:18;25734:26;;25806:9;25800:4;25796:20;25792:1;25781:9;25777:17;25770:47;25834:131;25960:4;25834:131;:::i;:::-;25826:139;;25724:248;;;:::o;25978:419::-;;26182:2;26171:9;26167:18;26159:26;;26231:9;26225:4;26221:20;26217:1;26206:9;26202:17;26195:47;26259:131;26385:4;26259:131;:::i;:::-;26251:139;;26149:248;;;:::o;26403:419::-;;26607:2;26596:9;26592:18;26584:26;;26656:9;26650:4;26646:20;26642:1;26631:9;26627:17;26620:47;26684:131;26810:4;26684:131;:::i;:::-;26676:139;;26574:248;;;:::o;26828:419::-;;27032:2;27021:9;27017:18;27009:26;;27081:9;27075:4;27071:20;27067:1;27056:9;27052:17;27045:47;27109:131;27235:4;27109:131;:::i;:::-;27101:139;;26999:248;;;:::o;27253:419::-;;27457:2;27446:9;27442:18;27434:26;;27506:9;27500:4;27496:20;27492:1;27481:9;27477:17;27470:47;27534:131;27660:4;27534:131;:::i;:::-;27526:139;;27424:248;;;:::o;27678:419::-;;27882:2;27871:9;27867:18;27859:26;;27931:9;27925:4;27921:20;27917:1;27906:9;27902:17;27895:47;27959:131;28085:4;27959:131;:::i;:::-;27951:139;;27849:248;;;:::o;28103:419::-;;28307:2;28296:9;28292:18;28284:26;;28356:9;28350:4;28346:20;28342:1;28331:9;28327:17;28320:47;28384:131;28510:4;28384:131;:::i;:::-;28376:139;;28274:248;;;:::o;28528:419::-;;28732:2;28721:9;28717:18;28709:26;;28781:9;28775:4;28771:20;28767:1;28756:9;28752:17;28745:47;28809:131;28935:4;28809:131;:::i;:::-;28801:139;;28699:248;;;:::o;28953:419::-;;29157:2;29146:9;29142:18;29134:26;;29206:9;29200:4;29196:20;29192:1;29181:9;29177:17;29170:47;29234:131;29360:4;29234:131;:::i;:::-;29226:139;;29124:248;;;:::o;29378:419::-;;29582:2;29571:9;29567:18;29559:26;;29631:9;29625:4;29621:20;29617:1;29606:9;29602:17;29595:47;29659:131;29785:4;29659:131;:::i;:::-;29651:139;;29549:248;;;:::o;29803:419::-;;30007:2;29996:9;29992:18;29984:26;;30056:9;30050:4;30046:20;30042:1;30031:9;30027:17;30020:47;30084:131;30210:4;30084:131;:::i;:::-;30076:139;;29974:248;;;:::o;30228:419::-;;30432:2;30421:9;30417:18;30409:26;;30481:9;30475:4;30471:20;30467:1;30456:9;30452:17;30445:47;30509:131;30635:4;30509:131;:::i;:::-;30501:139;;30399:248;;;:::o;30653:419::-;;30857:2;30846:9;30842:18;30834:26;;30906:9;30900:4;30896:20;30892:1;30881:9;30877:17;30870:47;30934:131;31060:4;30934:131;:::i;:::-;30926:139;;30824:248;;;:::o;31078:419::-;;31282:2;31271:9;31267:18;31259:26;;31331:9;31325:4;31321:20;31317:1;31306:9;31302:17;31295:47;31359:131;31485:4;31359:131;:::i;:::-;31351:139;;31249:248;;;:::o;31503:222::-;;31634:2;31623:9;31619:18;31611:26;;31647:71;31715:1;31704:9;31700:17;31691:6;31647:71;:::i;:::-;31601:124;;;;:::o;31731:283::-;;31797:2;31791:9;31781:19;;31839:4;31831:6;31827:17;31946:6;31934:10;31931:22;31910:18;31898:10;31895:34;31892:62;31889:2;;;31957:18;;:::i;:::-;31889:2;31997:10;31993:2;31986:22;31771:243;;;;:::o;32020:311::-;;32187:18;32179:6;32176:30;32173:2;;;32209:18;;:::i;:::-;32173:2;32259:4;32251:6;32247:17;32239:25;;32319:4;32313;32309:15;32301:23;;32102:229;;;:::o;32337:311::-;;32504:18;32496:6;32493:30;32490:2;;;32526:18;;:::i;:::-;32490:2;32576:4;32568:6;32564:17;32556:25;;32636:4;32630;32626:15;32618:23;;32419:229;;;:::o;32654:331::-;;32805:18;32797:6;32794:30;32791:2;;;32827:18;;:::i;:::-;32791:2;32912:4;32908:9;32901:4;32893:6;32889:17;32885:33;32877:41;;32973:4;32967;32963:15;32955:23;;32720:265;;;:::o;32991:332::-;;33143:18;33135:6;33132:30;33129:2;;;33165:18;;:::i;:::-;33129:2;33250:4;33246:9;33239:4;33231:6;33227:17;33223:33;33215:41;;33311:4;33305;33301:15;33293:23;;33058:265;;;:::o;33329:98::-;;33414:5;33408:12;33398:22;;33387:40;;;:::o;33433:99::-;;33519:5;33513:12;33503:22;;33492:40;;;:::o;33538:168::-;;33655:6;33650:3;33643:19;33695:4;33690:3;33686:14;33671:29;;33633:73;;;;:::o;33712:169::-;;33830:6;33825:3;33818:19;33870:4;33865:3;33861:14;33846:29;;33808:73;;;;:::o;33887:148::-;;34026:3;34011:18;;34001:34;;;;:::o;34041:305::-;;34100:20;34118:1;34100:20;:::i;:::-;34095:25;;34134:20;34152:1;34134:20;:::i;:::-;34129:25;;34288:1;34220:66;34216:74;34213:1;34210:81;34207:2;;;34294:18;;:::i;:::-;34207:2;34338:1;34335;34331:9;34324:16;;34085:261;;;;:::o;34352:348::-;;34415:20;34433:1;34415:20;:::i;:::-;34410:25;;34449:20;34467:1;34449:20;:::i;:::-;34444:25;;34637:1;34569:66;34565:74;34562:1;34559:81;34554:1;34547:9;34540:17;34536:105;34533:2;;;34644:18;;:::i;:::-;34533:2;34692:1;34689;34685:9;34674:20;;34400:300;;;;:::o;34706:191::-;;34766:20;34784:1;34766:20;:::i;:::-;34761:25;;34800:20;34818:1;34800:20;:::i;:::-;34795:25;;34839:1;34836;34833:8;34830:2;;;34844:18;;:::i;:::-;34830:2;34889:1;34886;34882:9;34874:17;;34751:146;;;;:::o;34903:96::-;;34969:24;34987:5;34969:24;:::i;:::-;34958:35;;34948:51;;;:::o;35005:90::-;;35082:5;35075:13;35068:21;35057:32;;35047:48;;;:::o;35101:149::-;;35177:66;35170:5;35166:78;35155:89;;35145:105;;;:::o;35256:126::-;;35333:42;35326:5;35322:54;35311:65;;35301:81;;;:::o;35388:77::-;;35454:5;35443:16;;35433:32;;;:::o;35471:154::-;35555:6;35550:3;35545;35532:30;35617:1;35608:6;35603:3;35599:16;35592:27;35522:103;;;:::o;35631:307::-;35699:1;35709:113;35723:6;35720:1;35717:13;35709:113;;;35808:1;35803:3;35799:11;35793:18;35789:1;35784:3;35780:11;35773:39;35745:2;35742:1;35738:10;35733:15;;35709:113;;;35840:6;35837:1;35834:13;35831:2;;;35920:1;35911:6;35906:3;35902:16;35895:27;35831:2;35680:258;;;;:::o;35944:320::-;;36025:1;36019:4;36015:12;36005:22;;36072:1;36066:4;36062:12;36093:18;36083:2;;36149:4;36141:6;36137:17;36127:27;;36083:2;36211;36203:6;36200:14;36180:18;36177:38;36174:2;;;36230:18;;:::i;:::-;36174:2;35995:269;;;;:::o;36270:233::-;;36332:24;36350:5;36332:24;:::i;:::-;36323:33;;36378:66;36371:5;36368:77;36365:2;;;36448:18;;:::i;:::-;36365:2;36495:1;36488:5;36484:13;36477:20;;36313:190;;;:::o;36509:180::-;36557:77;36554:1;36547:88;36654:4;36651:1;36644:15;36678:4;36675:1;36668:15;36695:180;36743:77;36740:1;36733:88;36840:4;36837:1;36830:15;36864:4;36861:1;36854:15;36881:180;36929:77;36926:1;36919:88;37026:4;37023:1;37016:15;37050:4;37047:1;37040:15;37067:102;;37159:2;37155:7;37150:2;37143:5;37139:14;37135:28;37125:38;;37115:54;;;:::o;37175:122::-;37248:24;37266:5;37248:24;:::i;:::-;37241:5;37238:35;37228:2;;37287:1;37284;37277:12;37228:2;37218:79;:::o;37303:116::-;37373:21;37388:5;37373:21;:::i;:::-;37366:5;37363:32;37353:2;;37409:1;37406;37399:12;37353:2;37343:76;:::o;37425:120::-;37497:23;37514:5;37497:23;:::i;:::-;37490:5;37487:34;37477:2;;37535:1;37532;37525:12;37477:2;37467:78;:::o;37551:122::-;37624:24;37642:5;37624:24;:::i;:::-;37617:5;37614:35;37604:2;;37663:1;37660;37653:12;37604:2;37594:79;:::o

Swarm Source

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