ETH Price: $3,425.59 (+3.17%)

Token

TheFatedRenegades (FATE)
 

Overview

Max Total Supply

2,400 FATE

Holders

554

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
snuggster.eth
Balance
30 FATE
0x483b613641720bdd7848f4d90a01883141b753db
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:
TheFatedRenegadesNFT

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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);
            }
        }
    }
}

// OpenZeppelin Contracts v4.4.0 (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;
    }
}

// OpenZeppelin Contracts v4.4.0 (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;
    }
}

// OpenZeppelin Contracts v4.4.0 (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);
}

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

pragma solidity ^0.8.0;

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

// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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


// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (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;
        }
    }
}

// OpenZeppelin Contracts v4.4.0 (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);
    }
}

// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _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 {}
}

pragma solidity ^0.8.10;

/*
█▀▄▀█ █▀█ █▀█ █▄░█ █▀   █▀█ █▀▀   █▀▄▀█ ▄▀█ █▀█ █▀
█░▀░█ █▄█ █▄█ █░▀█ ▄█   █▄█ █▀░   █░▀░█ █▀█ █▀▄ ▄█
*/

contract TheFatedRenegadesNFT is ERC721, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;
    using Counters for Counters.Counter;

    uint256 public constant TICKET_PRICE = 50000000000000000; //0.05 ETH

    uint256 public constant MAX_TICKET_PER_MINT = 8;

    uint256 public constant MAX_TICKET_PER_WALLET = 24;

    uint256 public startingIndexBlock;

    uint256 public startingIndex;

    uint256 public maxTicketSupply;

    uint256 public revealTimestamp;

    bool public saleIsActive = false;

    string public provenanceHash = "";

    Counters.Counter private _tokenIdCounter;

    string private _baseTokenURI;

    constructor(
        string memory name,
        string memory symbol,
        uint256 maxNftSupply,
        uint256 saleStart
    ) ERC721(name, symbol) {
        maxTicketSupply = maxNftSupply;
        revealTimestamp = saleStart;
    }

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

    function reserveTickets(uint256 reserveAmount) public onlyOwner {
        require(
            _tokenIdCounter.current().add(reserveAmount) <= maxTicketSupply,
            "Reserve would exceed max supply of tickets"
        );

        for (uint256 i = 0; i < reserveAmount; i++) {
            _safeMint(msg.sender, _tokenIdCounter.current());
            _tokenIdCounter.increment();
        }
    }

    function setRevealTimestamp(uint256 revealTimeStamp) public onlyOwner {
        revealTimestamp = revealTimeStamp;
    }

    function setProvenanceHash(string memory _provenanceHash) public onlyOwner {
        provenanceHash = _provenanceHash;
    }

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

    function flipSaleState() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function emergencySetStartingIndexBlock() public onlyOwner {
        require(startingIndex == 0, "Starting index is already set");

        startingIndexBlock = block.number;
    }

    function mintTicket(uint256 numberOfTokens) public payable {
        require(saleIsActive, "Sale must be active to mint");
        require(numberOfTokens > 0, "Must mint at least one ticket");
        require(
            _tokenIdCounter.current().add(numberOfTokens) <= maxTicketSupply,
            "Purchase would exceed max supply of tickets"
        );
        require(
            numberOfTokens <= MAX_TICKET_PER_MINT,
            "Requested number exceeds the maximum (8 per transaction)"
        );
        require(
            TICKET_PRICE.mul(numberOfTokens) <= msg.value,
            "Ether value sent is not correct"
        );

        uint256 _balance = balanceOf(msg.sender);
        require(
            _balance.add(numberOfTokens) <= MAX_TICKET_PER_WALLET,
            "Purchase exceed max of overall tokens per wallet (24)"
        );

        for (uint256 i = 0; i < numberOfTokens; i++) {
            uint256 mintIndex = _tokenIdCounter.current();

            _safeMint(msg.sender, mintIndex);
            _tokenIdCounter.increment();
        }

        // If we haven't set the starting index and this is either
        // 1) the last saleable token or 2) the first token to be sold after
        // the end of pre-sale, set the starting index block
        if (
            startingIndexBlock == 0 &&
            (_tokenIdCounter.current() == maxTicketSupply ||
                block.timestamp >= revealTimestamp)
        ) {
            startingIndexBlock = block.number;
        }
    }

    function setStartingIndex() public {
        require(startingIndex == 0, "Starting index is already set");
        require(startingIndexBlock != 0, "Starting index block must be set");

        startingIndex =
            uint256(blockhash(startingIndexBlock)) %
            maxTicketSupply;

        // Just a sanity case in the worst case if this function is called late
        //(EVM only stores last 256 block hashes)
        if (block.number.sub(startingIndexBlock) > 255) {
            startingIndex =
                uint256(blockhash(block.number - 1)) %
                maxTicketSupply;
        }
        // Prevent default sequence
        if (startingIndex == 0) {
            startingIndex = startingIndex.add(1);
        }
    }

    function getStartingIndex() public view returns (uint256) {
        return startingIndex;
    }

    function tokensMinted() public view returns (uint256) {
        return _tokenIdCounter.current();
    }

    function totalSupply() public view returns (uint256) {
        return maxTicketSupply;
    }

    function getTicketsByOnwer(address _owner)
        external
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) {
            return new uint256[](0);
        } else {
            uint256[] memory tokenList = new uint256[](tokenCount);
            uint256 totalTickets = _tokenIdCounter.current();
            uint256 index;
            uint256 j = 0;
            for (index = 0; index < totalTickets; index++) {
                if (_owner == ownerOf(index)) {
                    tokenList[j] = index;
                    j++;
                }
            }
            return tokenList;
        }
    }

    function getListOfOwners() external view returns (address[] memory) {
        uint256 totalTickets = _tokenIdCounter.current();

        if (totalTickets == 0) {
            return new address[](0);
        }

        address[] memory ownerList = new address[](totalTickets);

        for (uint256 i = 0; i < totalTickets; i++) {
            ownerList[i] = ownerOf(i);
        }

        return ownerList;
    }

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

        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(abi.encodePacked(currentBaseURI, tokenId.toString()))
                : "https://bafybeidiwwne7pkqbifjfyrynzmemkk5dpuf3yyylf7vj6j4iixwraomje.ipfs.infura-ipfs.io/";
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxNftSupply","type":"uint256"},{"internalType":"uint256","name":"saleStart","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_TICKET_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TICKET_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TICKET_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencySetStartingIndexBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getListOfOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStartingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTicketsByOnwer","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTicketSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintTicket","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"name":"reserveTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"string","name":"_provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"revealTimeStamp","type":"uint256"}],"name":"setRevealTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600b60006101000a81548160ff02191690831515021790555060405180602001604052806000815250600c908051906020019062000046929190620001b6565b503480156200005457600080fd5b5060405162004b1338038062004b1383398181016040528101906200007a91906200043e565b8383816000908051906020019062000094929190620001b6565b508060019080519060200190620000ad929190620001b6565b505050620000d0620000c4620000e860201b60201c565b620000f060201b60201c565b8160098190555080600a819055505050505062000553565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001c4906200051d565b90600052602060002090601f016020900481019282620001e8576000855562000234565b82601f106200020357805160ff191683800117855562000234565b8280016001018555821562000234579182015b828111156200023357825182559160200191906001019062000216565b5b50905062000243919062000247565b5090565b5b808211156200026257600081600090555060010162000248565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002cf8262000284565b810181811067ffffffffffffffff82111715620002f157620002f062000295565b5b80604052505050565b60006200030662000266565b9050620003148282620002c4565b919050565b600067ffffffffffffffff82111562000337576200033662000295565b5b620003428262000284565b9050602081019050919050565b60005b838110156200036f57808201518184015260208101905062000352565b838111156200037f576000848401525b50505050565b60006200039c620003968462000319565b620002fa565b905082815260208101848484011115620003bb57620003ba6200027f565b5b620003c88482856200034f565b509392505050565b600082601f830112620003e857620003e76200027a565b5b8151620003fa84826020860162000385565b91505092915050565b6000819050919050565b620004188162000403565b81146200042457600080fd5b50565b60008151905062000438816200040d565b92915050565b600080600080608085870312156200045b576200045a62000270565b5b600085015167ffffffffffffffff8111156200047c576200047b62000275565b5b6200048a87828801620003d0565b945050602085015167ffffffffffffffff811115620004ae57620004ad62000275565b5b620004bc87828801620003d0565b9350506040620004cf8782880162000427565b9250506060620004e28782880162000427565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200053657607f821691505b602082108114156200054d576200054c620004ee565b5b50919050565b6145b080620005636000396000f3fe6080604052600436106102305760003560e01c8063715018a61161012e578063cc221a46116100ab578063e98665501161006f578063e9866550146107f8578063eb8d24441461080f578063f2fde38b1461083a578063f3a2d79514610863578063f62f3c111461088e57610230565b8063cc221a4614610711578063d42b7afd1461073c578063dab474b714610765578063e36d649814610790578063e985e9c5146107bb57610230565b8063b88d4fde116100f2578063b88d4fde1461062a578063b910588e14610653578063c6ab67a31461067e578063c87b56dd146106a9578063cb774d47146106e657610230565b8063715018a61461057d5780637d17fcbe146105945780638da5cb5b146105ab57806395d89b41146105d6578063a22cb4651461060157610230565b806323b872dd116101bc57806342842e0e1161018057806342842e0e1461048657806355f804b3146104af5780636352211e146104d85780636de9f32b1461051557806370a082311461054057610230565b806323b872dd146103d6578063256d52f6146103ff57806327becf541461041b57806334918dfd146104585780633ccfd60b1461046f57610230565b8063095ea7b311610203578063095ea7b314610303578063109695231461032c57806314c203d01461035557806318160ddd146103805780631a95f15f146103ab57610230565b8063018a2c371461023557806301ffc9a71461025e57806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190612c53565b6108b9565b005b34801561026a57600080fd5b5061028560048036038101906102809190612cd8565b61093f565b6040516102929190612d20565b60405180910390f35b3480156102a757600080fd5b506102b0610a21565b6040516102bd9190612dd4565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190612c53565b610ab3565b6040516102fa9190612e37565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190612e7e565b610b38565b005b34801561033857600080fd5b50610353600480360381019061034e9190612ff3565b610c50565b005b34801561036157600080fd5b5061036a610ce6565b604051610377919061304b565b60405180910390f35b34801561038c57600080fd5b50610395610cec565b6040516103a2919061304b565b60405180910390f35b3480156103b757600080fd5b506103c0610cf6565b6040516103cd919061304b565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613066565b610d01565b005b61041960048036038101906104149190612c53565b610d61565b005b34801561042757600080fd5b50610442600480360381019061043d91906130b9565b610fd2565b60405161044f91906131a4565b60405180910390f35b34801561046457600080fd5b5061046d611137565b005b34801561047b57600080fd5b506104846111df565b005b34801561049257600080fd5b506104ad60048036038101906104a89190613066565b6112aa565b005b3480156104bb57600080fd5b506104d660048036038101906104d19190612ff3565b6112ca565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190612c53565b611360565b60405161050c9190612e37565b60405180910390f35b34801561052157600080fd5b5061052a611412565b604051610537919061304b565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906130b9565b611423565b604051610574919061304b565b60405180910390f35b34801561058957600080fd5b506105926114db565b005b3480156105a057600080fd5b506105a9611563565b005b3480156105b757600080fd5b506105c061162d565b6040516105cd9190612e37565b60405180910390f35b3480156105e257600080fd5b506105eb611657565b6040516105f89190612dd4565b60405180910390f35b34801561060d57600080fd5b50610628600480360381019061062391906131f2565b6116e9565b005b34801561063657600080fd5b50610651600480360381019061064c91906132d3565b6116ff565b005b34801561065f57600080fd5b50610668611761565b604051610675919061304b565b60405180910390f35b34801561068a57600080fd5b50610693611766565b6040516106a09190612dd4565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190612c53565b6117f4565b6040516106dd9190612dd4565b60405180910390f35b3480156106f257600080fd5b506106fb6118a4565b604051610708919061304b565b60405180910390f35b34801561071d57600080fd5b506107266118aa565b604051610733919061304b565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190612c53565b6118b4565b005b34801561077157600080fd5b5061077a6119cf565b6040516107879190613414565b60405180910390f35b34801561079c57600080fd5b506107a5611b05565b6040516107b2919061304b565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190613436565b611b0b565b6040516107ef9190612d20565b60405180910390f35b34801561080457600080fd5b5061080d611b9f565b005b34801561081b57600080fd5b50610824611cb0565b6040516108319190612d20565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c91906130b9565b611cc3565b005b34801561086f57600080fd5b50610878611dbb565b604051610885919061304b565b60405180910390f35b34801561089a57600080fd5b506108a3611dc0565b6040516108b0919061304b565b60405180910390f35b6108c1611dc6565b73ffffffffffffffffffffffffffffffffffffffff166108df61162d565b73ffffffffffffffffffffffffffffffffffffffff1614610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c906134c2565b60405180910390fd5b80600a8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1a5750610a1982611dce565b5b9050919050565b606060008054610a3090613511565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5c90613511565b8015610aa95780601f10610a7e57610100808354040283529160200191610aa9565b820191906000526020600020905b815481529060010190602001808311610a8c57829003601f168201915b5050505050905090565b6000610abe82611e38565b610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af4906135b5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4382611360565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab90613647565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd3611dc6565b73ffffffffffffffffffffffffffffffffffffffff161480610c025750610c0181610bfc611dc6565b611b0b565b5b610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c38906136d9565b60405180910390fd5b610c4b8383611ea4565b505050565b610c58611dc6565b73ffffffffffffffffffffffffffffffffffffffff16610c7661162d565b73ffffffffffffffffffffffffffffffffffffffff1614610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906134c2565b60405180910390fd5b80600c9080519060200190610ce2929190612b66565b5050565b60095481565b6000600954905090565b66b1a2bc2ec5000081565b610d12610d0c611dc6565b82611f5d565b610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d489061376b565b60405180910390fd5b610d5c83838361203b565b505050565b600b60009054906101000a900460ff16610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da7906137d7565b60405180910390fd5b60008111610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613843565b60405180910390fd5b600954610e1282610e04600d612297565b6122a590919063ffffffff16565b1115610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a906138d5565b60405180910390fd5b6008811115610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90613967565b60405180910390fd5b34610eb28266b1a2bc2ec500006122bb90919063ffffffff16565b1115610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea906139d3565b60405180910390fd5b6000610efe33611423565b90506018610f1583836122a590919063ffffffff16565b1115610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d90613a65565b60405180910390fd5b60005b82811015610f97576000610f6d600d612297565b9050610f7933826122d1565b610f83600d6122ef565b508080610f8f90613ab4565b915050610f59565b506000600754148015610fc15750600954610fb2600d612297565b1480610fc05750600a544210155b5b15610fce57436007819055505b5050565b60606000610fdf83611423565b9050600081141561103c57600067ffffffffffffffff81111561100557611004612ec8565b5b6040519080825280602002602001820160405280156110335781602001602082028036833780820191505090505b50915050611132565b60008167ffffffffffffffff81111561105857611057612ec8565b5b6040519080825280602002602001820160405280156110865781602001602082028036833780820191505090505b5090506000611095600d612297565b905060008060009050600091505b82821015611129576110b482611360565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561111657818482815181106110fb576110fa613afd565b5b602002602001018181525050808061111290613ab4565b9150505b818061112190613ab4565b9250506110a3565b83955050505050505b919050565b61113f611dc6565b73ffffffffffffffffffffffffffffffffffffffff1661115d61162d565b73ffffffffffffffffffffffffffffffffffffffff16146111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa906134c2565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b6111e7611dc6565b73ffffffffffffffffffffffffffffffffffffffff1661120561162d565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611252906134c2565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112a6573d6000803e3d6000fd5b5050565b6112c5838383604051806020016040528060008152506116ff565b505050565b6112d2611dc6565b73ffffffffffffffffffffffffffffffffffffffff166112f061162d565b73ffffffffffffffffffffffffffffffffffffffff1614611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d906134c2565b60405180910390fd5b80600e908051906020019061135c929190612b66565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090613b9e565b60405180910390fd5b80915050919050565b600061141e600d612297565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613c30565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e3611dc6565b73ffffffffffffffffffffffffffffffffffffffff1661150161162d565b73ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e906134c2565b60405180910390fd5b6115616000612305565b565b61156b611dc6565b73ffffffffffffffffffffffffffffffffffffffff1661158961162d565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d6906134c2565b60405180910390fd5b600060085414611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90613c9c565b60405180910390fd5b43600781905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461166690613511565b80601f016020809104026020016040519081016040528092919081815260200182805461169290613511565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b5050505050905090565b6116fb6116f4611dc6565b83836123cb565b5050565b61171061170a611dc6565b83611f5d565b61174f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117469061376b565b60405180910390fd5b61175b84848484612538565b50505050565b600881565b600c805461177390613511565b80601f016020809104026020016040519081016040528092919081815260200182805461179f90613511565b80156117ec5780601f106117c1576101008083540402835291602001916117ec565b820191906000526020600020905b8154815290600101906020018083116117cf57829003601f168201915b505050505081565b60606117ff82611e38565b61183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590613d2e565b60405180910390fd5b6000611848612594565b90506000815111611871576040518060800160405280605881526020016145236058913961189c565b8061187b84612626565b60405160200161188c929190613d8a565b6040516020818303038152906040525b915050919050565b60085481565b6000600854905090565b6118bc611dc6565b73ffffffffffffffffffffffffffffffffffffffff166118da61162d565b73ffffffffffffffffffffffffffffffffffffffff1614611930576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611927906134c2565b60405180910390fd5b60095461194f82611941600d612297565b6122a590919063ffffffff16565b1115611990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198790613e20565b60405180910390fd5b60005b818110156119cb576119ae336119a9600d612297565b6122d1565b6119b8600d6122ef565b80806119c390613ab4565b915050611993565b5050565b606060006119dd600d612297565b90506000811415611a3a57600067ffffffffffffffff811115611a0357611a02612ec8565b5b604051908082528060200260200182016040528015611a315781602001602082028036833780820191505090505b50915050611b02565b60008167ffffffffffffffff811115611a5657611a55612ec8565b5b604051908082528060200260200182016040528015611a845781602001602082028036833780820191505090505b50905060005b82811015611afb57611a9b81611360565b828281518110611aae57611aad613afd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080611af390613ab4565b915050611a8a565b5080925050505b90565b60075481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060085414611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613c9c565b60405180910390fd5b60006007541415611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613e8c565b60405180910390fd5b6009546007544060001c611c3e9190613edb565b60088190555060ff611c5b6007544361278790919063ffffffff16565b1115611c8657600954600143611c719190613f0c565b4060001c611c7f9190613edb565b6008819055505b60006008541415611cae57611ca760016008546122a590919063ffffffff16565b6008819055505b565b600b60009054906101000a900460ff1681565b611ccb611dc6565b73ffffffffffffffffffffffffffffffffffffffff16611ce961162d565b73ffffffffffffffffffffffffffffffffffffffff1614611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906134c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690613fb2565b60405180910390fd5b611db881612305565b50565b601881565b600a5481565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f1783611360565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f6882611e38565b611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e90614044565b60405180910390fd5b6000611fb283611360565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061202157508373ffffffffffffffffffffffffffffffffffffffff1661200984610ab3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061203257506120318185611b0b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661205b82611360565b73ffffffffffffffffffffffffffffffffffffffff16146120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a8906140d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211890614168565b60405180910390fd5b61212c83838361279d565b612137600082611ea4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121879190613f0c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121de9190614188565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b600081836122b39190614188565b905092915050565b600081836122c991906141de565b905092915050565b6122eb8282604051806020016040528060008152506127a2565b5050565b6001816000016000828254019250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561243a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243190614284565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161252b9190612d20565b60405180910390a3505050565b61254384848461203b565b61254f848484846127fd565b61258e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258590614316565b60405180910390fd5b50505050565b6060600e80546125a390613511565b80601f01602080910402602001604051908101604052809291908181526020018280546125cf90613511565b801561261c5780601f106125f15761010080835404028352916020019161261c565b820191906000526020600020905b8154815290600101906020018083116125ff57829003601f168201915b5050505050905090565b6060600082141561266e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612782565b600082905060005b600082146126a057808061268990613ab4565b915050600a826126999190614336565b9150612676565b60008167ffffffffffffffff8111156126bc576126bb612ec8565b5b6040519080825280601f01601f1916602001820160405280156126ee5781602001600182028036833780820191505090505b5090505b6000851461277b576001826127079190613f0c565b9150600a856127169190613edb565b60306127229190614188565b60f81b81838151811061273857612737613afd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127749190614336565b94506126f2565b8093505050505b919050565b600081836127959190613f0c565b905092915050565b505050565b6127ac8383612985565b6127b960008484846127fd565b6127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90614316565b60405180910390fd5b505050565b600061281e8473ffffffffffffffffffffffffffffffffffffffff16612b53565b15612978578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612847611dc6565b8786866040518563ffffffff1660e01b815260040161286994939291906143bc565b6020604051808303816000875af19250505080156128a557506040513d601f19601f820116820180604052508101906128a2919061441d565b60015b612928573d80600081146128d5576040519150601f19603f3d011682016040523d82523d6000602084013e6128da565b606091505b50600081511415612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790614316565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061297d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614496565b60405180910390fd5b6129fe81611e38565b15612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3590614502565b60405180910390fd5b612a4a6000838361279d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9a9190614188565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b7290613511565b90600052602060002090601f016020900481019282612b945760008555612bdb565b82601f10612bad57805160ff1916838001178555612bdb565b82800160010185558215612bdb579182015b82811115612bda578251825591602001919060010190612bbf565b5b509050612be89190612bec565b5090565b5b80821115612c05576000816000905550600101612bed565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612c3081612c1d565b8114612c3b57600080fd5b50565b600081359050612c4d81612c27565b92915050565b600060208284031215612c6957612c68612c13565b5b6000612c7784828501612c3e565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cb581612c80565b8114612cc057600080fd5b50565b600081359050612cd281612cac565b92915050565b600060208284031215612cee57612ced612c13565b5b6000612cfc84828501612cc3565b91505092915050565b60008115159050919050565b612d1a81612d05565b82525050565b6000602082019050612d356000830184612d11565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d75578082015181840152602081019050612d5a565b83811115612d84576000848401525b50505050565b6000601f19601f8301169050919050565b6000612da682612d3b565b612db08185612d46565b9350612dc0818560208601612d57565b612dc981612d8a565b840191505092915050565b60006020820190508181036000830152612dee8184612d9b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e2182612df6565b9050919050565b612e3181612e16565b82525050565b6000602082019050612e4c6000830184612e28565b92915050565b612e5b81612e16565b8114612e6657600080fd5b50565b600081359050612e7881612e52565b92915050565b60008060408385031215612e9557612e94612c13565b5b6000612ea385828601612e69565b9250506020612eb485828601612c3e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f0082612d8a565b810181811067ffffffffffffffff82111715612f1f57612f1e612ec8565b5b80604052505050565b6000612f32612c09565b9050612f3e8282612ef7565b919050565b600067ffffffffffffffff821115612f5e57612f5d612ec8565b5b612f6782612d8a565b9050602081019050919050565b82818337600083830152505050565b6000612f96612f9184612f43565b612f28565b905082815260208101848484011115612fb257612fb1612ec3565b5b612fbd848285612f74565b509392505050565b600082601f830112612fda57612fd9612ebe565b5b8135612fea848260208601612f83565b91505092915050565b60006020828403121561300957613008612c13565b5b600082013567ffffffffffffffff81111561302757613026612c18565b5b61303384828501612fc5565b91505092915050565b61304581612c1d565b82525050565b6000602082019050613060600083018461303c565b92915050565b60008060006060848603121561307f5761307e612c13565b5b600061308d86828701612e69565b935050602061309e86828701612e69565b92505060406130af86828701612c3e565b9150509250925092565b6000602082840312156130cf576130ce612c13565b5b60006130dd84828501612e69565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61311b81612c1d565b82525050565b600061312d8383613112565b60208301905092915050565b6000602082019050919050565b6000613151826130e6565b61315b81856130f1565b935061316683613102565b8060005b8381101561319757815161317e8882613121565b975061318983613139565b92505060018101905061316a565b5085935050505092915050565b600060208201905081810360008301526131be8184613146565b905092915050565b6131cf81612d05565b81146131da57600080fd5b50565b6000813590506131ec816131c6565b92915050565b6000806040838503121561320957613208612c13565b5b600061321785828601612e69565b9250506020613228858286016131dd565b9150509250929050565b600067ffffffffffffffff82111561324d5761324c612ec8565b5b61325682612d8a565b9050602081019050919050565b600061327661327184613232565b612f28565b90508281526020810184848401111561329257613291612ec3565b5b61329d848285612f74565b509392505050565b600082601f8301126132ba576132b9612ebe565b5b81356132ca848260208601613263565b91505092915050565b600080600080608085870312156132ed576132ec612c13565b5b60006132fb87828801612e69565b945050602061330c87828801612e69565b935050604061331d87828801612c3e565b925050606085013567ffffffffffffffff81111561333e5761333d612c18565b5b61334a878288016132a5565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61338b81612e16565b82525050565b600061339d8383613382565b60208301905092915050565b6000602082019050919050565b60006133c182613356565b6133cb8185613361565b93506133d683613372565b8060005b838110156134075781516133ee8882613391565b97506133f9836133a9565b9250506001810190506133da565b5085935050505092915050565b6000602082019050818103600083015261342e81846133b6565b905092915050565b6000806040838503121561344d5761344c612c13565b5b600061345b85828601612e69565b925050602061346c85828601612e69565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134ac602083612d46565b91506134b782613476565b602082019050919050565b600060208201905081810360008301526134db8161349f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061352957607f821691505b6020821081141561353d5761353c6134e2565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061359f602c83612d46565b91506135aa82613543565b604082019050919050565b600060208201905081810360008301526135ce81613592565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613631602183612d46565b915061363c826135d5565b604082019050919050565b6000602082019050818103600083015261366081613624565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006136c3603883612d46565b91506136ce82613667565b604082019050919050565b600060208201905081810360008301526136f2816136b6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613755603183612d46565b9150613760826136f9565b604082019050919050565b6000602082019050818103600083015261378481613748565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b60006137c1601b83612d46565b91506137cc8261378b565b602082019050919050565b600060208201905081810360008301526137f0816137b4565b9050919050565b7f4d757374206d696e74206174206c65617374206f6e65207469636b6574000000600082015250565b600061382d601d83612d46565b9150613838826137f7565b602082019050919050565b6000602082019050818103600083015261385c81613820565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66207469636b657473000000000000000000000000000000000000000000602082015250565b60006138bf602b83612d46565b91506138ca82613863565b604082019050919050565b600060208201905081810360008301526138ee816138b2565b9050919050565b7f526571756573746564206e756d626572206578636565647320746865206d617860008201527f696d756d20283820706572207472616e73616374696f6e290000000000000000602082015250565b6000613951603883612d46565b915061395c826138f5565b604082019050919050565b6000602082019050818103600083015261398081613944565b9050919050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b60006139bd601f83612d46565b91506139c882613987565b602082019050919050565b600060208201905081810360008301526139ec816139b0565b9050919050565b7f507572636861736520657863656564206d6178206f66206f766572616c6c207460008201527f6f6b656e73207065722077616c6c657420283234290000000000000000000000602082015250565b6000613a4f603583612d46565b9150613a5a826139f3565b604082019050919050565b60006020820190508181036000830152613a7e81613a42565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613abf82612c1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613af257613af1613a85565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613b88602983612d46565b9150613b9382613b2c565b604082019050919050565b60006020820190508181036000830152613bb781613b7b565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613c1a602a83612d46565b9150613c2582613bbe565b604082019050919050565b60006020820190508181036000830152613c4981613c0d565b9050919050565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b6000613c86601d83612d46565b9150613c9182613c50565b602082019050919050565b60006020820190508181036000830152613cb581613c79565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613d18602f83612d46565b9150613d2382613cbc565b604082019050919050565b60006020820190508181036000830152613d4781613d0b565b9050919050565b600081905092915050565b6000613d6482612d3b565b613d6e8185613d4e565b9350613d7e818560208601612d57565b80840191505092915050565b6000613d968285613d59565b9150613da28284613d59565b91508190509392505050565b7f5265736572766520776f756c6420657863656564206d617820737570706c792060008201527f6f66207469636b65747300000000000000000000000000000000000000000000602082015250565b6000613e0a602a83612d46565b9150613e1582613dae565b604082019050919050565b60006020820190508181036000830152613e3981613dfd565b9050919050565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b6000613e76602083612d46565b9150613e8182613e40565b602082019050919050565b60006020820190508181036000830152613ea581613e69565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ee682612c1d565b9150613ef183612c1d565b925082613f0157613f00613eac565b5b828206905092915050565b6000613f1782612c1d565b9150613f2283612c1d565b925082821015613f3557613f34613a85565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9c602683612d46565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061402e602c83612d46565b915061403982613fd2565b604082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006140c0602983612d46565b91506140cb82614064565b604082019050919050565b600060208201905081810360008301526140ef816140b3565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614152602483612d46565b915061415d826140f6565b604082019050919050565b6000602082019050818103600083015261418181614145565b9050919050565b600061419382612c1d565b915061419e83612c1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141d3576141d2613a85565b5b828201905092915050565b60006141e982612c1d565b91506141f483612c1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561422d5761422c613a85565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061426e601983612d46565b915061427982614238565b602082019050919050565b6000602082019050818103600083015261429d81614261565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614300603283612d46565b915061430b826142a4565b604082019050919050565b6000602082019050818103600083015261432f816142f3565b9050919050565b600061434182612c1d565b915061434c83612c1d565b92508261435c5761435b613eac565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b600061438e82614367565b6143988185614372565b93506143a8818560208601612d57565b6143b181612d8a565b840191505092915050565b60006080820190506143d16000830187612e28565b6143de6020830186612e28565b6143eb604083018561303c565b81810360608301526143fd8184614383565b905095945050505050565b60008151905061441781612cac565b92915050565b60006020828403121561443357614432612c13565b5b600061444184828501614408565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614480602083612d46565b915061448b8261444a565b602082019050919050565b600060208201905081810360008301526144af81614473565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006144ec601c83612d46565b91506144f7826144b6565b602082019050919050565b6000602082019050818103600083015261451b816144df565b905091905056fe68747470733a2f2f62616679626569646977776e6537706b716269666a667972796e7a6d656d6b6b3564707566337979796c6637766a366a346969787772616f6d6a652e697066732e696e667572612d697066732e696f2fa2646970667358221220ca08abb0fd23c1a13281f121ddab8ca6c578705cf08896bbd80dc5e8694e8de664736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000061b379800000000000000000000000000000000000000000000000000000000000000011546865466174656452656e65676164657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044641544500000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c8063715018a61161012e578063cc221a46116100ab578063e98665501161006f578063e9866550146107f8578063eb8d24441461080f578063f2fde38b1461083a578063f3a2d79514610863578063f62f3c111461088e57610230565b8063cc221a4614610711578063d42b7afd1461073c578063dab474b714610765578063e36d649814610790578063e985e9c5146107bb57610230565b8063b88d4fde116100f2578063b88d4fde1461062a578063b910588e14610653578063c6ab67a31461067e578063c87b56dd146106a9578063cb774d47146106e657610230565b8063715018a61461057d5780637d17fcbe146105945780638da5cb5b146105ab57806395d89b41146105d6578063a22cb4651461060157610230565b806323b872dd116101bc57806342842e0e1161018057806342842e0e1461048657806355f804b3146104af5780636352211e146104d85780636de9f32b1461051557806370a082311461054057610230565b806323b872dd146103d6578063256d52f6146103ff57806327becf541461041b57806334918dfd146104585780633ccfd60b1461046f57610230565b8063095ea7b311610203578063095ea7b314610303578063109695231461032c57806314c203d01461035557806318160ddd146103805780631a95f15f146103ab57610230565b8063018a2c371461023557806301ffc9a71461025e57806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190612c53565b6108b9565b005b34801561026a57600080fd5b5061028560048036038101906102809190612cd8565b61093f565b6040516102929190612d20565b60405180910390f35b3480156102a757600080fd5b506102b0610a21565b6040516102bd9190612dd4565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190612c53565b610ab3565b6040516102fa9190612e37565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190612e7e565b610b38565b005b34801561033857600080fd5b50610353600480360381019061034e9190612ff3565b610c50565b005b34801561036157600080fd5b5061036a610ce6565b604051610377919061304b565b60405180910390f35b34801561038c57600080fd5b50610395610cec565b6040516103a2919061304b565b60405180910390f35b3480156103b757600080fd5b506103c0610cf6565b6040516103cd919061304b565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613066565b610d01565b005b61041960048036038101906104149190612c53565b610d61565b005b34801561042757600080fd5b50610442600480360381019061043d91906130b9565b610fd2565b60405161044f91906131a4565b60405180910390f35b34801561046457600080fd5b5061046d611137565b005b34801561047b57600080fd5b506104846111df565b005b34801561049257600080fd5b506104ad60048036038101906104a89190613066565b6112aa565b005b3480156104bb57600080fd5b506104d660048036038101906104d19190612ff3565b6112ca565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190612c53565b611360565b60405161050c9190612e37565b60405180910390f35b34801561052157600080fd5b5061052a611412565b604051610537919061304b565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906130b9565b611423565b604051610574919061304b565b60405180910390f35b34801561058957600080fd5b506105926114db565b005b3480156105a057600080fd5b506105a9611563565b005b3480156105b757600080fd5b506105c061162d565b6040516105cd9190612e37565b60405180910390f35b3480156105e257600080fd5b506105eb611657565b6040516105f89190612dd4565b60405180910390f35b34801561060d57600080fd5b50610628600480360381019061062391906131f2565b6116e9565b005b34801561063657600080fd5b50610651600480360381019061064c91906132d3565b6116ff565b005b34801561065f57600080fd5b50610668611761565b604051610675919061304b565b60405180910390f35b34801561068a57600080fd5b50610693611766565b6040516106a09190612dd4565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190612c53565b6117f4565b6040516106dd9190612dd4565b60405180910390f35b3480156106f257600080fd5b506106fb6118a4565b604051610708919061304b565b60405180910390f35b34801561071d57600080fd5b506107266118aa565b604051610733919061304b565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190612c53565b6118b4565b005b34801561077157600080fd5b5061077a6119cf565b6040516107879190613414565b60405180910390f35b34801561079c57600080fd5b506107a5611b05565b6040516107b2919061304b565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190613436565b611b0b565b6040516107ef9190612d20565b60405180910390f35b34801561080457600080fd5b5061080d611b9f565b005b34801561081b57600080fd5b50610824611cb0565b6040516108319190612d20565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c91906130b9565b611cc3565b005b34801561086f57600080fd5b50610878611dbb565b604051610885919061304b565b60405180910390f35b34801561089a57600080fd5b506108a3611dc0565b6040516108b0919061304b565b60405180910390f35b6108c1611dc6565b73ffffffffffffffffffffffffffffffffffffffff166108df61162d565b73ffffffffffffffffffffffffffffffffffffffff1614610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c906134c2565b60405180910390fd5b80600a8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1a5750610a1982611dce565b5b9050919050565b606060008054610a3090613511565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5c90613511565b8015610aa95780601f10610a7e57610100808354040283529160200191610aa9565b820191906000526020600020905b815481529060010190602001808311610a8c57829003601f168201915b5050505050905090565b6000610abe82611e38565b610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af4906135b5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4382611360565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab90613647565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd3611dc6565b73ffffffffffffffffffffffffffffffffffffffff161480610c025750610c0181610bfc611dc6565b611b0b565b5b610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c38906136d9565b60405180910390fd5b610c4b8383611ea4565b505050565b610c58611dc6565b73ffffffffffffffffffffffffffffffffffffffff16610c7661162d565b73ffffffffffffffffffffffffffffffffffffffff1614610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906134c2565b60405180910390fd5b80600c9080519060200190610ce2929190612b66565b5050565b60095481565b6000600954905090565b66b1a2bc2ec5000081565b610d12610d0c611dc6565b82611f5d565b610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d489061376b565b60405180910390fd5b610d5c83838361203b565b505050565b600b60009054906101000a900460ff16610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da7906137d7565b60405180910390fd5b60008111610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613843565b60405180910390fd5b600954610e1282610e04600d612297565b6122a590919063ffffffff16565b1115610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a906138d5565b60405180910390fd5b6008811115610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90613967565b60405180910390fd5b34610eb28266b1a2bc2ec500006122bb90919063ffffffff16565b1115610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea906139d3565b60405180910390fd5b6000610efe33611423565b90506018610f1583836122a590919063ffffffff16565b1115610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d90613a65565b60405180910390fd5b60005b82811015610f97576000610f6d600d612297565b9050610f7933826122d1565b610f83600d6122ef565b508080610f8f90613ab4565b915050610f59565b506000600754148015610fc15750600954610fb2600d612297565b1480610fc05750600a544210155b5b15610fce57436007819055505b5050565b60606000610fdf83611423565b9050600081141561103c57600067ffffffffffffffff81111561100557611004612ec8565b5b6040519080825280602002602001820160405280156110335781602001602082028036833780820191505090505b50915050611132565b60008167ffffffffffffffff81111561105857611057612ec8565b5b6040519080825280602002602001820160405280156110865781602001602082028036833780820191505090505b5090506000611095600d612297565b905060008060009050600091505b82821015611129576110b482611360565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561111657818482815181106110fb576110fa613afd565b5b602002602001018181525050808061111290613ab4565b9150505b818061112190613ab4565b9250506110a3565b83955050505050505b919050565b61113f611dc6565b73ffffffffffffffffffffffffffffffffffffffff1661115d61162d565b73ffffffffffffffffffffffffffffffffffffffff16146111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa906134c2565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b6111e7611dc6565b73ffffffffffffffffffffffffffffffffffffffff1661120561162d565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611252906134c2565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112a6573d6000803e3d6000fd5b5050565b6112c5838383604051806020016040528060008152506116ff565b505050565b6112d2611dc6565b73ffffffffffffffffffffffffffffffffffffffff166112f061162d565b73ffffffffffffffffffffffffffffffffffffffff1614611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d906134c2565b60405180910390fd5b80600e908051906020019061135c929190612b66565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090613b9e565b60405180910390fd5b80915050919050565b600061141e600d612297565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613c30565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e3611dc6565b73ffffffffffffffffffffffffffffffffffffffff1661150161162d565b73ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e906134c2565b60405180910390fd5b6115616000612305565b565b61156b611dc6565b73ffffffffffffffffffffffffffffffffffffffff1661158961162d565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d6906134c2565b60405180910390fd5b600060085414611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90613c9c565b60405180910390fd5b43600781905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461166690613511565b80601f016020809104026020016040519081016040528092919081815260200182805461169290613511565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b5050505050905090565b6116fb6116f4611dc6565b83836123cb565b5050565b61171061170a611dc6565b83611f5d565b61174f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117469061376b565b60405180910390fd5b61175b84848484612538565b50505050565b600881565b600c805461177390613511565b80601f016020809104026020016040519081016040528092919081815260200182805461179f90613511565b80156117ec5780601f106117c1576101008083540402835291602001916117ec565b820191906000526020600020905b8154815290600101906020018083116117cf57829003601f168201915b505050505081565b60606117ff82611e38565b61183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590613d2e565b60405180910390fd5b6000611848612594565b90506000815111611871576040518060800160405280605881526020016145236058913961189c565b8061187b84612626565b60405160200161188c929190613d8a565b6040516020818303038152906040525b915050919050565b60085481565b6000600854905090565b6118bc611dc6565b73ffffffffffffffffffffffffffffffffffffffff166118da61162d565b73ffffffffffffffffffffffffffffffffffffffff1614611930576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611927906134c2565b60405180910390fd5b60095461194f82611941600d612297565b6122a590919063ffffffff16565b1115611990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198790613e20565b60405180910390fd5b60005b818110156119cb576119ae336119a9600d612297565b6122d1565b6119b8600d6122ef565b80806119c390613ab4565b915050611993565b5050565b606060006119dd600d612297565b90506000811415611a3a57600067ffffffffffffffff811115611a0357611a02612ec8565b5b604051908082528060200260200182016040528015611a315781602001602082028036833780820191505090505b50915050611b02565b60008167ffffffffffffffff811115611a5657611a55612ec8565b5b604051908082528060200260200182016040528015611a845781602001602082028036833780820191505090505b50905060005b82811015611afb57611a9b81611360565b828281518110611aae57611aad613afd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080611af390613ab4565b915050611a8a565b5080925050505b90565b60075481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060085414611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613c9c565b60405180910390fd5b60006007541415611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613e8c565b60405180910390fd5b6009546007544060001c611c3e9190613edb565b60088190555060ff611c5b6007544361278790919063ffffffff16565b1115611c8657600954600143611c719190613f0c565b4060001c611c7f9190613edb565b6008819055505b60006008541415611cae57611ca760016008546122a590919063ffffffff16565b6008819055505b565b600b60009054906101000a900460ff1681565b611ccb611dc6565b73ffffffffffffffffffffffffffffffffffffffff16611ce961162d565b73ffffffffffffffffffffffffffffffffffffffff1614611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906134c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690613fb2565b60405180910390fd5b611db881612305565b50565b601881565b600a5481565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f1783611360565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f6882611e38565b611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e90614044565b60405180910390fd5b6000611fb283611360565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061202157508373ffffffffffffffffffffffffffffffffffffffff1661200984610ab3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061203257506120318185611b0b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661205b82611360565b73ffffffffffffffffffffffffffffffffffffffff16146120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a8906140d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211890614168565b60405180910390fd5b61212c83838361279d565b612137600082611ea4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121879190613f0c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121de9190614188565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b600081836122b39190614188565b905092915050565b600081836122c991906141de565b905092915050565b6122eb8282604051806020016040528060008152506127a2565b5050565b6001816000016000828254019250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561243a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243190614284565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161252b9190612d20565b60405180910390a3505050565b61254384848461203b565b61254f848484846127fd565b61258e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258590614316565b60405180910390fd5b50505050565b6060600e80546125a390613511565b80601f01602080910402602001604051908101604052809291908181526020018280546125cf90613511565b801561261c5780601f106125f15761010080835404028352916020019161261c565b820191906000526020600020905b8154815290600101906020018083116125ff57829003601f168201915b5050505050905090565b6060600082141561266e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612782565b600082905060005b600082146126a057808061268990613ab4565b915050600a826126999190614336565b9150612676565b60008167ffffffffffffffff8111156126bc576126bb612ec8565b5b6040519080825280601f01601f1916602001820160405280156126ee5781602001600182028036833780820191505090505b5090505b6000851461277b576001826127079190613f0c565b9150600a856127169190613edb565b60306127229190614188565b60f81b81838151811061273857612737613afd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127749190614336565b94506126f2565b8093505050505b919050565b600081836127959190613f0c565b905092915050565b505050565b6127ac8383612985565b6127b960008484846127fd565b6127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90614316565b60405180910390fd5b505050565b600061281e8473ffffffffffffffffffffffffffffffffffffffff16612b53565b15612978578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612847611dc6565b8786866040518563ffffffff1660e01b815260040161286994939291906143bc565b6020604051808303816000875af19250505080156128a557506040513d601f19601f820116820180604052508101906128a2919061441d565b60015b612928573d80600081146128d5576040519150601f19603f3d011682016040523d82523d6000602084013e6128da565b606091505b50600081511415612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790614316565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061297d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614496565b60405180910390fd5b6129fe81611e38565b15612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3590614502565b60405180910390fd5b612a4a6000838361279d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9a9190614188565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b7290613511565b90600052602060002090601f016020900481019282612b945760008555612bdb565b82601f10612bad57805160ff1916838001178555612bdb565b82800160010185558215612bdb579182015b82811115612bda578251825591602001919060010190612bbf565b5b509050612be89190612bec565b5090565b5b80821115612c05576000816000905550600101612bed565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612c3081612c1d565b8114612c3b57600080fd5b50565b600081359050612c4d81612c27565b92915050565b600060208284031215612c6957612c68612c13565b5b6000612c7784828501612c3e565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cb581612c80565b8114612cc057600080fd5b50565b600081359050612cd281612cac565b92915050565b600060208284031215612cee57612ced612c13565b5b6000612cfc84828501612cc3565b91505092915050565b60008115159050919050565b612d1a81612d05565b82525050565b6000602082019050612d356000830184612d11565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d75578082015181840152602081019050612d5a565b83811115612d84576000848401525b50505050565b6000601f19601f8301169050919050565b6000612da682612d3b565b612db08185612d46565b9350612dc0818560208601612d57565b612dc981612d8a565b840191505092915050565b60006020820190508181036000830152612dee8184612d9b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e2182612df6565b9050919050565b612e3181612e16565b82525050565b6000602082019050612e4c6000830184612e28565b92915050565b612e5b81612e16565b8114612e6657600080fd5b50565b600081359050612e7881612e52565b92915050565b60008060408385031215612e9557612e94612c13565b5b6000612ea385828601612e69565b9250506020612eb485828601612c3e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f0082612d8a565b810181811067ffffffffffffffff82111715612f1f57612f1e612ec8565b5b80604052505050565b6000612f32612c09565b9050612f3e8282612ef7565b919050565b600067ffffffffffffffff821115612f5e57612f5d612ec8565b5b612f6782612d8a565b9050602081019050919050565b82818337600083830152505050565b6000612f96612f9184612f43565b612f28565b905082815260208101848484011115612fb257612fb1612ec3565b5b612fbd848285612f74565b509392505050565b600082601f830112612fda57612fd9612ebe565b5b8135612fea848260208601612f83565b91505092915050565b60006020828403121561300957613008612c13565b5b600082013567ffffffffffffffff81111561302757613026612c18565b5b61303384828501612fc5565b91505092915050565b61304581612c1d565b82525050565b6000602082019050613060600083018461303c565b92915050565b60008060006060848603121561307f5761307e612c13565b5b600061308d86828701612e69565b935050602061309e86828701612e69565b92505060406130af86828701612c3e565b9150509250925092565b6000602082840312156130cf576130ce612c13565b5b60006130dd84828501612e69565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61311b81612c1d565b82525050565b600061312d8383613112565b60208301905092915050565b6000602082019050919050565b6000613151826130e6565b61315b81856130f1565b935061316683613102565b8060005b8381101561319757815161317e8882613121565b975061318983613139565b92505060018101905061316a565b5085935050505092915050565b600060208201905081810360008301526131be8184613146565b905092915050565b6131cf81612d05565b81146131da57600080fd5b50565b6000813590506131ec816131c6565b92915050565b6000806040838503121561320957613208612c13565b5b600061321785828601612e69565b9250506020613228858286016131dd565b9150509250929050565b600067ffffffffffffffff82111561324d5761324c612ec8565b5b61325682612d8a565b9050602081019050919050565b600061327661327184613232565b612f28565b90508281526020810184848401111561329257613291612ec3565b5b61329d848285612f74565b509392505050565b600082601f8301126132ba576132b9612ebe565b5b81356132ca848260208601613263565b91505092915050565b600080600080608085870312156132ed576132ec612c13565b5b60006132fb87828801612e69565b945050602061330c87828801612e69565b935050604061331d87828801612c3e565b925050606085013567ffffffffffffffff81111561333e5761333d612c18565b5b61334a878288016132a5565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61338b81612e16565b82525050565b600061339d8383613382565b60208301905092915050565b6000602082019050919050565b60006133c182613356565b6133cb8185613361565b93506133d683613372565b8060005b838110156134075781516133ee8882613391565b97506133f9836133a9565b9250506001810190506133da565b5085935050505092915050565b6000602082019050818103600083015261342e81846133b6565b905092915050565b6000806040838503121561344d5761344c612c13565b5b600061345b85828601612e69565b925050602061346c85828601612e69565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134ac602083612d46565b91506134b782613476565b602082019050919050565b600060208201905081810360008301526134db8161349f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061352957607f821691505b6020821081141561353d5761353c6134e2565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061359f602c83612d46565b91506135aa82613543565b604082019050919050565b600060208201905081810360008301526135ce81613592565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613631602183612d46565b915061363c826135d5565b604082019050919050565b6000602082019050818103600083015261366081613624565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006136c3603883612d46565b91506136ce82613667565b604082019050919050565b600060208201905081810360008301526136f2816136b6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613755603183612d46565b9150613760826136f9565b604082019050919050565b6000602082019050818103600083015261378481613748565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b60006137c1601b83612d46565b91506137cc8261378b565b602082019050919050565b600060208201905081810360008301526137f0816137b4565b9050919050565b7f4d757374206d696e74206174206c65617374206f6e65207469636b6574000000600082015250565b600061382d601d83612d46565b9150613838826137f7565b602082019050919050565b6000602082019050818103600083015261385c81613820565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66207469636b657473000000000000000000000000000000000000000000602082015250565b60006138bf602b83612d46565b91506138ca82613863565b604082019050919050565b600060208201905081810360008301526138ee816138b2565b9050919050565b7f526571756573746564206e756d626572206578636565647320746865206d617860008201527f696d756d20283820706572207472616e73616374696f6e290000000000000000602082015250565b6000613951603883612d46565b915061395c826138f5565b604082019050919050565b6000602082019050818103600083015261398081613944565b9050919050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b60006139bd601f83612d46565b91506139c882613987565b602082019050919050565b600060208201905081810360008301526139ec816139b0565b9050919050565b7f507572636861736520657863656564206d6178206f66206f766572616c6c207460008201527f6f6b656e73207065722077616c6c657420283234290000000000000000000000602082015250565b6000613a4f603583612d46565b9150613a5a826139f3565b604082019050919050565b60006020820190508181036000830152613a7e81613a42565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613abf82612c1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613af257613af1613a85565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613b88602983612d46565b9150613b9382613b2c565b604082019050919050565b60006020820190508181036000830152613bb781613b7b565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613c1a602a83612d46565b9150613c2582613bbe565b604082019050919050565b60006020820190508181036000830152613c4981613c0d565b9050919050565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b6000613c86601d83612d46565b9150613c9182613c50565b602082019050919050565b60006020820190508181036000830152613cb581613c79565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613d18602f83612d46565b9150613d2382613cbc565b604082019050919050565b60006020820190508181036000830152613d4781613d0b565b9050919050565b600081905092915050565b6000613d6482612d3b565b613d6e8185613d4e565b9350613d7e818560208601612d57565b80840191505092915050565b6000613d968285613d59565b9150613da28284613d59565b91508190509392505050565b7f5265736572766520776f756c6420657863656564206d617820737570706c792060008201527f6f66207469636b65747300000000000000000000000000000000000000000000602082015250565b6000613e0a602a83612d46565b9150613e1582613dae565b604082019050919050565b60006020820190508181036000830152613e3981613dfd565b9050919050565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b6000613e76602083612d46565b9150613e8182613e40565b602082019050919050565b60006020820190508181036000830152613ea581613e69565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ee682612c1d565b9150613ef183612c1d565b925082613f0157613f00613eac565b5b828206905092915050565b6000613f1782612c1d565b9150613f2283612c1d565b925082821015613f3557613f34613a85565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9c602683612d46565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061402e602c83612d46565b915061403982613fd2565b604082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006140c0602983612d46565b91506140cb82614064565b604082019050919050565b600060208201905081810360008301526140ef816140b3565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614152602483612d46565b915061415d826140f6565b604082019050919050565b6000602082019050818103600083015261418181614145565b9050919050565b600061419382612c1d565b915061419e83612c1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141d3576141d2613a85565b5b828201905092915050565b60006141e982612c1d565b91506141f483612c1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561422d5761422c613a85565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061426e601983612d46565b915061427982614238565b602082019050919050565b6000602082019050818103600083015261429d81614261565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614300603283612d46565b915061430b826142a4565b604082019050919050565b6000602082019050818103600083015261432f816142f3565b9050919050565b600061434182612c1d565b915061434c83612c1d565b92508261435c5761435b613eac565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b600061438e82614367565b6143988185614372565b93506143a8818560208601612d57565b6143b181612d8a565b840191505092915050565b60006080820190506143d16000830187612e28565b6143de6020830186612e28565b6143eb604083018561303c565b81810360608301526143fd8184614383565b905095945050505050565b60008151905061441781612cac565b92915050565b60006020828403121561443357614432612c13565b5b600061444184828501614408565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614480602083612d46565b915061448b8261444a565b602082019050919050565b600060208201905081810360008301526144af81614473565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006144ec601c83612d46565b91506144f7826144b6565b602082019050919050565b6000602082019050818103600083015261451b816144df565b905091905056fe68747470733a2f2f62616679626569646977776e6537706b716269666a667972796e7a6d656d6b6b3564707566337979796c6637766a366a346969787772616f6d6a652e697066732e696e667572612d697066732e696f2fa2646970667358221220ca08abb0fd23c1a13281f121ddab8ca6c578705cf08896bbd80dc5e8694e8de664736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000061b379800000000000000000000000000000000000000000000000000000000000000011546865466174656452656e65676164657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044641544500000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): TheFatedRenegades
Arg [1] : symbol (string): FATE
Arg [2] : maxNftSupply (uint256): 2400
Arg [3] : saleStart (uint256): 1639152000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000960
Arg [3] : 0000000000000000000000000000000000000000000000000000000061b37980
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [5] : 546865466174656452656e656761646573000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4641544500000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44264:6697:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45802:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31490:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32435:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33994:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33517:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45932:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44731:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49011:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44461:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34744:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46465:1551;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49113:705;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46176:89;;;;;;;;;;;;;:::i;:::-;;45232:143;;;;;;;;;;;;;:::i;:::-;;35154:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46066:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32129:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48898:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31859:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14794:103;;;;;;;;;;;;;:::i;:::-;;46273:184;;;;;;;;;;;;;:::i;:::-;;14143:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32604:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34287:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35410:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44537:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44850:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50259:577;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44694:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48793:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45383:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49826:425;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44652:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34513:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48024:761;;;;;;;;;;;;;:::i;:::-;;44809:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15052:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44593:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44770:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45802:122;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45901:15:::1;45883;:33;;;;45802:122:::0;:::o;31490:305::-;31592:4;31644:25;31629:40;;;:11;:40;;;;:105;;;;31701:33;31686:48;;;:11;:48;;;;31629:105;:158;;;;31751:36;31775:11;31751:23;:36::i;:::-;31629:158;31609:178;;31490:305;;;:::o;32435:100::-;32489:13;32522:5;32515:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32435:100;:::o;33994:221::-;34070:7;34098:16;34106:7;34098;:16::i;:::-;34090:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34183:15;:24;34199:7;34183:24;;;;;;;;;;;;;;;;;;;;;34176:31;;33994:221;;;:::o;33517:411::-;33598:13;33614:23;33629:7;33614:14;:23::i;:::-;33598:39;;33662:5;33656:11;;:2;:11;;;;33648:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33756:5;33740:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33765:37;33782:5;33789:12;:10;:12::i;:::-;33765:16;:37::i;:::-;33740:62;33718:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33899:21;33908:2;33912:7;33899:8;:21::i;:::-;33587:341;33517:411;;:::o;45932:126::-;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46035:15:::1;46018:14;:32;;;;;;;;;;;;:::i;:::-;;45932:126:::0;:::o;44731:30::-;;;;:::o;49011:94::-;49055:7;49082:15;;49075:22;;49011:94;:::o;44461:56::-;44500:17;44461:56;:::o;34744:339::-;34939:41;34958:12;:10;:12::i;:::-;34972:7;34939:18;:41::i;:::-;34931:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35047:28;35057:4;35063:2;35067:7;35047:9;:28::i;:::-;34744:339;;;:::o;46465:1551::-;46543:12;;;;;;;;;;;46535:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;46623:1;46606:14;:18;46598:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46740:15;;46691:45;46721:14;46691:25;:15;:23;:25::i;:::-;:29;;:45;;;;:::i;:::-;:64;;46669:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;44583:1;46859:14;:37;;46837:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;47049:9;47013:32;47030:14;44500:17;47013:16;;:32;;;;:::i;:::-;:45;;46991:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;47130:16;47149:21;47159:10;47149:9;:21::i;:::-;47130:40;;44641:2;47203:28;47216:14;47203:8;:12;;:28;;;;:::i;:::-;:53;;47181:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;47355:9;47350:208;47374:14;47370:1;:18;47350:208;;;47410:17;47430:25;:15;:23;:25::i;:::-;47410:45;;47472:32;47482:10;47494:9;47472;:32::i;:::-;47519:27;:15;:25;:27::i;:::-;47395:163;47390:3;;;;;:::i;:::-;;;;47350:208;;;;47818:1;47796:18;;:23;:141;;;;;47866:15;;47837:25;:15;:23;:25::i;:::-;:44;:99;;;;47921:15;;47902;:34;;47837:99;47796:141;47778:231;;;47985:12;47964:18;:33;;;;47778:231;46524:1492;46465:1551;:::o;49113:705::-;49206:16;49240:18;49261:17;49271:6;49261:9;:17::i;:::-;49240:38;;49307:1;49293:10;:15;49289:522;;;49346:1;49332:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49325:23;;;;;49289:522;49381:26;49424:10;49410:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49381:54;;49450:20;49473:25;:15;:23;:25::i;:::-;49450:48;;49513:13;49541:9;49553:1;49541:13;;49582:1;49574:9;;49569:200;49593:12;49585:5;:20;49569:200;;;49649:14;49657:5;49649:7;:14::i;:::-;49639:24;;:6;:24;;;49635:119;;;49703:5;49688:9;49698:1;49688:12;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49731:3;;;;;:::i;:::-;;;;49635:119;49607:7;;;;;:::i;:::-;;;;49569:200;;;49790:9;49783:16;;;;;;;49113:705;;;;:::o;46176:89::-;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46245:12:::1;;;;;;;;;;;46244:13;46229:12;;:28;;;;;;;;;;;;;;;;;;46176:89::o:0;45232:143::-;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45280:15:::1;45298:21;45280:39;;45338:10;45330:28;;:37;45359:7;45330:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45269:106;45232:143::o:0;35154:185::-;35292:39;35309:4;35315:2;35319:7;35292:39;;;;;;;;;;;;:16;:39::i;:::-;35154:185;;;:::o;46066:102::-;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46153:7:::1;46137:13;:23;;;;;;;;;;;;:::i;:::-;;46066:102:::0;:::o;32129:239::-;32201:7;32221:13;32237:7;:16;32245:7;32237:16;;;;;;;;;;;;;;;;;;;;;32221:32;;32289:1;32272:19;;:5;:19;;;;32264:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32355:5;32348:12;;;32129:239;;;:::o;48898:105::-;48943:7;48970:25;:15;:23;:25::i;:::-;48963:32;;48898:105;:::o;31859:208::-;31931:7;31976:1;31959:19;;:5;:19;;;;31951:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32043:9;:16;32053:5;32043:16;;;;;;;;;;;;;;;;32036:23;;31859:208;;;:::o;14794:103::-;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14859:30:::1;14886:1;14859:18;:30::i;:::-;14794:103::o:0;46273:184::-;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46368:1:::1;46351:13;;:18;46343:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46437:12;46416:18;:33;;;;46273:184::o:0;14143:87::-;14189:7;14216:6;;;;;;;;;;;14209:13;;14143:87;:::o;32604:104::-;32660:13;32693:7;32686:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32604:104;:::o;34287:155::-;34382:52;34401:12;:10;:12::i;:::-;34415:8;34425;34382:18;:52::i;:::-;34287:155;;:::o;35410:328::-;35585:41;35604:12;:10;:12::i;:::-;35618:7;35585:18;:41::i;:::-;35577:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35691:39;35705:4;35711:2;35715:7;35724:5;35691:13;:39::i;:::-;35410:328;;;;:::o;44537:47::-;44583:1;44537:47;:::o;44850:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50259:577::-;50377:13;50430:16;50438:7;50430;:16::i;:::-;50408:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;50534:28;50565:10;:8;:10::i;:::-;50534:41;;50637:1;50612:14;50606:28;:32;:222;;;;;;;;;;;;;;;;;;;;;;50682:14;50698:18;:7;:16;:18::i;:::-;50665:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50606:222;50586:242;;;50259:577;;;:::o;44694:28::-;;;;:::o;48793:97::-;48842:7;48869:13;;48862:20;;48793:97;:::o;45383:411::-;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45528:15:::1;;45480:44;45510:13;45480:25;:15;:23;:25::i;:::-;:29;;:44;;;;:::i;:::-;:63;;45458:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;45631:9;45626:161;45650:13;45646:1;:17;45626:161;;;45685:48;45695:10;45707:25;:15;:23;:25::i;:::-;45685:9;:48::i;:::-;45748:27;:15;:25;:27::i;:::-;45665:3;;;;;:::i;:::-;;;;45626:161;;;;45383:411:::0;:::o;49826:425::-;49876:16;49905:20;49928:25;:15;:23;:25::i;:::-;49905:48;;49986:1;49970:12;:17;49966:73;;;50025:1;50011:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50004:23;;;;;49966:73;50051:26;50094:12;50080:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50051:56;;50125:9;50120:95;50144:12;50140:1;:16;50120:95;;;50193:10;50201:1;50193:7;:10::i;:::-;50178:9;50188:1;50178:12;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;50158:3;;;;;:::i;:::-;;;;50120:95;;;;50234:9;50227:16;;;;49826:425;;:::o;44652:33::-;;;;:::o;34513:164::-;34610:4;34634:18;:25;34653:5;34634:25;;;;;;;;;;;;;;;:35;34660:8;34634:35;;;;;;;;;;;;;;;;;;;;;;;;;34627:42;;34513:164;;;;:::o;48024:761::-;48095:1;48078:13;;:18;48070:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;48171:1;48149:18;;:23;;48141:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48305:15;;48269:18;;48259:29;48251:38;;:69;;;;:::i;:::-;48222:13;:98;;;;48508:3;48469:36;48486:18;;48469:12;:16;;:36;;;;:::i;:::-;:42;48465:179;;;48617:15;;48594:1;48579:12;:16;;;;:::i;:::-;48569:27;48561:36;;:71;;;;:::i;:::-;48528:13;:104;;;;48465:179;48712:1;48695:13;;:18;48691:87;;;48746:20;48764:1;48746:13;;:17;;:20;;;;:::i;:::-;48730:13;:36;;;;48691:87;48024:761::o;44809:32::-;;;;;;;;;;;;;:::o;15052:201::-;14374:12;:10;:12::i;:::-;14363:23;;:7;:5;:7::i;:::-;:23;;;14355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15161:1:::1;15141:22;;:8;:22;;;;15133:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15217:28;15236:8;15217:18;:28::i;:::-;15052:201:::0;:::o;44593:50::-;44641:2;44593:50;:::o;44770:30::-;;;;:::o;8751:98::-;8804:7;8831:10;8824:17;;8751:98;:::o;12014:157::-;12099:4;12138:25;12123:40;;;:11;:40;;;;12116:47;;12014:157;;;:::o;37248:127::-;37313:4;37365:1;37337:30;;:7;:16;37345:7;37337:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37330:37;;37248:127;;;:::o;41230:174::-;41332:2;41305:15;:24;41321:7;41305:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41388:7;41384:2;41350:46;;41359:23;41374:7;41359:14;:23::i;:::-;41350:46;;;;;;;;;;;;41230:174;;:::o;37542:348::-;37635:4;37660:16;37668:7;37660;:16::i;:::-;37652:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37736:13;37752:23;37767:7;37752:14;:23::i;:::-;37736:39;;37805:5;37794:16;;:7;:16;;;:51;;;;37838:7;37814:31;;:20;37826:7;37814:11;:20::i;:::-;:31;;;37794:51;:87;;;;37849:32;37866:5;37873:7;37849:16;:32::i;:::-;37794:87;37786:96;;;37542:348;;;;:::o;40534:578::-;40693:4;40666:31;;:23;40681:7;40666:14;:23::i;:::-;:31;;;40658:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40776:1;40762:16;;:2;:16;;;;40754:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40832:39;40853:4;40859:2;40863:7;40832:20;:39::i;:::-;40936:29;40953:1;40957:7;40936:8;:29::i;:::-;40997:1;40978:9;:15;40988:4;40978:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41026:1;41009:9;:13;41019:2;41009:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41057:2;41038:7;:16;41046:7;41038:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41096:7;41092:2;41077:27;;41086:4;41077:27;;;;;;;;;;;;40534:578;;;:::o;9780:114::-;9845:7;9872;:14;;;9865:21;;9780:114;;;:::o;18413:98::-;18471:7;18502:1;18498;:5;;;;:::i;:::-;18491:12;;18413:98;;;;:::o;19151:::-;19209:7;19240:1;19236;:5;;;;:::i;:::-;19229:12;;19151:98;;;;:::o;38232:110::-;38308:26;38318:2;38322:7;38308:26;;;;;;;;;;;;:9;:26::i;:::-;38232:110;;:::o;9902:127::-;10009:1;9991:7;:14;;;:19;;;;;;;;;;;9902:127;:::o;15413:191::-;15487:16;15506:6;;;;;;;;;;;15487:25;;15532:8;15523:6;;:17;;;;;;;;;;;;;;;;;;15587:8;15556:40;;15577:8;15556:40;;;;;;;;;;;;15476:128;15413:191;:::o;41546:315::-;41701:8;41692:17;;:5;:17;;;;41684:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41788:8;41750:18;:25;41769:5;41750:25;;;;;;;;;;;;;;;:35;41776:8;41750:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41834:8;41812:41;;41827:5;41812:41;;;41844:8;41812:41;;;;;;:::i;:::-;;;;;;;;41546:315;;;:::o;36620:::-;36777:28;36787:4;36793:2;36797:7;36777:9;:28::i;:::-;36824:48;36847:4;36853:2;36857:7;36866:5;36824:22;:48::i;:::-;36816:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36620:315;;;;:::o;50844:114::-;50904:13;50937;50930:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50844:114;:::o;22887:723::-;22943:13;23173:1;23164:5;:10;23160:53;;;23191:10;;;;;;;;;;;;;;;;;;;;;23160:53;23223:12;23238:5;23223:20;;23254:14;23279:78;23294:1;23286:4;:9;23279:78;;23312:8;;;;;:::i;:::-;;;;23343:2;23335:10;;;;;:::i;:::-;;;23279:78;;;23367:19;23399:6;23389:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23367:39;;23417:154;23433:1;23424:5;:10;23417:154;;23461:1;23451:11;;;;;:::i;:::-;;;23528:2;23520:5;:10;;;;:::i;:::-;23507:2;:24;;;;:::i;:::-;23494:39;;23477:6;23484;23477:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;23557:2;23548:11;;;;;:::i;:::-;;;23417:154;;;23595:6;23581:21;;;;;22887:723;;;;:::o;18794:98::-;18852:7;18883:1;18879;:5;;;;:::i;:::-;18872:12;;18794:98;;;;:::o;43797:126::-;;;;:::o;38569:321::-;38699:18;38705:2;38709:7;38699:5;:18::i;:::-;38750:54;38781:1;38785:2;38789:7;38798:5;38750:22;:54::i;:::-;38728:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38569:321;;;:::o;42426:799::-;42581:4;42602:15;:2;:13;;;:15::i;:::-;42598:620;;;42654:2;42638:36;;;42675:12;:10;:12::i;:::-;42689:4;42695:7;42704:5;42638:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42634:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42897:1;42880:6;:13;:18;42876:272;;;42923:60;;;;;;;;;;:::i;:::-;;;;;;;;42876:272;43098:6;43092:13;43083:6;43079:2;43075:15;43068:38;42634:529;42771:41;;;42761:51;;;:6;:51;;;;42754:58;;;;;42598:620;43202:4;43195:11;;42426:799;;;;;;;:::o;39226:382::-;39320:1;39306:16;;:2;:16;;;;39298:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39379:16;39387:7;39379;:16::i;:::-;39378:17;39370:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39441:45;39470:1;39474:2;39478:7;39441:20;:45::i;:::-;39516:1;39499:9;:13;39509:2;39499:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39547:2;39528:7;:16;39536:7;39528:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39592:7;39588:2;39567:33;;39584:1;39567:33;;;;;;;;;;;;39226:382;;:::o;797:387::-;857:4;1065:12;1132:7;1120:20;1112:28;;1175:1;1168:4;:8;1161:15;;;797:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:149::-;1061:7;1101:66;1094:5;1090:78;1079:89;;1025:149;;;:::o;1180:120::-;1252:23;1269:5;1252:23;:::i;:::-;1245:5;1242:34;1232:62;;1290:1;1287;1280:12;1232:62;1180:120;:::o;1306:137::-;1351:5;1389:6;1376:20;1367:29;;1405:32;1431:5;1405:32;:::i;:::-;1306:137;;;;:::o;1449:327::-;1507:6;1556:2;1544:9;1535:7;1531:23;1527:32;1524:119;;;1562:79;;:::i;:::-;1524:119;1682:1;1707:52;1751:7;1742:6;1731:9;1727:22;1707:52;:::i;:::-;1697:62;;1653:116;1449:327;;;;:::o;1782:90::-;1816:7;1859:5;1852:13;1845:21;1834:32;;1782:90;;;:::o;1878:109::-;1959:21;1974:5;1959:21;:::i;:::-;1954:3;1947:34;1878:109;;:::o;1993:210::-;2080:4;2118:2;2107:9;2103:18;2095:26;;2131:65;2193:1;2182:9;2178:17;2169:6;2131:65;:::i;:::-;1993:210;;;;:::o;2209:99::-;2261:6;2295:5;2289:12;2279:22;;2209:99;;;:::o;2314:169::-;2398:11;2432:6;2427:3;2420:19;2472:4;2467:3;2463:14;2448:29;;2314:169;;;;:::o;2489:307::-;2557:1;2567:113;2581:6;2578:1;2575:13;2567:113;;;2666:1;2661:3;2657:11;2651:18;2647:1;2642:3;2638:11;2631:39;2603:2;2600:1;2596:10;2591:15;;2567:113;;;2698:6;2695:1;2692:13;2689:101;;;2778:1;2769:6;2764:3;2760:16;2753:27;2689:101;2538:258;2489:307;;;:::o;2802:102::-;2843:6;2894:2;2890:7;2885:2;2878:5;2874:14;2870:28;2860:38;;2802:102;;;:::o;2910:364::-;2998:3;3026:39;3059:5;3026:39;:::i;:::-;3081:71;3145:6;3140:3;3081:71;:::i;:::-;3074:78;;3161:52;3206:6;3201:3;3194:4;3187:5;3183:16;3161:52;:::i;:::-;3238:29;3260:6;3238:29;:::i;:::-;3233:3;3229:39;3222:46;;3002:272;2910:364;;;;:::o;3280:313::-;3393:4;3431:2;3420:9;3416:18;3408:26;;3480:9;3474:4;3470:20;3466:1;3455:9;3451:17;3444:47;3508:78;3581:4;3572:6;3508:78;:::i;:::-;3500:86;;3280:313;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:308::-;5854:4;5944:18;5936:6;5933:30;5930:56;;;5966:18;;:::i;:::-;5930:56;6004:29;6026:6;6004:29;:::i;:::-;5996:37;;6088:4;6082;6078:15;6070:23;;5792:308;;;:::o;6106:154::-;6190:6;6185:3;6180;6167:30;6252:1;6243:6;6238:3;6234:16;6227:27;6106:154;;;:::o;6266:412::-;6344:5;6369:66;6385:49;6427:6;6385:49;:::i;:::-;6369:66;:::i;:::-;6360:75;;6458:6;6451:5;6444:21;6496:4;6489:5;6485:16;6534:3;6525:6;6520:3;6516:16;6513:25;6510:112;;;6541:79;;:::i;:::-;6510:112;6631:41;6665:6;6660:3;6655;6631:41;:::i;:::-;6350:328;6266:412;;;;;:::o;6698:340::-;6754:5;6803:3;6796:4;6788:6;6784:17;6780:27;6770:122;;6811:79;;:::i;:::-;6770:122;6928:6;6915:20;6953:79;7028:3;7020:6;7013:4;7005:6;7001:17;6953:79;:::i;:::-;6944:88;;6760:278;6698:340;;;;:::o;7044:509::-;7113:6;7162:2;7150:9;7141:7;7137:23;7133:32;7130:119;;;7168:79;;:::i;:::-;7130:119;7316:1;7305:9;7301:17;7288:31;7346:18;7338:6;7335:30;7332:117;;;7368:79;;:::i;:::-;7332:117;7473:63;7528:7;7519:6;7508:9;7504:22;7473:63;:::i;:::-;7463:73;;7259:287;7044:509;;;;:::o;7559:118::-;7646:24;7664:5;7646:24;:::i;:::-;7641:3;7634:37;7559:118;;:::o;7683:222::-;7776:4;7814:2;7803:9;7799:18;7791:26;;7827:71;7895:1;7884:9;7880:17;7871:6;7827:71;:::i;:::-;7683:222;;;;:::o;7911:619::-;7988:6;7996;8004;8053:2;8041:9;8032:7;8028:23;8024:32;8021:119;;;8059:79;;:::i;:::-;8021:119;8179:1;8204:53;8249:7;8240:6;8229:9;8225:22;8204:53;:::i;:::-;8194:63;;8150:117;8306:2;8332:53;8377:7;8368:6;8357:9;8353:22;8332:53;:::i;:::-;8322:63;;8277:118;8434:2;8460:53;8505:7;8496:6;8485:9;8481:22;8460:53;:::i;:::-;8450:63;;8405:118;7911:619;;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:114::-;8938:6;8972:5;8966:12;8956:22;;8871:114;;;:::o;8991:184::-;9090:11;9124:6;9119:3;9112:19;9164:4;9159:3;9155:14;9140:29;;8991:184;;;;:::o;9181:132::-;9248:4;9271:3;9263:11;;9301:4;9296:3;9292:14;9284:22;;9181:132;;;:::o;9319:108::-;9396:24;9414:5;9396:24;:::i;:::-;9391:3;9384:37;9319:108;;:::o;9433:179::-;9502:10;9523:46;9565:3;9557:6;9523:46;:::i;:::-;9601:4;9596:3;9592:14;9578:28;;9433:179;;;;:::o;9618:113::-;9688:4;9720;9715:3;9711:14;9703:22;;9618:113;;;:::o;9767:732::-;9886:3;9915:54;9963:5;9915:54;:::i;:::-;9985:86;10064:6;10059:3;9985:86;:::i;:::-;9978:93;;10095:56;10145:5;10095:56;:::i;:::-;10174:7;10205:1;10190:284;10215:6;10212:1;10209:13;10190:284;;;10291:6;10285:13;10318:63;10377:3;10362:13;10318:63;:::i;:::-;10311:70;;10404:60;10457:6;10404:60;:::i;:::-;10394:70;;10250:224;10237:1;10234;10230:9;10225:14;;10190:284;;;10194:14;10490:3;10483:10;;9891:608;;;9767:732;;;;:::o;10505:373::-;10648:4;10686:2;10675:9;10671:18;10663:26;;10735:9;10729:4;10725:20;10721:1;10710:9;10706:17;10699:47;10763:108;10866:4;10857:6;10763:108;:::i;:::-;10755:116;;10505:373;;;;:::o;10884:116::-;10954:21;10969:5;10954:21;:::i;:::-;10947:5;10944:32;10934:60;;10990:1;10987;10980:12;10934:60;10884:116;:::o;11006:133::-;11049:5;11087:6;11074:20;11065:29;;11103:30;11127:5;11103:30;:::i;:::-;11006:133;;;;:::o;11145:468::-;11210:6;11218;11267:2;11255:9;11246:7;11242:23;11238:32;11235:119;;;11273:79;;:::i;:::-;11235:119;11393:1;11418:53;11463:7;11454:6;11443:9;11439:22;11418:53;:::i;:::-;11408:63;;11364:117;11520:2;11546:50;11588:7;11579:6;11568:9;11564:22;11546:50;:::i;:::-;11536:60;;11491:115;11145:468;;;;;:::o;11619:307::-;11680:4;11770:18;11762:6;11759:30;11756:56;;;11792:18;;:::i;:::-;11756:56;11830:29;11852:6;11830:29;:::i;:::-;11822:37;;11914:4;11908;11904:15;11896:23;;11619:307;;;:::o;11932:410::-;12009:5;12034:65;12050:48;12091:6;12050:48;:::i;:::-;12034:65;:::i;:::-;12025:74;;12122:6;12115:5;12108:21;12160:4;12153:5;12149:16;12198:3;12189:6;12184:3;12180:16;12177:25;12174:112;;;12205:79;;:::i;:::-;12174:112;12295:41;12329:6;12324:3;12319;12295:41;:::i;:::-;12015:327;11932:410;;;;;:::o;12361:338::-;12416:5;12465:3;12458:4;12450:6;12446:17;12442:27;12432:122;;12473:79;;:::i;:::-;12432:122;12590:6;12577:20;12615:78;12689:3;12681:6;12674:4;12666:6;12662:17;12615:78;:::i;:::-;12606:87;;12422:277;12361:338;;;;:::o;12705:943::-;12800:6;12808;12816;12824;12873:3;12861:9;12852:7;12848:23;12844:33;12841:120;;;12880:79;;:::i;:::-;12841:120;13000:1;13025:53;13070:7;13061:6;13050:9;13046:22;13025:53;:::i;:::-;13015:63;;12971:117;13127:2;13153:53;13198:7;13189:6;13178:9;13174:22;13153:53;:::i;:::-;13143:63;;13098:118;13255:2;13281:53;13326:7;13317:6;13306:9;13302:22;13281:53;:::i;:::-;13271:63;;13226:118;13411:2;13400:9;13396:18;13383:32;13442:18;13434:6;13431:30;13428:117;;;13464:79;;:::i;:::-;13428:117;13569:62;13623:7;13614:6;13603:9;13599:22;13569:62;:::i;:::-;13559:72;;13354:287;12705:943;;;;;;;:::o;13654:114::-;13721:6;13755:5;13749:12;13739:22;;13654:114;;;:::o;13774:184::-;13873:11;13907:6;13902:3;13895:19;13947:4;13942:3;13938:14;13923:29;;13774:184;;;;:::o;13964:132::-;14031:4;14054:3;14046:11;;14084:4;14079:3;14075:14;14067:22;;13964:132;;;:::o;14102:108::-;14179:24;14197:5;14179:24;:::i;:::-;14174:3;14167:37;14102:108;;:::o;14216:179::-;14285:10;14306:46;14348:3;14340:6;14306:46;:::i;:::-;14384:4;14379:3;14375:14;14361:28;;14216:179;;;;:::o;14401:113::-;14471:4;14503;14498:3;14494:14;14486:22;;14401:113;;;:::o;14550:732::-;14669:3;14698:54;14746:5;14698:54;:::i;:::-;14768:86;14847:6;14842:3;14768:86;:::i;:::-;14761:93;;14878:56;14928:5;14878:56;:::i;:::-;14957:7;14988:1;14973:284;14998:6;14995:1;14992:13;14973:284;;;15074:6;15068:13;15101:63;15160:3;15145:13;15101:63;:::i;:::-;15094:70;;15187:60;15240:6;15187:60;:::i;:::-;15177:70;;15033:224;15020:1;15017;15013:9;15008:14;;14973:284;;;14977:14;15273:3;15266:10;;14674:608;;;14550:732;;;;:::o;15288:373::-;15431:4;15469:2;15458:9;15454:18;15446:26;;15518:9;15512:4;15508:20;15504:1;15493:9;15489:17;15482:47;15546:108;15649:4;15640:6;15546:108;:::i;:::-;15538:116;;15288:373;;;;:::o;15667:474::-;15735:6;15743;15792:2;15780:9;15771:7;15767:23;15763:32;15760:119;;;15798:79;;:::i;:::-;15760:119;15918:1;15943:53;15988:7;15979:6;15968:9;15964:22;15943:53;:::i;:::-;15933:63;;15889:117;16045:2;16071:53;16116:7;16107:6;16096:9;16092:22;16071:53;:::i;:::-;16061:63;;16016:118;15667:474;;;;;:::o;16147:182::-;16287:34;16283:1;16275:6;16271:14;16264:58;16147:182;:::o;16335:366::-;16477:3;16498:67;16562:2;16557:3;16498:67;:::i;:::-;16491:74;;16574:93;16663:3;16574:93;:::i;:::-;16692:2;16687:3;16683:12;16676:19;;16335:366;;;:::o;16707:419::-;16873:4;16911:2;16900:9;16896:18;16888:26;;16960:9;16954:4;16950:20;16946:1;16935:9;16931:17;16924:47;16988:131;17114:4;16988:131;:::i;:::-;16980:139;;16707:419;;;:::o;17132:180::-;17180:77;17177:1;17170:88;17277:4;17274:1;17267:15;17301:4;17298:1;17291:15;17318:320;17362:6;17399:1;17393:4;17389:12;17379:22;;17446:1;17440:4;17436:12;17467:18;17457:81;;17523:4;17515:6;17511:17;17501:27;;17457:81;17585:2;17577:6;17574:14;17554:18;17551:38;17548:84;;;17604:18;;:::i;:::-;17548:84;17369:269;17318:320;;;:::o;17644:231::-;17784:34;17780:1;17772:6;17768:14;17761:58;17853:14;17848:2;17840:6;17836:15;17829:39;17644:231;:::o;17881:366::-;18023:3;18044:67;18108:2;18103:3;18044:67;:::i;:::-;18037:74;;18120:93;18209:3;18120:93;:::i;:::-;18238:2;18233:3;18229:12;18222:19;;17881:366;;;:::o;18253:419::-;18419:4;18457:2;18446:9;18442:18;18434:26;;18506:9;18500:4;18496:20;18492:1;18481:9;18477:17;18470:47;18534:131;18660:4;18534:131;:::i;:::-;18526:139;;18253:419;;;:::o;18678:220::-;18818:34;18814:1;18806:6;18802:14;18795:58;18887:3;18882:2;18874:6;18870:15;18863:28;18678:220;:::o;18904:366::-;19046:3;19067:67;19131:2;19126:3;19067:67;:::i;:::-;19060:74;;19143:93;19232:3;19143:93;:::i;:::-;19261:2;19256:3;19252:12;19245:19;;18904:366;;;:::o;19276:419::-;19442:4;19480:2;19469:9;19465:18;19457:26;;19529:9;19523:4;19519:20;19515:1;19504:9;19500:17;19493:47;19557:131;19683:4;19557:131;:::i;:::-;19549:139;;19276:419;;;:::o;19701:243::-;19841:34;19837:1;19829:6;19825:14;19818:58;19910:26;19905:2;19897:6;19893:15;19886:51;19701:243;:::o;19950:366::-;20092:3;20113:67;20177:2;20172:3;20113:67;:::i;:::-;20106:74;;20189:93;20278:3;20189:93;:::i;:::-;20307:2;20302:3;20298:12;20291:19;;19950:366;;;:::o;20322:419::-;20488:4;20526:2;20515:9;20511:18;20503:26;;20575:9;20569:4;20565:20;20561:1;20550:9;20546:17;20539:47;20603:131;20729:4;20603:131;:::i;:::-;20595:139;;20322:419;;;:::o;20747:236::-;20887:34;20883:1;20875:6;20871:14;20864:58;20956:19;20951:2;20943:6;20939:15;20932:44;20747:236;:::o;20989:366::-;21131:3;21152:67;21216:2;21211:3;21152:67;:::i;:::-;21145:74;;21228:93;21317:3;21228:93;:::i;:::-;21346:2;21341:3;21337:12;21330:19;;20989:366;;;:::o;21361:419::-;21527:4;21565:2;21554:9;21550:18;21542:26;;21614:9;21608:4;21604:20;21600:1;21589:9;21585:17;21578:47;21642:131;21768:4;21642:131;:::i;:::-;21634:139;;21361:419;;;:::o;21786:177::-;21926:29;21922:1;21914:6;21910:14;21903:53;21786:177;:::o;21969:366::-;22111:3;22132:67;22196:2;22191:3;22132:67;:::i;:::-;22125:74;;22208:93;22297:3;22208:93;:::i;:::-;22326:2;22321:3;22317:12;22310:19;;21969:366;;;:::o;22341:419::-;22507:4;22545:2;22534:9;22530:18;22522:26;;22594:9;22588:4;22584:20;22580:1;22569:9;22565:17;22558:47;22622:131;22748:4;22622:131;:::i;:::-;22614:139;;22341:419;;;:::o;22766:179::-;22906:31;22902:1;22894:6;22890:14;22883:55;22766:179;:::o;22951:366::-;23093:3;23114:67;23178:2;23173:3;23114:67;:::i;:::-;23107:74;;23190:93;23279:3;23190:93;:::i;:::-;23308:2;23303:3;23299:12;23292:19;;22951:366;;;:::o;23323:419::-;23489:4;23527:2;23516:9;23512:18;23504:26;;23576:9;23570:4;23566:20;23562:1;23551:9;23547:17;23540:47;23604:131;23730:4;23604:131;:::i;:::-;23596:139;;23323:419;;;:::o;23748:230::-;23888:34;23884:1;23876:6;23872:14;23865:58;23957:13;23952:2;23944:6;23940:15;23933:38;23748:230;:::o;23984:366::-;24126:3;24147:67;24211:2;24206:3;24147:67;:::i;:::-;24140:74;;24223:93;24312:3;24223:93;:::i;:::-;24341:2;24336:3;24332:12;24325:19;;23984:366;;;:::o;24356:419::-;24522:4;24560:2;24549:9;24545:18;24537:26;;24609:9;24603:4;24599:20;24595:1;24584:9;24580:17;24573:47;24637:131;24763:4;24637:131;:::i;:::-;24629:139;;24356:419;;;:::o;24781:243::-;24921:34;24917:1;24909:6;24905:14;24898:58;24990:26;24985:2;24977:6;24973:15;24966:51;24781:243;:::o;25030:366::-;25172:3;25193:67;25257:2;25252:3;25193:67;:::i;:::-;25186:74;;25269:93;25358:3;25269:93;:::i;:::-;25387:2;25382:3;25378:12;25371:19;;25030:366;;;:::o;25402:419::-;25568:4;25606:2;25595:9;25591:18;25583:26;;25655:9;25649:4;25645:20;25641:1;25630:9;25626:17;25619:47;25683:131;25809:4;25683:131;:::i;:::-;25675:139;;25402:419;;;:::o;25827:181::-;25967:33;25963:1;25955:6;25951:14;25944:57;25827:181;:::o;26014:366::-;26156:3;26177:67;26241:2;26236:3;26177:67;:::i;:::-;26170:74;;26253:93;26342:3;26253:93;:::i;:::-;26371:2;26366:3;26362:12;26355:19;;26014:366;;;:::o;26386:419::-;26552:4;26590:2;26579:9;26575:18;26567:26;;26639:9;26633:4;26629:20;26625:1;26614:9;26610:17;26603:47;26667:131;26793:4;26667:131;:::i;:::-;26659:139;;26386:419;;;:::o;26811:240::-;26951:34;26947:1;26939:6;26935:14;26928:58;27020:23;27015:2;27007:6;27003:15;26996:48;26811:240;:::o;27057:366::-;27199:3;27220:67;27284:2;27279:3;27220:67;:::i;:::-;27213:74;;27296:93;27385:3;27296:93;:::i;:::-;27414:2;27409:3;27405:12;27398:19;;27057:366;;;:::o;27429:419::-;27595:4;27633:2;27622:9;27618:18;27610:26;;27682:9;27676:4;27672:20;27668:1;27657:9;27653:17;27646:47;27710:131;27836:4;27710:131;:::i;:::-;27702:139;;27429:419;;;:::o;27854:180::-;27902:77;27899:1;27892:88;27999:4;27996:1;27989:15;28023:4;28020:1;28013:15;28040:233;28079:3;28102:24;28120:5;28102:24;:::i;:::-;28093:33;;28148:66;28141:5;28138:77;28135:103;;;28218:18;;:::i;:::-;28135:103;28265:1;28258:5;28254:13;28247:20;;28040:233;;;:::o;28279:180::-;28327:77;28324:1;28317:88;28424:4;28421:1;28414:15;28448:4;28445:1;28438:15;28465:228;28605:34;28601:1;28593:6;28589:14;28582:58;28674:11;28669:2;28661:6;28657:15;28650:36;28465:228;:::o;28699:366::-;28841:3;28862:67;28926:2;28921:3;28862:67;:::i;:::-;28855:74;;28938:93;29027:3;28938:93;:::i;:::-;29056:2;29051:3;29047:12;29040:19;;28699:366;;;:::o;29071:419::-;29237:4;29275:2;29264:9;29260:18;29252:26;;29324:9;29318:4;29314:20;29310:1;29299:9;29295:17;29288:47;29352:131;29478:4;29352:131;:::i;:::-;29344:139;;29071:419;;;:::o;29496:229::-;29636:34;29632:1;29624:6;29620:14;29613:58;29705:12;29700:2;29692:6;29688:15;29681:37;29496:229;:::o;29731:366::-;29873:3;29894:67;29958:2;29953:3;29894:67;:::i;:::-;29887:74;;29970:93;30059:3;29970:93;:::i;:::-;30088:2;30083:3;30079:12;30072:19;;29731:366;;;:::o;30103:419::-;30269:4;30307:2;30296:9;30292:18;30284:26;;30356:9;30350:4;30346:20;30342:1;30331:9;30327:17;30320:47;30384:131;30510:4;30384:131;:::i;:::-;30376:139;;30103:419;;;:::o;30528:179::-;30668:31;30664:1;30656:6;30652:14;30645:55;30528:179;:::o;30713:366::-;30855:3;30876:67;30940:2;30935:3;30876:67;:::i;:::-;30869:74;;30952:93;31041:3;30952:93;:::i;:::-;31070:2;31065:3;31061:12;31054:19;;30713:366;;;:::o;31085:419::-;31251:4;31289:2;31278:9;31274:18;31266:26;;31338:9;31332:4;31328:20;31324:1;31313:9;31309:17;31302:47;31366:131;31492:4;31366:131;:::i;:::-;31358:139;;31085:419;;;:::o;31510:234::-;31650:34;31646:1;31638:6;31634:14;31627:58;31719:17;31714:2;31706:6;31702:15;31695:42;31510:234;:::o;31750:366::-;31892:3;31913:67;31977:2;31972:3;31913:67;:::i;:::-;31906:74;;31989:93;32078:3;31989:93;:::i;:::-;32107:2;32102:3;32098:12;32091:19;;31750:366;;;:::o;32122:419::-;32288:4;32326:2;32315:9;32311:18;32303:26;;32375:9;32369:4;32365:20;32361:1;32350:9;32346:17;32339:47;32403:131;32529:4;32403:131;:::i;:::-;32395:139;;32122:419;;;:::o;32547:148::-;32649:11;32686:3;32671:18;;32547:148;;;;:::o;32701:377::-;32807:3;32835:39;32868:5;32835:39;:::i;:::-;32890:89;32972:6;32967:3;32890:89;:::i;:::-;32883:96;;32988:52;33033:6;33028:3;33021:4;33014:5;33010:16;32988:52;:::i;:::-;33065:6;33060:3;33056:16;33049:23;;32811:267;32701:377;;;;:::o;33084:435::-;33264:3;33286:95;33377:3;33368:6;33286:95;:::i;:::-;33279:102;;33398:95;33489:3;33480:6;33398:95;:::i;:::-;33391:102;;33510:3;33503:10;;33084:435;;;;;:::o;33525:229::-;33665:34;33661:1;33653:6;33649:14;33642:58;33734:12;33729:2;33721:6;33717:15;33710:37;33525:229;:::o;33760:366::-;33902:3;33923:67;33987:2;33982:3;33923:67;:::i;:::-;33916:74;;33999:93;34088:3;33999:93;:::i;:::-;34117:2;34112:3;34108:12;34101:19;;33760:366;;;:::o;34132:419::-;34298:4;34336:2;34325:9;34321:18;34313:26;;34385:9;34379:4;34375:20;34371:1;34360:9;34356:17;34349:47;34413:131;34539:4;34413:131;:::i;:::-;34405:139;;34132:419;;;:::o;34557:182::-;34697:34;34693:1;34685:6;34681:14;34674:58;34557:182;:::o;34745:366::-;34887:3;34908:67;34972:2;34967:3;34908:67;:::i;:::-;34901:74;;34984:93;35073:3;34984:93;:::i;:::-;35102:2;35097:3;35093:12;35086:19;;34745:366;;;:::o;35117:419::-;35283:4;35321:2;35310:9;35306:18;35298:26;;35370:9;35364:4;35360:20;35356:1;35345:9;35341:17;35334:47;35398:131;35524:4;35398:131;:::i;:::-;35390:139;;35117:419;;;:::o;35542:180::-;35590:77;35587:1;35580:88;35687:4;35684:1;35677:15;35711:4;35708:1;35701:15;35728:176;35760:1;35777:20;35795:1;35777:20;:::i;:::-;35772:25;;35811:20;35829:1;35811:20;:::i;:::-;35806:25;;35850:1;35840:35;;35855:18;;:::i;:::-;35840:35;35896:1;35893;35889:9;35884:14;;35728:176;;;;:::o;35910:191::-;35950:4;35970:20;35988:1;35970:20;:::i;:::-;35965:25;;36004:20;36022:1;36004:20;:::i;:::-;35999:25;;36043:1;36040;36037:8;36034:34;;;36048:18;;:::i;:::-;36034:34;36093:1;36090;36086:9;36078:17;;35910:191;;;;:::o;36107:225::-;36247:34;36243:1;36235:6;36231:14;36224:58;36316:8;36311:2;36303:6;36299:15;36292:33;36107:225;:::o;36338:366::-;36480:3;36501:67;36565:2;36560:3;36501:67;:::i;:::-;36494:74;;36577:93;36666:3;36577:93;:::i;:::-;36695:2;36690:3;36686:12;36679:19;;36338:366;;;:::o;36710:419::-;36876:4;36914:2;36903:9;36899:18;36891:26;;36963:9;36957:4;36953:20;36949:1;36938:9;36934:17;36927:47;36991:131;37117:4;36991:131;:::i;:::-;36983:139;;36710:419;;;:::o;37135:231::-;37275:34;37271:1;37263:6;37259:14;37252:58;37344:14;37339:2;37331:6;37327:15;37320:39;37135:231;:::o;37372:366::-;37514:3;37535:67;37599:2;37594:3;37535:67;:::i;:::-;37528:74;;37611:93;37700:3;37611:93;:::i;:::-;37729:2;37724:3;37720:12;37713:19;;37372:366;;;:::o;37744:419::-;37910:4;37948:2;37937:9;37933:18;37925:26;;37997:9;37991:4;37987:20;37983:1;37972:9;37968:17;37961:47;38025:131;38151:4;38025:131;:::i;:::-;38017:139;;37744:419;;;:::o;38169:228::-;38309:34;38305:1;38297:6;38293:14;38286:58;38378:11;38373:2;38365:6;38361:15;38354:36;38169:228;:::o;38403:366::-;38545:3;38566:67;38630:2;38625:3;38566:67;:::i;:::-;38559:74;;38642:93;38731:3;38642:93;:::i;:::-;38760:2;38755:3;38751:12;38744:19;;38403:366;;;:::o;38775:419::-;38941:4;38979:2;38968:9;38964:18;38956:26;;39028:9;39022:4;39018:20;39014:1;39003:9;38999:17;38992:47;39056:131;39182:4;39056:131;:::i;:::-;39048:139;;38775:419;;;:::o;39200:223::-;39340:34;39336:1;39328:6;39324:14;39317:58;39409:6;39404:2;39396:6;39392:15;39385:31;39200:223;:::o;39429:366::-;39571:3;39592:67;39656:2;39651:3;39592:67;:::i;:::-;39585:74;;39668:93;39757:3;39668:93;:::i;:::-;39786:2;39781:3;39777:12;39770:19;;39429:366;;;:::o;39801:419::-;39967:4;40005:2;39994:9;39990:18;39982:26;;40054:9;40048:4;40044:20;40040:1;40029:9;40025:17;40018:47;40082:131;40208:4;40082:131;:::i;:::-;40074:139;;39801:419;;;:::o;40226:305::-;40266:3;40285:20;40303:1;40285:20;:::i;:::-;40280:25;;40319:20;40337:1;40319:20;:::i;:::-;40314:25;;40473:1;40405:66;40401:74;40398:1;40395:81;40392:107;;;40479:18;;:::i;:::-;40392:107;40523:1;40520;40516:9;40509:16;;40226:305;;;;:::o;40537:348::-;40577:7;40600:20;40618:1;40600:20;:::i;:::-;40595:25;;40634:20;40652:1;40634:20;:::i;:::-;40629:25;;40822:1;40754:66;40750:74;40747:1;40744:81;40739:1;40732:9;40725:17;40721:105;40718:131;;;40829:18;;:::i;:::-;40718:131;40877:1;40874;40870:9;40859:20;;40537:348;;;;:::o;40891:175::-;41031:27;41027:1;41019:6;41015:14;41008:51;40891:175;:::o;41072:366::-;41214:3;41235:67;41299:2;41294:3;41235:67;:::i;:::-;41228:74;;41311:93;41400:3;41311:93;:::i;:::-;41429:2;41424:3;41420:12;41413:19;;41072:366;;;:::o;41444:419::-;41610:4;41648:2;41637:9;41633:18;41625:26;;41697:9;41691:4;41687:20;41683:1;41672:9;41668:17;41661:47;41725:131;41851:4;41725:131;:::i;:::-;41717:139;;41444:419;;;:::o;41869:237::-;42009:34;42005:1;41997:6;41993:14;41986:58;42078:20;42073:2;42065:6;42061:15;42054:45;41869:237;:::o;42112:366::-;42254:3;42275:67;42339:2;42334:3;42275:67;:::i;:::-;42268:74;;42351:93;42440:3;42351:93;:::i;:::-;42469:2;42464:3;42460:12;42453:19;;42112:366;;;:::o;42484:419::-;42650:4;42688:2;42677:9;42673:18;42665:26;;42737:9;42731:4;42727:20;42723:1;42712:9;42708:17;42701:47;42765:131;42891:4;42765:131;:::i;:::-;42757:139;;42484:419;;;:::o;42909:185::-;42949:1;42966:20;42984:1;42966:20;:::i;:::-;42961:25;;43000:20;43018:1;43000:20;:::i;:::-;42995:25;;43039:1;43029:35;;43044:18;;:::i;:::-;43029:35;43086:1;43083;43079:9;43074:14;;42909:185;;;;:::o;43100:98::-;43151:6;43185:5;43179:12;43169:22;;43100:98;;;:::o;43204:168::-;43287:11;43321:6;43316:3;43309:19;43361:4;43356:3;43352:14;43337:29;;43204:168;;;;:::o;43378:360::-;43464:3;43492:38;43524:5;43492:38;:::i;:::-;43546:70;43609:6;43604:3;43546:70;:::i;:::-;43539:77;;43625:52;43670:6;43665:3;43658:4;43651:5;43647:16;43625:52;:::i;:::-;43702:29;43724:6;43702:29;:::i;:::-;43697:3;43693:39;43686:46;;43468:270;43378:360;;;;:::o;43744:640::-;43939:4;43977:3;43966:9;43962:19;43954:27;;43991:71;44059:1;44048:9;44044:17;44035:6;43991:71;:::i;:::-;44072:72;44140:2;44129:9;44125:18;44116:6;44072:72;:::i;:::-;44154;44222:2;44211:9;44207:18;44198:6;44154:72;:::i;:::-;44273:9;44267:4;44263:20;44258:2;44247:9;44243:18;44236:48;44301:76;44372:4;44363:6;44301:76;:::i;:::-;44293:84;;43744:640;;;;;;;:::o;44390:141::-;44446:5;44477:6;44471:13;44462:22;;44493:32;44519:5;44493:32;:::i;:::-;44390:141;;;;:::o;44537:349::-;44606:6;44655:2;44643:9;44634:7;44630:23;44626:32;44623:119;;;44661:79;;:::i;:::-;44623:119;44781:1;44806:63;44861:7;44852:6;44841:9;44837:22;44806:63;:::i;:::-;44796:73;;44752:127;44537:349;;;;:::o;44892:182::-;45032:34;45028:1;45020:6;45016:14;45009:58;44892:182;:::o;45080:366::-;45222:3;45243:67;45307:2;45302:3;45243:67;:::i;:::-;45236:74;;45319:93;45408:3;45319:93;:::i;:::-;45437:2;45432:3;45428:12;45421:19;;45080:366;;;:::o;45452:419::-;45618:4;45656:2;45645:9;45641:18;45633:26;;45705:9;45699:4;45695:20;45691:1;45680:9;45676:17;45669:47;45733:131;45859:4;45733:131;:::i;:::-;45725:139;;45452:419;;;:::o;45877:178::-;46017:30;46013:1;46005:6;46001:14;45994:54;45877:178;:::o;46061:366::-;46203:3;46224:67;46288:2;46283:3;46224:67;:::i;:::-;46217:74;;46300:93;46389:3;46300:93;:::i;:::-;46418:2;46413:3;46409:12;46402:19;;46061:366;;;:::o;46433:419::-;46599:4;46637:2;46626:9;46622:18;46614:26;;46686:9;46680:4;46676:20;46672:1;46661:9;46657:17;46650:47;46714:131;46840:4;46714:131;:::i;:::-;46706:139;;46433:419;;;:::o

Swarm Source

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