ETH Price: $3,344.06 (+2.58%)
Gas: 2 Gwei

Token

Seekers Founder (SFNDR)
 

Overview

Max Total Supply

83 SFNDR

Holders

22

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
katkartel.eth
Balance
1 SFNDR
0x109094d990adbdfc97c5c9ea5f5bce54f4eb1bdb
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:
SeekersFounder

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity ^0.8.0;

contract Initializable {
    bool inited = false;

    modifier initializer() {
        require(!inited, "already inited");
        _;
        inited = true;
    }
}




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity ^0.8.0;

////import {Initializable} from "./Initializable.sol";

contract EIP712Base is Initializable {
    struct EIP712Domain {
        string name;
        string version;
        address verifyingContract;
        bytes32 salt;
    }

    string constant public ERC712_VERSION = "1";

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(
        bytes(
            "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)"
        )
    );
    bytes32 internal domainSeperator;

    // supposed to be called once while initializing.
    // one of the contracts that inherits this contract follows proxy pattern
    // so it is not possible to do this in a constructor
    function _initializeEIP712(
        string memory name
    )
        internal
        initializer
    {
        _setDomainSeperator(name);
    }

    function _setDomainSeperator(string memory name) internal {
        domainSeperator = keccak256(
            abi.encode(
                EIP712_DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                keccak256(bytes(ERC712_VERSION)),
                address(this),
                bytes32(getChainId())
            )
        );
    }

    function getDomainSeperator() public view returns (bytes32) {
        return domainSeperator;
    }

    function getChainId() public view returns (uint256) {
        uint256 id;
        assembly {
            id := chainid()
        }
        return id;
    }

    /**
     * Accept message hash and returns hash message in EIP712 compatible form
     * So that it can be used to recover signer from signature signed using EIP712 formatted data
     * https://eips.ethereum.org/EIPS/eip-712
     * "\\x19" makes the encoding deterministic
     * "\\x01" is the version byte to make it compatible to EIP-191
     */
    function toTypedMessageHash(bytes32 messageHash)
        internal
        view
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash)
            );
    }
}



/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (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 generally not needed starting with Solidity 0.8, since 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;
        }
    }
}




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

////import "../../utils/introspection/IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

////import "./IERC165.sol";

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

////import "../IERC721.sol";

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

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

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (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);
}




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity ^0.8.0;

////import {SafeMath} from  "@openzeppelin/contracts/utils/math/SafeMath.sol";
////import {EIP712Base} from "./EIP712Base.sol";

contract NativeMetaTransaction is EIP712Base {
    using SafeMath for uint256;
    bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(
        bytes(
            "MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
        )
    );
    event MetaTransactionExecuted(
        address userAddress,
        address payable relayerAddress,
        bytes functionSignature
    );
    mapping(address => uint256) nonces;

    /*
     * Meta transaction structure.
     * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas
     * He should call the desired function directly in that case.
     */
    struct MetaTransaction {
        uint256 nonce;
        address from;
        bytes functionSignature;
    }

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) public payable returns (bytes memory) {
        MetaTransaction memory metaTx = MetaTransaction({
            nonce: nonces[userAddress],
            from: userAddress,
            functionSignature: functionSignature
        });

        require(
            verify(userAddress, metaTx, sigR, sigS, sigV),
            "Signer and signature do not match"
        );

        // increase nonce for user (to avoid re-use)
        nonces[userAddress] = nonces[userAddress].add(1);

        emit MetaTransactionExecuted(
            userAddress,
            payable(msg.sender),
            functionSignature
        );

        // Append userAddress and relayer address at the end to extract it from calling context
        (bool success, bytes memory returnData) = address(this).call(
            abi.encodePacked(functionSignature, userAddress)
        );
        require(success, "Function call not successful");

        return returnData;
    }

    function hashMetaTransaction(MetaTransaction memory metaTx)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encode(
                    META_TRANSACTION_TYPEHASH,
                    metaTx.nonce,
                    metaTx.from,
                    keccak256(metaTx.functionSignature)
                )
            );
    }

    function getNonce(address user) public view returns (uint256 nonce) {
        nonce = nonces[user];
    }

    function verify(
        address signer,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) internal view returns (bool) {
        require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER");
        return
            signer ==
            ecrecover(
                toTypedMessageHash(hashMetaTransaction(metaTx)),
                sigV,
                sigR,
                sigS
            );
    }
}




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity ^0.8.0;

abstract contract ContextMixin {
    function msgSender()
        internal
        view
        returns (address payable sender)
    {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(
                    mload(add(array, index)),
                    0xffffffffffffffffffffffffffffffffffffffff
                )
            }
        } else {
            sender = payable(msg.sender);
        }
        return sender;
    }
}




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (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;
    }
}




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

////import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

////import "../utils/Context.sol";

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

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

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

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

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

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

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

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

////import "./IERC721.sol";
////import "./IERC721Receiver.sol";
////import "./extensions/IERC721Metadata.sol";
////import "../../utils/Address.sol";
////import "../../utils/Context.sol";
////import "../../utils/Strings.sol";
////import "../../utils/introspection/ERC165.sol";

/**
 * @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 {
        _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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




/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity ^0.8.0;

////import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
////import "@openzeppelin/contracts/access/Ownable.sol";
////import "@openzeppelin/contracts/security/Pausable.sol";
////import "@openzeppelin/contracts/utils/Counters.sol";
////import "@openzeppelin/contracts/utils/Strings.sol";
////import "@openzeppelin/contracts/utils/math/SafeMath.sol";

////import "./common/meta-transactions/ContextMixin.sol";
////import "./common/meta-transactions/NativeMetaTransaction.sol";

contract OwnableDelegateProxy {}

/**
 * Used to delegate ownership of a contract to another address, to save on unneeded transactions to approve contract use for users
 */
contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

/**
 * @title ERC721Tradable
 * ERC721Tradable - ERC721 contract that whitelists a trading address, and has minting functionality.
 */
// abstract contract ERC721Tradable is ERC721, ContextMixin, NativeMetaTransaction, Ownable, Pausable {
abstract contract ERC721Tradable is Pausable, Ownable, NativeMetaTransaction, ContextMixin, ERC721 {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    /**
     * We rely on the OZ Counter util to keep track of the next available ID.
     * We track the nextTokenId instead of the currentTokenId to save users on gas costs. 
     * Read more about it here: https://shiny.mirror.xyz/OUampBbIz9ebEicfGnQf5At_ReMHlZy0tB4glb9xQ0E
     */ 
    Counters.Counter internal _nextTokenId;
    address proxyRegistryAddress;

    constructor(
        string memory _name,
        string memory _symbol,
        address _proxyRegistryAddress
    ) ERC721(_name, _symbol) {
        proxyRegistryAddress = _proxyRegistryAddress;
        // nextTokenId is initialized to 1, since starting at 0 leads to higher gas cost for the first minter
        _nextTokenId.increment();
        _initializeEIP712(_name);
    }

    function tokenCurrent() internal view returns (uint256) {
        return _nextTokenId.current();
    }

    function tokenNext() internal {
        _nextTokenId.increment();
    }

    /* This is a failsafe in case OpenSea ever changes their proxyRegistry address we will be able to update it. */
    function updateProxyRegistryAddress(address addr) public onlyOwner {
        proxyRegistryAddress = addr;
    }

    /**
     * @dev Mints a token to an address with a tokenURI.
     * @param _to address of the future owner of the token
     */
    function mintTo(address _to) public onlyOwner {
        uint256 currentTokenId = _nextTokenId.current();
        _nextTokenId.increment();
        _safeMint(_to, currentTokenId);
    }

    /**
        @dev Returns the total tokens minted so far.
        1 is always subtracted from the Counter since it tracks the next available tokenId.
     */
    function totalSupply() public view returns (uint256) {
        return _nextTokenId.current() - 1;
    }

    function baseTokenURI() virtual public view returns (string memory);

    function tokenURI(uint256 _tokenId) override public view returns (string memory) {
        return string(abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId)));
    }

    /**
     * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings.
     */
    function isApprovedForAll(address owner, address operator)
        override
        public
        view
        returns (bool)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

    /**
     * This is used instead of msg.sender as transactions won't be sent by the original token owner, but by OpenSea.
     */
    function _msgSender()
        internal
        override
        view
        returns (address sender)
    {
        return ContextMixin.msgSender();
    }
}


/** 
 *  SourceUnit: c:\www\seekers-contracts\contracts\Seekers Founder.sol
*/

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
pragma solidity ^0.8.2;

////import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
////import "./ERC721Tradable.sol";

