ETH Price: $2,215.46 (-3.43%)

Token

OceanStarsClub (OSC)
 

Overview

Max Total Supply

273 OSC

Holders

63

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 OSC
0x63164bdea3e9c20510cd6ea2586d8445fbc7798f
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:
OceanStarsClub

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-12
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * 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;
    }
    }
}


pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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);
}

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);
}


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


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

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

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);
}




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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


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}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

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

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

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

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

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

        _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, true);

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

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

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

    function _burnSave(address owner, uint256 tokenId) internal virtual {

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

        // 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, true);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
    private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 tokenId, bool isDelete) internal virtual { }
}

pragma solidity ^0.8.0;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 tokenId, bool isDelete) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId, isDelete);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0) && isDelete) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from && isDelete) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

pragma solidity ^0.8.0;


contract OceanStarsClub is ERC721Enumerable, Ownable{
    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;

    address public goldenTicketContract;
    uint256 public constant NFT_PRICE = 40000000000000000; // 0.04 ETH
    uint public constant MAX_NFT_PURCHASE = 20;
    uint256 public MAX_SUPPLY = 10000;
    bool public saleIsActive = false;
    string public PROVENANCE = "";

    uint256 public startingIndex;
    uint256 public startingIndexBlock;

    string private _baseURIExtended;
    mapping (uint256 => string) _tokenURIs;

    constructor() ERC721("OceanStarsClub","OSC"){
    }

    function setGoldenTicketContract(address contractAddress) public onlyOwner {
        goldenTicketContract = contractAddress;
    }

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

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

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

    function reserveTokens(uint256 num) public onlyOwner {
        uint supply = totalSupply();
        uint i;
        for (i = 0; i < num; i++) {
            _safeMint(msg.sender, supply + i);
        }

        if (startingIndexBlock == 0) {
            startingIndexBlock = block.number;
        }
    }

    function mint(uint numberOfTokens) public payable {
        require(saleIsActive, "Sale is not active at the moment");
        require(numberOfTokens > 0, "Number of tokens can not be less than or equal to 0");
        require(totalSupply().add(numberOfTokens) <= MAX_SUPPLY, "Purchase would exceed max supply");
        require(numberOfTokens <= MAX_NFT_PURCHASE,"Can only mint up to 10 per purchase");
        require(NFT_PRICE.mul(numberOfTokens) == msg.value, "Sent ether value is incorrect");

        for (uint i = 0; i < numberOfTokens; i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function compose(uint256 useTokenId1, uint256 useTokenId2, uint256 useTokenId3, uint256 useTokenId4, uint256 useTokenId5, uint256 useTokenId6) public {
        require(goldenTicketContract != address(0), "Golden Ticket contract address need be set");

        address from = msg.sender;
        require(ERC721.ownerOf(useTokenId1) == from, "ERC721: use of token1 that is not own");
        require(ERC721.ownerOf(useTokenId2) == from, "ERC721: use of token2 that is not own");
        require(ERC721.ownerOf(useTokenId3) == from, "ERC721: use of token3 that is not own");
        require(ERC721.ownerOf(useTokenId4) == from, "ERC721: use of token4 that is not own");
        require(ERC721.ownerOf(useTokenId5) == from, "ERC721: use of token5 that is not own");
        require(ERC721.ownerOf(useTokenId6) == from, "ERC721: use of token6 that is not own");

        _burnSave(from, useTokenId1);
        _burnSave(from, useTokenId2);
        _burnSave(from, useTokenId3);
        _burnSave(from, useTokenId4);
        _burnSave(from, useTokenId5);
        _burnSave(from, useTokenId6);

        GoldenTicket target = GoldenTicket(goldenTicketContract);
        bool result = target.compose(from);
        require(result, "Golden ticket compose failed");
    }

    function calcStartingIndex() public onlyOwner {
        require(startingIndex == 0, "Starting index has already been set");
        require(startingIndexBlock != 0, "Starting index has not been set yet");

        startingIndex = uint(blockhash(startingIndexBlock)) % MAX_SUPPLY;
        // 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 = uint(blockhash(block.number - 1)) % MAX_SUPPLY;
        }

        // To prevent original sequence
        if (startingIndex == 0) {
            startingIndex = startingIndex.add(1);
        }
    }

    function emergencySetStartingIndexBlock() public onlyOwner {
        require(startingIndex == 0, "Starting index is already set");
        startingIndexBlock = block.number;
    }

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

    // Sets base URI for all tokens, only able to be called by contract owner
    function setBaseURI(string memory baseURI_) external onlyOwner {
        _baseURIExtended = baseURI_;
    }

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.
        return string(abi.encodePacked(base, tokenId.toString()));
    }
}