/// @custom:security-contact [email protected]
contract SeekersFounder is ERC721Tradable {

    // Base URI
    string private _baseTokenURI = "";

    uint16 public constant MAX_FOUNDERS = 7537;
    uint8 public constant MAX_VIP_MINT = 7;
    uint8 public constant MAX_PUBLIC_MINT = 3;

    uint256 public price = 150000000000000000;//0.15 ether
    bool public vipListMintActive = false;
    bool public publicMintActive = false;
    bool public linkToFlowActive = false;
    bool public burnToFlowActive = false;

    mapping(address => uint8) private vipList;
    mapping(bytes32 => bytes32) private linkedFlowAccounts;
    mapping(bytes32 => bytes32) private burnList;
    mapping(uint256 => uint256) private holdTime;

    // End custom non-Zeppelin variables.

    constructor(address _proxyRegistryAddress) 
			ERC721Tradable(
				"Seekers Founder",
				"SFNDR",
				_proxyRegistryAddress
			) 
    {
        pause(); // nothing public can happen until the owner unpauses.
    }

    /**
        Custom modifiers
    */

    /**
     * Ensure the vipList mint is active.
     */
    modifier vipListMintIsActive() {
        require(vipListMintActive,"SeekersFounder: VIP List mint is not active");
        _;
    }

    /**
     * Ensure the public mint is active.
     */
    modifier publicMintIsActive() {
        require(publicMintActive,"SeekersFounder: public mint is not active");
        _;
    }

    /**
     * Ensure the link-to-flow is active.
     */
    modifier linkToFlowIsActive() {
        require(linkToFlowActive,"SeekersFounder: link-to-Flow is not active");
        _;
    }

    /**
     * Ensure the burn is active.
     */
    modifier burnToFlowIsActive() {
        require(burnToFlowActive,"SeekersFounder: burn-to-Flow is not active");
        _;
    }

    /**
     * Ensure the function caller is on the vipList.
     * Their value in the vipList mapping will be nonzero if they are on the list.
    */
    modifier isVipListed() {
        require(vipList[_msgSender()] > 0,"SeekersFounder: account not VIP Listed!");
        _;
    }


    // End custom modifiers.

    /** 
        Custom non-Zeppelin functions:
    */

    function setMintPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    /**
     * The Founder may be linked to an account on the Flow blockchain. This 
     * enables a Founder to claim free Flow items (once/item/Founder). The sigHash
     * must be generated at seekersnft.io or it will be invalid when checked,
     * preventing the Founder from claiming Flow tokens. Don't call this function
     * directly from contract.
     *
     * If called incorrectly, it may be called again to overwrite.
     * 
     * If a Founder is sold or transferred, the previous linked Flow account is 
     * severed and linkToFlow must be called again to link the new owner's Flow
     * account to their Founder.
     */
    function linkToFlow(uint16 tokenId, bytes32 sigHash) public whenNotPaused linkToFlowIsActive {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not owner nor approved");
        require(sigHash != bytes32(0),"SeekersFounder: sigHash must not be empty!");
        bytes32 k = keccak256(abi.encode(_msgSender(),tokenId));
        linkedFlowAccounts[k] = sigHash;
    }

    /**
     * The Founder may be burned to an account on the Flow blockchain. The sigHash
     * must be generated at seekersnft.io or it will be invalid when checked,
     * permanently destroying the Founder token. Don't call this function
     * directly from contract.
     */
    function burnToFlow(uint16 tokenId, bytes32 sigHash) public whenNotPaused burnToFlowIsActive {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        require(sigHash != bytes32(0),"SeekersFounder: sigHash must not be empty!");
        bytes32 k = keccak256(abi.encode(_msgSender(),tokenId));
        burnList[k] = sigHash;
        _burn(tokenId);
    }

    /**
     * Retrieve a sigHash for Flow account validation.
     */
    function getSigHash(address tokenOwner, uint16 tokenId) public view returns (bytes32) {
        bytes32 k = keccak256(abi.encode(tokenOwner,tokenId));
        return linkedFlowAccounts[k];
    }

    /**
     * Retrieve a burned Founder sigHash for Flow account validation.
     */
    function getBurnSigHash(address tokenOwner, uint16 tokenId) public view returns (bytes32) {
        bytes32 k = keccak256(abi.encode(tokenOwner,tokenId));
        return burnList[k];
    }

    function setBaseURI(string memory baseURI_) public onlyOwner {
       _baseTokenURI = baseURI_; 
    }

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

    function baseTokenURI() public view override returns (string memory) {
        return _baseURI();
    }

    /**
     * Shows how many Founders are left to mint.
     */
    function checkAvailableFounders() public view returns (uint256) {
        return MAX_FOUNDERS + 1 - tokenCurrent();
    }

    /**
     * Shows how many Founders have been minted. Does not subtract burned Founders.
     */
    function checkMintedFounders() public view returns (uint256) {
        return tokenCurrent() - 1;
    }

    /**
     * Activate VIP List mint.
     */
    function activateVIPListMint() public onlyOwner {
        vipListMintActive = true;
    }

    /**
     * Deactivate VIP List mint. 
     */
    function deactivateVIPListMint() public onlyOwner {
        vipListMintActive = false;
    }

    /**
     * Activate public mint.
     */
    function activatePublicMint() public onlyOwner {
        publicMintActive = true;
    }

    /**
     * Deactivate public mint.
     */
    function deactivatePublicMint() public onlyOwner {
        publicMintActive = false;
    }

    /**
     * Activate link-to-Flow.
     */
    function activateLinkToFlow() public onlyOwner {
        linkToFlowActive = true;
    }

    /**
     * Deactivate link-to-Flow.
     */
    function deactivateLinkToFlow() public onlyOwner {
        linkToFlowActive= false;
    }

    /**
     * Activate burn.
     */
    function activateBurnToFlow() public onlyOwner {
        burnToFlowActive = true;
    }

    /**
     * Deactivate burn.
     */
    function deactivateBurnToFlow() public onlyOwner {
        burnToFlowActive = false;
    }

    function addVipList(address[] calldata addresses, uint8 maxOverride) public onlyOwner {
        uint8 amount = maxOverride > 0 ? maxOverride : MAX_VIP_MINT;
        for (uint256 i = 0; i < addresses.length; i++) {
            vipList[addresses[i]] = amount;
        }
    }

    /**
     * Allows owner to remove addresses from VIP List.
     */
    function removeVipList(address[] calldata addresses) public onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            vipList[addresses[i]] = 0;
        }
    }

    /**
     * Check how many mints you are approved for on the VIP List.
     * If it's > 0, you will be able to call vipListMintMultiple()
     * while vipListMintIsActive() == true
     */
    function checkVipList() public view returns (uint8){
        return vipList[_msgSender()];
    }
    /**
      * Send a list of addresses and mint <amount> to each one.
      */
    function airdrop(address[] calldata addresses, uint8 amount) public onlyOwner whenNotPaused {
        for (uint256 i = 0; i < addresses.length; i++) {
            _mintMultiple(addresses[i], amount);
        }
    }

    /**
     * Allow VIP List to mint.
     */
    function vipListMintMultiple(uint8 quantity) public payable whenNotPaused vipListMintIsActive isVipListed {
        require(balanceOf(_msgSender()) + quantity <= vipList[_msgSender()],"SeekersFounder: not allowed to mint more than account allowance");

        // paymentIsValid check
        require(price * quantity <= msg.value,"SeekersFounder: incorrect amount of Ether sent");

        _mintMultiple(_msgSender(), quantity);
    }
    /**
     * Allow public to mint.
     */
    function publicMintMultiple(uint8 quantity) public payable whenNotPaused publicMintIsActive {
        require(balanceOf(_msgSender()) + quantity <= MAX_PUBLIC_MINT,"SeekersFounder: not allowed to mint more than account allowance");

        // paymentIsValid check
        require(price * quantity <= msg.value,"SeekersFounder: incorrect amount of Ether sent");

        _mintMultiple(_msgSender(), quantity);
    }

    function _mintMultiple(address to, uint8 quantity) internal whenNotPaused {
        // quantity must be positive
        require(quantity > 0,"SeekersFounder: quantity must be positive");

        //  inventoryAvailable check
        require(MAX_FOUNDERS >= tokenCurrent() + quantity - 1,"SeekersFounder: not enough Founders left to mint multiple!");

        for (uint256 i = 0; i < quantity; i++) {
            uint256 tokenId = tokenCurrent();
            tokenNext();
            _safeMint(to, tokenId);
        }
    }

    /**
     * Check ETH balance (onlyOwner).
     */
    function checkBalance() public view onlyOwner returns (uint256) {
        uint256 balance = address(this).balance;
        return balance;
    }

    /**
     * Withdraw ETH (onlyOwner).
     */
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(_msgSender()).transfer(balance);
    }

    function checkHoldTime(uint tokenId) public view returns (uint256) {
        uint check = holdTime[tokenId];
        if (check == 0) {
            check = block.timestamp;
        }
        return check;
    }

    // End custom non-Zeppelin functions.

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override {
        holdTime[tokenId] = block.timestamp;
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"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":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"ERC712_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FOUNDERS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PUBLIC_MINT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_VIP_MINT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateBurnToFlow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateLinkToFlow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activatePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateVIPListMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint8","name":"maxOverride","type":"uint8"}],"name":"addVipList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"airdrop","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"bytes32","name":"sigHash","type":"bytes32"}],"name":"burnToFlow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnToFlowActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkAvailableFounders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkHoldTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkMintedFounders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkVipList","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateBurnToFlow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateLinkToFlow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivatePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateVIPListMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"getBurnSigHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"getSigHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"bytes32","name":"sigHash","type":"bytes32"}],"name":"linkToFlow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"linkToFlowActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quantity","type":"uint8"}],"name":"publicMintMultiple","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeVipList","outputs":[],"stateMutability":"nonpayable","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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"updateProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vipListMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quantity","type":"uint8"}],"name":"vipListMintMultiple","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6000805460ff60a81b1916815560a0604081905260808290526200002791600b919062000484565b50670214e8348c4f0000600c55600d805463ffffffff191690553480156200004e57600080fd5b5060405162003f8638038062003f8683398101604081905262000071916200052a565b604080518082018252600f81526e29b2b2b5b2b939902337bab73232b960891b6020808301919091528251808401909352600583526429a327222960d91b908301526000805460ff1916905590828282620000d5620000cf62000156565b62000172565b8151620000ea90600390602085019062000484565b5080516200010090600490602084019062000484565b5050600a80546001600160a01b0319166001600160a01b03841617905550620001366009620001cb602090811b6200228a17901c565b6200014183620001d4565b506200014f91505062000246565b5062000599565b60006200016d620002d560201b620022931760201c565b905090565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b80546001019055565b600054600160a81b900460ff1615620002255760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a5b9a5d195960921b60448201526064015b60405180910390fd5b620002308162000334565b506000805460ff60a81b1916600160a81b179055565b6200025062000156565b6001600160a01b03166200027160005461010090046001600160a01b031690565b6001600160a01b031614620002c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200021c565b620002d3620003e7565b565b6000333014156200032e57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150620003319050565b50335b90565b6040518060800160405280604f815260200162003f37604f913980516020918201208251838301206040805180820190915260018152603160f81b930192909252907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6304660408051602081019690965285019390935260608401919091526001600160a01b0316608083015260a082015260c00160408051601f19818403018152919052805160209091012060015550565b60005460ff16156200042f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200021c565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200046762000156565b6040516001600160a01b03909116815260200160405180910390a1565b82805462000492906200055c565b90600052602060002090601f016020900481019282620004b6576000855562000501565b82601f10620004d157805160ff191683800117855562000501565b8280016001018555821562000501579182015b8281111562000501578251825591602001919060010190620004e4565b506200050f92915062000513565b5090565b5b808211156200050f576000815560010162000514565b6000602082840312156200053d57600080fd5b81516001600160a01b03811681146200055557600080fd5b9392505050565b600181811c908216806200057157607f821691505b602082108114156200059357634e487b7160e01b600052602260045260246000fd5b50919050565b61398e80620005a96000396000f3fe6080604052600436106103a25760003560e01c80637dad95e9116101e7578063b67c25a31161010d578063d3bd8f92116100a0578063f271d6141161006f578063f271d61414610aa2578063f2fde38b14610ab7578063f4a0a52814610ad7578063fff9683214610af757600080fd5b8063d3bd8f92146109f1578063d547cfb714610a06578063db7540b514610a1b578063e985e9c514610a8257600080fd5b8063bf370398116100dc578063bf37039814610992578063c71daccb146109a7578063c87b56dd146109bc578063c998806f146109dc57600080fd5b8063b67c25a31461091e578063b88d4fde1461093d578063b8d152141461095d578063b8f98af21461097d57600080fd5b806395d89b4111610185578063a22cb46511610154578063a22cb4651461089b578063a6a076d3146108bb578063a8e3b0cf146108d5578063b0de8729146108f557600080fd5b806395d89b411461084657806397ea08181461085b5780639bc07e7214610870578063a035b1fe1461088557600080fd5b8063885fb501116101c1578063885fb501146107cd5780638c8d4770146107e25780638da5cb5b1461080257806393dee5a11461082557600080fd5b80637dad95e91461078e5780637e1ca89d146107a35780638456cb59146107b857600080fd5b806331c9ee6d116102cc5780635c975abb1161026a57806370a082311161023957806370a0823114610719578063715018a6146107395780637264db021461074e578063755edd171461076e57600080fd5b80635c975abb146106a75780636352211e146106bf57806365f13097146106df578063682a73821461070657600080fd5b80633ccfd60b116102a65780633ccfd60b1461063d5780633f4ba83a1461065257806342842e0e1461066757806355f804b31461068757600080fd5b806331c9ee6d146105f75780633408e4701461060a578063372987d31461061d57600080fd5b80630f7e59701161034457806318160ddd1161031357806318160ddd1461057757806320379ee51461058c57806323b872dd146105a15780632d0335ab146105c157600080fd5b80630f7e5970146104f557806311fecb4e1461052257806316b0a70e1461054257806316f6c2da1461055757600080fd5b8063081812fc11610380578063081812fc14610421578063095ea7b3146104595780630bb0f2f41461047b5780630c53c51c146104e257600080fd5b806301ffc9a7146103a757806303f23c20146103dc57806306fdde03146103ff575b600080fd5b3480156103b357600080fd5b506103c76103c236600461340e565b610b17565b60405190151581526020015b60405180910390f35b3480156103e857600080fd5b506103f1610b69565b6040519081526020016103d3565b34801561040b57600080fd5b50610414610b84565b6040516103d3919061361e565b34801561042d57600080fd5b5061044161043c3660046134ca565b610c16565b6040516001600160a01b0390911681526020016103d3565b34801561046557600080fd5b5061047961047436600461334c565b610cb0565b005b34801561048757600080fd5b506103f1610496366004613317565b604080516001600160a01b039390931660208085019190915261ffff92909216838201528051808403820181526060909301815282519282019290922060009081526010909152205490565b6104146104f03660046132a3565b610dd8565b34801561050157600080fd5b50610414604051806040016040528060018152602001603160f81b81525081565b34801561052e57600080fd5b5061047961053d3660046133ba565b610fc2565b34801561054e57600080fd5b50610479611087565b34801561056357600080fd5b5061047961057236600461316d565b6110e5565b34801561058357600080fd5b506103f1611156565b34801561059857600080fd5b506001546103f1565b3480156105ad57600080fd5b506104796105bc3660046131c3565b611163565b3480156105cd57600080fd5b506103f16105dc36600461316d565b6001600160a01b031660009081526002602052604090205490565b6104796106053660046134e3565b61119b565b34801561061657600080fd5b50466103f1565b34801561062957600080fd5b50610479610638366004613378565b611341565b34801561064957600080fd5b50610479611405565b34801561065e57600080fd5b50610479611499565b34801561067357600080fd5b506104796106823660046131c3565b6114f2565b34801561069357600080fd5b506104796106a2366004613465565b61150d565b3480156106b357600080fd5b5060005460ff166103c7565b3480156106cb57600080fd5b506104416106da3660046134ca565b61156f565b3480156106eb57600080fd5b506106f4600381565b60405160ff90911681526020016103d3565b6104796107143660046134e3565b6115e6565b34801561072557600080fd5b506103f161073436600461316d565b611730565b34801561074557600080fd5b506104796117b7565b34801561075a57600080fd5b506103f16107693660046134ca565b611810565b34801561077a57600080fd5b5061047961078936600461316d565b61182c565b34801561079a57600080fd5b506104796118a0565b3480156107af57600080fd5b50610479611900565b3480156107c457600080fd5b5061047961195d565b3480156107d957600080fd5b506104796119b4565b3480156107ee57600080fd5b506104796107fd3660046133ba565b611a0f565b34801561080e57600080fd5b5060005461010090046001600160a01b0316610441565b34801561083157600080fd5b50600d546103c7906301000000900460ff1681565b34801561085257600080fd5b50610414611af0565b34801561086757600080fd5b50610479611aff565b34801561087c57600080fd5b506103f1611b61565b34801561089157600080fd5b506103f1600c5481565b3480156108a757600080fd5b506104796108b6366004613270565b611b86565b3480156108c757600080fd5b50600d546103c79060ff1681565b3480156108e157600080fd5b50600d546103c79062010000900460ff1681565b34801561090157600080fd5b5061090b611d7181565b60405161ffff90911681526020016103d3565b34801561092a57600080fd5b50600d546103c790610100900460ff1681565b34801561094957600080fd5b50610479610958366004613204565b611b98565b34801561096957600080fd5b506104796109783660046134ae565b611bd1565b34801561098957600080fd5b50610479611d44565b34801561099e57600080fd5b506106f4611da8565b3480156109b357600080fd5b506103f1611dd8565b3480156109c857600080fd5b506104146109d73660046134ca565b611e2f565b3480156109e857600080fd5b506106f4600781565b3480156109fd57600080fd5b50610479611e69565b348015610a1257600080fd5b50610414611ec5565b348015610a2757600080fd5b506103f1610a36366004613317565b604080516001600160a01b039390931660208085019190915261ffff9290921683820152805180840382018152606090930181528251928201929092206000908152600f909152205490565b348015610a8e57600080fd5b506103c7610a9d36600461318a565b611ecf565b348015610aae57600080fd5b50610479611f9f565b348015610ac357600080fd5b50610479610ad236600461316d565b611ffd565b348015610ae357600080fd5b50610479610af23660046134ca565b6120ba565b348015610b0357600080fd5b50610479610b123660046134ae565b61210e565b60006001600160e01b031982166380ac58cd60e01b1480610b4857506001600160e01b03198216635b5e139f60e01b145b80610b6357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006001610b756122ef565b610b7f91906137e5565b905090565b606060038054610b9390613828565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbf90613828565b8015610c0c5780601f10610be157610100808354040283529160200191610c0c565b820191906000526020600020905b815481529060010190602001808311610bef57829003601f168201915b5050505050905090565b6000818152600560205260408120546001600160a01b0316610c945760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610cbb8261156f565b9050806001600160a01b0316836001600160a01b03161415610d295760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c8b565b806001600160a01b0316610d3b6122fa565b6001600160a01b03161480610d575750610d5781610a9d6122fa565b610dc95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c8b565b610dd38383612304565b505050565b60408051606081810183526001600160a01b03881660008181526002602090815290859020548452830152918101869052610e168782878787612372565b610e6c5760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b6064820152608401610c8b565b6001600160a01b038716600090815260026020526040902054610e90906001612462565b6001600160a01b0388166000908152600260205260409081902091909155517f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b90610ee090899033908a906135ac565b60405180910390a1600080306001600160a01b0316888a604051602001610f08929190613546565b60408051601f1981840301815290829052610f229161352a565b6000604051808303816000865af19150503d8060008114610f5f576040519150601f19603f3d011682016040523d82523d6000602084013e610f64565b606091505b509150915081610fb65760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c000000006044820152606401610c8b565b98975050505050505050565b610fca6122fa565b6001600160a01b0316610feb6000546001600160a01b036101009091041690565b6001600160a01b0316146110115760405162461bcd60e51b8152600401610c8b906136ad565b60005460ff16156110345760405162461bcd60e51b8152600401610c8b90613683565b60005b828110156110815761106f848483818110611054576110546138be565b9050602002016020810190611069919061316d565b83612475565b8061107981613863565b915050611037565b50505050565b61108f6122fa565b6001600160a01b03166110b06000546001600160a01b036101009091041690565b6001600160a01b0316146110d65760405162461bcd60e51b8152600401610c8b906136ad565b600d805463ff00000019169055565b6110ed6122fa565b6001600160a01b031661110e6000546001600160a01b036101009091041690565b6001600160a01b0316146111345760405162461bcd60e51b8152600401610c8b906136ad565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001610b7560095490565b61117461116e6122fa565b826125d5565b6111905760405162461bcd60e51b8152600401610c8b9061372c565b610dd38383836126a4565b60005460ff16156111be5760405162461bcd60e51b8152600401610c8b90613683565b600d54610100900460ff166112275760405162461bcd60e51b815260206004820152602960248201527f5365656b657273466f756e6465723a207075626c6963206d696e74206973206e6044820152686f742061637469766560b81b6064820152608401610c8b565b600360ff82166112386107346122fa565b611242919061379a565b11156112b65760405162461bcd60e51b815260206004820152603f60248201527f5365656b657273466f756e6465723a206e6f7420616c6c6f77656420746f206d60448201527f696e74206d6f7265207468616e206163636f756e7420616c6c6f77616e6365006064820152608401610c8b565b348160ff16600c546112c891906137c6565b111561132d5760405162461bcd60e51b815260206004820152602e60248201527f5365656b657273466f756e6465723a20696e636f727265637420616d6f756e7460448201526d081bd988115d1a195c881cd95b9d60921b6064820152608401610c8b565b61133e6113386122fa565b82612475565b50565b6113496122fa565b6001600160a01b031661136a6000546001600160a01b036101009091041690565b6001600160a01b0316146113905760405162461bcd60e51b8152600401610c8b906136ad565b60005b81811015610dd3576000600e60008585858181106113b3576113b36138be565b90506020020160208101906113c8919061316d565b6001600160a01b031681526020810191909152604001600020805460ff191660ff92909216919091179055806113fd81613863565b915050611393565b61140d6122fa565b6001600160a01b031661142e6000546001600160a01b036101009091041690565b6001600160a01b0316146114545760405162461bcd60e51b8152600401610c8b906136ad565b4761145d6122fa565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611495573d6000803e3d6000fd5b5050565b6114a16122fa565b6001600160a01b03166114c26000546001600160a01b036101009091041690565b6001600160a01b0316146114e85760405162461bcd60e51b8152600401610c8b906136ad565b6114f0612855565b565b610dd383838360405180602001604052806000815250611b98565b6115156122fa565b6001600160a01b03166115366000546001600160a01b036101009091041690565b6001600160a01b03161461155c5760405162461bcd60e51b8152600401610c8b906136ad565b805161149590600b906020840190612fca565b6000818152600560205260408120546001600160a01b031680610b635760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610c8b565b60005460ff16156116095760405162461bcd60e51b8152600401610c8b90613683565b600d5460ff1661166f5760405162461bcd60e51b815260206004820152602b60248201527f5365656b657273466f756e6465723a20564950204c697374206d696e7420697360448201526a206e6f742061637469766560a81b6064820152608401610c8b565b6000600e600061167d6122fa565b6001600160a01b0316815260208101919091526040016000205460ff16116116f75760405162461bcd60e51b815260206004820152602760248201527f5365656b657273466f756e6465723a206163636f756e74206e6f7420564950206044820152664c69737465642160c81b6064820152608401610c8b565b600e60006117036122fa565b6001600160a01b0316815260208101919091526040016000205460ff9081169082166112386107346122fa565b60006001600160a01b03821661179b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c8b565b506001600160a01b031660009081526006602052604090205490565b6117bf6122fa565b6001600160a01b03166117e06000546001600160a01b036101009091041690565b6001600160a01b0316146118065760405162461bcd60e51b8152600401610c8b906136ad565b6114f060006128ee565b60008181526011602052604081205480610b6357504292915050565b6118346122fa565b6001600160a01b03166118556000546001600160a01b036101009091041690565b6001600160a01b03161461187b5760405162461bcd60e51b8152600401610c8b906136ad565b600061188660095490565b9050611896600980546001019055565b6114958282612947565b6118a86122fa565b6001600160a01b03166118c96000546001600160a01b036101009091041690565b6001600160a01b0316146118ef5760405162461bcd60e51b8152600401610c8b906136ad565b600d805461ff001916610100179055565b6119086122fa565b6001600160a01b03166119296000546001600160a01b036101009091041690565b6001600160a01b03161461194f5760405162461bcd60e51b8152600401610c8b906136ad565b600d805462ff000019169055565b6119656122fa565b6001600160a01b03166119866000546001600160a01b036101009091041690565b6001600160a01b0316146119ac5760405162461bcd60e51b8152600401610c8b906136ad565b6114f0612961565b6119bc6122fa565b6001600160a01b03166119dd6000546001600160a01b036101009091041690565b6001600160a01b031614611a035760405162461bcd60e51b8152600401610c8b906136ad565b600d805460ff19169055565b611a176122fa565b6001600160a01b0316611a386000546001600160a01b036101009091041690565b6001600160a01b031614611a5e5760405162461bcd60e51b8152600401610c8b906136ad565b6000808260ff1611611a71576007611a73565b815b905060005b83811015611ae95781600e6000878785818110611a9757611a976138be565b9050602002016020810190611aac919061316d565b6001600160a01b031681526020810191909152604001600020805460ff191660ff9290921691909117905580611ae181613863565b915050611a78565b5050505050565b606060048054610b9390613828565b611b076122fa565b6001600160a01b0316611b286000546001600160a01b036101009091041690565b6001600160a01b031614611b4e5760405162461bcd60e51b8152600401610c8b906136ad565b600d805462ff0000191662010000179055565b6000611b6b6122ef565b611b78611d71600161377d565b61ffff16610b7f91906137e5565b611495611b916122fa565b83836129ba565b611ba9611ba36122fa565b836125d5565b611bc55760405162461bcd60e51b8152600401610c8b9061372c565b61108184848484612a89565b60005460ff1615611bf45760405162461bcd60e51b8152600401610c8b90613683565b600d5462010000900460ff16611c5f5760405162461bcd60e51b815260206004820152602a60248201527f5365656b657273466f756e6465723a206c696e6b2d746f2d466c6f77206973206044820152696e6f742061637469766560b01b6064820152608401610c8b565b611c74611c6a6122fa565b8361ffff166125d5565b611cd15760405162461bcd60e51b815260206004820152602860248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220604482015267185c1c1c9bdd995960c21b6064820152608401610c8b565b80611cee5760405162461bcd60e51b8152600401610c8b906136e2565b6000611cf86122fa565b604080516001600160a01b03909216602083015261ffff85169082015260600160408051601f1981840301815291815281516020928301206000908152600f9092529020919091555050565b611d4c6122fa565b6001600160a01b0316611d6d6000546001600160a01b036101009091041690565b6001600160a01b031614611d935760405162461bcd60e51b8152600401610c8b906136ad565b600d805463ff00000019166301000000179055565b6000600e6000611db66122fa565b6001600160a01b0316815260208101919091526040016000205460ff16919050565b6000611de26122fa565b6001600160a01b0316611e036000546001600160a01b036101009091041690565b6001600160a01b031614611e295760405162461bcd60e51b8152600401610c8b906136ad565b50475b90565b6060611e39611ec5565b611e4283612abc565b604051602001611e5392919061357d565b6040516020818303038152906040529050919050565b611e716122fa565b6001600160a01b0316611e926000546001600160a01b036101009091041690565b6001600160a01b031614611eb85760405162461bcd60e51b8152600401610c8b906136ad565b600d805461ff0019169055565b6060610b7f612bba565b600a5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b158015611f1c57600080fd5b505afa158015611f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f549190613448565b6001600160a01b03161415611f6d576001915050610b63565b6001600160a01b0380851660009081526008602090815260408083209387168352929052205460ff165b949350505050565b611fa76122fa565b6001600160a01b0316611fc86000546001600160a01b036101009091041690565b6001600160a01b031614611fee5760405162461bcd60e51b8152600401610c8b906136ad565b600d805460ff19166001179055565b6120056122fa565b6001600160a01b03166120266000546001600160a01b036101009091041690565b6001600160a01b03161461204c5760405162461bcd60e51b8152600401610c8b906136ad565b6001600160a01b0381166120b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8b565b61133e816128ee565b6120c26122fa565b6001600160a01b03166120e36000546001600160a01b036101009091041690565b6001600160a01b0316146121095760405162461bcd60e51b8152600401610c8b906136ad565b600c55565b60005460ff16156121315760405162461bcd60e51b8152600401610c8b90613683565b600d546301000000900460ff1661219d5760405162461bcd60e51b815260206004820152602a60248201527f5365656b657273466f756e6465723a206275726e2d746f2d466c6f77206973206044820152696e6f742061637469766560b01b6064820152608401610c8b565b6121a8611c6a6122fa565b61220d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610c8b565b8061222a5760405162461bcd60e51b8152600401610c8b906136e2565b60006122346122fa565b604080516001600160a01b03909216602083015261ffff85169082015260600160408051601f1981840301815291815281516020928301206000818152601090935291208390559050610dd361ffff8416612bc9565b80546001019055565b6000333014156122ea57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150611e2c9050565b503390565b6000610b7f60095490565b6000610b7f612293565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123398261156f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006001600160a01b0386166123d85760405162461bcd60e51b815260206004820152602560248201527f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360448201526424a3a722a960d91b6064820152608401610c8b565b60016123eb6123e687612c75565b612cf2565b6040805160008152602081018083529290925260ff851690820152606081018690526080810185905260a0016020604051602081039080840390855afa158015612439573d6000803e3d6000fd5b505050602060405103516001600160a01b0316866001600160a01b031614905095945050505050565b600061246e828461379a565b9392505050565b60005460ff16156124985760405162461bcd60e51b8152600401610c8b90613683565b60008160ff16116124fd5760405162461bcd60e51b815260206004820152602960248201527f5365656b657273466f756e6465723a207175616e74697479206d75737420626560448201526820706f73697469766560b81b6064820152608401610c8b565b60018160ff1661250b6122ef565b612515919061379a565b61251f91906137e5565b611d7110156125965760405162461bcd60e51b815260206004820152603a60248201527f5365656b657273466f756e6465723a206e6f7420656e6f75676820466f756e6460448201527f657273206c65667420746f206d696e74206d756c7469706c65210000000000006064820152608401610c8b565b60005b8160ff16811015610dd35760006125ae6122ef565b90506125b8612d22565b6125c28482612947565b50806125cd81613863565b915050612599565b6000818152600560205260408120546001600160a01b031661264e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c8b565b60006126598361156f565b9050806001600160a01b0316846001600160a01b031614806126945750836001600160a01b031661268984610c16565b6001600160a01b0316145b80611f975750611f978185611ecf565b826001600160a01b03166126b78261156f565b6001600160a01b03161461271f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c8b565b6001600160a01b0382166127815760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8b565b600081815260116020526040902042905561279d600082612304565b6001600160a01b03831660009081526006602052604081208054600192906127c69084906137e5565b90915550506001600160a01b03821660009081526006602052604081208054600192906127f490849061379a565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005460ff1661289e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c8b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128d16122fa565b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b611495828260405180602001604052806000815250612d30565b60005460ff16156129845760405162461bcd60e51b8152600401610c8b90613683565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128d16122fa565b816001600160a01b0316836001600160a01b03161415612a1c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c8b565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612a948484846126a4565b612aa084848484612d63565b6110815760405162461bcd60e51b8152600401610c8b90613631565b606081612ae05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612b0a5780612af481613863565b9150612b039050600a836137b2565b9150612ae4565b60008167ffffffffffffffff811115612b2557612b256138d4565b6040519080825280601f01601f191660200182016040528015612b4f576020820181803683370190505b5090505b8415611f9757612b646001836137e5565b9150612b71600a8661387e565b612b7c90603061379a565b60f81b818381518110612b9157612b916138be565b60200101906001600160f81b031916908160001a905350612bb3600a866137b2565b9450612b53565b6060600b8054610b9390613828565b6000612bd48261156f565b60008381526011602052604090204290559050612bf2600083612304565b6001600160a01b0381166000908152600660205260408120805460019290612c1b9084906137e5565b909155505060008281526005602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006040518060800160405280604381526020016139166043913980516020918201208351848301516040808701518051908601209051612cd5950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6000612cfd60015490565b60405161190160f01b6020820152602281019190915260428101839052606201612cd5565b6114f0600980546001019055565b612d3a8383612e77565b612d476000848484612d63565b610dd35760405162461bcd60e51b8152600401610c8b90613631565b60006001600160a01b0384163b15612e6c57836001600160a01b031663150b7a02612d8c6122fa565b8786866040518563ffffffff1660e01b8152600401612dae94939291906135e1565b602060405180830381600087803b158015612dc857600080fd5b505af1925050508015612df8575060408051601f3d908101601f19168201909252612df59181019061342b565b60015b612e52573d808015612e26576040519150601f19603f3d011682016040523d82523d6000602084013e612e2b565b606091505b508051612e4a5760405162461bcd60e51b8152600401610c8b90613631565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f97565b506001949350505050565b6001600160a01b038216612ecd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c8b565b6000818152600560205260409020546001600160a01b031615612f325760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c8b565b60008181526011602052604090204290556001600160a01b0382166000908152600660205260408120805460019290612f6c90849061379a565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612fd690613828565b90600052602060002090601f016020900481019282612ff8576000855561303e565b82601f1061301157805160ff191683800117855561303e565b8280016001018555821561303e579182015b8281111561303e578251825591602001919060010190613023565b5061304a92915061304e565b5090565b5b8082111561304a576000815560010161304f565b600067ffffffffffffffff8084111561307e5761307e6138d4565b604051601f8501601f19908116603f011681019082821181831017156130a6576130a66138d4565b816040528093508581528686860111156130bf57600080fd5b858560208301376000602087830101525050509392505050565b60008083601f8401126130eb57600080fd5b50813567ffffffffffffffff81111561310357600080fd5b6020830191508360208260051b850101111561311e57600080fd5b9250929050565b600082601f83011261313657600080fd5b61246e83833560208501613063565b803561ffff8116811461315757600080fd5b919050565b803560ff8116811461315757600080fd5b60006020828403121561317f57600080fd5b813561246e816138ea565b6000806040838503121561319d57600080fd5b82356131a8816138ea565b915060208301356131b8816138ea565b809150509250929050565b6000806000606084860312156131d857600080fd5b83356131e3816138ea565b925060208401356131f3816138ea565b929592945050506040919091013590565b6000806000806080858703121561321a57600080fd5b8435613225816138ea565b93506020850135613235816138ea565b925060408501359150606085013567ffffffffffffffff81111561325857600080fd5b61326487828801613125565b91505092959194509250565b6000806040838503121561328357600080fd5b823561328e816138ea565b9150602083013580151581146131b857600080fd5b600080600080600060a086880312156132bb57600080fd5b85356132c6816138ea565b9450602086013567ffffffffffffffff8111156132e257600080fd5b6132ee88828901613125565b945050604086013592506060860135915061330b6080870161315c565b90509295509295909350565b6000806040838503121561332a57600080fd5b8235613335816138ea565b915061334360208401613145565b90509250929050565b6000806040838503121561335f57600080fd5b823561336a816138ea565b946020939093013593505050565b6000806020838503121561338b57600080fd5b823567ffffffffffffffff8111156133a257600080fd5b6133ae858286016130d9565b90969095509350505050565b6000806000604084860312156133cf57600080fd5b833567ffffffffffffffff8111156133e657600080fd5b6133f2868287016130d9565b909450925061340590506020850161315c565b90509250925092565b60006020828403121561342057600080fd5b813561246e816138ff565b60006020828403121561343d57600080fd5b815161246e816138ff565b60006020828403121561345a57600080fd5b815161246e816138ea565b60006020828403121561347757600080fd5b813567ffffffffffffffff81111561348e57600080fd5b8201601f8101841361349f57600080fd5b611f9784823560208401613063565b600080604083850312156134c157600080fd5b61336a83613145565b6000602082840312156134dc57600080fd5b5035919050565b6000602082840312156134f557600080fd5b61246e8261315c565b600081518084526135168160208601602086016137fc565b601f01601f19169290920160200192915050565b6000825161353c8184602087016137fc565b9190910192915050565b600083516135588184602088016137fc565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b6000835161358f8184602088016137fc565b8351908301906135a38183602088016137fc565b01949350505050565b6001600160a01b038481168252831660208201526060604082018190526000906135d8908301846134fe565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613614908301846134fe565b9695505050505050565b60208152600061246e60208301846134fe565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f5365656b657273466f756e6465723a2073696748617368206d757374206e6f7460408201526920626520656d7074792160b01b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600061ffff8083168185168083038211156135a3576135a3613892565b600082198211156137ad576137ad613892565b500190565b6000826137c1576137c16138a8565b500490565b60008160001904831182151516156137e0576137e0613892565b500290565b6000828210156137f7576137f7613892565b500390565b60005b838110156138175781810151838201526020016137ff565b838111156110815750506000910152565b600181811c9082168061383c57607f821691505b6020821081141561385d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561387757613877613892565b5060010190565b60008261388d5761388d6138a8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461133e57600080fd5b6001600160e01b03198116811461133e57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a264697066735822122077b41af2f73997525a8029d37c891046f23f76d1648c57e1f622e73217d9f50464736f6c63430008070033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