interface GoldenTicket {
    function compose(address owner) external returns (bool);
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_NFT_PURCHASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"calcStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"useTokenId1","type":"uint256"},{"internalType":"uint256","name":"useTokenId2","type":"uint256"},{"internalType":"uint256","name":"useTokenId3","type":"uint256"},{"internalType":"uint256","name":"useTokenId4","type":"uint256"},{"internalType":"uint256","name":"useTokenId5","type":"uint256"},{"internalType":"uint256","name":"useTokenId6","type":"uint256"}],"name":"compose","outputs":[],"stateMutability":"nonpayable","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":"goldenTicketContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"reserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"address","name":"contractAddress","type":"address"}],"name":"setGoldenTicketContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052612710600c556000600d60006101000a81548160ff02191690831515021790555060405180602001604052806000815250600e90805190602001906200004c929190620001ba565b503480156200005a57600080fd5b506040518060400160405280600e81526020017f4f6365616e5374617273436c75620000000000000000000000000000000000008152506040518060400160405280600381526020017f4f534300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000df929190620001ba565b508060019080519060200190620000f8929190620001ba565b50505060006200010d620001b260201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002cf565b600033905090565b828054620001c8906200026a565b90600052602060002090601f016020900481019282620001ec576000855562000238565b82601f106200020757805160ff191683800117855562000238565b8280016001018555821562000238579182015b82811115620002375782518255916020019190600101906200021a565b5b5090506200024791906200024b565b5090565b5b80821115620002665760008160009055506001016200024c565b5090565b600060028204905060018216806200028357607f821691505b602082108114156200029a5762000299620002a0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6151a080620002df6000396000f3fe60806040526004361061021a5760003560e01c80636373a6b111610123578063a22cb465116100ab578063e13f351a1161006f578063e13f351a1461078a578063e36d6498146107a1578063e985e9c5146107cc578063eb8d244414610809578063f2fde38b146108345761021a565b8063a22cb465146106a7578063b88d4fde146106d0578063c87b56dd146106f9578063cb774d4714610736578063d031370b146107615761021a565b8063715018a6116100f2578063715018a6146106075780637d17fcbe1461061e5780638da5cb5b1461063557806395d89b4114610660578063a0712d681461068b5761021a565b80636373a6b114610549578063676dd563146105745780636e47af201461059f57806370a08231146105ca5761021a565b806332cb6b0c116101a657806342842e0e1161017557806342842e0e146104545780634f6ccce71461047d57806355f804b3146104ba5780635e28aa88146104e35780636352211e1461050c5761021a565b806332cb6b0c146103d257806334918dfd146103fd578063350643a9146104145780633ccfd60b1461043d5761021a565b8063095ea7b3116101ed578063095ea7b3146102ef578063109695231461031857806318160ddd1461034157806323b872dd1461036c5780632f745c59146103955761021a565b806301ffc9a71461021f578063020b39cc1461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613988565b61085d565b604051610253919061485e565b60405180910390f35b34801561026857600080fd5b506102716108d7565b60405161027e9190614cdb565b60405180910390f35b34801561029357600080fd5b5061029c6108dc565b6040516102a99190614879565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613a1b565b61096e565b6040516102e691906147f7565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613923565b6109f3565b005b34801561032457600080fd5b5061033f600480360381019061033a91906139da565b610b0b565b005b34801561034d57600080fd5b50610356610ba1565b6040516103639190614cdb565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e919061381d565b610bae565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190613923565b610c0e565b6040516103c99190614cdb565b60405180910390f35b3480156103de57600080fd5b506103e7610cb3565b6040516103f49190614cdb565b60405180910390f35b34801561040957600080fd5b50610412610cb9565b005b34801561042057600080fd5b5061043b60048036038101906104369190613a44565b610d61565b005b34801561044957600080fd5b506104526111f9565b005b34801561046057600080fd5b5061047b6004803603810190610476919061381d565b6112c4565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613a1b565b6112e4565b6040516104b19190614cdb565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906139da565b61137b565b005b3480156104ef57600080fd5b5061050a600480360381019061050591906137b8565b611411565b005b34801561051857600080fd5b50610533600480360381019061052e9190613a1b565b6114d1565b60405161054091906147f7565b60405180910390f35b34801561055557600080fd5b5061055e611583565b60405161056b9190614879565b60405180910390f35b34801561058057600080fd5b50610589611611565b6040516105969190614cdb565b60405180910390f35b3480156105ab57600080fd5b506105b461161c565b6040516105c191906147f7565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec91906137b8565b611642565b6040516105fe9190614cdb565b60405180910390f35b34801561061357600080fd5b5061061c6116fa565b005b34801561062a57600080fd5b50610633611837565b005b34801561064157600080fd5b5061064a611901565b60405161065791906147f7565b60405180910390f35b34801561066c57600080fd5b5061067561192b565b6040516106829190614879565b60405180910390f35b6106a560048036038101906106a09190613a1b565b6119bd565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906138e7565b611b7f565b005b3480156106dc57600080fd5b506106f760048036038101906106f2919061386c565b611d00565b005b34801561070557600080fd5b50610720600480360381019061071b9190613a1b565b611d62565b60405161072d9190614879565b60405180910390f35b34801561074257600080fd5b5061074b611ed5565b6040516107589190614cdb565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613a1b565b611edb565b005b34801561079657600080fd5b5061079f611fae565b005b3480156107ad57600080fd5b506107b661213b565b6040516107c39190614cdb565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee91906137e1565b612141565b604051610800919061485e565b60405180910390f35b34801561081557600080fd5b5061081e6121d5565b60405161082b919061485e565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906137b8565b6121e8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108d057506108cf82612394565b5b9050919050565b601481565b6060600080546108eb90614f95565b80601f016020809104026020016040519081016040528092919081815260200182805461091790614f95565b80156109645780601f1061093957610100808354040283529160200191610964565b820191906000526020600020905b81548152906001019060200180831161094757829003601f168201915b5050505050905090565b600061097982612476565b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90614b1b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109fe826114d1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690614bdb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8e6124e2565b73ffffffffffffffffffffffffffffffffffffffff161480610abd5750610abc81610ab76124e2565b612141565b5b610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390614a3b565b60405180910390fd5b610b0683836124ea565b505050565b610b136124e2565b73ffffffffffffffffffffffffffffffffffffffff16610b31611901565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e90614b3b565b60405180910390fd5b80600e9080519060200190610b9d9291906135c7565b5050565b6000600880549050905090565b610bbf610bb96124e2565b826125a3565b610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf590614bfb565b60405180910390fd5b610c09838383612681565b505050565b6000610c1983611642565b8210610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c519061491b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c5481565b610cc16124e2565b73ffffffffffffffffffffffffffffffffffffffff16610cdf611901565b73ffffffffffffffffffffffffffffffffffffffff1614610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c90614b3b565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90614b9b565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff16610e18886114d1565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590614c7b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e8e876114d1565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb90614c9b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f04866114d1565b73ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906148db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f7a856114d1565b73ffffffffffffffffffffffffffffffffffffffff1614610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc7906148fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ff0846114d1565b73ffffffffffffffffffffffffffffffffffffffff1614611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90614b5b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611066836114d1565b73ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390614a5b565b60405180910390fd5b6110c681886128df565b6110d081876128df565b6110da81866128df565b6110e481856128df565b6110ee81846128df565b6110f881836128df565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16633d636c83846040518263ffffffff1660e01b815260040161115a91906147f7565b602060405180830381600087803b15801561117457600080fd5b505af1158015611188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ac919061395f565b9050806111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590614c3b565b60405180910390fd5b505050505050505050565b6112016124e2565b73ffffffffffffffffffffffffffffffffffffffff1661121f611901565b73ffffffffffffffffffffffffffffffffffffffff1614611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90614b3b565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112c0573d6000803e3d6000fd5b5050565b6112df83838360405180602001604052806000815250611d00565b505050565b60006112ee610ba1565b821061132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690614c1b565b60405180910390fd5b60088281548110611369577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6113836124e2565b73ffffffffffffffffffffffffffffffffffffffff166113a1611901565b73ffffffffffffffffffffffffffffffffffffffff16146113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90614b3b565b60405180910390fd5b806011908051906020019061140d9291906135c7565b5050565b6114196124e2565b73ffffffffffffffffffffffffffffffffffffffff16611437611901565b73ffffffffffffffffffffffffffffffffffffffff161461148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490614b3b565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190614a9b565b60405180910390fd5b80915050919050565b600e805461159090614f95565b80601f01602080910402602001604051908101604052809291908181526020018280546115bc90614f95565b80156116095780601f106115de57610100808354040283529160200191611609565b820191906000526020600020905b8154815290600101906020018083116115ec57829003601f168201915b505050505081565b668e1bc9bf04000081565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90614a7b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117026124e2565b73ffffffffffffffffffffffffffffffffffffffff16611720611901565b73ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614b3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61183f6124e2565b73ffffffffffffffffffffffffffffffffffffffff1661185d611901565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90614b3b565b60405180910390fd5b6000600f54146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90614a1b565b60405180910390fd5b43601081905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461193a90614f95565b80601f016020809104026020016040519081016040528092919081815260200182805461196690614f95565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b5050505050905090565b600d60009054906101000a900460ff16611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390614cbb565b60405180910390fd5b60008111611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a46906148bb565b60405180910390fd5b600c54611a6c82611a5e610ba1565b6129e590919063ffffffff16565b1115611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490614adb565b60405180910390fd5b6014811115611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae89061499b565b60405180910390fd5b34611b0c82668e1bc9bf0400006129fb90919063ffffffff16565b14611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4390614abb565b60405180910390fd5b60005b81811015611b7b57611b6833611b63610ba1565b612a11565b8080611b7390614fc7565b915050611b4f565b5050565b611b876124e2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906149db565b60405180910390fd5b8060056000611c026124e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611caf6124e2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf4919061485e565b60405180910390a35050565b611d11611d0b6124e2565b836125a3565b611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790614bfb565b60405180910390fd5b611d5c84848484612a2f565b50505050565b6060611d6d82612476565b611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390614bbb565b60405180910390fd5b6000601260008481526020019081526020016000208054611dcc90614f95565b80601f0160208091040260200160405190810160405280929190818152602001828054611df890614f95565b8015611e455780601f10611e1a57610100808354040283529160200191611e45565b820191906000526020600020905b815481529060010190602001808311611e2857829003601f168201915b505050505090506000611e56612a8b565b9050600081511415611e6c578192505050611ed0565b600082511115611ea1578082604051602001611e899291906147d3565b60405160208183030381529060405292505050611ed0565b80611eab85612b1d565b604051602001611ebc9291906147d3565b604051602081830303815290604052925050505b919050565b600f5481565b611ee36124e2565b73ffffffffffffffffffffffffffffffffffffffff16611f01611901565b73ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e90614b3b565b60405180910390fd5b6000611f61610ba1565b905060005b82811015611f9657611f83338284611f7e9190614dca565b612a11565b8080611f8e90614fc7565b915050611f66565b60006010541415611fa957436010819055505b505050565b611fb66124e2565b73ffffffffffffffffffffffffffffffffffffffff16611fd4611901565b73ffffffffffffffffffffffffffffffffffffffff161461202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190614b3b565b60405180910390fd5b6000600f541461206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690614c5b565b60405180910390fd5b600060105414156120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac9061489b565b60405180910390fd5b600c546010544060001c6120c99190615010565b600f8190555060ff6120e660105443612cca90919063ffffffff16565b111561211157600c546001436120fc9190614eab565b4060001c61210a9190615010565b600f819055505b6000600f541415612139576121326001600f546129e590919063ffffffff16565b600f819055505b565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60009054906101000a900460ff1681565b6121f06124e2565b73ffffffffffffffffffffffffffffffffffffffff1661220e611901565b73ffffffffffffffffffffffffffffffffffffffff1614612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b90614b3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb9061495b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061245f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061246f575061246e82612ce0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661255d836114d1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125ae82612476565b6125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e4906149fb565b60405180910390fd5b60006125f8836114d1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266757508373ffffffffffffffffffffffffffffffffffffffff1661264f8461096e565b73ffffffffffffffffffffffffffffffffffffffff16145b8061267857506126778185612141565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126a1826114d1565b73ffffffffffffffffffffffffffffffffffffffff16146126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee90614b7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e906149bb565b60405180910390fd5b6127748383836001612d4a565b61277f6000826124ea565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127cf9190614eab565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128269190614dca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6128ed826000836000612d4a565b6128f86000826124ea565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129489190614eab565b925050819055506002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600081836129f39190614dca565b905092915050565b60008183612a099190614e51565b905092915050565b612a2b828260405180602001604052806000815250612e74565b5050565b612a3a848484612681565b612a4684848484612ecf565b612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c9061493b565b60405180910390fd5b50505050565b606060118054612a9a90614f95565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac690614f95565b8015612b135780601f10612ae857610100808354040283529160200191612b13565b820191906000526020600020905b815481529060010190602001808311612af657829003601f168201915b5050505050905090565b60606000821415612b65576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cc5565b600082905060005b60008214612b97578080612b8090614fc7565b915050600a82612b909190614e20565b9150612b6d565b60008167ffffffffffffffff811115612bd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612c0b5781602001600182028036833780820191505090505b5090505b60008514612cbe57600182612c249190614eab565b9150600a85612c339190615010565b6030612c3f9190614dca565b60f81b818381518110612c7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cb79190614e20565b9450612c0f565b8093505050505b919050565b60008183612cd89190614eab565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d5684848484613066565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d9957612d948261306c565b612dd8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612dd757612dd684836130b5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612e115750805b15612e2457612e1f82613222565b612e6e565b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e5d5750805b15612e6d57612e6c8383613365565b5b5b50505050565b612e7e83836133e4565b612e8b6000848484612ecf565b612eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec19061493b565b60405180910390fd5b505050565b6000612ef08473ffffffffffffffffffffffffffffffffffffffff166135b4565b15613059578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f196124e2565b8786866040518563ffffffff1660e01b8152600401612f3b9493929190614812565b602060405180830381600087803b158015612f5557600080fd5b505af1925050508015612f8657506040513d601f19601f82011682018060405250810190612f8391906139b1565b60015b613009573d8060008114612fb6576040519150601f19603f3d011682016040523d82523d6000602084013e612fbb565b606091505b50600081511415613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff89061493b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061305e565b600190505b949350505050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130c284611642565b6130cc9190614eab565b90506000600760008481526020019081526020016000205490508181146131b1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132369190614eab565b905060006009600084815260200190815260200160002054905060006008838154811061328c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106132d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613349577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061337083611642565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344b90614afb565b60405180910390fd5b61345d81612476565b1561349d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134949061497b565b60405180910390fd5b6134ab600083836001612d4a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134fb9190614dca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135d390614f95565b90600052602060002090601f0160209004810192826135f5576000855561363c565b82601f1061360e57805160ff191683800117855561363c565b8280016001018555821561363c579182015b8281111561363b578251825591602001919060010190613620565b5b509050613649919061364d565b5090565b5b8082111561366657600081600090555060010161364e565b5090565b600061367d61367884614d27565b614cf6565b90508281526020810184848401111561369557600080fd5b6136a0848285614f53565b509392505050565b60006136bb6136b684614d57565b614cf6565b9050828152602081018484840111156136d357600080fd5b6136de848285614f53565b509392505050565b6000813590506136f58161510e565b92915050565b60008135905061370a81615125565b92915050565b60008151905061371f81615125565b92915050565b6000813590506137348161513c565b92915050565b6000815190506137498161513c565b92915050565b600082601f83011261376057600080fd5b813561377084826020860161366a565b91505092915050565b600082601f83011261378a57600080fd5b813561379a8482602086016136a8565b91505092915050565b6000813590506137b281615153565b92915050565b6000602082840312156137ca57600080fd5b60006137d8848285016136e6565b91505092915050565b600080604083850312156137f457600080fd5b6000613802858286016136e6565b9250506020613813858286016136e6565b9150509250929050565b60008060006060848603121561383257600080fd5b6000613840868287016136e6565b9350506020613851868287016136e6565b9250506040613862868287016137a3565b9150509250925092565b6000806000806080858703121561388257600080fd5b6000613890878288016136e6565b94505060206138a1878288016136e6565b93505060406138b2878288016137a3565b925050606085013567ffffffffffffffff8111156138cf57600080fd5b6138db8782880161374f565b91505092959194509250565b600080604083850312156138fa57600080fd5b6000613908858286016136e6565b9250506020613919858286016136fb565b9150509250929050565b6000806040838503121561393657600080fd5b6000613944858286016136e6565b9250506020613955858286016137a3565b9150509250929050565b60006020828403121561397157600080fd5b600061397f84828501613710565b91505092915050565b60006020828403121561399a57600080fd5b60006139a884828501613725565b91505092915050565b6000602082840312156139c357600080fd5b60006139d18482850161373a565b91505092915050565b6000602082840312156139ec57600080fd5b600082013567ffffffffffffffff811115613a0657600080fd5b613a1284828501613779565b91505092915050565b600060208284031215613a2d57600080fd5b6000613a3b848285016137a3565b91505092915050565b60008060008060008060c08789031215613a5d57600080fd5b6000613a6b89828a016137a3565b9650506020613a7c89828a016137a3565b9550506040613a8d89828a016137a3565b9450506060613a9e89828a016137a3565b9350506080613aaf89828a016137a3565b92505060a0613ac089828a016137a3565b9150509295509295509295565b613ad681614edf565b82525050565b613ae581614ef1565b82525050565b6000613af682614d87565b613b008185614d9d565b9350613b10818560208601614f62565b613b19816150fd565b840191505092915050565b6000613b2f82614d92565b613b398185614dae565b9350613b49818560208601614f62565b613b52816150fd565b840191505092915050565b6000613b6882614d92565b613b728185614dbf565b9350613b82818560208601614f62565b80840191505092915050565b6000613b9b602383614dae565b91507f5374617274696e6720696e64657820686173206e6f74206265656e207365742060008301527f79657400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c01603383614dae565b91507f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008301527f207468616e206f7220657175616c20746f2030000000000000000000000000006020830152604082019050919050565b6000613c67602583614dae565b91507f4552433732313a20757365206f6620746f6b656e332074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ccd602583614dae565b91507f4552433732313a20757365206f6620746f6b656e342074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d33602b83614dae565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613d99603283614dae565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613dff602683614dae565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e65601c83614dae565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613ea5602383614dae565b91507f43616e206f6e6c79206d696e7420757020746f2031302070657220707572636860008301527f61736500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f0b602483614dae565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f71601983614dae565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613fb1602c83614dae565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614017601d83614dae565b91507f5374617274696e6720696e64657820697320616c7265616479207365740000006000830152602082019050919050565b6000614057603883614dae565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006140bd602583614dae565b91507f4552433732313a20757365206f6620746f6b656e362074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614123602a83614dae565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614189602983614dae565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006141ef601d83614dae565b91507f53656e742065746865722076616c756520697320696e636f72726563740000006000830152602082019050919050565b600061422f602083614dae565b91507f507572636861736520776f756c6420657863656564206d617820737570706c796000830152602082019050919050565b600061426f602083614dae565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006142af602c83614dae565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614315602083614dae565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614355602583614dae565b91507f4552433732313a20757365206f6620746f6b656e352074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143bb602983614dae565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614421602a83614dae565b91507f476f6c64656e205469636b657420636f6e74726163742061646472657373206e60008301527f65656420626520736574000000000000000000000000000000000000000000006020830152604082019050919050565b6000614487602f83614dae565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006144ed602183614dae565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614553603183614dae565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006145b9602c83614dae565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061461f601c83614dae565b91507f476f6c64656e207469636b657420636f6d706f7365206661696c6564000000006000830152602082019050919050565b600061465f602383614dae565b91507f5374617274696e6720696e6465782068617320616c7265616479206265656e2060008301527f73657400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146c5602583614dae565b91507f4552433732313a20757365206f6620746f6b656e312074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061472b602583614dae565b91507f4552433732313a20757365206f6620746f6b656e322074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614791602083614dae565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b6147cd81614f49565b82525050565b60006147df8285613b5d565b91506147eb8284613b5d565b91508190509392505050565b600060208201905061480c6000830184613acd565b92915050565b60006080820190506148276000830187613acd565b6148346020830186613acd565b61484160408301856147c4565b81810360608301526148538184613aeb565b905095945050505050565b60006020820190506148736000830184613adc565b92915050565b600060208201905081810360008301526148938184613b24565b905092915050565b600060208201905081810360008301526148b481613b8e565b9050919050565b600060208201905081810360008301526148d481613bf4565b9050919050565b600060208201905081810360008301526148f481613c5a565b9050919050565b6000602082019050818103600083015261491481613cc0565b9050919050565b6000602082019050818103600083015261493481613d26565b9050919050565b6000602082019050818103600083015261495481613d8c565b9050919050565b6000602082019050818103600083015261497481613df2565b9050919050565b6000602082019050818103600083015261499481613e58565b9050919050565b600060208201905081810360008301526149b481613e98565b9050919050565b600060208201905081810360008301526149d481613efe565b9050919050565b600060208201905081810360008301526149f481613f64565b9050919050565b60006020820190508181036000830152614a1481613fa4565b9050919050565b60006020820190508181036000830152614a348161400a565b9050919050565b60006020820190508181036000830152614a548161404a565b9050919050565b60006020820190508181036000830152614a74816140b0565b9050919050565b60006020820190508181036000830152614a9481614116565b9050919050565b60006020820190508181036000830152614ab48161417c565b9050919050565b60006020820190508181036000830152614ad4816141e2565b9050919050565b60006020820190508181036000830152614af481614222565b9050919050565b60006020820190508181036000830152614b1481614262565b9050919050565b60006020820190508181036000830152614b34816142a2565b9050919050565b60006020820190508181036000830152614b5481614308565b9050919050565b60006020820190508181036000830152614b7481614348565b9050919050565b60006020820190508181036000830152614b94816143ae565b9050919050565b60006020820190508181036000830152614bb481614414565b9050919050565b60006020820190508181036000830152614bd48161447a565b9050919050565b60006020820190508181036000830152614bf4816144e0565b9050919050565b60006020820190508181036000830152614c1481614546565b9050919050565b60006020820190508181036000830152614c34816145ac565b9050919050565b60006020820190508181036000830152614c5481614612565b9050919050565b60006020820190508181036000830152614c7481614652565b9050919050565b60006020820190508181036000830152614c94816146b8565b9050919050565b60006020820190508181036000830152614cb48161471e565b9050919050565b60006020820190508181036000830152614cd481614784565b9050919050565b6000602082019050614cf060008301846147c4565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614d1d57614d1c6150ce565b5b8060405250919050565b600067ffffffffffffffff821115614d4257614d416150ce565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d7257614d716150ce565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614dd582614f49565b9150614de083614f49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1557614e14615041565b5b828201905092915050565b6000614e2b82614f49565b9150614e3683614f49565b925082614e4657614e45615070565b5b828204905092915050565b6000614e5c82614f49565b9150614e6783614f49565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea057614e9f615041565b5b828202905092915050565b6000614eb682614f49565b9150614ec183614f49565b925082821015614ed457614ed3615041565b5b828203905092915050565b6000614eea82614f29565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f80578082015181840152602081019050614f65565b83811115614f8f576000848401525b50505050565b60006002820490506001821680614fad57607f821691505b60208210811415614fc157614fc061509f565b5b50919050565b6000614fd282614f49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561500557615004615041565b5b600182019050919050565b600061501b82614f49565b915061502683614f49565b92508261503657615035615070565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61511781614edf565b811461512257600080fd5b50565b61512e81614ef1565b811461513957600080fd5b50565b61514581614efd565b811461515057600080fd5b50565b61515c81614f49565b811461516757600080fd5b5056fea26469706673582212206787916daab95e3226c2052e9d4fa8421d01bba8299de83527eebcf7ff2178bc64736f6c63430008000033

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80636373a6b111610123578063a22cb465116100ab578063e13f351a1161006f578063e13f351a1461078a578063e36d6498146107a1578063e985e9c5146107cc578063eb8d244414610809578063f2fde38b146108345761021a565b8063a22cb465146106a7578063b88d4fde146106d0578063c87b56dd146106f9578063cb774d4714610736578063d031370b146107615761021a565b8063715018a6116100f2578063715018a6146106075780637d17fcbe1461061e5780638da5cb5b1461063557806395d89b4114610660578063a0712d681461068b5761021a565b80636373a6b114610549578063676dd563146105745780636e47af201461059f57806370a08231146105ca5761021a565b806332cb6b0c116101a657806342842e0e1161017557806342842e0e146104545780634f6ccce71461047d57806355f804b3146104ba5780635e28aa88146104e35780636352211e1461050c5761021a565b806332cb6b0c146103d257806334918dfd146103fd578063350643a9146104145780633ccfd60b1461043d5761021a565b8063095ea7b3116101ed578063095ea7b3146102ef578063109695231461031857806318160ddd1461034157806323b872dd1461036c5780632f745c59146103955761021a565b806301ffc9a71461021f578063020b39cc1461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613988565b61085d565b604051610253919061485e565b60405180910390f35b34801561026857600080fd5b506102716108d7565b60405161027e9190614cdb565b60405180910390f35b34801561029357600080fd5b5061029c6108dc565b6040516102a99190614879565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613a1b565b61096e565b6040516102e691906147f7565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613923565b6109f3565b005b34801561032457600080fd5b5061033f600480360381019061033a91906139da565b610b0b565b005b34801561034d57600080fd5b50610356610ba1565b6040516103639190614cdb565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e919061381d565b610bae565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190613923565b610c0e565b6040516103c99190614cdb565b60405180910390f35b3480156103de57600080fd5b506103e7610cb3565b6040516103f49190614cdb565b60405180910390f35b34801561040957600080fd5b50610412610cb9565b005b34801561042057600080fd5b5061043b60048036038101906104369190613a44565b610d61565b005b34801561044957600080fd5b506104526111f9565b005b34801561046057600080fd5b5061047b6004803603810190610476919061381d565b6112c4565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613a1b565b6112e4565b6040516104b19190614cdb565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906139da565b61137b565b005b3480156104ef57600080fd5b5061050a600480360381019061050591906137b8565b611411565b005b34801561051857600080fd5b50610533600480360381019061052e9190613a1b565b6114d1565b60405161054091906147f7565b60405180910390f35b34801561055557600080fd5b5061055e611583565b60405161056b9190614879565b60405180910390f35b34801561058057600080fd5b50610589611611565b6040516105969190614cdb565b60405180910390f35b3480156105ab57600080fd5b506105b461161c565b6040516105c191906147f7565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec91906137b8565b611642565b6040516105fe9190614cdb565b60405180910390f35b34801561061357600080fd5b5061061c6116fa565b005b34801561062a57600080fd5b50610633611837565b005b34801561064157600080fd5b5061064a611901565b60405161065791906147f7565b60405180910390f35b34801561066c57600080fd5b5061067561192b565b6040516106829190614879565b60405180910390f35b6106a560048036038101906106a09190613a1b565b6119bd565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906138e7565b611b7f565b005b3480156106dc57600080fd5b506106f760048036038101906106f2919061386c565b611d00565b005b34801561070557600080fd5b50610720600480360381019061071b9190613a1b565b611d62565b60405161072d9190614879565b60405180910390f35b34801561074257600080fd5b5061074b611ed5565b6040516107589190614cdb565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613a1b565b611edb565b005b34801561079657600080fd5b5061079f611fae565b005b3480156107ad57600080fd5b506107b661213b565b6040516107c39190614cdb565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee91906137e1565b612141565b604051610800919061485e565b60405180910390f35b34801561081557600080fd5b5061081e6121d5565b60405161082b919061485e565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906137b8565b6121e8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108d057506108cf82612394565b5b9050919050565b601481565b6060600080546108eb90614f95565b80601f016020809104026020016040519081016040528092919081815260200182805461091790614f95565b80156109645780601f1061093957610100808354040283529160200191610964565b820191906000526020600020905b81548152906001019060200180831161094757829003601f168201915b5050505050905090565b600061097982612476565b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90614b1b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109fe826114d1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690614bdb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8e6124e2565b73ffffffffffffffffffffffffffffffffffffffff161480610abd5750610abc81610ab76124e2565b612141565b5b610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390614a3b565b60405180910390fd5b610b0683836124ea565b505050565b610b136124e2565b73ffffffffffffffffffffffffffffffffffffffff16610b31611901565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e90614b3b565b60405180910390fd5b80600e9080519060200190610b9d9291906135c7565b5050565b6000600880549050905090565b610bbf610bb96124e2565b826125a3565b610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf590614bfb565b60405180910390fd5b610c09838383612681565b505050565b6000610c1983611642565b8210610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c519061491b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c5481565b610cc16124e2565b73ffffffffffffffffffffffffffffffffffffffff16610cdf611901565b73ffffffffffffffffffffffffffffffffffffffff1614610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c90614b3b565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90614b9b565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff16610e18886114d1565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590614c7b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e8e876114d1565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb90614c9b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f04866114d1565b73ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906148db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f7a856114d1565b73ffffffffffffffffffffffffffffffffffffffff1614610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc7906148fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ff0846114d1565b73ffffffffffffffffffffffffffffffffffffffff1614611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90614b5b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611066836114d1565b73ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390614a5b565b60405180910390fd5b6110c681886128df565b6110d081876128df565b6110da81866128df565b6110e481856128df565b6110ee81846128df565b6110f881836128df565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16633d636c83846040518263ffffffff1660e01b815260040161115a91906147f7565b602060405180830381600087803b15801561117457600080fd5b505af1158015611188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ac919061395f565b9050806111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590614c3b565b60405180910390fd5b505050505050505050565b6112016124e2565b73ffffffffffffffffffffffffffffffffffffffff1661121f611901565b73ffffffffffffffffffffffffffffffffffffffff1614611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90614b3b565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112c0573d6000803e3d6000fd5b5050565b6112df83838360405180602001604052806000815250611d00565b505050565b60006112ee610ba1565b821061132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690614c1b565b60405180910390fd5b60088281548110611369577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6113836124e2565b73ffffffffffffffffffffffffffffffffffffffff166113a1611901565b73ffffffffffffffffffffffffffffffffffffffff16146113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90614b3b565b60405180910390fd5b806011908051906020019061140d9291906135c7565b5050565b6114196124e2565b73ffffffffffffffffffffffffffffffffffffffff16611437611901565b73ffffffffffffffffffffffffffffffffffffffff161461148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490614b3b565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190614a9b565b60405180910390fd5b80915050919050565b600e805461159090614f95565b80601f01602080910402602001604051908101604052809291908181526020018280546115bc90614f95565b80156116095780601f106115de57610100808354040283529160200191611609565b820191906000526020600020905b8154815290600101906020018083116115ec57829003601f168201915b505050505081565b668e1bc9bf04000081565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90614a7b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117026124e2565b73ffffffffffffffffffffffffffffffffffffffff16611720611901565b73ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614b3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61183f6124e2565b73ffffffffffffffffffffffffffffffffffffffff1661185d611901565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90614b3b565b60405180910390fd5b6000600f54146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90614a1b565b60405180910390fd5b43601081905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461193a90614f95565b80601f016020809104026020016040519081016040528092919081815260200182805461196690614f95565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b5050505050905090565b600d60009054906101000a900460ff16611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390614cbb565b60405180910390fd5b60008111611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a46906148bb565b60405180910390fd5b600c54611a6c82611a5e610ba1565b6129e590919063ffffffff16565b1115611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490614adb565b60405180910390fd5b6014811115611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae89061499b565b60405180910390fd5b34611b0c82668e1bc9bf0400006129fb90919063ffffffff16565b14611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4390614abb565b60405180910390fd5b60005b81811015611b7b57611b6833611b63610ba1565b612a11565b8080611b7390614fc7565b915050611b4f565b5050565b611b876124e2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906149db565b60405180910390fd5b8060056000611c026124e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611caf6124e2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf4919061485e565b60405180910390a35050565b611d11611d0b6124e2565b836125a3565b611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790614bfb565b60405180910390fd5b611d5c84848484612a2f565b50505050565b6060611d6d82612476565b611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390614bbb565b60405180910390fd5b6000601260008481526020019081526020016000208054611dcc90614f95565b80601f0160208091040260200160405190810160405280929190818152602001828054611df890614f95565b8015611e455780601f10611e1a57610100808354040283529160200191611e45565b820191906000526020600020905b815481529060010190602001808311611e2857829003601f168201915b505050505090506000611e56612a8b565b9050600081511415611e6c578192505050611ed0565b600082511115611ea1578082604051602001611e899291906147d3565b60405160208183030381529060405292505050611ed0565b80611eab85612b1d565b604051602001611ebc9291906147d3565b604051602081830303815290604052925050505b919050565b600f5481565b611ee36124e2565b73ffffffffffffffffffffffffffffffffffffffff16611f01611901565b73ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e90614b3b565b60405180910390fd5b6000611f61610ba1565b905060005b82811015611f9657611f83338284611f7e9190614dca565b612a11565b8080611f8e90614fc7565b915050611f66565b60006010541415611fa957436010819055505b505050565b611fb66124e2565b73ffffffffffffffffffffffffffffffffffffffff16611fd4611901565b73ffffffffffffffffffffffffffffffffffffffff161461202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190614b3b565b60405180910390fd5b6000600f541461206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690614c5b565b60405180910390fd5b600060105414156120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac9061489b565b60405180910390fd5b600c546010544060001c6120c99190615010565b600f8190555060ff6120e660105443612cca90919063ffffffff16565b111561211157600c546001436120fc9190614eab565b4060001c61210a9190615010565b600f819055505b6000600f541415612139576121326001600f546129e590919063ffffffff16565b600f819055505b565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60009054906101000a900460ff1681565b6121f06124e2565b73ffffffffffffffffffffffffffffffffffffffff1661220e611901565b73ffffffffffffffffffffffffffffffffffffffff1614612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b90614b3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb9061495b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061245f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061246f575061246e82612ce0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661255d836114d1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125ae82612476565b6125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e4906149fb565b60405180910390fd5b60006125f8836114d1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266757508373ffffffffffffffffffffffffffffffffffffffff1661264f8461096e565b73ffffffffffffffffffffffffffffffffffffffff16145b8061267857506126778185612141565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126a1826114d1565b73ffffffffffffffffffffffffffffffffffffffff16146126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee90614b7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e906149bb565b60405180910390fd5b6127748383836001612d4a565b61277f6000826124ea565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127cf9190614eab565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128269190614dca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6128ed826000836000612d4a565b6128f86000826124ea565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129489190614eab565b925050819055506002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600081836129f39190614dca565b905092915050565b60008183612a099190614e51565b905092915050565b612a2b828260405180602001604052806000815250612e74565b5050565b612a3a848484612681565b612a4684848484612ecf565b612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c9061493b565b60405180910390fd5b50505050565b606060118054612a9a90614f95565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac690614f95565b8015612b135780601f10612ae857610100808354040283529160200191612b13565b820191906000526020600020905b815481529060010190602001808311612af657829003601f168201915b5050505050905090565b60606000821415612b65576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cc5565b600082905060005b60008214612b97578080612b8090614fc7565b915050600a82612b909190614e20565b9150612b6d565b60008167ffffffffffffffff811115612bd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612c0b5781602001600182028036833780820191505090505b5090505b60008514612cbe57600182612c249190614eab565b9150600a85612c339190615010565b6030612c3f9190614dca565b60f81b818381518110612c7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cb79190614e20565b9450612c0f565b8093505050505b919050565b60008183612cd89190614eab565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d5684848484613066565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d9957612d948261306c565b612dd8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612dd757612dd684836130b5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612e115750805b15612e2457612e1f82613222565b612e6e565b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e5d5750805b15612e6d57612e6c8383613365565b5b5b50505050565b612e7e83836133e4565b612e8b6000848484612ecf565b612eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec19061493b565b60405180910390fd5b505050565b6000612ef08473ffffffffffffffffffffffffffffffffffffffff166135b4565b15613059578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f196124e2565b8786866040518563ffffffff1660e01b8152600401612f3b9493929190614812565b602060405180830381600087803b158015612f5557600080fd5b505af1925050508015612f8657506040513d601f19601f82011682018060405250810190612f8391906139b1565b60015b613009573d8060008114612fb6576040519150601f19603f3d011682016040523d82523d6000602084013e612fbb565b606091505b50600081511415613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff89061493b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061305e565b600190505b949350505050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130c284611642565b6130cc9190614eab565b90506000600760008481526020019081526020016000205490508181146131b1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132369190614eab565b905060006009600084815260200190815260200160002054905060006008838154811061328c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106132d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613349577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061337083611642565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344b90614afb565b60405180910390fd5b61345d81612476565b1561349d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134949061497b565b60405180910390fd5b6134ab600083836001612d4a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134fb9190614dca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135d390614f95565b90600052602060002090601f0160209004810192826135f5576000855561363c565b82601f1061360e57805160ff191683800117855561363c565b8280016001018555821561363c579182015b8281111561363b578251825591602001919060010190613620565b5b509050613649919061364d565b5090565b5b8082111561366657600081600090555060010161364e565b5090565b600061367d61367884614d27565b614cf6565b90508281526020810184848401111561369557600080fd5b6136a0848285614f53565b509392505050565b60006136bb6136b684614d57565b614cf6565b9050828152602081018484840111156136d357600080fd5b6136de848285614f53565b509392505050565b6000813590506136f58161510e565b92915050565b60008135905061370a81615125565b92915050565b60008151905061371f81615125565b92915050565b6000813590506137348161513c565b92915050565b6000815190506137498161513c565b92915050565b600082601f83011261376057600080fd5b813561377084826020860161366a565b91505092915050565b600082601f83011261378a57600080fd5b813561379a8482602086016136a8565b91505092915050565b6000813590506137b281615153565b92915050565b6000602082840312156137ca57600080fd5b60006137d8848285016136e6565b91505092915050565b600080604083850312156137f457600080fd5b6000613802858286016136e6565b9250506020613813858286016136e6565b9150509250929050565b60008060006060848603121561383257600080fd5b6000613840868287016136e6565b9350506020613851868287016136e6565b9250506040613862868287016137a3565b9150509250925092565b6000806000806080858703121561388257600080fd5b6000613890878288016136e6565b94505060206138a1878288016136e6565b93505060406138b2878288016137a3565b925050606085013567ffffffffffffffff8111156138cf57600080fd5b6138db8782880161374f565b91505092959194509250565b600080604083850312156138fa57600080fd5b6000613908858286016136e6565b9250506020613919858286016136fb565b9150509250929050565b6000806040838503121561393657600080fd5b6000613944858286016136e6565b9250506020613955858286016137a3565b9150509250929050565b60006020828403121561397157600080fd5b600061397f84828501613710565b91505092915050565b60006020828403121561399a57600080fd5b60006139a884828501613725565b91505092915050565b6000602082840312156139c357600080fd5b60006139d18482850161373a565b91505092915050565b6000602082840312156139ec57600080fd5b600082013567ffffffffffffffff811115613a0657600080fd5b613a1284828501613779565b91505092915050565b600060208284031215613a2d57600080fd5b6000613a3b848285016137a3565b91505092915050565b60008060008060008060c08789031215613a5d57600080fd5b6000613a6b89828a016137a3565b9650506020613a7c89828a016137a3565b9550506040613a8d89828a016137a3565b9450506060613a9e89828a016137a3565b9350506080613aaf89828a016137a3565b92505060a0613ac089828a016137a3565b9150509295509295509295565b613ad681614edf565b82525050565b613ae581614ef1565b82525050565b6000613af682614d87565b613b008185614d9d565b9350613b10818560208601614f62565b613b19816150fd565b840191505092915050565b6000613b2f82614d92565b613b398185614dae565b9350613b49818560208601614f62565b613b52816150fd565b840191505092915050565b6000613b6882614d92565b613b728185614dbf565b9350613b82818560208601614f62565b80840191505092915050565b6000613b9b602383614dae565b91507f5374617274696e6720696e64657820686173206e6f74206265656e207365742060008301527f79657400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c01603383614dae565b91507f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008301527f207468616e206f7220657175616c20746f2030000000000000000000000000006020830152604082019050919050565b6000613c67602583614dae565b91507f4552433732313a20757365206f6620746f6b656e332074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ccd602583614dae565b91507f4552433732313a20757365206f6620746f6b656e342074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d33602b83614dae565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613d99603283614dae565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613dff602683614dae565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e65601c83614dae565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613ea5602383614dae565b91507f43616e206f6e6c79206d696e7420757020746f2031302070657220707572636860008301527f61736500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f0b602483614dae565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f71601983614dae565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613fb1602c83614dae565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614017601d83614dae565b91507f5374617274696e6720696e64657820697320616c7265616479207365740000006000830152602082019050919050565b6000614057603883614dae565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006140bd602583614dae565b91507f4552433732313a20757365206f6620746f6b656e362074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614123602a83614dae565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614189602983614dae565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006141ef601d83614dae565b91507f53656e742065746865722076616c756520697320696e636f72726563740000006000830152602082019050919050565b600061422f602083614dae565b91507f507572636861736520776f756c6420657863656564206d617820737570706c796000830152602082019050919050565b600061426f602083614dae565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006142af602c83614dae565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614315602083614dae565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614355602583614dae565b91507f4552433732313a20757365206f6620746f6b656e352074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143bb602983614dae565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614421602a83614dae565b91507f476f6c64656e205469636b657420636f6e74726163742061646472657373206e60008301527f65656420626520736574000000000000000000000000000000000000000000006020830152604082019050919050565b6000614487602f83614dae565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006144ed602183614dae565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614553603183614dae565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006145b9602c83614dae565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061461f601c83614dae565b91507f476f6c64656e207469636b657420636f6d706f7365206661696c6564000000006000830152602082019050919050565b600061465f602383614dae565b91507f5374617274696e6720696e6465782068617320616c7265616479206265656e2060008301527f73657400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146c5602583614dae565b91507f4552433732313a20757365206f6620746f6b656e312074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061472b602583614dae565b91507f4552433732313a20757365206f6620746f6b656e322074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614791602083614dae565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b6147cd81614f49565b82525050565b60006147df8285613b5d565b91506147eb8284613b5d565b91508190509392505050565b600060208201905061480c6000830184613acd565b92915050565b60006080820190506148276000830187613acd565b6148346020830186613acd565b61484160408301856147c4565b81810360608301526148538184613aeb565b905095945050505050565b60006020820190506148736000830184613adc565b92915050565b600060208201905081810360008301526148938184613b24565b905092915050565b600060208201905081810360008301526148b481613b8e565b9050919050565b600060208201905081810360008301526148d481613bf4565b9050919050565b600060208201905081810360008301526148f481613c5a565b9050919050565b6000602082019050818103600083015261491481613cc0565b9050919050565b6000602082019050818103600083015261493481613d26565b9050919050565b6000602082019050818103600083015261495481613d8c565b9050919050565b6000602082019050818103600083015261497481613df2565b9050919050565b6000602082019050818103600083015261499481613e58565b9050919050565b600060208201905081810360008301526149b481613e98565b9050919050565b600060208201905081810360008301526149d481613efe565b9050919050565b600060208201905081810360008301526149f481613f64565b9050919050565b60006020820190508181036000830152614a1481613fa4565b9050919050565b60006020820190508181036000830152614a348161400a565b9050919050565b60006020820190508181036000830152614a548161404a565b9050919050565b60006020820190508181036000830152614a74816140b0565b9050919050565b60006020820190508181036000830152614a9481614116565b9050919050565b60006020820190508181036000830152614ab48161417c565b9050919050565b60006020820190508181036000830152614ad4816141e2565b9050919050565b60006020820190508181036000830152614af481614222565b9050919050565b60006020820190508181036000830152614b1481614262565b9050919050565b60006020820190508181036000830152614b34816142a2565b9050919050565b60006020820190508181036000830152614b5481614308565b9050919050565b60006020820190508181036000830152614b7481614348565b9050919050565b60006020820190508181036000830152614b94816143ae565b9050919050565b60006020820190508181036000830152614bb481614414565b9050919050565b60006020820190508181036000830152614bd48161447a565b9050919050565b60006020820190508181036000830152614bf4816144e0565b9050919050565b60006020820190508181036000830152614c1481614546565b9050919050565b60006020820190508181036000830152614c34816145ac565b9050919050565b60006020820190508181036000830152614c5481614612565b9050919050565b60006020820190508181036000830152614c7481614652565b9050919050565b60006020820190508181036000830152614c94816146b8565b9050919050565b60006020820190508181036000830152614cb48161471e565b9050919050565b60006020820190508181036000830152614cd481614784565b9050919050565b6000602082019050614cf060008301846147c4565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614d1d57614d1c6150ce565b5b8060405250919050565b600067ffffffffffffffff821115614d4257614d416150ce565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d7257614d716150ce565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614dd582614f49565b9150614de083614f49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1557614e14615041565b5b828201905092915050565b6000614e2b82614f49565b9150614e3683614f49565b925082614e4657614e45615070565b5b828204905092915050565b6000614e5c82614f49565b9150614e6783614f49565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea057614e9f615041565b5b828202905092915050565b6000614eb682614f49565b9150614ec183614f49565b925082821015614ed457614ed3615041565b5b828203905092915050565b6000614eea82614f29565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f80578082015181840152602081019050614f65565b83811115614f8f576000848401525b50505050565b60006002820490506001821680614fad57607f821691505b60208210811415614fc157614fc061509f565b5b50919050565b6000614fd282614f49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561500557615004615041565b5b600182019050919050565b600061501b82614f49565b915061502683614f49565b92508261503657615035615070565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61511781614edf565b811461512257600080fd5b50565b61512e81614ef1565b811461513957600080fd5b50565b61514581614efd565b811461515057600080fd5b50565b61515c81614f49565b811461516757600080fd5b5056fea26469706673582212206787916daab95e3226c2052e9d4fa8421d01bba8299de83527eebcf7ff2178bc64736f6c63430008000033

Deployed Bytecode Sourcemap

49208:5428:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43007:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49480:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30929:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32381:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31918:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50253:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43656:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33271:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43324:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49529:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50008:89;;;;;;;;;;;;;:::i;:::-;;51336:1280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50105:140;;;;;;;;;;;;;:::i;:::-;;33647:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43846:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53723:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49868:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30623:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49608:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49408:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49366:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30353:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28189:148;;;;;;;;;;;;;:::i;:::-;;53329:182;;;;;;;;;;;;;:::i;:::-;;27538:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31098:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50702:626;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32674:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33869:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53840:793;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49646:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50381:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52624:697;;;;;;;;;;;;;:::i;:::-;;49681:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33040:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49569:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28492:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43007:233;43109:4;43148:35;43133:50;;;:11;:50;;;;:99;;;;43196:36;43220:11;43196:23;:36::i;:::-;43133:99;43126:106;;43007:233;;;:::o;49480:42::-;49520:2;49480:42;:::o;30929:100::-;30983:13;31016:5;31009:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30929:100;:::o;32381:221::-;32457:7;32485:16;32493:7;32485;:16::i;:::-;32477:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32570:15;:24;32586:7;32570:24;;;;;;;;;;;;;;;;;;;;;32563:31;;32381:221;;;:::o;31918:397::-;31999:13;32015:23;32030:7;32015:14;:23::i;:::-;31999:39;;32063:5;32057:11;;:2;:11;;;;32049:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32143:5;32127:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32152:37;32169:5;32176:12;:10;:12::i;:::-;32152:16;:37::i;:::-;32127:62;32119:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32286:21;32295:2;32299:7;32286:8;:21::i;:::-;31918:397;;;:::o;50253:120::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50351:14:::1;50338:10;:27;;;;;;;;;;;;:::i;:::-;;50253:120:::0;:::o;43656:113::-;43717:7;43744:10;:17;;;;43737:24;;43656:113;:::o;33271:305::-;33432:41;33451:12;:10;:12::i;:::-;33465:7;33432:18;:41::i;:::-;33424:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33540:28;33550:4;33556:2;33560:7;33540:9;:28::i;:::-;33271:305;;;:::o;43324:256::-;43421:7;43457:23;43474:5;43457:16;:23::i;:::-;43449:5;:31;43441:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43546:12;:19;43559:5;43546:19;;;;;;;;;;;;;;;:26;43566:5;43546:26;;;;;;;;;;;;43539:33;;43324:256;;;;:::o;49529:33::-;;;;:::o;50008:89::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50077:12:::1;;;;;;;;;;;50076:13;50061:12;;:28;;;;;;;;;;;;;;;;;;50008:89::o:0;51336:1280::-;51537:1;51505:34;;:20;;;;;;;;;;;:34;;;;51497:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;51599:12;51614:10;51599:25;;51674:4;51643:35;;:27;51658:11;51643:14;:27::i;:::-;:35;;;51635:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;51770:4;51739:35;;:27;51754:11;51739:14;:27::i;:::-;:35;;;51731:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;51866:4;51835:35;;:27;51850:11;51835:14;:27::i;:::-;:35;;;51827:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;51962:4;51931:35;;:27;51946:11;51931:14;:27::i;:::-;:35;;;51923:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;52058:4;52027:35;;:27;52042:11;52027:14;:27::i;:::-;:35;;;52019:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;52154:4;52123:35;;:27;52138:11;52123:14;:27::i;:::-;:35;;;52115:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;52213:28;52223:4;52229:11;52213:9;:28::i;:::-;52252;52262:4;52268:11;52252:9;:28::i;:::-;52291;52301:4;52307:11;52291:9;:28::i;:::-;52330;52340:4;52346:11;52330:9;:28::i;:::-;52369;52379:4;52385:11;52369:9;:28::i;:::-;52408;52418:4;52424:11;52408:9;:28::i;:::-;52449:19;52484:20;;;;;;;;;;;52449:56;;52516:11;52530:6;:14;;;52545:4;52530:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52516:34;;52569:6;52561:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;51336:1280;;;;;;;;;:::o;50105:140::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50153:12:::1;50168:21;50153:36;;50208:10;50200:28;;:37;50229:7;50200:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27829:1;50105:140::o:0;33647:151::-;33751:39;33768:4;33774:2;33778:7;33751:39;;;;;;;;;;;;:16;:39::i;:::-;33647:151;;;:::o;43846:233::-;43921:7;43957:30;:28;:30::i;:::-;43949:5;:38;43941:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44054:10;44065:5;44054:17;;;;;;;;;;;;;;;;;;;;;;;;44047:24;;43846:233;;;:::o;53723:109::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53816:8:::1;53797:16;:27;;;;;;;;;;;;:::i;:::-;;53723:109:::0;:::o;49868:132::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49977:15:::1;49954:20;;:38;;;;;;;;;;;;;;;;;;49868:132:::0;:::o;30623:239::-;30695:7;30715:13;30731:7;:16;30739:7;30731:16;;;;;;;;;;;;;;;;;;;;;30715:32;;30783:1;30766:19;;:5;:19;;;;30758:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30849:5;30842:12;;;30623:239;;;:::o;49608:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49408:53::-;49444:17;49408:53;:::o;49366:35::-;;;;;;;;;;;;;:::o;30353:208::-;30425:7;30470:1;30453:19;;:5;:19;;;;30445:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30537:9;:16;30547:5;30537:16;;;;;;;;;;;;;;;;30530:23;;30353:208;;;:::o;28189:148::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28296:1:::1;28259:40;;28280:6;;;;;;;;;;;28259:40;;;;;;;;;;;;28327:1;28310:6;;:19;;;;;;;;;;;;;;;;;;28189:148::o:0;53329:182::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53424:1:::1;53407:13;;:18;53399:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;53491:12;53470:18;:33;;;;53329:182::o:0;27538:87::-;27584:7;27611:6;;;;;;;;;;;27604:13;;27538:87;:::o;31098:104::-;31154:13;31187:7;31180:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31098:104;:::o;50702:626::-;50771:12;;;;;;;;;;;50763:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50856:1;50839:14;:18;50831:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;50969:10;;50932:33;50950:14;50932:13;:11;:13::i;:::-;:17;;:33;;;;:::i;:::-;:47;;50924:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;49520:2;51035:14;:34;;51027:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;51160:9;51127:29;51141:14;49444:17;51127:13;;:29;;;;:::i;:::-;:42;51119:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;51221:6;51216:105;51237:14;51233:1;:18;51216:105;;;51273:36;51283:10;51295:13;:11;:13::i;:::-;51273:9;:36::i;:::-;51253:3;;;;;:::i;:::-;;;;51216:105;;;;50702:626;:::o;32674:295::-;32789:12;:10;:12::i;:::-;32777:24;;:8;:24;;;;32769:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32889:8;32844:18;:32;32863:12;:10;:12::i;:::-;32844:32;;;;;;;;;;;;;;;:42;32877:8;32844:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32942:8;32913:48;;32928:12;:10;:12::i;:::-;32913:48;;;32952:8;32913:48;;;;;;:::i;:::-;;;;;;;;32674:295;;:::o;33869:285::-;34001:41;34020:12;:10;:12::i;:::-;34034:7;34001:18;:41::i;:::-;33993:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34107:39;34121:4;34127:2;34131:7;34140:5;34107:13;:39::i;:::-;33869:285;;;;:::o;53840:793::-;53913:13;53947:16;53955:7;53947;:16::i;:::-;53939:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54028:23;54054:10;:19;54065:7;54054:19;;;;;;;;;;;54028:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54084:18;54105:10;:8;:10::i;:::-;54084:31;;54213:1;54197:4;54191:18;:23;54187:72;;;54238:9;54231:16;;;;;;54187:72;54389:1;54369:9;54363:23;:27;54359:108;;;54438:4;54444:9;54421:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54407:48;;;;;;54359:108;54599:4;54605:18;:7;:16;:18::i;:::-;54582:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54568:57;;;;53840:793;;;;:::o;49646:28::-;;;;:::o;50381:313::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50445:11:::1;50459:13;:11;:13::i;:::-;50445:27;;50483:6;50500:86;50516:3;50512:1;:7;50500:86;;;50541:33;50551:10;50572:1;50563:6;:10;;;;:::i;:::-;50541:9;:33::i;:::-;50521:3;;;;;:::i;:::-;;;;50500:86;;;50624:1;50602:18;;:23;50598:89;;;50663:12;50642:18;:33;;;;50598:89;27829:1;;50381:313:::0;:::o;52624:697::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52706:1:::1;52689:13;;:18;52681:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;52788:1;52766:18;;:23;;52758:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;52896:10;;52873:18;;52863:29;52858:35;;:48;;;;:::i;:::-;52842:13;:64;;;;53080:3;53041:36;53058:18;;53041:12;:16;;:36;;;;:::i;:::-;:42;53038:136;;;53152:10;;53146:1;53131:12;:16;;;;:::i;:::-;53121:27;53116:33;;:46;;;;:::i;:::-;53100:13;:62;;;;53038:136;53248:1;53231:13;;:18;53227:87;;;53282:20;53300:1;53282:13;;:17;;:20;;;;:::i;:::-;53266:13;:36;;;;53227:87;52624:697::o:0;49681:33::-;;;;:::o;33040:164::-;33137:4;33161:18;:25;33180:5;33161:25;;;;;;;;;;;;;;;:35;33187:8;33161:35;;;;;;;;;;;;;;;;;;;;;;;;;33154:42;;33040:164;;;;:::o;49569:32::-;;;;;;;;;;;;;:::o;28492:244::-;27769:12;:10;:12::i;:::-;27758:23;;:7;:5;:7::i;:::-;:23;;;27750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28601:1:::1;28581:22;;:8;:22;;;;28573:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28691:8;28662:38;;28683:6;;;;;;;;;;;28662:38;;;;;;;;;;;;28720:8;28711:6;;:17;;;;;;;;;;;;;;;;;;28492:244:::0;:::o;30005:284::-;30107:4;30146:25;30131:40;;;:11;:40;;;;:101;;;;30199:33;30184:48;;;:11;:48;;;;30131:101;:150;;;;30245:36;30269:11;30245:23;:36::i;:::-;30131:150;30124:157;;30005:284;;;:::o;35621:127::-;35686:4;35738:1;35710:30;;:7;:16;35718:7;35710:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35703:37;;35621:127;;;:::o;26155:98::-;26208:7;26235:10;26228:17;;26155:98;:::o;39860:174::-;39962:2;39935:15;:24;39951:7;39935:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40018:7;40014:2;39980:46;;39989:23;40004:7;39989:14;:23::i;:::-;39980:46;;;;;;;;;;;;39860:174;;:::o;35915:348::-;36008:4;36033:16;36041:7;36033;:16::i;:::-;36025:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:13;36125:23;36140:7;36125:14;:23::i;:::-;36109:39;;36178:5;36167:16;;:7;:16;;;:51;;;;36211:7;36187:31;;:20;36199:7;36187:11;:20::i;:::-;:31;;;36167:51;:87;;;;36222:32;36239:5;36246:7;36222:16;:32::i;:::-;36167:87;36159:96;;;35915:348;;;;:::o;39192:550::-;39317:4;39290:31;;:23;39305:7;39290:14;:23::i;:::-;:31;;;39282:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39400:1;39386:16;;:2;:16;;;;39378:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39456:45;39477:4;39483:2;39487:7;39496:4;39456:20;:45::i;:::-;39566:29;39583:1;39587:7;39566:8;:29::i;:::-;39627:1;39608:9;:15;39618:4;39608:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39656:1;39639:9;:13;39649:2;39639:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39687:2;39668:7;:16;39676:7;39668:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39726:7;39722:2;39707:27;;39716:4;39707:27;;;;;;;;;;;;39192:550;;;:::o;38519:336::-;38600:55;38621:5;38636:1;38640:7;38649:5;38600:20;:55::i;:::-;38696:29;38713:1;38717:7;38696:8;:29::i;:::-;38758:1;38738:9;:16;38748:5;38738:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;38777:7;:16;38785:7;38777:16;;;;;;;;;;;;38770:23;;;;;;;;;;;38839:7;38835:1;38811:36;;38820:5;38811:36;;;;;;;;;;;;38519:336;;:::o;2659:98::-;2717:7;2748:1;2744;:5;;;;:::i;:::-;2737:12;;2659:98;;;;:::o;3397:::-;3455:7;3486:1;3482;:5;;;;:::i;:::-;3475:12;;3397:98;;;;:::o;36605:110::-;36681:26;36691:2;36695:7;36681:26;;;;;;;;;;;;:9;:26::i;:::-;36605:110;;:::o;35036:272::-;35150:28;35160:4;35166:2;35170:7;35150:9;:28::i;:::-;35197:48;35220:4;35226:2;35230:7;35239:5;35197:22;:48::i;:::-;35189:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35036:272;;;;:::o;53519:117::-;53579:13;53612:16;53605:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53519:117;:::o;7152:723::-;7208:13;7438:1;7429:5;:10;7425:53;;;7456:10;;;;;;;;;;;;;;;;;;;;;7425:53;7488:12;7503:5;7488:20;;7519:14;7544:78;7559:1;7551:4;:9;7544:78;;7577:8;;;;;:::i;:::-;;;;7608:2;7600:10;;;;;:::i;:::-;;;7544:78;;;7632:19;7664:6;7654:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7632:39;;7682:154;7698:1;7689:5;:10;7682:154;;7726:1;7716:11;;;;;:::i;:::-;;;7793:2;7785:5;:10;;;;:::i;:::-;7772:2;:24;;;;:::i;:::-;7759:39;;7742:6;7749;7742:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7822:2;7813:11;;;;;:::i;:::-;;;7682:154;;;7860:6;7846:21;;;;;7152:723;;;;:::o;3040:98::-;3098:7;3129:1;3125;:5;;;;:::i;:::-;3118:12;;3040:98;;;;:::o;19228:157::-;19313:4;19352:25;19337:40;;;:11;:40;;;;19330:47;;19228:157;;;:::o;44692:604::-;44817:55;44844:4;44850:2;44854:7;44863:8;44817:26;:55::i;:::-;44905:1;44889:18;;:4;:18;;;44885:187;;;44924:40;44956:7;44924:31;:40::i;:::-;44885:187;;;44994:2;44986:10;;:4;:10;;;44982:90;;45013:47;45046:4;45052:7;45013:32;:47::i;:::-;44982:90;44885:187;45100:1;45086:16;;:2;:16;;;:28;;;;;45106:8;45086:28;45082:207;;;45131:45;45168:7;45131:36;:45::i;:::-;45082:207;;;45204:4;45198:10;;:2;:10;;;;:22;;;;;45212:8;45198:22;45194:95;;;45237:40;45265:2;45269:7;45237:27;:40::i;:::-;45194:95;45082:207;44692:604;;;;:::o;36942:250::-;37038:18;37044:2;37048:7;37038:5;:18::i;:::-;37075:54;37106:1;37110:2;37114:7;37123:5;37075:22;:54::i;:::-;37067:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;36942:250;;;:::o;40599:839::-;40716:4;40742:15;:2;:13;;;:15::i;:::-;40738:693;;;40794:2;40778:36;;;40815:12;:10;:12::i;:::-;40829:4;40835:7;40844:5;40778:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40774:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41041:1;41024:6;:13;:18;41020:341;;;41067:60;;;;;;;;;;:::i;:::-;;;;;;;;41020:341;41311:6;41305:13;41296:6;41292:2;41288:15;41281:38;40774:602;40911:45;;;40901:55;;;:6;:55;;;;40894:62;;;;;40738:693;41415:4;41408:11;;40599:839;;;;;;;:::o;42051:108::-;;;;;:::o;46019:164::-;46123:10;:17;;;;46096:15;:24;46112:7;46096:24;;;;;;;;;;;:44;;;;46151:10;46167:7;46151:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46019:164;:::o;46810:988::-;47076:22;47126:1;47101:22;47118:4;47101:16;:22::i;:::-;:26;;;;:::i;:::-;47076:51;;47138:18;47159:17;:26;47177:7;47159:26;;;;;;;;;;;;47138:47;;47306:14;47292:10;:28;47288:328;;47337:19;47359:12;:18;47372:4;47359:18;;;;;;;;;;;;;;;:34;47378:14;47359:34;;;;;;;;;;;;47337:56;;47443:11;47410:12;:18;47423:4;47410:18;;;;;;;;;;;;;;;:30;47429:10;47410:30;;;;;;;;;;;:44;;;;47560:10;47527:17;:30;47545:11;47527:30;;;;;;;;;;;:43;;;;47288:328;;47712:17;:26;47730:7;47712:26;;;;;;;;;;;47705:33;;;47756:12;:18;47769:4;47756:18;;;;;;;;;;;;;;;:34;47775:14;47756:34;;;;;;;;;;;47749:41;;;46810:988;;;;:::o;48093:1079::-;48346:22;48391:1;48371:10;:17;;;;:21;;;;:::i;:::-;48346:46;;48403:18;48424:15;:24;48440:7;48424:24;;;;;;;;;;;;48403:45;;48775:19;48797:10;48808:14;48797:26;;;;;;;;;;;;;;;;;;;;;;;;48775:48;;48861:11;48836:10;48847;48836:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;48972:10;48941:15;:28;48957:11;48941:28;;;;;;;;;;;:41;;;;49113:15;:24;49129:7;49113:24;;;;;;;;;;;49106:31;;;49148:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48093:1079;;;;:::o;45597:221::-;45682:14;45699:20;45716:2;45699:16;:20::i;:::-;45682:37;;45757:7;45730:12;:16;45743:2;45730:16;;;;;;;;;;;;;;;:24;45747:6;45730:24;;;;;;;;;;;:34;;;;45804:6;45775:17;:26;45793:7;45775:26;;;;;;;;;;;:35;;;;45597:221;;;:::o;37528:388::-;37622:1;37608:16;;:2;:16;;;;37600:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37681:16;37689:7;37681;:16::i;:::-;37680:17;37672:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37743:51;37772:1;37776:2;37780:7;37789:4;37743:20;:51::i;:::-;37824:1;37807:9;:13;37817:2;37807:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37855:2;37836:7;:16;37844:7;37836:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37900:7;37896:2;37875:33;;37892:1;37875:33;;;;;;;;;;;;37528:388;;:::o;9617:422::-;9677:4;9885:12;9996:7;9984:20;9976:28;;10030:1;10023:4;:8;10016:15;;;9617:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1074:6;1068:13;1059:22;;1090:30;1114:5;1090:30;:::i;:::-;1049:77;;;;:::o;1132:137::-;;1215:6;1202:20;1193:29;;1231:32;1257:5;1231:32;:::i;:::-;1183:86;;;;:::o;1275:141::-;;1362:6;1356:13;1347:22;;1378:32;1404:5;1378:32;:::i;:::-;1337:79;;;;:::o;1435:271::-;;1539:3;1532:4;1524:6;1520:17;1516:27;1506:2;;1557:1;1554;1547:12;1506:2;1597:6;1584:20;1622:78;1696:3;1688:6;1681:4;1673:6;1669:17;1622:78;:::i;:::-;1613:87;;1496:210;;;;;:::o;1726:273::-;;1831:3;1824:4;1816:6;1812:17;1808:27;1798:2;;1849:1;1846;1839:12;1798:2;1889:6;1876:20;1914:79;1989:3;1981:6;1974:4;1966:6;1962:17;1914:79;:::i;:::-;1905:88;;1788:211;;;;;:::o;2005:139::-;;2089:6;2076:20;2067:29;;2105:33;2132:5;2105:33;:::i;:::-;2057:87;;;;:::o;2150:262::-;;2258:2;2246:9;2237:7;2233:23;2229:32;2226:2;;;2274:1;2271;2264:12;2226:2;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2216:196;;;;:::o;2418:407::-;;;2543:2;2531:9;2522:7;2518:23;2514:32;2511:2;;;2559:1;2556;2549:12;2511:2;2602:1;2627:53;2672:7;2663:6;2652:9;2648:22;2627:53;:::i;:::-;2617:63;;2573:117;2729:2;2755:53;2800:7;2791:6;2780:9;2776:22;2755:53;:::i;:::-;2745:63;;2700:118;2501:324;;;;;:::o;2831:552::-;;;;2973:2;2961:9;2952:7;2948:23;2944:32;2941:2;;;2989:1;2986;2979:12;2941:2;3032:1;3057:53;3102:7;3093:6;3082:9;3078:22;3057:53;:::i;:::-;3047:63;;3003:117;3159:2;3185:53;3230:7;3221:6;3210:9;3206:22;3185:53;:::i;:::-;3175:63;;3130:118;3287:2;3313:53;3358:7;3349:6;3338:9;3334:22;3313:53;:::i;:::-;3303:63;;3258:118;2931:452;;;;;:::o;3389:809::-;;;;;3557:3;3545:9;3536:7;3532:23;3528:33;3525:2;;;3574:1;3571;3564:12;3525:2;3617:1;3642:53;3687:7;3678:6;3667:9;3663:22;3642:53;:::i;:::-;3632:63;;3588:117;3744:2;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3715:118;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;4028:2;4017:9;4013:18;4000:32;4059:18;4051:6;4048:30;4045:2;;;4091:1;4088;4081:12;4045:2;4119:62;4173:7;4164:6;4153:9;4149:22;4119:62;:::i;:::-;4109:72;;3971:220;3515:683;;;;;;;:::o;4204:401::-;;;4326:2;4314:9;4305:7;4301:23;4297:32;4294:2;;;4342:1;4339;4332:12;4294:2;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4512:2;4538:50;4580:7;4571:6;4560:9;4556:22;4538:50;:::i;:::-;4528:60;;4483:115;4284:321;;;;;:::o;4611:407::-;;;4736:2;4724:9;4715:7;4711:23;4707:32;4704:2;;;4752:1;4749;4742:12;4704:2;4795:1;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4766:117;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;4694:324;;;;;:::o;5024:278::-;;5140:2;5128:9;5119:7;5115:23;5111:32;5108:2;;;5156:1;5153;5146:12;5108:2;5199:1;5224:61;5277:7;5268:6;5257:9;5253:22;5224:61;:::i;:::-;5214:71;;5170:125;5098:204;;;;:::o;5308:260::-;;5415:2;5403:9;5394:7;5390:23;5386:32;5383:2;;;5431:1;5428;5421:12;5383:2;5474:1;5499:52;5543:7;5534:6;5523:9;5519:22;5499:52;:::i;:::-;5489:62;;5445:116;5373:195;;;;:::o;5574:282::-;;5692:2;5680:9;5671:7;5667:23;5663:32;5660:2;;;5708:1;5705;5698:12;5660:2;5751:1;5776:63;5831:7;5822:6;5811:9;5807:22;5776:63;:::i;:::-;5766:73;;5722:127;5650:206;;;;:::o;5862:375::-;;5980:2;5968:9;5959:7;5955:23;5951:32;5948:2;;;5996:1;5993;5986:12;5948:2;6067:1;6056:9;6052:17;6039:31;6097:18;6089:6;6086:30;6083:2;;;6129:1;6126;6119:12;6083:2;6157:63;6212:7;6203:6;6192:9;6188:22;6157:63;:::i;:::-;6147:73;;6010:220;5938:299;;;;:::o;6243:262::-;;6351:2;6339:9;6330:7;6326:23;6322:32;6319:2;;;6367:1;6364;6357:12;6319:2;6410:1;6435:53;6480:7;6471:6;6460:9;6456:22;6435:53;:::i;:::-;6425:63;;6381:117;6309:196;;;;:::o;6511:990::-;;;;;;;6704:3;6692:9;6683:7;6679:23;6675:33;6672:2;;;6721:1;6718;6711:12;6672:2;6764:1;6789:53;6834:7;6825:6;6814:9;6810:22;6789:53;:::i;:::-;6779:63;;6735:117;6891:2;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6862:118;7019:2;7045:53;7090:7;7081:6;7070:9;7066:22;7045:53;:::i;:::-;7035:63;;6990:118;7147:2;7173:53;7218:7;7209:6;7198:9;7194:22;7173:53;:::i;:::-;7163:63;;7118:118;7275:3;7302:53;7347:7;7338:6;7327:9;7323:22;7302:53;:::i;:::-;7292:63;;7246:119;7404:3;7431:53;7476:7;7467:6;7456:9;7452:22;7431:53;:::i;:::-;7421:63;;7375:119;6662:839;;;;;;;;:::o;7507:118::-;7594:24;7612:5;7594:24;:::i;:::-;7589:3;7582:37;7572:53;;:::o;7631:109::-;7712:21;7727:5;7712:21;:::i;:::-;7707:3;7700:34;7690:50;;:::o;7746:360::-;;7860:38;7892:5;7860:38;:::i;:::-;7914:70;7977:6;7972:3;7914:70;:::i;:::-;7907:77;;7993:52;8038:6;8033:3;8026:4;8019:5;8015:16;7993:52;:::i;:::-;8070:29;8092:6;8070:29;:::i;:::-;8065:3;8061:39;8054:46;;7836:270;;;;;:::o;8112:364::-;;8228:39;8261:5;8228:39;:::i;:::-;8283:71;8347:6;8342:3;8283:71;:::i;:::-;8276:78;;8363:52;8408:6;8403:3;8396:4;8389:5;8385:16;8363:52;:::i;:::-;8440:29;8462:6;8440:29;:::i;:::-;8435:3;8431:39;8424:46;;8204:272;;;;;:::o;8482:377::-;;8616:39;8649:5;8616:39;:::i;:::-;8671:89;8753:6;8748:3;8671:89;:::i;:::-;8664:96;;8769:52;8814:6;8809:3;8802:4;8795:5;8791:16;8769:52;:::i;:::-;8846:6;8841:3;8837:16;8830:23;;8592:267;;;;;:::o;8865:367::-;;9028:67;9092:2;9087:3;9028:67;:::i;:::-;9021:74;;9125:34;9121:1;9116:3;9112:11;9105:55;9191:5;9186:2;9181:3;9177:12;9170:27;9223:2;9218:3;9214:12;9207:19;;9011:221;;;:::o;9238:383::-;;9401:67;9465:2;9460:3;9401:67;:::i;:::-;9394:74;;9498:34;9494:1;9489:3;9485:11;9478:55;9564:21;9559:2;9554:3;9550:12;9543:43;9612:2;9607:3;9603:12;9596:19;;9384:237;;;:::o;9627:369::-;;9790:67;9854:2;9849:3;9790:67;:::i;:::-;9783:74;;9887:34;9883:1;9878:3;9874:11;9867:55;9953:7;9948:2;9943:3;9939:12;9932:29;9987:2;9982:3;9978:12;9971:19;;9773:223;;;:::o;10002:369::-;;10165:67;10229:2;10224:3;10165:67;:::i;:::-;10158:74;;10262:34;10258:1;10253:3;10249:11;10242:55;10328:7;10323:2;10318:3;10314:12;10307:29;10362:2;10357:3;10353:12;10346:19;;10148:223;;;:::o;10377:375::-;;10540:67;10604:2;10599:3;10540:67;:::i;:::-;10533:74;;10637:34;10633:1;10628:3;10624:11;10617:55;10703:13;10698:2;10693:3;10689:12;10682:35;10743:2;10738:3;10734:12;10727:19;;10523:229;;;:::o;10758:382::-;;10921:67;10985:2;10980:3;10921:67;:::i;:::-;10914:74;;11018:34;11014:1;11009:3;11005:11;10998:55;11084:20;11079:2;11074:3;11070:12;11063:42;11131:2;11126:3;11122:12;11115:19;;10904:236;;;:::o;11146:370::-;;11309:67;11373:2;11368:3;11309:67;:::i;:::-;11302:74;;11406:34;11402:1;11397:3;11393:11;11386:55;11472:8;11467:2;11462:3;11458:12;11451:30;11507:2;11502:3;11498:12;11491:19;;11292:224;;;:::o;11522:326::-;;11685:67;11749:2;11744:3;11685:67;:::i;:::-;11678:74;;11782:30;11778:1;11773:3;11769:11;11762:51;11839:2;11834:3;11830:12;11823:19;;11668:180;;;:::o;11854:367::-;;12017:67;12081:2;12076:3;12017:67;:::i;:::-;12010:74;;12114:34;12110:1;12105:3;12101:11;12094:55;12180:5;12175:2;12170:3;12166:12;12159:27;12212:2;12207:3;12203:12;12196:19;;12000:221;;;:::o;12227:368::-;;12390:67;12454:2;12449:3;12390:67;:::i;:::-;12383:74;;12487:34;12483:1;12478:3;12474:11;12467:55;12553:6;12548:2;12543:3;12539:12;12532:28;12586:2;12581:3;12577:12;12570:19;;12373:222;;;:::o;12601:323::-;;12764:67;12828:2;12823:3;12764:67;:::i;:::-;12757:74;;12861:27;12857:1;12852:3;12848:11;12841:48;12915:2;12910:3;12906:12;12899:19;;12747:177;;;:::o;12930:376::-;;13093:67;13157:2;13152:3;13093:67;:::i;:::-;13086:74;;13190:34;13186:1;13181:3;13177:11;13170:55;13256:14;13251:2;13246:3;13242:12;13235:36;13297:2;13292:3;13288:12;13281:19;;13076:230;;;:::o;13312:327::-;;13475:67;13539:2;13534:3;13475:67;:::i;:::-;13468:74;;13572:31;13568:1;13563:3;13559:11;13552:52;13630:2;13625:3;13621:12;13614:19;;13458:181;;;:::o;13645:388::-;;13808:67;13872:2;13867:3;13808:67;:::i;:::-;13801:74;;13905:34;13901:1;13896:3;13892:11;13885:55;13971:26;13966:2;13961:3;13957:12;13950:48;14024:2;14019:3;14015:12;14008:19;;13791:242;;;:::o;14039:369::-;;14202:67;14266:2;14261:3;14202:67;:::i;:::-;14195:74;;14299:34;14295:1;14290:3;14286:11;14279:55;14365:7;14360:2;14355:3;14351:12;14344:29;14399:2;14394:3;14390:12;14383:19;;14185:223;;;:::o;14414:374::-;;14577:67;14641:2;14636:3;14577:67;:::i;:::-;14570:74;;14674:34;14670:1;14665:3;14661:11;14654:55;14740:12;14735:2;14730:3;14726:12;14719:34;14779:2;14774:3;14770:12;14763:19;;14560:228;;;:::o;14794:373::-;;14957:67;15021:2;15016:3;14957:67;:::i;:::-;14950:74;;15054:34;15050:1;15045:3;15041:11;15034:55;15120:11;15115:2;15110:3;15106:12;15099:33;15158:2;15153:3;15149:12;15142:19;;14940:227;;;:::o;15173:327::-;;15336:67;15400:2;15395:3;15336:67;:::i;:::-;15329:74;;15433:31;15429:1;15424:3;15420:11;15413:52;15491:2;15486:3;15482:12;15475:19;;15319:181;;;:::o;15506:330::-;;15669:67;15733:2;15728:3;15669:67;:::i;:::-;15662:74;;15766:34;15762:1;15757:3;15753:11;15746:55;15827:2;15822:3;15818:12;15811:19;;15652:184;;;:::o;15842:330::-;;16005:67;16069:2;16064:3;16005:67;:::i;:::-;15998:74;;16102:34;16098:1;16093:3;16089:11;16082:55;16163:2;16158:3;16154:12;16147:19;;15988:184;;;:::o;16178:376::-;;16341:67;16405:2;16400:3;16341:67;:::i;:::-;16334:74;;16438:34;16434:1;16429:3;16425:11;16418:55;16504:14;16499:2;16494:3;16490:12;16483:36;16545:2;16540:3;16536:12;16529:19;;16324:230;;;:::o;16560:330::-;;16723:67;16787:2;16782:3;16723:67;:::i;:::-;16716:74;;16820:34;16816:1;16811:3;16807:11;16800:55;16881:2;16876:3;16872:12;16865:19;;16706:184;;;:::o;16896:369::-;;17059:67;17123:2;17118:3;17059:67;:::i;:::-;17052:74;;17156:34;17152:1;17147:3;17143:11;17136:55;17222:7;17217:2;17212:3;17208:12;17201:29;17256:2;17251:3;17247:12;17240:19;;17042:223;;;:::o;17271:373::-;;17434:67;17498:2;17493:3;17434:67;:::i;:::-;17427:74;;17531:34;17527:1;17522:3;17518:11;17511:55;17597:11;17592:2;17587:3;17583:12;17576:33;17635:2;17630:3;17626:12;17619:19;;17417:227;;;:::o;17650:374::-;;17813:67;17877:2;17872:3;17813:67;:::i;:::-;17806:74;;17910:34;17906:1;17901:3;17897:11;17890:55;17976:12;17971:2;17966:3;17962:12;17955:34;18015:2;18010:3;18006:12;17999:19;;17796:228;;;:::o;18030:379::-;;18193:67;18257:2;18252:3;18193:67;:::i;:::-;18186:74;;18290:34;18286:1;18281:3;18277:11;18270:55;18356:17;18351:2;18346:3;18342:12;18335:39;18400:2;18395:3;18391:12;18384:19;;18176:233;;;:::o;18415:365::-;;18578:67;18642:2;18637:3;18578:67;:::i;:::-;18571:74;;18675:34;18671:1;18666:3;18662:11;18655:55;18741:3;18736:2;18731:3;18727:12;18720:25;18771:2;18766:3;18762:12;18755:19;;18561:219;;;:::o;18786:381::-;;18949:67;19013:2;19008:3;18949:67;:::i;:::-;18942:74;;19046:34;19042:1;19037:3;19033:11;19026:55;19112:19;19107:2;19102:3;19098:12;19091:41;19158:2;19153:3;19149:12;19142:19;;18932:235;;;:::o;19173:376::-;;19336:67;19400:2;19395:3;19336:67;:::i;:::-;19329:74;;19433:34;19429:1;19424:3;19420:11;19413:55;19499:14;19494:2;19489:3;19485:12;19478:36;19540:2;19535:3;19531:12;19524:19;;19319:230;;;:::o;19555:326::-;;19718:67;19782:2;19777:3;19718:67;:::i;:::-;19711:74;;19815:30;19811:1;19806:3;19802:11;19795:51;19872:2;19867:3;19863:12;19856:19;;19701:180;;;:::o;19887:367::-;;20050:67;20114:2;20109:3;20050:67;:::i;:::-;20043:74;;20147:34;20143:1;20138:3;20134:11;20127:55;20213:5;20208:2;20203:3;20199:12;20192:27;20245:2;20240:3;20236:12;20229:19;;20033:221;;;:::o;20260:369::-;;20423:67;20487:2;20482:3;20423:67;:::i;:::-;20416:74;;20520:34;20516:1;20511:3;20507:11;20500:55;20586:7;20581:2;20576:3;20572:12;20565:29;20620:2;20615:3;20611:12;20604:19;;20406:223;;;:::o;20635:369::-;;20798:67;20862:2;20857:3;20798:67;:::i;:::-;20791:74;;20895:34;20891:1;20886:3;20882:11;20875:55;20961:7;20956:2;20951:3;20947:12;20940:29;20995:2;20990:3;20986:12;20979:19;;20781:223;;;:::o;21010:330::-;;21173:67;21237:2;21232:3;21173:67;:::i;:::-;21166:74;;21270:34;21266:1;21261:3;21257:11;21250:55;21331:2;21326:3;21322:12;21315:19;;21156:184;;;:::o;21346:118::-;21433:24;21451:5;21433:24;:::i;:::-;21428:3;21421:37;21411:53;;:::o;21470:435::-;;21672:95;21763:3;21754:6;21672:95;:::i;:::-;21665:102;;21784:95;21875:3;21866:6;21784:95;:::i;:::-;21777:102;;21896:3;21889:10;;21654:251;;;;;:::o;21911:222::-;;22042:2;22031:9;22027:18;22019:26;;22055:71;22123:1;22112:9;22108:17;22099:6;22055:71;:::i;:::-;22009:124;;;;:::o;22139:640::-;;22372:3;22361:9;22357:19;22349:27;;22386:71;22454:1;22443:9;22439:17;22430:6;22386:71;:::i;:::-;22467:72;22535:2;22524:9;22520:18;22511:6;22467:72;:::i;:::-;22549;22617:2;22606:9;22602:18;22593:6;22549:72;:::i;:::-;22668:9;22662:4;22658:20;22653:2;22642:9;22638:18;22631:48;22696:76;22767:4;22758:6;22696:76;:::i;:::-;22688:84;;22339:440;;;;;;;:::o;22785:210::-;;22910:2;22899:9;22895:18;22887:26;;22923:65;22985:1;22974:9;22970:17;22961:6;22923:65;:::i;:::-;22877:118;;;;:::o;23001:313::-;;23152:2;23141:9;23137:18;23129:26;;23201:9;23195:4;23191:20;23187:1;23176:9;23172:17;23165:47;23229:78;23302:4;23293:6;23229:78;:::i;:::-;23221:86;;23119:195;;;;:::o;23320:419::-;;23524:2;23513:9;23509:18;23501:26;;23573:9;23567:4;23563:20;23559:1;23548:9;23544:17;23537:47;23601:131;23727:4;23601:131;:::i;:::-;23593:139;;23491:248;;;:::o;23745:419::-;;23949:2;23938:9;23934:18;23926:26;;23998:9;23992:4;23988:20;23984:1;23973:9;23969:17;23962:47;24026:131;24152:4;24026:131;:::i;:::-;24018:139;;23916:248;;;:::o;24170:419::-;;24374:2;24363:9;24359:18;24351:26;;24423:9;24417:4;24413:20;24409:1;24398:9;24394:17;24387:47;24451:131;24577:4;24451:131;:::i;:::-;24443:139;;24341:248;;;:::o;24595:419::-;;24799:2;24788:9;24784:18;24776:26;;24848:9;24842:4;24838:20;24834:1;24823:9;24819:17;24812:47;24876:131;25002:4;24876:131;:::i;:::-;24868:139;;24766:248;;;:::o;25020:419::-;;25224:2;25213:9;25209:18;25201:26;;25273:9;25267:4;25263:20;25259:1;25248:9;25244:17;25237:47;25301:131;25427:4;25301:131;:::i;:::-;25293:139;;25191:248;;;:::o;25445:419::-;;25649:2;25638:9;25634:18;25626:26;;25698:9;25692:4;25688:20;25684:1;25673:9;25669:17;25662:47;25726:131;25852:4;25726:131;:::i;:::-;25718:139;;25616:248;;;:::o;25870:419::-;;26074:2;26063:9;26059:18;26051:26;;26123:9;26117:4;26113:20;26109:1;26098:9;26094:17;26087:47;26151:131;26277:4;26151:131;:::i;:::-;26143:139;;26041:248;;;:::o;26295:419::-;;26499:2;26488:9;26484:18;26476:26;;26548:9;26542:4;26538:20;26534:1;26523:9;26519:17;26512:47;26576:131;26702:4;26576:131;:::i;:::-;26568:139;;26466:248;;;:::o;26720:419::-;;26924:2;26913:9;26909:18;26901:26;;26973:9;26967:4;26963:20;26959:1;26948:9;26944:17;26937:47;27001:131;27127:4;27001:131;:::i;:::-;26993:139;;26891:248;;;:::o;27145:419::-;;27349:2;27338:9;27334:18;27326:26;;27398:9;27392:4;27388:20;27384:1;27373:9;27369:17;27362:47;27426:131;27552:4;27426:131;:::i;:::-;27418:139;;27316:248;;;:::o;27570:419::-;;27774:2;27763:9;27759:18;27751:26;;27823:9;27817:4;27813:20;27809:1;27798:9;27794:17;27787:47;27851:131;27977:4;27851:131;:::i;:::-;27843:139;;27741:248;;;:::o;27995:419::-;;28199:2;28188:9;28184:18;28176:26;;28248:9;28242:4;28238:20;28234:1;28223:9;28219:17;28212:47;28276:131;28402:4;28276:131;:::i;:::-;28268:139;;28166:248;;;:::o;28420:419::-;;28624:2;28613:9;28609:18;28601:26;;28673:9;28667:4;28663:20;28659:1;28648:9;28644:17;28637:47;28701:131;28827:4;28701:131;:::i;:::-;28693:139;;28591:248;;;:::o;28845:419::-;;29049:2;29038:9;29034:18;29026:26;;29098:9;29092:4;29088:20;29084:1;29073:9;29069:17;29062:47;29126:131;29252:4;29126:131;:::i;:::-;29118:139;;29016:248;;;:::o;29270:419::-;;29474:2;29463:9;29459:18;29451:26;;29523:9;29517:4;29513:20;29509:1;29498:9;29494:17;29487:47;29551:131;29677:4;29551:131;:::i;:::-;29543:139;;29441:248;;;:::o;29695:419::-;;29899:2;29888:9;29884:18;29876:26;;29948:9;29942:4;29938:20;29934:1;29923:9;29919:17;29912:47;29976:131;30102:4;29976:131;:::i;:::-;29968:139;;29866:248;;;:::o;30120:419::-;;30324:2;30313:9;30309:18;30301:26;;30373:9;30367:4;30363:20;30359:1;30348:9;30344:17;30337:47;30401:131;30527:4;30401:131;:::i;:::-;30393:139;;30291:248;;;:::o;30545:419::-;;30749:2;30738:9;30734:18;30726:26;;30798:9;30792:4;30788:20;30784:1;30773:9;30769:17;30762:47;30826:131;30952:4;30826:131;:::i;:::-;30818:139;;30716:248;;;:::o;30970:419::-;;31174:2;31163:9;31159:18;31151:26;;31223:9;31217:4;31213:20;31209:1;31198:9;31194:17;31187:47;31251:131;31377:4;31251:131;:::i;:::-;31243:139;;31141:248;;;:::o;31395:419::-;;31599:2;31588:9;31584:18;31576:26;;31648:9;31642:4;31638:20;31634:1;31623:9;31619:17;31612:47;31676:131;31802:4;31676:131;:::i;:::-;31668:139;;31566:248;;;:::o;31820:419::-;;32024:2;32013:9;32009:18;32001:26;;32073:9;32067:4;32063:20;32059:1;32048:9;32044:17;32037:47;32101:131;32227:4;32101:131;:::i;:::-;32093:139;;31991:248;;;:::o;32245:419::-;;32449:2;32438:9;32434:18;32426:26;;32498:9;32492:4;32488:20;32484:1;32473:9;32469:17;32462:47;32526:131;32652:4;32526:131;:::i;:::-;32518:139;;32416:248;;;:::o;32670:419::-;;32874:2;32863:9;32859:18;32851:26;;32923:9;32917:4;32913:20;32909:1;32898:9;32894:17;32887:47;32951:131;33077:4;32951:131;:::i;:::-;32943:139;;32841:248;;;:::o;33095:419::-;;33299:2;33288:9;33284:18;33276:26;;33348:9;33342:4;33338:20;33334:1;33323:9;33319:17;33312:47;33376:131;33502:4;33376:131;:::i;:::-;33368:139;;33266:248;;;:::o;33520:419::-;;33724:2;33713:9;33709:18;33701:26;;33773:9;33767:4;33763:20;33759:1;33748:9;33744:17;33737:47;33801:131;33927:4;33801:131;:::i;:::-;33793:139;;33691:248;;;:::o;33945:419::-;;34149:2;34138:9;34134:18;34126:26;;34198:9;34192:4;34188:20;34184:1;34173:9;34169:17;34162:47;34226:131;34352:4;34226:131;:::i;:::-;34218:139;;34116:248;;;:::o;34370:419::-;;34574:2;34563:9;34559:18;34551:26;;34623:9;34617:4;34613:20;34609:1;34598:9;34594:17;34587:47;34651:131;34777:4;34651:131;:::i;:::-;34643:139;;34541:248;;;:::o;34795:419::-;;34999:2;34988:9;34984:18;34976:26;;35048:9;35042:4;35038:20;35034:1;35023:9;35019:17;35012:47;35076:131;35202:4;35076:131;:::i;:::-;35068:139;;34966:248;;;:::o;35220:419::-;;35424:2;35413:9;35409:18;35401:26;;35473:9;35467:4;35463:20;35459:1;35448:9;35444:17;35437:47;35501:131;35627:4;35501:131;:::i;:::-;35493:139;;35391:248;;;:::o;35645:419::-;;35849:2;35838:9;35834:18;35826:26;;35898:9;35892:4;35888:20;35884:1;35873:9;35869:17;35862:47;35926:131;36052:4;35926:131;:::i;:::-;35918:139;;35816:248;;;:::o;36070:419::-;;36274:2;36263:9;36259:18;36251:26;;36323:9;36317:4;36313:20;36309:1;36298:9;36294:17;36287:47;36351:131;36477:4;36351:131;:::i;:::-;36343:139;;36241:248;;;:::o;36495:419::-;;36699:2;36688:9;36684:18;36676:26;;36748:9;36742:4;36738:20;36734:1;36723:9;36719:17;36712:47;36776:131;36902:4;36776:131;:::i;:::-;36768:139;;36666:248;;;:::o;36920:419::-;;37124:2;37113:9;37109:18;37101:26;;37173:9;37167:4;37163:20;37159:1;37148:9;37144:17;37137:47;37201:131;37327:4;37201:131;:::i;:::-;37193:139;;37091:248;;;:::o;37345:419::-;;37549:2;37538:9;37534:18;37526:26;;37598:9;37592:4;37588:20;37584:1;37573:9;37569:17;37562:47;37626:131;37752:4;37626:131;:::i;:::-;37618:139;;37516:248;;;:::o;37770:222::-;;37901:2;37890:9;37886:18;37878:26;;37914:71;37982:1;37971:9;37967:17;37958:6;37914:71;:::i;:::-;37868:124;;;;:::o;37998:283::-;;38064:2;38058:9;38048:19;;38106:4;38098:6;38094:17;38213:6;38201:10;38198:22;38177:18;38165:10;38162:34;38159:62;38156:2;;;38224:18;;:::i;:::-;38156:2;38264:10;38260:2;38253:22;38038:243;;;;:::o;38287:331::-;;38438:18;38430:6;38427:30;38424:2;;;38460:18;;:::i;:::-;38424:2;38545:4;38541:9;38534:4;38526:6;38522:17;38518:33;38510:41;;38606:4;38600;38596:15;38588:23;;38353:265;;;:::o;38624:332::-;;38776:18;38768:6;38765:30;38762:2;;;38798:18;;:::i;:::-;38762:2;38883:4;38879:9;38872:4;38864:6;38860:17;38856:33;38848:41;;38944:4;38938;38934:15;38926:23;;38691:265;;;:::o;38962:98::-;;39047:5;39041:12;39031:22;;39020:40;;;:::o;39066:99::-;;39152:5;39146:12;39136:22;;39125:40;;;:::o;39171:168::-;;39288:6;39283:3;39276:19;39328:4;39323:3;39319:14;39304:29;;39266:73;;;;:::o;39345:169::-;;39463:6;39458:3;39451:19;39503:4;39498:3;39494:14;39479:29;;39441:73;;;;:::o;39520:148::-;;39659:3;39644:18;;39634:34;;;;:::o;39674:305::-;;39733:20;39751:1;39733:20;:::i;:::-;39728:25;;39767:20;39785:1;39767:20;:::i;:::-;39762:25;;39921:1;39853:66;39849:74;39846:1;39843:81;39840:2;;;39927:18;;:::i;:::-;39840:2;39971:1;39968;39964:9;39957:16;;39718:261;;;;:::o;39985:185::-;;40042:20;40060:1;40042:20;:::i;:::-;40037:25;;40076:20;40094:1;40076:20;:::i;:::-;40071:25;;40115:1;40105:2;;40120:18;;:::i;:::-;40105:2;40162:1;40159;40155:9;40150:14;;40027:143;;;;:::o;40176:348::-;;40239:20;40257:1;40239:20;:::i;:::-;40234:25;;40273:20;40291:1;40273:20;:::i;:::-;40268:25;;40461:1;40393:66;40389:74;40386:1;40383:81;40378:1;40371:9;40364:17;40360:105;40357:2;;;40468:18;;:::i;:::-;40357:2;40516:1;40513;40509:9;40498:20;;40224:300;;;;:::o;40530:191::-;;40590:20;40608:1;40590:20;:::i;:::-;40585:25;;40624:20;40642:1;40624:20;:::i;:::-;40619:25;;40663:1;40660;40657:8;40654:2;;;40668:18;;:::i;:::-;40654:2;40713:1;40710;40706:9;40698:17;;40575:146;;;;:::o;40727:96::-;;40793:24;40811:5;40793:24;:::i;:::-;40782:35;;40772:51;;;:::o;40829:90::-;;40906:5;40899:13;40892:21;40881:32;;40871:48;;;:::o;40925:149::-;;41001:66;40994:5;40990:78;40979:89;;40969:105;;;:::o;41080:126::-;;41157:42;41150:5;41146:54;41135:65;;41125:81;;;:::o;41212:77::-;;41278:5;41267:16;;41257:32;;;:::o;41295:154::-;41379:6;41374:3;41369;41356:30;41441:1;41432:6;41427:3;41423:16;41416:27;41346:103;;;:::o;41455:307::-;41523:1;41533:113;41547:6;41544:1;41541:13;41533:113;;;41632:1;41627:3;41623:11;41617:18;41613:1;41608:3;41604:11;41597:39;41569:2;41566:1;41562:10;41557:15;;41533:113;;;41664:6;41661:1;41658:13;41655:2;;;41744:1;41735:6;41730:3;41726:16;41719:27;41655:2;41504:258;;;;:::o;41768:320::-;;41849:1;41843:4;41839:12;41829:22;;41896:1;41890:4;41886:12;41917:18;41907:2;;41973:4;41965:6;41961:17;41951:27;;41907:2;42035;42027:6;42024:14;42004:18;42001:38;41998:2;;;42054:18;;:::i;:::-;41998:2;41819:269;;;;:::o;42094:233::-;;42156:24;42174:5;42156:24;:::i;:::-;42147:33;;42202:66;42195:5;42192:77;42189:2;;;42272:18;;:::i;:::-;42189:2;42319:1;42312:5;42308:13;42301:20;;42137:190;;;:::o;42333:176::-;;42382:20;42400:1;42382:20;:::i;:::-;42377:25;;42416:20;42434:1;42416:20;:::i;:::-;42411:25;;42455:1;42445:2;;42460:18;;:::i;:::-;42445:2;42501:1;42498;42494:9;42489:14;;42367:142;;;;:::o;42515:180::-;42563:77;42560:1;42553:88;42660:4;42657:1;42650:15;42684:4;42681:1;42674:15;42701:180;42749:77;42746:1;42739:88;42846:4;42843:1;42836:15;42870:4;42867:1;42860:15;42887:180;42935:77;42932:1;42925:88;43032:4;43029:1;43022:15;43056:4;43053:1;43046:15;43073:180;43121:77;43118:1;43111:88;43218:4;43215:1;43208:15;43242:4;43239:1;43232:15;43259:102;;43351:2;43347:7;43342:2;43335:5;43331:14;43327:28;43317:38;;43307:54;;;:::o;43367:122::-;43440:24;43458:5;43440:24;:::i;:::-;43433:5;43430:35;43420:2;;43479:1;43476;43469:12;43420:2;43410:79;:::o;43495:116::-;43565:21;43580:5;43565:21;:::i;:::-;43558:5;43555:32;43545:2;;43601:1;43598;43591:12;43545:2;43535:76;:::o;43617:120::-;43689:23;43706:5;43689:23;:::i;:::-;43682:5;43679:34;43669:2;;43727:1;43724;43717:12;43669:2;43659:78;:::o;43743:122::-;43816:24;43834:5;43816:24;:::i;:::-;43809:5;43806:35;43796:2;;43855:1;43852;43845:12;43796:2;43786:79;:::o

Swarm Source

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