Deployed Bytecode

0x6080604052600436106103a25760003560e01c80637dad95e9116101e7578063b67c25a31161010d578063d3bd8f92116100a0578063f271d6141161006f578063f271d61414610aa2578063f2fde38b14610ab7578063f4a0a52814610ad7578063fff9683214610af757600080fd5b8063d3bd8f92146109f1578063d547cfb714610a06578063db7540b514610a1b578063e985e9c514610a8257600080fd5b8063bf370398116100dc578063bf37039814610992578063c71daccb146109a7578063c87b56dd146109bc578063c998806f146109dc57600080fd5b8063b67c25a31461091e578063b88d4fde1461093d578063b8d152141461095d578063b8f98af21461097d57600080fd5b806395d89b4111610185578063a22cb46511610154578063a22cb4651461089b578063a6a076d3146108bb578063a8e3b0cf146108d5578063b0de8729146108f557600080fd5b806395d89b411461084657806397ea08181461085b5780639bc07e7214610870578063a035b1fe1461088557600080fd5b8063885fb501116101c1578063885fb501146107cd5780638c8d4770146107e25780638da5cb5b1461080257806393dee5a11461082557600080fd5b80637dad95e91461078e5780637e1ca89d146107a35780638456cb59146107b857600080fd5b806331c9ee6d116102cc5780635c975abb1161026a57806370a082311161023957806370a0823114610719578063715018a6146107395780637264db021461074e578063755edd171461076e57600080fd5b80635c975abb146106a75780636352211e146106bf57806365f13097146106df578063682a73821461070657600080fd5b80633ccfd60b116102a65780633ccfd60b1461063d5780633f4ba83a1461065257806342842e0e1461066757806355f804b31461068757600080fd5b806331c9ee6d146105f75780633408e4701461060a578063372987d31461061d57600080fd5b80630f7e59701161034457806318160ddd1161031357806318160ddd1461057757806320379ee51461058c57806323b872dd146105a15780632d0335ab146105c157600080fd5b80630f7e5970146104f557806311fecb4e1461052257806316b0a70e1461054257806316f6c2da1461055757600080fd5b8063081812fc11610380578063081812fc14610421578063095ea7b3146104595780630bb0f2f41461047b5780630c53c51c146104e257600080fd5b806301ffc9a7146103a757806303f23c20146103dc57806306fdde03146103ff575b600080fd5b3480156103b357600080fd5b506103c76103c236600461340e565b610b17565b60405190151581526020015b60405180910390f35b3480156103e857600080fd5b506103f1610b69565b6040519081526020016103d3565b34801561040b57600080fd5b50610414610b84565b6040516103d3919061361e565b34801561042d57600080fd5b5061044161043c3660046134ca565b610c16565b6040516001600160a01b0390911681526020016103d3565b34801561046557600080fd5b5061047961047436600461334c565b610cb0565b005b34801561048757600080fd5b506103f1610496366004613317565b604080516001600160a01b039390931660208085019190915261ffff92909216838201528051808403820181526060909301815282519282019290922060009081526010909152205490565b6104146104f03660046132a3565b610dd8565b34801561050157600080fd5b50610414604051806040016040528060018152602001603160f81b81525081565b34801561052e57600080fd5b5061047961053d3660046133ba565b610fc2565b34801561054e57600080fd5b50610479611087565b34801561056357600080fd5b5061047961057236600461316d565b6110e5565b34801561058357600080fd5b506103f1611156565b34801561059857600080fd5b506001546103f1565b3480156105ad57600080fd5b506104796105bc3660046131c3565b611163565b3480156105cd57600080fd5b506103f16105dc36600461316d565b6001600160a01b031660009081526002602052604090205490565b6104796106053660046134e3565b61119b565b34801561061657600080fd5b50466103f1565b34801561062957600080fd5b50610479610638366004613378565b611341565b34801561064957600080fd5b50610479611405565b34801561065e57600080fd5b50610479611499565b34801561067357600080fd5b506104796106823660046131c3565b6114f2565b34801561069357600080fd5b506104796106a2366004613465565b61150d565b3480156106b357600080fd5b5060005460ff166103c7565b3480156106cb57600080fd5b506104416106da3660046134ca565b61156f565b3480156106eb57600080fd5b506106f4600381565b60405160ff90911681526020016103d3565b6104796107143660046134e3565b6115e6565b34801561072557600080fd5b506103f161073436600461316d565b611730565b34801561074557600080fd5b506104796117b7565b34801561075a57600080fd5b506103f16107693660046134ca565b611810565b34801561077a57600080fd5b5061047961078936600461316d565b61182c565b34801561079a57600080fd5b506104796118a0565b3480156107af57600080fd5b50610479611900565b3480156107c457600080fd5b5061047961195d565b3480156107d957600080fd5b506104796119b4565b3480156107ee57600080fd5b506104796107fd3660046133ba565b611a0f565b34801561080e57600080fd5b5060005461010090046001600160a01b0316610441565b34801561083157600080fd5b50600d546103c7906301000000900460ff1681565b34801561085257600080fd5b50610414611af0565b34801561086757600080fd5b50610479611aff565b34801561087c57600080fd5b506103f1611b61565b34801561089157600080fd5b506103f1600c5481565b3480156108a757600080fd5b506104796108b6366004613270565b611b86565b3480156108c757600080fd5b50600d546103c79060ff1681565b3480156108e157600080fd5b50600d546103c79062010000900460ff1681565b34801561090157600080fd5b5061090b611d7181565b60405161ffff90911681526020016103d3565b34801561092a57600080fd5b50600d546103c790610100900460ff1681565b34801561094957600080fd5b50610479610958366004613204565b611b98565b34801561096957600080fd5b506104796109783660046134ae565b611bd1565b34801561098957600080fd5b50610479611d44565b34801561099e57600080fd5b506106f4611da8565b3480156109b357600080fd5b506103f1611dd8565b3480156109c857600080fd5b506104146109d73660046134ca565b611e2f565b3480156109e857600080fd5b506106f4600781565b3480156109fd57600080fd5b50610479611e69565b348015610a1257600080fd5b50610414611ec5565b348015610a2757600080fd5b506103f1610a36366004613317565b604080516001600160a01b039390931660208085019190915261ffff9290921683820152805180840382018152606090930181528251928201929092206000908152600f909152205490565b348015610a8e57600080fd5b506103c7610a9d36600461318a565b611ecf565b348015610aae57600080fd5b50610479611f9f565b348015610ac357600080fd5b50610479610ad236600461316d565b611ffd565b348015610ae357600080fd5b50610479610af23660046134ca565b6120ba565b348015610b0357600080fd5b50610479610b123660046134ae565b61210e565b60006001600160e01b031982166380ac58cd60e01b1480610b4857506001600160e01b03198216635b5e139f60e01b145b80610b6357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006001610b756122ef565b610b7f91906137e5565b905090565b606060038054610b9390613828565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbf90613828565b8015610c0c5780601f10610be157610100808354040283529160200191610c0c565b820191906000526020600020905b815481529060010190602001808311610bef57829003601f168201915b5050505050905090565b6000818152600560205260408120546001600160a01b0316610c945760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610cbb8261156f565b9050806001600160a01b0316836001600160a01b03161415610d295760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c8b565b806001600160a01b0316610d3b6122fa565b6001600160a01b03161480610d575750610d5781610a9d6122fa565b610dc95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c8b565b610dd38383612304565b505050565b60408051606081810183526001600160a01b03881660008181526002602090815290859020548452830152918101869052610e168782878787612372565b610e6c5760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b6064820152608401610c8b565b6001600160a01b038716600090815260026020526040902054610e90906001612462565b6001600160a01b0388166000908152600260205260409081902091909155517f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b90610ee090899033908a906135ac565b60405180910390a1600080306001600160a01b0316888a604051602001610f08929190613546565b60408051601f1981840301815290829052610f229161352a565b6000604051808303816000865af19150503d8060008114610f5f576040519150601f19603f3d011682016040523d82523d6000602084013e610f64565b606091505b509150915081610fb65760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c000000006044820152606401610c8b565b98975050505050505050565b610fca6122fa565b6001600160a01b0316610feb6000546001600160a01b036101009091041690565b6001600160a01b0316146110115760405162461bcd60e51b8152600401610c8b906136ad565b60005460ff16156110345760405162461bcd60e51b8152600401610c8b90613683565b60005b828110156110815761106f848483818110611054576110546138be565b9050602002016020810190611069919061316d565b83612475565b8061107981613863565b915050611037565b50505050565b61108f6122fa565b6001600160a01b03166110b06000546001600160a01b036101009091041690565b6001600160a01b0316146110d65760405162461bcd60e51b8152600401610c8b906136ad565b600d805463ff00000019169055565b6110ed6122fa565b6001600160a01b031661110e6000546001600160a01b036101009091041690565b6001600160a01b0316146111345760405162461bcd60e51b8152600401610c8b906136ad565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001610b7560095490565b61117461116e6122fa565b826125d5565b6111905760405162461bcd60e51b8152600401610c8b9061372c565b610dd38383836126a4565b60005460ff16156111be5760405162461bcd60e51b8152600401610c8b90613683565b600d54610100900460ff166112275760405162461bcd60e51b815260206004820152602960248201527f5365656b657273466f756e6465723a207075626c6963206d696e74206973206e6044820152686f742061637469766560b81b6064820152608401610c8b565b600360ff82166112386107346122fa565b611242919061379a565b11156112b65760405162461bcd60e51b815260206004820152603f60248201527f5365656b657273466f756e6465723a206e6f7420616c6c6f77656420746f206d60448201527f696e74206d6f7265207468616e206163636f756e7420616c6c6f77616e6365006064820152608401610c8b565b348160ff16600c546112c891906137c6565b111561132d5760405162461bcd60e51b815260206004820152602e60248201527f5365656b657273466f756e6465723a20696e636f727265637420616d6f756e7460448201526d081bd988115d1a195c881cd95b9d60921b6064820152608401610c8b565b61133e6113386122fa565b82612475565b50565b6113496122fa565b6001600160a01b031661136a6000546001600160a01b036101009091041690565b6001600160a01b0316146113905760405162461bcd60e51b8152600401610c8b906136ad565b60005b81811015610dd3576000600e60008585858181106113b3576113b36138be565b90506020020160208101906113c8919061316d565b6001600160a01b031681526020810191909152604001600020805460ff191660ff92909216919091179055806113fd81613863565b915050611393565b61140d6122fa565b6001600160a01b031661142e6000546001600160a01b036101009091041690565b6001600160a01b0316146114545760405162461bcd60e51b8152600401610c8b906136ad565b4761145d6122fa565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611495573d6000803e3d6000fd5b5050565b6114a16122fa565b6001600160a01b03166114c26000546001600160a01b036101009091041690565b6001600160a01b0316146114e85760405162461bcd60e51b8152600401610c8b906136ad565b6114f0612855565b565b610dd383838360405180602001604052806000815250611b98565b6115156122fa565b6001600160a01b03166115366000546001600160a01b036101009091041690565b6001600160a01b03161461155c5760405162461bcd60e51b8152600401610c8b906136ad565b805161149590600b906020840190612fca565b6000818152600560205260408120546001600160a01b031680610b635760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610c8b565b60005460ff16156116095760405162461bcd60e51b8152600401610c8b90613683565b600d5460ff1661166f5760405162461bcd60e51b815260206004820152602b60248201527f5365656b657273466f756e6465723a20564950204c697374206d696e7420697360448201526a206e6f742061637469766560a81b6064820152608401610c8b565b6000600e600061167d6122fa565b6001600160a01b0316815260208101919091526040016000205460ff16116116f75760405162461bcd60e51b815260206004820152602760248201527f5365656b657273466f756e6465723a206163636f756e74206e6f7420564950206044820152664c69737465642160c81b6064820152608401610c8b565b600e60006117036122fa565b6001600160a01b0316815260208101919091526040016000205460ff9081169082166112386107346122fa565b60006001600160a01b03821661179b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c8b565b506001600160a01b031660009081526006602052604090205490565b6117bf6122fa565b6001600160a01b03166117e06000546001600160a01b036101009091041690565b6001600160a01b0316146118065760405162461bcd60e51b8152600401610c8b906136ad565b6114f060006128ee565b60008181526011602052604081205480610b6357504292915050565b6118346122fa565b6001600160a01b03166118556000546001600160a01b036101009091041690565b6001600160a01b03161461187b5760405162461bcd60e51b8152600401610c8b906136ad565b600061188660095490565b9050611896600980546001019055565b6114958282612947565b6118a86122fa565b6001600160a01b03166118c96000546001600160a01b036101009091041690565b6001600160a01b0316146118ef5760405162461bcd60e51b8152600401610c8b906136ad565b600d805461ff001916610100179055565b6119086122fa565b6001600160a01b03166119296000546001600160a01b036101009091041690565b6001600160a01b03161461194f5760405162461bcd60e51b8152600401610c8b906136ad565b600d805462ff000019169055565b6119656122fa565b6001600160a01b03166119866000546001600160a01b036101009091041690565b6001600160a01b0316146119ac5760405162461bcd60e51b8152600401610c8b906136ad565b6114f0612961565b6119bc6122fa565b6001600160a01b03166119dd6000546001600160a01b036101009091041690565b6001600160a01b031614611a035760405162461bcd60e51b8152600401610c8b906136ad565b600d805460ff19169055565b611a176122fa565b6001600160a01b0316611a386000546001600160a01b036101009091041690565b6001600160a01b031614611a5e5760405162461bcd60e51b8152600401610c8b906136ad565b6000808260ff1611611a71576007611a73565b815b905060005b83811015611ae95781600e6000878785818110611a9757611a976138be565b9050602002016020810190611aac919061316d565b6001600160a01b031681526020810191909152604001600020805460ff191660ff9290921691909117905580611ae181613863565b915050611a78565b5050505050565b606060048054610b9390613828565b611b076122fa565b6001600160a01b0316611b286000546001600160a01b036101009091041690565b6001600160a01b031614611b4e5760405162461bcd60e51b8152600401610c8b906136ad565b600d805462ff0000191662010000179055565b6000611b6b6122ef565b611b78611d71600161377d565b61ffff16610b7f91906137e5565b611495611b916122fa565b83836129ba565b611ba9611ba36122fa565b836125d5565b611bc55760405162461bcd60e51b8152600401610c8b9061372c565b61108184848484612a89565b60005460ff1615611bf45760405162461bcd60e51b8152600401610c8b90613683565b600d5462010000900460ff16611c5f5760405162461bcd60e51b815260206004820152602a60248201527f5365656b657273466f756e6465723a206c696e6b2d746f2d466c6f77206973206044820152696e6f742061637469766560b01b6064820152608401610c8b565b611c74611c6a6122fa565b8361ffff166125d5565b611cd15760405162461bcd60e51b815260206004820152602860248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220604482015267185c1c1c9bdd995960c21b6064820152608401610c8b565b80611cee5760405162461bcd60e51b8152600401610c8b906136e2565b6000611cf86122fa565b604080516001600160a01b03909216602083015261ffff85169082015260600160408051601f1981840301815291815281516020928301206000908152600f9092529020919091555050565b611d4c6122fa565b6001600160a01b0316611d6d6000546001600160a01b036101009091041690565b6001600160a01b031614611d935760405162461bcd60e51b8152600401610c8b906136ad565b600d805463ff00000019166301000000179055565b6000600e6000611db66122fa565b6001600160a01b0316815260208101919091526040016000205460ff16919050565b6000611de26122fa565b6001600160a01b0316611e036000546001600160a01b036101009091041690565b6001600160a01b031614611e295760405162461bcd60e51b8152600401610c8b906136ad565b50475b90565b6060611e39611ec5565b611e4283612abc565b604051602001611e5392919061357d565b6040516020818303038152906040529050919050565b611e716122fa565b6001600160a01b0316611e926000546001600160a01b036101009091041690565b6001600160a01b031614611eb85760405162461bcd60e51b8152600401610c8b906136ad565b600d805461ff0019169055565b6060610b7f612bba565b600a5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b158015611f1c57600080fd5b505afa158015611f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f549190613448565b6001600160a01b03161415611f6d576001915050610b63565b6001600160a01b0380851660009081526008602090815260408083209387168352929052205460ff165b949350505050565b611fa76122fa565b6001600160a01b0316611fc86000546001600160a01b036101009091041690565b6001600160a01b031614611fee5760405162461bcd60e51b8152600401610c8b906136ad565b600d805460ff19166001179055565b6120056122fa565b6001600160a01b03166120266000546001600160a01b036101009091041690565b6001600160a01b03161461204c5760405162461bcd60e51b8152600401610c8b906136ad565b6001600160a01b0381166120b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8b565b61133e816128ee565b6120c26122fa565b6001600160a01b03166120e36000546001600160a01b036101009091041690565b6001600160a01b0316146121095760405162461bcd60e51b8152600401610c8b906136ad565b600c55565b60005460ff16156121315760405162461bcd60e51b8152600401610c8b90613683565b600d546301000000900460ff1661219d5760405162461bcd60e51b815260206004820152602a60248201527f5365656b657273466f756e6465723a206275726e2d746f2d466c6f77206973206044820152696e6f742061637469766560b01b6064820152608401610c8b565b6121a8611c6a6122fa565b61220d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610c8b565b8061222a5760405162461bcd60e51b8152600401610c8b906136e2565b60006122346122fa565b604080516001600160a01b03909216602083015261ffff85169082015260600160408051601f1981840301815291815281516020928301206000818152601090935291208390559050610dd361ffff8416612bc9565b80546001019055565b6000333014156122ea57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150611e2c9050565b503390565b6000610b7f60095490565b6000610b7f612293565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123398261156f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006001600160a01b0386166123d85760405162461bcd60e51b815260206004820152602560248201527f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360448201526424a3a722a960d91b6064820152608401610c8b565b60016123eb6123e687612c75565b612cf2565b6040805160008152602081018083529290925260ff851690820152606081018690526080810185905260a0016020604051602081039080840390855afa158015612439573d6000803e3d6000fd5b505050602060405103516001600160a01b0316866001600160a01b031614905095945050505050565b600061246e828461379a565b9392505050565b60005460ff16156124985760405162461bcd60e51b8152600401610c8b90613683565b60008160ff16116124fd5760405162461bcd60e51b815260206004820152602960248201527f5365656b657273466f756e6465723a207175616e74697479206d75737420626560448201526820706f73697469766560b81b6064820152608401610c8b565b60018160ff1661250b6122ef565b612515919061379a565b61251f91906137e5565b611d7110156125965760405162461bcd60e51b815260206004820152603a60248201527f5365656b657273466f756e6465723a206e6f7420656e6f75676820466f756e6460448201527f657273206c65667420746f206d696e74206d756c7469706c65210000000000006064820152608401610c8b565b60005b8160ff16811015610dd35760006125ae6122ef565b90506125b8612d22565b6125c28482612947565b50806125cd81613863565b915050612599565b6000818152600560205260408120546001600160a01b031661264e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c8b565b60006126598361156f565b9050806001600160a01b0316846001600160a01b031614806126945750836001600160a01b031661268984610c16565b6001600160a01b0316145b80611f975750611f978185611ecf565b826001600160a01b03166126b78261156f565b6001600160a01b03161461271f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c8b565b6001600160a01b0382166127815760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8b565b600081815260116020526040902042905561279d600082612304565b6001600160a01b03831660009081526006602052604081208054600192906127c69084906137e5565b90915550506001600160a01b03821660009081526006602052604081208054600192906127f490849061379a565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005460ff1661289e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c8b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128d16122fa565b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b611495828260405180602001604052806000815250612d30565b60005460ff16156129845760405162461bcd60e51b8152600401610c8b90613683565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128d16122fa565b816001600160a01b0316836001600160a01b03161415612a1c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c8b565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612a948484846126a4565b612aa084848484612d63565b6110815760405162461bcd60e51b8152600401610c8b90613631565b606081612ae05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612b0a5780612af481613863565b9150612b039050600a836137b2565b9150612ae4565b60008167ffffffffffffffff811115612b2557612b256138d4565b6040519080825280601f01601f191660200182016040528015612b4f576020820181803683370190505b5090505b8415611f9757612b646001836137e5565b9150612b71600a8661387e565b612b7c90603061379a565b60f81b818381518110612b9157612b916138be565b60200101906001600160f81b031916908160001a905350612bb3600a866137b2565b9450612b53565b6060600b8054610b9390613828565b6000612bd48261156f565b60008381526011602052604090204290559050612bf2600083612304565b6001600160a01b0381166000908152600660205260408120805460019290612c1b9084906137e5565b909155505060008281526005602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006040518060800160405280604381526020016139166043913980516020918201208351848301516040808701518051908601209051612cd5950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6000612cfd60015490565b60405161190160f01b6020820152602281019190915260428101839052606201612cd5565b6114f0600980546001019055565b612d3a8383612e77565b612d476000848484612d63565b610dd35760405162461bcd60e51b8152600401610c8b90613631565b60006001600160a01b0384163b15612e6c57836001600160a01b031663150b7a02612d8c6122fa565b8786866040518563ffffffff1660e01b8152600401612dae94939291906135e1565b602060405180830381600087803b158015612dc857600080fd5b505af1925050508015612df8575060408051601f3d908101601f19168201909252612df59181019061342b565b60015b612e52573d808015612e26576040519150601f19603f3d011682016040523d82523d6000602084013e612e2b565b606091505b508051612e4a5760405162461bcd60e51b8152600401610c8b90613631565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f97565b506001949350505050565b6001600160a01b038216612ecd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c8b565b6000818152600560205260409020546001600160a01b031615612f325760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c8b565b60008181526011602052604090204290556001600160a01b0382166000908152600660205260408120805460019290612f6c90849061379a565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612fd690613828565b90600052602060002090601f016020900481019282612ff8576000855561303e565b82601f1061301157805160ff191683800117855561303e565b8280016001018555821561303e579182015b8281111561303e578251825591602001919060010190613023565b5061304a92915061304e565b5090565b5b8082111561304a576000815560010161304f565b600067ffffffffffffffff8084111561307e5761307e6138d4565b604051601f8501601f19908116603f011681019082821181831017156130a6576130a66138d4565b816040528093508581528686860111156130bf57600080fd5b858560208301376000602087830101525050509392505050565b60008083601f8401126130eb57600080fd5b50813567ffffffffffffffff81111561310357600080fd5b6020830191508360208260051b850101111561311e57600080fd5b9250929050565b600082601f83011261313657600080fd5b61246e83833560208501613063565b803561ffff8116811461315757600080fd5b919050565b803560ff8116811461315757600080fd5b60006020828403121561317f57600080fd5b813561246e816138ea565b6000806040838503121561319d57600080fd5b82356131a8816138ea565b915060208301356131b8816138ea565b809150509250929050565b6000806000606084860312156131d857600080fd5b83356131e3816138ea565b925060208401356131f3816138ea565b929592945050506040919091013590565b6000806000806080858703121561321a57600080fd5b8435613225816138ea565b93506020850135613235816138ea565b925060408501359150606085013567ffffffffffffffff81111561325857600080fd5b61326487828801613125565b91505092959194509250565b6000806040838503121561328357600080fd5b823561328e816138ea565b9150602083013580151581146131b857600080fd5b600080600080600060a086880312156132bb57600080fd5b85356132c6816138ea565b9450602086013567ffffffffffffffff8111156132e257600080fd5b6132ee88828901613125565b945050604086013592506060860135915061330b6080870161315c565b90509295509295909350565b6000806040838503121561332a57600080fd5b8235613335816138ea565b915061334360208401613145565b90509250929050565b6000806040838503121561335f57600080fd5b823561336a816138ea565b946020939093013593505050565b6000806020838503121561338b57600080fd5b823567ffffffffffffffff8111156133a257600080fd5b6133ae858286016130d9565b90969095509350505050565b6000806000604084860312156133cf57600080fd5b833567ffffffffffffffff8111156133e657600080fd5b6133f2868287016130d9565b909450925061340590506020850161315c565b90509250925092565b60006020828403121561342057600080fd5b813561246e816138ff565b60006020828403121561343d57600080fd5b815161246e816138ff565b60006020828403121561345a57600080fd5b815161246e816138ea565b60006020828403121561347757600080fd5b813567ffffffffffffffff81111561348e57600080fd5b8201601f8101841361349f57600080fd5b611f9784823560208401613063565b600080604083850312156134c157600080fd5b61336a83613145565b6000602082840312156134dc57600080fd5b5035919050565b6000602082840312156134f557600080fd5b61246e8261315c565b600081518084526135168160208601602086016137fc565b601f01601f19169290920160200192915050565b6000825161353c8184602087016137fc565b9190910192915050565b600083516135588184602088016137fc565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b6000835161358f8184602088016137fc565b8351908301906135a38183602088016137fc565b01949350505050565b6001600160a01b038481168252831660208201526060604082018190526000906135d8908301846134fe565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613614908301846134fe565b9695505050505050565b60208152600061246e60208301846134fe565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f5365656b657273466f756e6465723a2073696748617368206d757374206e6f7460408201526920626520656d7074792160b01b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600061ffff8083168185168083038211156135a3576135a3613892565b600082198211156137ad576137ad613892565b500190565b6000826137c1576137c16138a8565b500490565b60008160001904831182151516156137e0576137e0613892565b500290565b6000828210156137f7576137f7613892565b500390565b60005b838110156138175781810151838201526020016137ff565b838111156110815750506000910152565b600181811c9082168061383c57607f821691505b6020821081141561385d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561387757613877613892565b5060010190565b60008261388d5761388d6138a8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461133e57600080fd5b6001600160e01b03198116811461133e57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a264697066735822122077b41af2f73997525a8029d37c891046f23f76d1648c57e1f622e73217d9f50464736f6c63430008070033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1


Deployed Bytecode Sourcemap

60355:10382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43258:305;;;;;;;;;;-1:-1:-1;43258:305:0;;;;;:::i;:::-;;:::i;:::-;;;11333:14:1;;11326:22;11308:41;;11296:2;11281:18;43258:305:0;;;;;;;;65754:105;;;;;;;;;;;;;:::i;:::-;;;11506:25:1;;;11494:2;11479:18;65754:105:0;11360:177:1;44203:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;45762:221::-;;;;;;;;;;-1:-1:-1;45762:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9905:32:1;;;9887:51;;9875:2;9860:18;45762:221:0;9741:203:1;45285:411:0;;;;;;;;;;-1:-1:-1;45285:411:0;;;;;:::i;:::-;;:::i;:::-;;64914:191;;;;;;;;;;-1:-1:-1;64914:191:0;;;;;:::i;:::-;65037:30;;;-1:-1:-1;;;;;11068:32:1;;;;65037:30:0;;;;11050:51:1;;;;11149:6;11137:19;;;;11117:18;;;11110:47;65037:30:0;;;;;;;;;11023:18:1;;;;65037:30:0;;65027:41;;;;;;;;;-1:-1:-1;65086:11:0;;;:8;:11;;;;;;64914:191;31717:1151;;;;;;:::i;:::-;;:::i;801:43::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;801:43:0;;;;;67983:219;;;;;;;;;;-1:-1:-1;67983:219:0;;;;;:::i;:::-;;:::i;66943:92::-;;;;;;;;;;;;;:::i;58160:113::-;;;;;;;;;;-1:-1:-1;58160:113:0;;;;;:::i;:::-;;:::i;58778:105::-;;;;;;;;;;;;;:::i;1810:101::-;;;;;;;;;;-1:-1:-1;1888:15:0;;1810:101;;46512:339;;;;;;;;;;-1:-1:-1;46512:339:0;;;;;:::i;:::-;;:::i;33294:107::-;;;;;;;;;;-1:-1:-1;33294:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;33381:12:0;33347:13;33381:12;;;:6;:12;;;;;;;33294:107;68756:422;;;;;;:::i;:::-;;:::i;1919:161::-;;;;;;;;;;-1:-1:-1;2033:9:0;1919:161;;67403:187;;;;;;;;;;-1:-1:-1;67403:187:0;;;;;:::i;:::-;;:::i;69993:142::-;;;;;;;;;;;;;:::i;70667:65::-;;;;;;;;;;;;;:::i;46922:185::-;;;;;;;;;;-1:-1:-1;46922:185:0;;;;;:::i;:::-;;:::i;65113:104::-;;;;;;;;;;-1:-1:-1;65113:104:0;;;;;:::i;:::-;;:::i;37634:86::-;;;;;;;;;;-1:-1:-1;37681:4:0;37705:7;;;37634:86;;43897:239;;;;;;;;;;-1:-1:-1;43897:239:0;;;;;:::i;:::-;;:::i;60559:41::-;;;;;;;;;;;;60599:1;60559:41;;;;;26158:4:1;26146:17;;;26128:36;;26116:2;26101:18;60559:41:0;25986:184:1;68260:442:0;;;;;;:::i;:::-;;:::i;43627:208::-;;;;;;;;;;-1:-1:-1;43627:208:0;;;;;:::i;:::-;;:::i;40676:103::-;;;;;;;;;;;;;:::i;70143:215::-;;;;;;;;;;-1:-1:-1;70143:215:0;;;;;:::i;:::-;;:::i;58417:188::-;;;;;;;;;;-1:-1:-1;58417:188:0;;;;;:::i;:::-;;:::i;66219:89::-;;;;;;;;;;;;;:::i;66663:91::-;;;;;;;;;;;;;:::i;70598:61::-;;;;;;;;;;;;;:::i;66069:94::-;;;;;;;;;;;;;:::i;67043:278::-;;;;;;;;;;-1:-1:-1;67043:278:0;;;;;:::i;:::-;;:::i;40025:87::-;;;;;;;;;;-1:-1:-1;40071:7:0;40098:6;;;;-1:-1:-1;;;;;40098:6:0;40025:87;;60799:36;;;;;;;;;;-1:-1:-1;60799:36:0;;;;;;;;;;;44372:104;;;;;;;;;;;;;:::i;66515:89::-;;;;;;;;;;;;;:::i;65520:123::-;;;;;;;;;;;;;:::i;60609:41::-;;;;;;;;;;;;;;;;46055:155;;;;;;;;;;-1:-1:-1;46055:155:0;;;;;:::i;:::-;;:::i;60669:37::-;;;;;;;;;;-1:-1:-1;60669:37:0;;;;;;;;60756:36;;;;;;;;;;-1:-1:-1;60756:36:0;;;;;;;;;;;60465:42;;;;;;;;;;;;60503:4;60465:42;;;;;25785:6:1;25773:19;;;25755:38;;25743:2;25728:18;60465:42:0;25611:188:1;60713:36:0;;;;;;;;;;-1:-1:-1;60713:36:0;;;;;;;;;;;47178:328;;;;;;;;;;-1:-1:-1;47178:328:0;;;;;:::i;:::-;;:::i;63313:453::-;;;;;;;;;;-1:-1:-1;63313:453:0;;;;;:::i;:::-;;:::i;66803:89::-;;;;;;;;;;;;;:::i;67795:98::-;;;;;;;;;;;;;:::i;69786:147::-;;;;;;;;;;;;;:::i;58967:175::-;;;;;;;;;;-1:-1:-1;58967:175:0;;;;;:::i;:::-;;:::i;60514:38::-;;;;;;;;;;;;60551:1;60514:38;;66366:92;;;;;;;;;;;;;:::i;65339:105::-;;;;;;;;;;;;;:::i;64620:197::-;;;;;;;;;;-1:-1:-1;64620:197:0;;;;;:::i;:::-;64739:30;;;-1:-1:-1;;;;;11068:32:1;;;;64739:30:0;;;;11050:51:1;;;;11149:6;11137:19;;;;11117:18;;;11110:47;64739:30:0;;;;;;;;;11023:18:1;;;;64739:30:0;;64729:41;;;;;;;;;-1:-1:-1;64788:21:0;;;:18;:21;;;;;;64620:197;59274:445;;;;;;;;;;-1:-1:-1;59274:445:0;;;;;:::i;:::-;;:::i;65917:91::-;;;;;;;;;;;;;:::i;40934:201::-;;;;;;;;;;-1:-1:-1;40934:201:0;;;;;:::i;:::-;;:::i;62557:92::-;;;;;;;;;;-1:-1:-1;62557:92:0;;;;;:::i;:::-;;:::i;64062:476::-;;;;;;;;;;-1:-1:-1;64062:476:0;;;;;:::i;:::-;;:::i;43258:305::-;43360:4;-1:-1:-1;;;;;;43397:40:0;;-1:-1:-1;;;43397:40:0;;:105;;-1:-1:-1;;;;;;;43454:48:0;;-1:-1:-1;;;43454:48:0;43397:105;:158;;;-1:-1:-1;;;;;;;;;;17967:40:0;;;43519:36;43377:178;43258:305;-1:-1:-1;;43258:305:0:o;65754:105::-;65806:7;65850:1;65833:14;:12;:14::i;:::-;:18;;;;:::i;:::-;65826:25;;65754:105;:::o;44203:100::-;44257:13;44290:5;44283:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44203:100;:::o;45762:221::-;45838:7;49105:16;;;:7;:16;;;;;;-1:-1:-1;;;;;49105:16:0;45858:73;;;;-1:-1:-1;;;45858:73:0;;21343:2:1;45858:73:0;;;21325:21:1;21382:2;21362:18;;;21355:30;21421:34;21401:18;;;21394:62;-1:-1:-1;;;21472:18:1;;;21465:42;21524:19;;45858:73:0;;;;;;;;;-1:-1:-1;45951:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;45951:24:0;;45762:221::o;45285:411::-;45366:13;45382:23;45397:7;45382:14;:23::i;:::-;45366:39;;45430:5;-1:-1:-1;;;;;45424:11:0;:2;-1:-1:-1;;;;;45424:11:0;;;45416:57;;;;-1:-1:-1;;;45416:57:0;;23339:2:1;45416:57:0;;;23321:21:1;23378:2;23358:18;;;23351:30;23417:34;23397:18;;;23390:62;-1:-1:-1;;;23468:18:1;;;23461:31;23509:19;;45416:57:0;23137:397:1;45416:57:0;45524:5;-1:-1:-1;;;;;45508:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;45508:21:0;;:62;;;;45533:37;45550:5;45557:12;:10;:12::i;45533:37::-;45486:168;;;;-1:-1:-1;;;45486:168:0;;18081:2:1;45486:168:0;;;18063:21:1;18120:2;18100:18;;;18093:30;18159:34;18139:18;;;18132:62;18230:26;18210:18;;;18203:54;18274:19;;45486:168:0;17879:420:1;45486:168:0;45667:21;45676:2;45680:7;45667:8;:21::i;:::-;45355:341;45285:411;;:::o;31717:1151::-;31975:152;;;31918:12;31975:152;;;;;-1:-1:-1;;;;;32013:19:0;;31943:29;32013:19;;;:6;:19;;;;;;;;;31975:152;;;;;;;;;;;32162:45;32020:11;31975:152;32190:4;32196;32202;32162:6;:45::i;:::-;32140:128;;;;-1:-1:-1;;;32140:128:0;;22937:2:1;32140:128:0;;;22919:21:1;22976:2;22956:18;;;22949:30;23015:34;22995:18;;;22988:62;-1:-1:-1;;;23066:18:1;;;23059:31;23107:19;;32140:128:0;22735:397:1;32140:128:0;-1:-1:-1;;;;;32357:19:0;;;;;;:6;:19;;;;;;:26;;32381:1;32357:23;:26::i;:::-;-1:-1:-1;;;;;32335:19:0;;;;;;:6;:19;;;;;;;:48;;;;32401:126;;;;;32342:11;;32473:10;;32499:17;;32401:126;:::i;:::-;;;;;;;;32638:12;32652:23;32687:4;-1:-1:-1;;;;;32679:18:0;32729:17;32748:11;32712:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;32712:48:0;;;;;;;;;;32679:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32637:134;;;;32790:7;32782:48;;;;-1:-1:-1;;;32782:48:0;;14602:2:1;32782:48:0;;;14584:21:1;14641:2;14621:18;;;14614:30;14680;14660:18;;;14653:58;14728:18;;32782:48:0;14400:352:1;32782:48:0;32850:10;31717:1151;-1:-1:-1;;;;;;;;31717:1151:0:o;67983:219::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;37681:4;37705:7;;;37959:9:::1;37951:38;;;;-1:-1:-1::0;;;37951:38:0::1;;;;;;;:::i;:::-;68091:9:::2;68086:109;68106:20:::0;;::::2;68086:109;;;68148:35;68162:9;;68172:1;68162:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;68176:6;68148:13;:35::i;:::-;68128:3:::0;::::2;::::0;::::2;:::i;:::-;;;;68086:109;;;;67983:219:::0;;;:::o;66943:92::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;67003:16:::1;:24:::0;;-1:-1:-1;;67003:24:0::1;::::0;;66943:92::o;58160:113::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;58238:20:::1;:27:::0;;-1:-1:-1;;;;;;58238:27:0::1;-1:-1:-1::0;;;;;58238:27:0;;;::::1;::::0;;;::::1;::::0;;58160:113::o;58778:105::-;58822:7;58874:1;58849:22;:12;35861:14;;35769:114;46512:339;46707:41;46726:12;:10;:12::i;:::-;46740:7;46707:18;:41::i;:::-;46699:103;;;;-1:-1:-1;;;46699:103:0;;;;;;;:::i;:::-;46815:28;46825:4;46831:2;46835:7;46815:9;:28::i;68756:422::-;37681:4;37705:7;;;37959:9;37951:38;;;;-1:-1:-1;;;37951:38:0;;;;;;;:::i;:::-;61689:16:::1;::::0;::::1;::::0;::::1;;;61681:69;;;::::0;-1:-1:-1;;;61681:69:0;;16488:2:1;61681:69:0::1;::::0;::::1;16470:21:1::0;16527:2;16507:18;;;16500:30;16566:34;16546:18;;;16539:62;-1:-1:-1;;;16617:18:1;;;16610:39;16666:19;;61681:69:0::1;16286:405:1::0;61681:69:0::1;60599:1:::2;68867:53;:34:::0;::::2;:23;68877:12;:10;:12::i;68867:23::-;:34;;;;:::i;:::-;:53;;68859:128;;;::::0;-1:-1:-1;;;68859:128:0;;17649:2:1;68859:128:0::2;::::0;::::2;17631:21:1::0;17688:2;17668:18;;;17661:30;17727:34;17707:18;;;17700:62;17798:33;17778:18;;;17771:61;17849:19;;68859:128:0::2;17447:427:1::0;68859:128:0::2;69061:9;69049:8;69041:16;;:5;;:16;;;;:::i;:::-;:29;;69033:87;;;::::0;-1:-1:-1;;;69033:87:0;;23741:2:1;69033:87:0::2;::::0;::::2;23723:21:1::0;23780:2;23760:18;;;23753:30;23819:34;23799:18;;;23792:62;-1:-1:-1;;;23870:18:1;;;23863:44;23924:19;;69033:87:0::2;23539:410:1::0;69033:87:0::2;69133:37;69147:12;:10;:12::i;:::-;69161:8;69133:13;:37::i;:::-;68756:422:::0;:::o;67403:187::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;67489:9:::1;67484:99;67504:20:::0;;::::1;67484:99;;;67570:1;67546:7;:21;67554:9;;67564:1;67554:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;67546:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;67546:21:0;:25;;-1:-1:-1;;67546:25:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;67526:3;::::1;::::0;::::1;:::i;:::-;;;;67484:99;;69993:142:::0;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;70056:21:::1;70096:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;70088:30:0::1;:39;70119:7;70088:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;70030:105;69993:142::o:0;70667:65::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;70714:10:::1;:8;:10::i;:::-;70667:65::o:0;46922:185::-;47060:39;47077:4;47083:2;47087:7;47060:39;;;;;;;;;;;;:16;:39::i;65113:104::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;65184:24;;::::1;::::0;:13:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;43897:239::-:0;43969:7;44005:16;;;:7;:16;;;;;;-1:-1:-1;;;;;44005:16:0;44040:19;44032:73;;;;-1:-1:-1;;;44032:73:0;;18917:2:1;44032:73:0;;;18899:21:1;18956:2;18936:18;;;18929:30;18995:34;18975:18;;;18968:62;-1:-1:-1;;;19046:18:1;;;19039:39;19095:19;;44032:73:0;18715:405:1;68260:442:0;37681:4;37705:7;;;37959:9;37951:38;;;;-1:-1:-1;;;37951:38:0;;;;;;;:::i;:::-;61488:17:::1;::::0;::::1;;61480:72;;;::::0;-1:-1:-1;;;61480:72:0;;13364:2:1;61480:72:0::1;::::0;::::1;13346:21:1::0;13403:2;13383:18;;;13376:30;13442:34;13422:18;;;13415:62;-1:-1:-1;;;13493:18:1;;;13486:41;13544:19;;61480:72:0::1;13162:407:1::0;61480:72:0::1;62391:1:::2;62367:7;:21;62375:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;62367:21:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;62367:21:0;;::::2;;:25;62359:76;;;::::0;-1:-1:-1;;;62359:76:0;;19327:2:1;62359:76:0::2;::::0;::::2;19309:21:1::0;19366:2;19346:18;;;19339:30;19405:34;19385:18;;;19378:62;-1:-1:-1;;;19456:18:1;;;19449:37;19503:19;;62359:76:0::2;19125:403:1::0;62359:76:0::2;68423:7:::3;:21;68431:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;68423:21:0::3;::::0;;::::3;::::0;::::3;::::0;;;;;;-1:-1:-1;68423:21:0;;::::3;::::0;;::::3;::::0;68385:34;::::3;:23;68395:12;:10;:12::i;43627:208::-:0;43699:7;-1:-1:-1;;;;;43727:19:0;;43719:74;;;;-1:-1:-1;;;43719:74:0;;18506:2:1;43719:74:0;;;18488:21:1;18545:2;18525:18;;;18518:30;18584:34;18564:18;;;18557:62;-1:-1:-1;;;18635:18:1;;;18628:40;18685:19;;43719:74:0;18304:406:1;43719:74:0;-1:-1:-1;;;;;;43811:16:0;;;;;:9;:16;;;;;;;43627:208::o;40676:103::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;40741:30:::1;40768:1;40741:18;:30::i;70143:215::-:0;70201:7;70234:17;;;:8;:17;;;;;;70266:10;70262:66;;-1:-1:-1;70301:15:0;70345:5;70143:215;-1:-1:-1;;70143:215:0:o;58417:188::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;58474:22:::1;58499;:12;35861:14:::0;;35769:114;58499:22:::1;58474:47;;58532:24;:12;35980:19:::0;;35998:1;35980:19;;;35891:127;58532:24:::1;58567:30;58577:3;58582:14;58567:9;:30::i;66219:89::-:0;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;66277:16:::1;:23:::0;;-1:-1:-1;;66277:23:0::1;;;::::0;;66219:89::o;66663:91::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;66723:16:::1;:23:::0;;-1:-1:-1;;66723:23:0::1;::::0;;66663:91::o;70598:61::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;70643:8:::1;:6;:8::i;66069:94::-:0;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;66130:17:::1;:25:::0;;-1:-1:-1;;66130:25:0::1;::::0;;66069:94::o;67043:278::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;67140:12:::1;67169:1:::0;67155:11:::1;:15;;;:44;;60551:1;67155:44;;;67173:11;67155:44;67140:59;;67215:9;67210:104;67230:20:::0;;::::1;67210:104;;;67296:6;67272:7;:21;67280:9;;67290:1;67280:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;67272:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;67272:21:0;:30;;-1:-1:-1;;67272:30:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;67252:3;::::1;::::0;::::1;:::i;:::-;;;;67210:104;;;;67129:192;67043:278:::0;;;:::o;44372:104::-;44428:13;44461:7;44454:14;;;;;:::i;66515:89::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;66573:16:::1;:23:::0;;-1:-1:-1;;66573:23:0::1;::::0;::::1;::::0;;66515:89::o;65520:123::-;65575:7;65621:14;:12;:14::i;:::-;65602:16;60503:4;65617:1;65602:16;:::i;:::-;:33;;;;;;:::i;46055:155::-;46150:52;46169:12;:10;:12::i;:::-;46183:8;46193;46150:18;:52::i;47178:328::-;47353:41;47372:12;:10;:12::i;:::-;47386:7;47353:18;:41::i;:::-;47345:103;;;;-1:-1:-1;;;47345:103:0;;;;;;;:::i;:::-;47459:39;47473:4;47479:2;47483:7;47492:5;47459:13;:39::i;63313:453::-;37681:4;37705:7;;;37959:9;37951:38;;;;-1:-1:-1;;;37951:38:0;;;;;;;:::i;:::-;61888:16:::1;::::0;;;::::1;;;61880:70;;;::::0;-1:-1:-1;;;61880:70:0;;19735:2:1;61880:70:0::1;::::0;::::1;19717:21:1::0;19774:2;19754:18;;;19747:30;19813:34;19793:18;;;19786:62;-1:-1:-1;;;19864:18:1;;;19857:40;19914:19;;61880:70:0::1;19533:406:1::0;61880:70:0::1;63478:41:::2;63497:12;:10;:12::i;:::-;63511:7;63478:41;;:18;:41::i;:::-;63470:94;;;::::0;-1:-1:-1;;;63470:94:0;;20934:2:1;63470:94:0::2;::::0;::::2;20916:21:1::0;20973:2;20953:18;;;20946:30;21012:34;20992:18;;;20985:62;-1:-1:-1;;;21063:18:1;;;21056:38;21111:19;;63470:94:0::2;20732:404:1::0;63470:94:0::2;63583:21:::0;63575:75:::2;;;;-1:-1:-1::0;;;63575:75:0::2;;;;;;;:::i;:::-;63661:9;63694:12;:10;:12::i;:::-;63683:32;::::0;;-1:-1:-1;;;;;11068:32:1;;;63683::0::2;::::0;::::2;11050:51:1::0;11149:6;11137:19;;11117:18;;;11110:47;11023:18;;63683:32:0::2;::::0;;-1:-1:-1;;63683:32:0;;::::2;::::0;;;;;;63673:43;;63683:32:::2;63673:43:::0;;::::2;::::0;63727:21:::2;::::0;;;:18:::2;:21:::0;;;;;:31;;;;-1:-1:-1;;63313:453:0:o;66803:89::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;66861:16:::1;:23:::0;;-1:-1:-1;;66861:23:0::1;::::0;::::1;::::0;;66803:89::o;67795:98::-;67840:5;67864:7;:21;67872:12;:10;:12::i;:::-;-1:-1:-1;;;;;67864:21:0;;;;;;;;;;;;-1:-1:-1;67864:21:0;;;;;67795:98;-1:-1:-1;67795:98:0:o;69786:147::-;69841:7;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;-1:-1:-1;69879:21:0::1;40316:1;69786:147:::0;:::o;58967:175::-;59033:13;59090:14;:12;:14::i;:::-;59106:26;59123:8;59106:16;:26::i;:::-;59073:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59059:75;;58967:175;;;:::o;66366:92::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;66426:16:::1;:24:::0;;-1:-1:-1;;66426:24:0::1;::::0;;66366:92::o;65339:105::-;65393:13;65426:10;:8;:10::i;59274:445::-;59528:20;;59572:28;;-1:-1:-1;;;59572:28:0;;-1:-1:-1;;;;;9905:32:1;;;59572:28:0;;;9887:51:1;59399:4:0;;59528:20;;;59564:49;;;;59528:20;;59572:21;;9860:18:1;;59572:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;59564:49:0;;59560:93;;;59637:4;59630:11;;;;;59560:93;-1:-1:-1;;;;;46402:25:0;;;46378:4;46402:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;59672:39;59665:46;59274:445;-1:-1:-1;;;;59274:445:0:o;65917:91::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;65976:17:::1;:24:::0;;-1:-1:-1;;65976:24:0::1;65996:4;65976:24;::::0;;65917:91::o;40934:201::-;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41023:22:0;::::1;41015:73;;;::::0;-1:-1:-1;;;41015:73:0;;14195:2:1;41015:73:0::1;::::0;::::1;14177:21:1::0;14234:2;14214:18;;;14207:30;14273:34;14253:18;;;14246:62;-1:-1:-1;;;14324:18:1;;;14317:36;14370:19;;41015:73:0::1;13993:402:1::0;41015:73:0::1;41099:28;41118:8;41099:18;:28::i;62557:92::-:0;40256:12;:10;:12::i;:::-;-1:-1:-1;;;;;40245:23:0;:7;40071;40098:6;-1:-1:-1;;;;;40098:6:0;;;;;;40025:87;40245:7;-1:-1:-1;;;;;40245:23:0;;40237:68;;;;-1:-1:-1;;;40237:68:0;;;;;;;:::i;:::-;62625:5:::1;:16:::0;62557:92::o;64062:476::-;37681:4;37705:7;;;37959:9;37951:38;;;;-1:-1:-1;;;37951:38:0;;;;;;;:::i;:::-;62080:16:::1;::::0;;;::::1;;;62072:70;;;::::0;-1:-1:-1;;;62072:70:0;;24156:2:1;62072:70:0::1;::::0;::::1;24138:21:1::0;24195:2;24175:18;;;24168:30;24234:34;24214:18;;;24207:62;-1:-1:-1;;;24285:18:1;;;24278:40;24335:19;;62072:70:0::1;23954:406:1::0;62072:70:0::1;64227:41:::2;64246:12;:10;:12::i;64227:41::-;64219:102;;;::::0;-1:-1:-1;;;64219:102:0;;25396:2:1;64219:102:0::2;::::0;::::2;25378:21:1::0;25435:2;25415:18;;;25408:30;25474:34;25454:18;;;25447:62;-1:-1:-1;;;25525:18:1;;;25518:46;25581:19;;64219:102:0::2;25194:412:1::0;64219:102:0::2;64340:21:::0;64332:75:::2;;;;-1:-1:-1::0;;;64332:75:0::2;;;;;;;:::i;:::-;64418:9;64451:12;:10;:12::i;:::-;64440:32;::::0;;-1:-1:-1;;;;;11068:32:1;;;64440::0::2;::::0;::::2;11050:51:1::0;11149:6;11137:19;;11117:18;;;11110:47;11023:18;;64440:32:0::2;::::0;;-1:-1:-1;;64440:32:0;;::::2;::::0;;;;;;64430:43;;64440:32:::2;64430:43:::0;;::::2;::::0;64484:11:::2;::::0;;;:8:::2;:11:::0;;;;;:21;;;64430:43;-1:-1:-1;64516:14:0::2;;::::0;::::2;:5;:14::i;35891:127::-:0;35980:19;;35998:1;35980:19;;;35891:127::o;34133:650::-;34204:22;34248:10;34270:4;34248:27;34244:508;;;34292:18;34313:8;;34292:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;34352:8:0;34563:17;34557:24;-1:-1:-1;;;;;34531:134:0;;-1:-1:-1;34244:508:0;;-1:-1:-1;34244:508:0;;-1:-1:-1;34729:10:0;34133:650;:::o;57850:104::-;57897:7;57924:22;:12;35861:14;;35769:114;59863:161;59953:14;59992:24;:22;:24::i;52998:174::-;53073:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;53073:29:0;-1:-1:-1;;;;;53073:29:0;;;;;;;;:24;;53127:23;53073:24;53127:14;:23::i;:::-;-1:-1:-1;;;;;53118:46:0;;;;;;;;;;;52998:174;;:::o;33409:486::-;33587:4;-1:-1:-1;;;;;33612:20:0;;33604:70;;;;-1:-1:-1;;;33604:70:0;;16898:2:1;33604:70:0;;;16880:21:1;16937:2;16917:18;;;16910:30;16976:34;16956:18;;;16949:62;-1:-1:-1;;;17027:18:1;;;17020:35;17072:19;;33604:70:0;16696:401:1;33604:70:0;33728:159;33756:47;33775:27;33795:6;33775:19;:27::i;:::-;33756:18;:47::i;:::-;33728:159;;;;;;;;;;;;12191:25:1;;;;12264:4;12252:17;;12232:18;;;12225:45;12286:18;;;12279:34;;;12329:18;;;12322:34;;;12163:19;;33728:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33705:182:0;:6;-1:-1:-1;;;;;33705:182:0;;33685:202;;33409:486;;;;;;;:::o;5676:98::-;5734:7;5761:5;5765:1;5761;:5;:::i;:::-;5754:12;5676:98;-1:-1:-1;;;5676:98:0:o;69186:535::-;37681:4;37705:7;;;37959:9;37951:38;;;;-1:-1:-1;;;37951:38:0;;;;;;;:::i;:::-;69328:1:::1;69317:8;:12;;;69309:65;;;::::0;-1:-1:-1;;;69309:65:0;;22117:2:1;69309:65:0::1;::::0;::::1;22099:21:1::0;22156:2;22136:18;;;22129:30;22195:34;22175:18;;;22168:62;-1:-1:-1;;;22246:18:1;;;22239:39;22295:19;;69309:65:0::1;21915:405:1::0;69309:65:0::1;69477:1;69466:8;69449:25;;:14;:12;:14::i;:::-;:25;;;;:::i;:::-;:29;;;;:::i;:::-;60503:4;69433:45;;69425:115;;;::::0;-1:-1:-1;;;69425:115:0;;20507:2:1;69425:115:0::1;::::0;::::1;20489:21:1::0;20546:2;20526:18;;;20519:30;20585:34;20565:18;;;20558:62;20656:28;20636:18;;;20629:56;20702:19;;69425:115:0::1;20305:422:1::0;69425:115:0::1;69558:9;69553:161;69577:8;69573:12;;:1;:12;69553:161;;;69607:15;69625:14;:12;:14::i;:::-;69607:32;;69654:11;:9;:11::i;:::-;69680:22;69690:2;69694:7;69680:9;:22::i;:::-;-1:-1:-1::0;69587:3:0;::::1;::::0;::::1;:::i;:::-;;;;69553:161;;49310:348:::0;49403:4;49105:16;;;:7;:16;;;;;;-1:-1:-1;;;;;49105:16:0;49420:73;;;;-1:-1:-1;;;49420:73:0;;16075:2:1;49420:73:0;;;16057:21:1;16114:2;16094:18;;;16087:30;16153:34;16133:18;;;16126:62;-1:-1:-1;;;16204:18:1;;;16197:42;16256:19;;49420:73:0;15873:408:1;49420:73:0;49504:13;49520:23;49535:7;49520:14;:23::i;:::-;49504:39;;49573:5;-1:-1:-1;;;;;49562:16:0;:7;-1:-1:-1;;;;;49562:16:0;;:51;;;;49606:7;-1:-1:-1;;;;;49582:31:0;:20;49594:7;49582:11;:20::i;:::-;-1:-1:-1;;;;;49582:31:0;;49562:51;:87;;;;49617:32;49634:5;49641:7;49617:16;:32::i;52302:578::-;52461:4;-1:-1:-1;;;;;52434:31:0;:23;52449:7;52434:14;:23::i;:::-;-1:-1:-1;;;;;52434:31:0;;52426:85;;;;-1:-1:-1;;;52426:85:0;;22527:2:1;52426:85:0;;;22509:21:1;22566:2;22546:18;;;22539:30;22605:34;22585:18;;;22578:62;-1:-1:-1;;;22656:18:1;;;22649:39;22705:19;;52426:85:0;22325:405:1;52426:85:0;-1:-1:-1;;;;;52530:16:0;;52522:65;;;;-1:-1:-1;;;52522:65:0;;15316:2:1;52522:65:0;;;15298:21:1;15355:2;15335:18;;;15328:30;15394:34;15374:18;;;15367:62;-1:-1:-1;;;15445:18:1;;;15438:34;15489:19;;52522:65:0;15114:400:1;52522:65:0;70547:17;;;;:8;:17;;;;;70567:15;70547:35;;52704:29;52721:1;52725:7;52704:8;:29::i;:::-;-1:-1:-1;;;;;52746:15:0;;;;;;:9;:15;;;;;:20;;52765:1;;52746:15;:20;;52765:1;;52746:20;:::i;:::-;;;;-1:-1:-1;;;;;;;52777:13:0;;;;;;:9;:13;;;;;:18;;52794:1;;52777:13;:18;;52794:1;;52777:18;:::i;:::-;;;;-1:-1:-1;;52806:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;52806:21:0;-1:-1:-1;;;;;52806:21:0;;;;;;;;;52845:27;;52806:16;;52845:27;;;;;;;52302:578;;;:::o;38693:120::-;37681:4;37705:7;;;38229:41;;;;-1:-1:-1;;;38229:41:0;;13015:2:1;38229:41:0;;;12997:21:1;13054:2;13034:18;;;13027:30;-1:-1:-1;;;13073:18:1;;;13066:50;13133:18;;38229:41:0;12813:344:1;38229:41:0;38762:5:::1;38752:15:::0;;-1:-1:-1;;38752:15:0::1;::::0;;38783:22:::1;38792:12;:10;:12::i;:::-;38783:22;::::0;-1:-1:-1;;;;;9905:32:1;;;9887:51;;9875:2;9860:18;38783:22:0::1;;;;;;;38693:120::o:0;41295:191::-;41369:16;41388:6;;-1:-1:-1;;;;;41405:17:0;;;41388:6;41405:17;;;-1:-1:-1;;;;;;41405:17:0;;;;;41438:40;;41388:6;;;;;;;41405:17;;41388:6;;41438:40;;;41358:128;41295:191;:::o;50000:110::-;50076:26;50086:2;50090:7;50076:26;;;;;;;;;;;;:9;:26::i;38434:118::-;37681:4;37705:7;;;37959:9;37951:38;;;;-1:-1:-1;;;37951:38:0;;;;;;;:::i;:::-;38494:7:::1;:14:::0;;-1:-1:-1;;38494:14:0::1;38504:4;38494:14;::::0;;38524:20:::1;38531:12;:10;:12::i;53314:315::-:0;53469:8;-1:-1:-1;;;;;53460:17:0;:5;-1:-1:-1;;;;;53460:17:0;;;53452:55;;;;-1:-1:-1;;;53452:55:0;;15721:2:1;53452:55:0;;;15703:21:1;15760:2;15740:18;;;15733:30;15799:27;15779:18;;;15772:55;15844:18;;53452:55:0;15519:349:1;53452:55:0;-1:-1:-1;;;;;53518:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;53518:46:0;;;;;;;;;;53580:41;;11308::1;;;53580::0;;11281:18:1;53580:41:0;;;;;;;53314:315;;;:::o;48388:::-;48545:28;48555:4;48561:2;48565:7;48545:9;:28::i;:::-;48592:48;48615:4;48621:2;48625:7;48634:5;48592:22;:48::i;:::-;48584:111;;;;-1:-1:-1;;;48584:111:0;;;;;;;:::i;18495:723::-;18551:13;18772:10;18768:53;;-1:-1:-1;;18799:10:0;;;;;;;;;;;;-1:-1:-1;;;18799:10:0;;;;;18495:723::o;18768:53::-;18846:5;18831:12;18887:78;18894:9;;18887:78;;18920:8;;;;:::i;:::-;;-1:-1:-1;18943:10:0;;-1:-1:-1;18951:2:0;18943:10;;:::i;:::-;;;18887:78;;;18975:19;19007:6;18997:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18997:17:0;;18975:39;;19025:154;19032:10;;19025:154;;19059:11;19069:1;19059:11;;:::i;:::-;;-1:-1:-1;19128:10:0;19136:2;19128:5;:10;:::i;:::-;19115:24;;:2;:24;:::i;:::-;19102:39;;19085:6;19092;19085:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;19085:56:0;;;;;;;;-1:-1:-1;19156:11:0;19165:2;19156:11;;:::i;:::-;;;19025:154;;65225:106;65277:13;65310;65303:20;;;;;:::i;51605:360::-;51665:13;51681:23;51696:7;51681:14;:23::i;:::-;51753:1;70547:17;;;:8;:17;;;;;70567:15;70547:35;;51665:39;-1:-1:-1;51806:29:0;51823:1;51827:7;51806:8;:29::i;:::-;-1:-1:-1;;;;;51848:16:0;;;;;;:9;:16;;;;;:21;;51868:1;;51848:16;:21;;51868:1;;51848:21;:::i;:::-;;;;-1:-1:-1;;51887:16:0;;;;:7;:16;;;;;;51880:23;;-1:-1:-1;;;;;;51880:23:0;;;51921:36;51895:7;;51887:16;-1:-1:-1;;;;;51921:36:0;;;;;51887:16;;51921:36;51654:311;51605:360;:::o;32876:410::-;32986:7;31053:100;;;;;;;;;;;;;;;;;31033:127;;;;;;;33140:12;;33175:11;;;;33219:24;;;;;33209:35;;;;;;33059:204;;;;;11773:25:1;;;11829:2;11814:18;;11807:34;;;;-1:-1:-1;;;;;11877:32:1;11872:2;11857:18;;11850:60;11941:2;11926:18;;11919:34;11760:3;11745:19;;11542:417;33059:204:0;;;;;;;;;;;;;33031:247;;;;;;33011:267;;32876:410;;;:::o;2449:258::-;2548:7;2650:20;1888:15;;;1810:101;2650:20;2621:63;;-1:-1:-1;;;2621:63:0;;;9602:27:1;9645:11;;;9638:27;;;;9681:12;;;9674:28;;;9718:12;;2621:63:0;9344:392:1;57962:73:0;58003:24;:12;35980:19;;35998:1;35980:19;;;35891:127;50337:321;50467:18;50473:2;50477:7;50467:5;:18::i;:::-;50518:54;50549:1;50553:2;50557:7;50566:5;50518:22;:54::i;:::-;50496:154;;;;-1:-1:-1;;;50496:154:0;;;;;;;:::i;54194:799::-;54349:4;-1:-1:-1;;;;;54370:13:0;;21509:20;21557:8;54366:620;;54422:2;-1:-1:-1;;;;;54406:36:0;;54443:12;:10;:12::i;:::-;54457:4;54463:7;54472:5;54406:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54406:72:0;;;;;;;;-1:-1:-1;;54406:72:0;;;;;;;;;;;;:::i;:::-;;;54402:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54648:13:0;;54644:272;;54691:60;;-1:-1:-1;;;54691:60:0;;;;;;;:::i;54644:272::-;54866:6;54860:13;54851:6;54847:2;54843:15;54836:38;54402:529;-1:-1:-1;;;;;;54529:51:0;-1:-1:-1;;;54529:51:0;;-1:-1:-1;54522:58:0;;54366:620;-1:-1:-1;54970:4:0;54194:799;;;;;;:::o;50994:382::-;-1:-1:-1;;;;;51074:16:0;;51066:61;;;;-1:-1:-1;;;51066:61:0;;20146:2:1;51066:61:0;;;20128:21:1;;;20165:18;;;20158:30;20224:34;20204:18;;;20197:62;20276:18;;51066:61:0;19944:356:1;51066:61:0;49081:4;49105:16;;;:7;:16;;;;;;-1:-1:-1;;;;;49105:16:0;:30;51138:58;;;;-1:-1:-1;;;51138:58:0;;14959:2:1;51138:58:0;;;14941:21:1;14998:2;14978:18;;;14971:30;15037;15017:18;;;15010:58;15085:18;;51138:58:0;14757:352:1;51138:58:0;51238:1;70547:17;;;:8;:17;;;;;70567:15;70547:35;;-1:-1:-1;;;;;51267:13:0;;;;;;:9;:13;;;;;:18;;51284:1;;51267:13;:18;;51284:1;;51267:18;:::i;:::-;;;;-1:-1:-1;;51296:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;51296:21:0;-1:-1:-1;;;;;51296:21:0;;;;;;;;51335:33;;51296:16;;;51335:33;;51296:16;;51335:33;50994:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:367::-;713:8;723:6;777:3;770:4;762:6;758:17;754:27;744:55;;795:1;792;785:12;744:55;-1:-1:-1;818:20:1;;861:18;850:30;;847:50;;;893:1;890;883:12;847:50;930:4;922:6;918:17;906:29;;990:3;983:4;973:6;970:1;966:14;958:6;954:27;950:38;947:47;944:67;;;1007:1;1004;997:12;944:67;650:367;;;;;:::o;1022:220::-;1064:5;1117:3;1110:4;1102:6;1098:17;1094:27;1084:55;;1135:1;1132;1125:12;1084:55;1157:79;1232:3;1223:6;1210:20;1203:4;1195:6;1191:17;1157:79;:::i;1247:159::-;1314:20;;1374:6;1363:18;;1353:29;;1343:57;;1396:1;1393;1386:12;1343:57;1247:159;;;:::o;1411:156::-;1477:20;;1537:4;1526:16;;1516:27;;1506:55;;1557:1;1554;1547:12;1572:247;1631:6;1684:2;1672:9;1663:7;1659:23;1655:32;1652:52;;;1700:1;1697;1690:12;1652:52;1739:9;1726:23;1758:31;1783:5;1758:31;:::i;1824:388::-;1892:6;1900;1953:2;1941:9;1932:7;1928:23;1924:32;1921:52;;;1969:1;1966;1959:12;1921:52;2008:9;1995:23;2027:31;2052:5;2027:31;:::i;:::-;2077:5;-1:-1:-1;2134:2:1;2119:18;;2106:32;2147:33;2106:32;2147:33;:::i;:::-;2199:7;2189:17;;;1824:388;;;;;:::o;2217:456::-;2294:6;2302;2310;2363:2;2351:9;2342:7;2338:23;2334:32;2331:52;;;2379:1;2376;2369:12;2331:52;2418:9;2405:23;2437:31;2462:5;2437:31;:::i;:::-;2487:5;-1:-1:-1;2544:2:1;2529:18;;2516:32;2557:33;2516:32;2557:33;:::i;:::-;2217:456;;2609:7;;-1:-1:-1;;;2663:2:1;2648:18;;;;2635:32;;2217:456::o;2678:665::-;2773:6;2781;2789;2797;2850:3;2838:9;2829:7;2825:23;2821:33;2818:53;;;2867:1;2864;2857:12;2818:53;2906:9;2893:23;2925:31;2950:5;2925:31;:::i;:::-;2975:5;-1:-1:-1;3032:2:1;3017:18;;3004:32;3045:33;3004:32;3045:33;:::i;:::-;3097:7;-1:-1:-1;3151:2:1;3136:18;;3123:32;;-1:-1:-1;3206:2:1;3191:18;;3178:32;3233:18;3222:30;;3219:50;;;3265:1;3262;3255:12;3219:50;3288:49;3329:7;3320:6;3309:9;3305:22;3288:49;:::i;:::-;3278:59;;;2678:665;;;;;;;:::o;3348:416::-;3413:6;3421;3474:2;3462:9;3453:7;3449:23;3445:32;3442:52;;;3490:1;3487;3480:12;3442:52;3529:9;3516:23;3548:31;3573:5;3548:31;:::i;:::-;3598:5;-1:-1:-1;3655:2:1;3640:18;;3627:32;3697:15;;3690:23;3678:36;;3668:64;;3728:1;3725;3718:12;3769:663;3871:6;3879;3887;3895;3903;3956:3;3944:9;3935:7;3931:23;3927:33;3924:53;;;3973:1;3970;3963:12;3924:53;4012:9;3999:23;4031:31;4056:5;4031:31;:::i;:::-;4081:5;-1:-1:-1;4137:2:1;4122:18;;4109:32;4164:18;4153:30;;4150:50;;;4196:1;4193;4186:12;4150:50;4219:49;4260:7;4251:6;4240:9;4236:22;4219:49;:::i;:::-;4209:59;;;4315:2;4304:9;4300:18;4287:32;4277:42;;4366:2;4355:9;4351:18;4338:32;4328:42;;4389:37;4421:3;4410:9;4406:19;4389:37;:::i;:::-;4379:47;;3769:663;;;;;;;;:::o;4437:319::-;4504:6;4512;4565:2;4553:9;4544:7;4540:23;4536:32;4533:52;;;4581:1;4578;4571:12;4533:52;4620:9;4607:23;4639:31;4664:5;4639:31;:::i;:::-;4689:5;-1:-1:-1;4713:37:1;4746:2;4731:18;;4713:37;:::i;:::-;4703:47;;4437:319;;;;;:::o;4761:315::-;4829:6;4837;4890:2;4878:9;4869:7;4865:23;4861:32;4858:52;;;4906:1;4903;4896:12;4858:52;4945:9;4932:23;4964:31;4989:5;4964:31;:::i;:::-;5014:5;5066:2;5051:18;;;;5038:32;;-1:-1:-1;;;4761:315:1:o;5081:437::-;5167:6;5175;5228:2;5216:9;5207:7;5203:23;5199:32;5196:52;;;5244:1;5241;5234:12;5196:52;5284:9;5271:23;5317:18;5309:6;5306:30;5303:50;;;5349:1;5346;5339:12;5303:50;5388:70;5450:7;5441:6;5430:9;5426:22;5388:70;:::i;:::-;5477:8;;5362:96;;-1:-1:-1;5081:437:1;-1:-1:-1;;;;5081:437:1:o;5523:507::-;5616:6;5624;5632;5685:2;5673:9;5664:7;5660:23;5656:32;5653:52;;;5701:1;5698;5691:12;5653:52;5741:9;5728:23;5774:18;5766:6;5763:30;5760:50;;;5806:1;5803;5796:12;5760:50;5845:70;5907:7;5898:6;5887:9;5883:22;5845:70;:::i;:::-;5934:8;;-1:-1:-1;5819:96:1;-1:-1:-1;5988:36:1;;-1:-1:-1;6020:2:1;6005:18;;5988:36;:::i;:::-;5978:46;;5523:507;;;;;:::o;6035:245::-;6093:6;6146:2;6134:9;6125:7;6121:23;6117:32;6114:52;;;6162:1;6159;6152:12;6114:52;6201:9;6188:23;6220:30;6244:5;6220:30;:::i;6285:249::-;6354:6;6407:2;6395:9;6386:7;6382:23;6378:32;6375:52;;;6423:1;6420;6413:12;6375:52;6455:9;6449:16;6474:30;6498:5;6474:30;:::i;6539:280::-;6638:6;6691:2;6679:9;6670:7;6666:23;6662:32;6659:52;;;6707:1;6704;6697:12;6659:52;6739:9;6733:16;6758:31;6783:5;6758:31;:::i;6824:450::-;6893:6;6946:2;6934:9;6925:7;6921:23;6917:32;6914:52;;;6962:1;6959;6952:12;6914:52;7002:9;6989:23;7035:18;7027:6;7024:30;7021:50;;;7067:1;7064;7057:12;7021:50;7090:22;;7143:4;7135:13;;7131:27;-1:-1:-1;7121:55:1;;7172:1;7169;7162:12;7121:55;7195:73;7260:7;7255:2;7242:16;7237:2;7233;7229:11;7195:73;:::i;7279:252::-;7346:6;7354;7407:2;7395:9;7386:7;7382:23;7378:32;7375:52;;;7423:1;7420;7413:12;7375:52;7446:28;7464:9;7446:28;:::i;7536:180::-;7595:6;7648:2;7636:9;7627:7;7623:23;7619:32;7616:52;;;7664:1;7661;7654:12;7616:52;-1:-1:-1;7687:23:1;;7536:180;-1:-1:-1;7536:180:1:o;7721:182::-;7778:6;7831:2;7819:9;7810:7;7806:23;7802:32;7799:52;;;7847:1;7844;7837:12;7799:52;7870:27;7887:9;7870:27;:::i;7908:257::-;7949:3;7987:5;7981:12;8014:6;8009:3;8002:19;8030:63;8086:6;8079:4;8074:3;8070:14;8063:4;8056:5;8052:16;8030:63;:::i;:::-;8147:2;8126:15;-1:-1:-1;;8122:29:1;8113:39;;;;8154:4;8109:50;;7908:257;-1:-1:-1;;7908:257:1:o;8170:274::-;8299:3;8337:6;8331:13;8353:53;8399:6;8394:3;8387:4;8379:6;8375:17;8353:53;:::i;:::-;8422:16;;;;;8170:274;-1:-1:-1;;8170:274:1:o;8449:415::-;8606:3;8644:6;8638:13;8660:53;8706:6;8701:3;8694:4;8686:6;8682:17;8660:53;:::i;:::-;8782:2;8778:15;;;;-1:-1:-1;;8774:53:1;8735:16;;;;8760:68;;;8855:2;8844:14;;8449:415;-1:-1:-1;;8449:415:1:o;8869:470::-;9048:3;9086:6;9080:13;9102:53;9148:6;9143:3;9136:4;9128:6;9124:17;9102:53;:::i;:::-;9218:13;;9177:16;;;;9240:57;9218:13;9177:16;9274:4;9262:17;;9240:57;:::i;:::-;9313:20;;8869:470;-1:-1:-1;;;;8869:470:1:o;9949:431::-;-1:-1:-1;;;;;10206:15:1;;;10188:34;;10258:15;;10253:2;10238:18;;10231:43;10310:2;10305;10290:18;;10283:30;;;10131:4;;10330:44;;10355:18;;10347:6;10330:44;:::i;:::-;10322:52;9949:431;-1:-1:-1;;;;;9949:431:1:o;10385:488::-;-1:-1:-1;;;;;10654:15:1;;;10636:34;;10706:15;;10701:2;10686:18;;10679:43;10753:2;10738:18;;10731:34;;;10801:3;10796:2;10781:18;;10774:31;;;10579:4;;10822:45;;10847:19;;10839:6;10822:45;:::i;:::-;10814:53;10385:488;-1:-1:-1;;;;;;10385:488:1:o;12367:217::-;12514:2;12503:9;12496:21;12477:4;12534:44;12574:2;12563:9;12559:18;12551:6;12534:44;:::i;13574:414::-;13776:2;13758:21;;;13815:2;13795:18;;;13788:30;13854:34;13849:2;13834:18;;13827:62;-1:-1:-1;;;13920:2:1;13905:18;;13898:48;13978:3;13963:19;;13574:414::o;17102:340::-;17304:2;17286:21;;;17343:2;17323:18;;;17316:30;-1:-1:-1;;;17377:2:1;17362:18;;17355:46;17433:2;17418:18;;17102:340::o;21554:356::-;21756:2;21738:21;;;21775:18;;;21768:30;21834:34;21829:2;21814:18;;21807:62;21901:2;21886:18;;21554:356::o;24365:406::-;24567:2;24549:21;;;24606:2;24586:18;;;24579:30;24645:34;24640:2;24625:18;;24618:62;-1:-1:-1;;;24711:2:1;24696:18;;24689:40;24761:3;24746:19;;24365:406::o;24776:413::-;24978:2;24960:21;;;25017:2;24997:18;;;24990:30;25056:34;25051:2;25036:18;;25029:62;-1:-1:-1;;;25122:2:1;25107:18;;25100:47;25179:3;25164:19;;24776:413::o;26175:224::-;26214:3;26242:6;26275:2;26272:1;26268:10;26305:2;26302:1;26298:10;26336:3;26332:2;26328:12;26323:3;26320:21;26317:47;;;26344:18;;:::i;26404:128::-;26444:3;26475:1;26471:6;26468:1;26465:13;26462:39;;;26481:18;;:::i;:::-;-1:-1:-1;26517:9:1;;26404:128::o;26537:120::-;26577:1;26603;26593:35;;26608:18;;:::i;:::-;-1:-1:-1;26642:9:1;;26537:120::o;26662:168::-;26702:7;26768:1;26764;26760:6;26756:14;26753:1;26750:21;26745:1;26738:9;26731:17;26727:45;26724:71;;;26775:18;;:::i;:::-;-1:-1:-1;26815:9:1;;26662:168::o;26835:125::-;26875:4;26903:1;26900;26897:8;26894:34;;;26908:18;;:::i;:::-;-1:-1:-1;26945:9:1;;26835:125::o;26965:258::-;27037:1;27047:113;27061:6;27058:1;27055:13;27047:113;;;27137:11;;;27131:18;27118:11;;;27111:39;27083:2;27076:10;27047:113;;;27178:6;27175:1;27172:13;27169:48;;;-1:-1:-1;;27213:1:1;27195:16;;27188:27;26965:258::o;27228:380::-;27307:1;27303:12;;;;27350;;;27371:61;;27425:4;27417:6;27413:17;27403:27;;27371:61;27478:2;27470:6;27467:14;27447:18;27444:38;27441:161;;;27524:10;27519:3;27515:20;27512:1;27505:31;27559:4;27556:1;27549:15;27587:4;27584:1;27577:15;27441:161;;27228:380;;;:::o;27613:135::-;27652:3;-1:-1:-1;;27673:17:1;;27670:43;;;27693:18;;:::i;:::-;-1:-1:-1;27740:1:1;27729:13;;27613:135::o;27753:112::-;27785:1;27811;27801:35;;27816:18;;:::i;:::-;-1:-1:-1;27850:9:1;;27753:112::o;27870:127::-;27931:10;27926:3;27922:20;27919:1;27912:31;27962:4;27959:1;27952:15;27986:4;27983:1;27976:15;28002:127;28063:10;28058:3;28054:20;28051:1;28044:31;28094:4;28091:1;28084:15;28118:4;28115:1;28108:15;28134:127;28195:10;28190:3;28186:20;28183:1;28176:31;28226:4;28223:1;28216:15;28250:4;28247:1;28240:15;28266:127;28327:10;28322:3;28318:20;28315:1;28308:31;28358:4;28355:1;28348:15;28382:4;28379:1;28372:15;28398:131;-1:-1:-1;;;;;28473:31:1;;28463:42;;28453:70;;28519:1;28516;28509:12;28534:131;-1:-1:-1;;;;;;28608:32:1;;28598:43;;28588:71;;28655:1;28652;28645:12

Swarm Source

ipfs://77b41af2f73997525a8029d37c891046f23f76d1648c57e1f622e73217d9f504
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.