ETH Price: $3,468.02 (+4.11%)
Gas: 4 Gwei

Token

AlphaSciV2 (AlphaSciV2)
 

Overview

Max Total Supply

1,320 AlphaSciV2

Holders

507

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 AlphaSciV2
0x142465967d1d29df61b2c53b421a31fbf7091da2
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:
AlphaSciV2

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

/**
 *Submitted for verification at Etherscan.io on 2022-06-01
 If you hold this NFT, you can use our NFT data analysis website and the freemint auto sniff follow NFT whale
 https://alphascientist.club/
*/

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


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: erc721a/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;








error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

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

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        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 TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

// File: alp.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;




 contract AlphaSciV2 is Ownable, ERC721A, ReentrancyGuard {
    struct Config {
        uint256 maxSupply;
        uint256 reserved;
        uint256 firstFreeMint;
        uint256 mintPrice;
        uint256 maxTokenPerAddress;
        string baseTokenUrl;
    }

    Config public config= Config(6666, 0, 666, 0.005 ether, 10, "");
    bool public isMintStarted= false;
    uint256 public maxFreeMintAmountPerTx=3;
    uint256 public maxMintAmountPerTx=10;
    constructor() ERC721A("AlphaSciV2", "AlphaSciV2") 
    {
  
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    function _baseURI() internal view override returns (string memory) {
        return config.baseTokenUrl;
    }

    function setBaseURI(string calldata baseURI) external onlyOwner {
        config.baseTokenUrl = baseURI;
    }

    function setmintPrice(uint256  mintPrice) external onlyOwner {
        config.mintPrice = mintPrice;
    }

    function setConfig(Config calldata config_) external onlyOwner {
        config = config_;
    }

    function toggleMintStart() external onlyOwner {
        isMintStarted = !isMintStarted;
    }

    function withdraw() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }
 
    function batchMint(
        address[] calldata addresses,
        uint256[] calldata quantities
    ) external nonReentrant onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            _safeMint(addresses[i], quantities[i]);
        }
    }

    function setBundleProps(
        uint256 maxFreeMintAmountPerTx_,
        uint256 maxMintAmountPerTx_
    ) external onlyOwner {
        maxFreeMintAmountPerTx = maxFreeMintAmountPerTx_;
        maxMintAmountPerTx = maxMintAmountPerTx_;
    }

    function mint(uint256 quantity) external payable   nonReentrant {
        require(isMintStarted, "Not started");
        require(tx.origin == msg.sender, "Contracts not allowed");
        uint256 pubMintSupply = config.maxSupply - config.reserved;
        require(
            totalSupply() + quantity <= pubMintSupply,
            "Exceed sales max limit"
        );
   
        if (totalSupply() >= config.firstFreeMint) {
            require(
                quantity <= maxMintAmountPerTx,
                "Mint quantity need smaller"
            );
     
            
            uint256 cost;
            unchecked {
                cost =  config.mintPrice * quantity;
            }
            require(msg.value == cost, "wrong payment");
        } else {
           require(
            numberMinted(msg.sender) + quantity <=maxFreeMintAmountPerTx,
            "can not free mint this many"
          );
        }
        _safeMint(msg.sender, quantity);
    }

    function publicmint(uint256 quantity) external payable   nonReentrant {
        require(isMintStarted, "Not started");
        require(tx.origin == msg.sender, "Contracts not allowed");
        uint256 pubMintSupply = config.maxSupply - config.reserved;
        require(
            totalSupply() + quantity <= pubMintSupply,
            "Exceed sales max limit"
        );
        require(
            quantity <= maxMintAmountPerTx,
            "Mint quantity need smaller every tx"
        );
      
        uint256 cost;
        unchecked {
            cost =  config.mintPrice*quantity;
        }
        require(msg.value == cost, "wrong payment");
     
        _safeMint(msg.sender, quantity);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"quantities","type":"uint256[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"config","outputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"reserved","type":"uint256"},{"internalType":"uint256","name":"firstFreeMint","type":"uint256"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint256","name":"maxTokenPerAddress","type":"uint256"},{"internalType":"string","name":"baseTokenUrl","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicmint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxFreeMintAmountPerTx_","type":"uint256"},{"internalType":"uint256","name":"maxMintAmountPerTx_","type":"uint256"}],"name":"setBundleProps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"reserved","type":"uint256"},{"internalType":"uint256","name":"firstFreeMint","type":"uint256"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint256","name":"maxTokenPerAddress","type":"uint256"},{"internalType":"string","name":"baseTokenUrl","type":"string"}],"internalType":"struct AlphaSciV2.Config","name":"config_","type":"tuple"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintPrice","type":"uint256"}],"name":"setmintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMintStart","outputs":[],"stateMutability":"nonpayable","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"}]

60806040526040518060c00160405280611a0a81526020016000815260200161029a81526020016611c37937e080008152602001600a815260200160405180602001604052806000815250815250600a600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050190805190602001906200009f9291906200028a565b5050506000601060006101000a81548160ff0219169083151502179055506003601155600a601255348015620000d457600080fd5b506040518060400160405280600a81526020017f416c7068615363695632000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f416c7068615363695632000000000000000000000000000000000000000000008152506200016162000155620001b960201b60201c565b620001c160201b60201c565b8160039080519060200190620001799291906200028a565b508060049080519060200190620001929291906200028a565b50620001a36200028560201b60201c565b600181905550505060016009819055506200039f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b82805462000298906200033a565b90600052602060002090601f016020900481019282620002bc576000855562000308565b82601f10620002d757805160ff191683800117855562000308565b8280016001018555821562000308579182015b8281111562000307578251825591602001919060010190620002ea565b5b5090506200031791906200031b565b5090565b5b80821115620003365760008160009055506001016200031c565b5090565b600060028204905060018216806200035357607f821691505b602082108114156200036a576200036962000370565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61437280620003af6000396000f3fe6080604052600436106101cd5760003560e01c8063715e6e58116100f7578063a424aa5011610095578063c87b56dd11610064578063c87b56dd14610623578063dc33e68114610660578063e985e9c51461069d578063f2fde38b146106da576101cd565b8063a424aa5014610591578063ad52e588146105ba578063b488cf18146105d1578063b88d4fde146105fa576101cd565b806394354fd0116100d157806394354fd0146104f657806395d89b4114610521578063a0712d681461054c578063a22cb46514610568576101cd565b8063715e6e581461047f57806379502c551461049b5780638da5cb5b146104cb576101cd565b80633ccfd60b1161016f578063604906dc1161013e578063604906dc146103b15780636352211e146103dc578063685731071461041957806370a0823114610442576101cd565b80633ccfd60b1461031f57806342842e0e14610336578063488299aa1461035f57806355f804b314610388576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a05780631869e7d4146102cb57806323b872dd146102f6576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906131dd565b610703565b604051610206919061364e565b60405180910390f35b34801561021b57600080fd5b506102246107e5565b6040516102319190613669565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906132cd565b610877565b60405161026e91906135e7565b60405180910390f35b34801561028357600080fd5b5061029e6004803603810190610299919061311c565b6108f3565b005b3480156102ac57600080fd5b506102b56109fe565b6040516102c291906137eb565b60405180910390f35b3480156102d757600080fd5b506102e0610a15565b6040516102ed919061364e565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190613006565b610a28565b005b34801561032b57600080fd5b50610334610a38565b005b34801561034257600080fd5b5061035d60048036038101906103589190613006565b610bb9565b005b34801561036b57600080fd5b5061038660048036038101906103819190613284565b610bd9565b005b34801561039457600080fd5b506103af60048036038101906103aa9190613237565b610c6a565b005b3480156103bd57600080fd5b506103c6610cff565b6040516103d391906137eb565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe91906132cd565b610d05565b60405161041091906135e7565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b919061315c565b610d1b565b005b34801561044e57600080fd5b5061046960048036038101906104649190612f99565b610e5f565b60405161047691906137eb565b60405180910390f35b610499600480360381019061049491906132cd565b610f2f565b005b3480156104a757600080fd5b506104b0611153565b6040516104c296959493929190613806565b60405180910390f35b3480156104d757600080fd5b506104e0611205565b6040516104ed91906135e7565b60405180910390f35b34801561050257600080fd5b5061050b61122e565b60405161051891906137eb565b60405180910390f35b34801561052d57600080fd5b50610536611234565b6040516105439190613669565b60405180910390f35b610566600480360381019061056191906132cd565b6112c6565b005b34801561057457600080fd5b5061058f600480360381019061058a91906130dc565b61155b565b005b34801561059d57600080fd5b506105b860048036038101906105b391906132fa565b6116d3565b005b3480156105c657600080fd5b506105cf611761565b005b3480156105dd57600080fd5b506105f860048036038101906105f391906132cd565b611809565b005b34801561060657600080fd5b50610621600480360381019061061c9190613059565b611892565b005b34801561062f57600080fd5b5061064a600480360381019061064591906132cd565b61190e565b6040516106579190613669565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190612f99565b6119ad565b60405161069491906137eb565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190612fc6565b6119bf565b6040516106d1919061364e565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612f99565b611a53565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ce57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107de57506107dd82611b4b565b5b9050919050565b6060600380546107f490613d2b565b80601f016020809104026020016040519081016040528092919081815260200182805461082090613d2b565b801561086d5780601f106108425761010080835404028352916020019161086d565b820191906000526020600020905b81548152906001019060200180831161085057829003601f168201915b5050505050905090565b600061088282611bb5565b6108b8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108fe82610d05565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610966576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610985611c03565b73ffffffffffffffffffffffffffffffffffffffff16141580156109b757506109b5816109b0611c03565b6119bf565b155b156109ee576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f9838383611c0b565b505050565b6000610a08611cbd565b6002546001540303905090565b601060009054906101000a900460ff1681565b610a33838383611cc2565b505050565b610a40611c03565b73ffffffffffffffffffffffffffffffffffffffff16610a5e611205565b73ffffffffffffffffffffffffffffffffffffffff1614610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab9061372b565b60405180910390fd5b60026009541415610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061378b565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610b28906135d2565b60006040518083038185875af1925050503d8060008114610b65576040519150601f19603f3d011682016040523d82523d6000602084013e610b6a565b606091505b5050905080610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba59061376b565b60405180910390fd5b506001600981905550565b610bd483838360405180602001604052806000815250611892565b505050565b610be1611c03565b73ffffffffffffffffffffffffffffffffffffffff16610bff611205565b73ffffffffffffffffffffffffffffffffffffffff1614610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c9061372b565b60405180910390fd5b80600a8181610c649190614285565b90505050565b610c72611c03565b73ffffffffffffffffffffffffffffffffffffffff16610c90611205565b73ffffffffffffffffffffffffffffffffffffffff1614610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd9061372b565b60405180910390fd5b8181600a6005019190610cfa929190612cb9565b505050565b60115481565b6000610d1082612178565b600001519050919050565b60026009541415610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d589061378b565b60405180910390fd5b6002600981905550610d71611c03565b73ffffffffffffffffffffffffffffffffffffffff16610d8f611205565b73ffffffffffffffffffffffffffffffffffffffff1614610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc9061372b565b60405180910390fd5b60005b84849050811015610e5057610e3d858583818110610e0957610e08613ecf565b5b9050602002016020810190610e1e9190612f99565b848484818110610e3157610e30613ecf565b5b90506020020135612407565b8080610e4890613daa565b915050610de8565b50600160098190555050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec7576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b60026009541415610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061378b565b60405180910390fd5b6002600981905550601060009054906101000a900460ff16610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc39061368b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110319061374b565b60405180910390fd5b6000600a60010154600a600001546110529190613a1c565b9050808261105e6109fe565b6110689190613995565b11156110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a09061370b565b60405180910390fd5b6012548211156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e5906137ab565b60405180910390fd5b600082600a6003015402905080341461113c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611133906136cb565b60405180910390fd5b6111463384612407565b5050600160098190555050565b600a80600001549080600101549080600201549080600301549080600401549080600501805461118290613d2b565b80601f01602080910402602001604051908101604052809291908181526020018280546111ae90613d2b565b80156111fb5780601f106111d0576101008083540402835291602001916111fb565b820191906000526020600020905b8154815290600101906020018083116111de57829003601f168201915b5050505050905086565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b60606004805461124390613d2b565b80601f016020809104026020016040519081016040528092919081815260200182805461126f90613d2b565b80156112bc5780601f10611291576101008083540402835291602001916112bc565b820191906000526020600020905b81548152906001019060200180831161129f57829003601f168201915b5050505050905090565b6002600954141561130c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113039061378b565b60405180910390fd5b6002600981905550601060009054906101000a900460ff16611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a9061368b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c89061374b565b60405180910390fd5b6000600a60010154600a600001546113e99190613a1c565b905080826113f56109fe565b6113ff9190613995565b1115611440576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114379061370b565b60405180910390fd5b600a6002015461144e6109fe565b106114ec57601254821115611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148f906137cb565b60405180910390fd5b600082600a600301540290508034146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906136cb565b60405180910390fd5b50611545565b601154826114f9336119ad565b6115039190613995565b1115611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b906136eb565b60405180910390fd5b5b61154f3383612407565b50600160098190555050565b611563611c03565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c8576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006115d5611c03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611682611c03565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116c7919061364e565b60405180910390a35050565b6116db611c03565b73ffffffffffffffffffffffffffffffffffffffff166116f9611205565b73ffffffffffffffffffffffffffffffffffffffff161461174f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117469061372b565b60405180910390fd5b81601181905550806012819055505050565b611769611c03565b73ffffffffffffffffffffffffffffffffffffffff16611787611205565b73ffffffffffffffffffffffffffffffffffffffff16146117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d49061372b565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b611811611c03565b73ffffffffffffffffffffffffffffffffffffffff1661182f611205565b73ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c9061372b565b60405180910390fd5b80600a6003018190555050565b61189d848484611cc2565b6118bc8373ffffffffffffffffffffffffffffffffffffffff16612425565b80156118d157506118cf84848484612448565b155b15611908576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061191982611bb5565b61194f576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119596125a8565b905060008151141561197a57604051806020016040528060008152506119a5565b806119848461263d565b6040516020016119959291906135ae565b6040516020818303038152906040525b915050919050565b60006119b88261279e565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a5b611c03565b73ffffffffffffffffffffffffffffffffffffffff16611a79611205565b73ffffffffffffffffffffffffffffffffffffffff1614611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac69061372b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b36906136ab565b60405180910390fd5b611b4881612808565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611bc0611cbd565b11158015611bcf575060015482105b8015611bfc575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611ccd82612178565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d38576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611d59611c03565b73ffffffffffffffffffffffffffffffffffffffff161480611d885750611d8785611d82611c03565b6119bf565b5b80611dcd5750611d96611c03565b73ffffffffffffffffffffffffffffffffffffffff16611db584610877565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e06576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e6d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e7a85858560016128cc565b611e8660008487611c0b565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561210657600154821461210557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461217185858560016128d2565b5050505050565b612180612d3f565b60008290508061218e611cbd565b1115801561219d575060015481105b156123d0576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516123ce57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122b2578092505050612402565b5b6001156123cd57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123c8578092505050612402565b6122b3565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6124218282604051806020016040528060008152506128d8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261246e611c03565b8786866040518563ffffffff1660e01b81526004016124909493929190613602565b602060405180830381600087803b1580156124aa57600080fd5b505af19250505080156124db57506040513d601f19601f820116820180604052508101906124d8919061320a565b60015b612555573d806000811461250b576040519150601f19603f3d011682016040523d82523d6000602084013e612510565b606091505b5060008151141561254d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a60050180546125ba90613d2b565b80601f01602080910402602001604051908101604052809291908181526020018280546125e690613d2b565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b5050505050905090565b60606000821415612685576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612799565b600082905060005b600082146126b75780806126a090613daa565b915050600a826126b091906139eb565b915061268d565b60008167ffffffffffffffff8111156126d3576126d2613efe565b5b6040519080825280601f01601f1916602001820160405280156127055781602001600182028036833780820191505090505b5090505b600085146127925760018261271e9190613a1c565b9150600a8561272d9190613e11565b60306127399190613995565b60f81b81838151811061274f5761274e613ecf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561278b91906139eb565b9450612709565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50505050565b50505050565b6128e583838360016128ea565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612958576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612993576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129a060008683876128cc565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612b6a5750612b698773ffffffffffffffffffffffffffffffffffffffff16612425565b5b15612c30575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bdf6000888480600101955088612448565b612c15576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612b70578260015414612c2b57600080fd5b612c9c565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612c31575b816001819055505050612cb260008683876128d2565b5050505050565b828054612cc590613d2b565b90600052602060002090601f016020900481019282612ce75760008555612d2e565b82601f10612d0057803560ff1916838001178555612d2e565b82800160010185558215612d2e579182015b82811115612d2d578235825591602001919060010190612d12565b5b509050612d3b9190612d82565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612d9b576000816000905550600101612d83565b5090565b6000612db2612dad846138f6565b6138d1565b905082815260208101848484011115612dce57612dcd613f70565b5b612dd9848285613c0f565b509392505050565b600081359050612df0816142db565b92915050565b60008083601f840112612e0c57612e0b613f52565b5b8235905067ffffffffffffffff811115612e2957612e28613f4d565b5b602083019150836020820283011115612e4557612e44613f66565b5b9250929050565b60008083601f840112612e6257612e61613f52565b5b8235905067ffffffffffffffff811115612e7f57612e7e613f4d565b5b602083019150836020820283011115612e9b57612e9a613f66565b5b9250929050565b600081359050612eb1816142f2565b92915050565b600081359050612ec681614309565b92915050565b600081519050612edb81614309565b92915050565b600082601f830112612ef657612ef5613f52565b5b8135612f06848260208601612d9f565b91505092915050565b60008083601f840112612f2557612f24613f52565b5b8235905067ffffffffffffffff811115612f4257612f41613f4d565b5b602083019150836001820283011115612f5e57612f5d613f66565b5b9250929050565b600060c08284031215612f7b57612f7a613f5c565b5b81905092915050565b600081359050612f9381614320565b92915050565b600060208284031215612faf57612fae613f7a565b5b6000612fbd84828501612de1565b91505092915050565b60008060408385031215612fdd57612fdc613f7a565b5b6000612feb85828601612de1565b9250506020612ffc85828601612de1565b9150509250929050565b60008060006060848603121561301f5761301e613f7a565b5b600061302d86828701612de1565b935050602061303e86828701612de1565b925050604061304f86828701612f84565b9150509250925092565b6000806000806080858703121561307357613072613f7a565b5b600061308187828801612de1565b945050602061309287828801612de1565b93505060406130a387828801612f84565b925050606085013567ffffffffffffffff8111156130c4576130c3613f75565b5b6130d087828801612ee1565b91505092959194509250565b600080604083850312156130f3576130f2613f7a565b5b600061310185828601612de1565b925050602061311285828601612ea2565b9150509250929050565b6000806040838503121561313357613132613f7a565b5b600061314185828601612de1565b925050602061315285828601612f84565b9150509250929050565b6000806000806040858703121561317657613175613f7a565b5b600085013567ffffffffffffffff81111561319457613193613f75565b5b6131a087828801612df6565b9450945050602085013567ffffffffffffffff8111156131c3576131c2613f75565b5b6131cf87828801612e4c565b925092505092959194509250565b6000602082840312156131f3576131f2613f7a565b5b600061320184828501612eb7565b91505092915050565b6000602082840312156132205761321f613f7a565b5b600061322e84828501612ecc565b91505092915050565b6000806020838503121561324e5761324d613f7a565b5b600083013567ffffffffffffffff81111561326c5761326b613f75565b5b61327885828601612f0f565b92509250509250929050565b60006020828403121561329a57613299613f7a565b5b600082013567ffffffffffffffff8111156132b8576132b7613f75565b5b6132c484828501612f65565b91505092915050565b6000602082840312156132e3576132e2613f7a565b5b60006132f184828501612f84565b91505092915050565b6000806040838503121561331157613310613f7a565b5b600061331f85828601612f84565b925050602061333085828601612f84565b9150509250929050565b61334381613a96565b82525050565b61335281613aa8565b82525050565b60006133638261393c565b61336d818561395d565b935061337d818560208601613c1e565b61338681613f7f565b840191505092915050565b600061339c82613952565b6133a68185613979565b93506133b6818560208601613c1e565b6133bf81613f7f565b840191505092915050565b60006133d582613952565b6133df818561398a565b93506133ef818560208601613c1e565b80840191505092915050565b6000613408600b83613979565b915061341382613fcf565b602082019050919050565b600061342b602683613979565b915061343682613ff8565b604082019050919050565b600061344e600d83613979565b915061345982614047565b602082019050919050565b6000613471601b83613979565b915061347c82614070565b602082019050919050565b6000613494601683613979565b915061349f82614099565b602082019050919050565b60006134b7602083613979565b91506134c2826140c2565b602082019050919050565b60006134da601583613979565b91506134e5826140eb565b602082019050919050565b60006134fd60008361396e565b915061350882614114565b600082019050919050565b6000613520601083613979565b915061352b82614117565b602082019050919050565b6000613543601f83613979565b915061354e82614140565b602082019050919050565b6000613566602383613979565b915061357182614169565b604082019050919050565b6000613589601a83613979565b9150613594826141b8565b602082019050919050565b6135a881613b00565b82525050565b60006135ba82856133ca565b91506135c682846133ca565b91508190509392505050565b60006135dd826134f0565b9150819050919050565b60006020820190506135fc600083018461333a565b92915050565b6000608082019050613617600083018761333a565b613624602083018661333a565b613631604083018561359f565b81810360608301526136438184613358565b905095945050505050565b60006020820190506136636000830184613349565b92915050565b600060208201905081810360008301526136838184613391565b905092915050565b600060208201905081810360008301526136a4816133fb565b9050919050565b600060208201905081810360008301526136c48161341e565b9050919050565b600060208201905081810360008301526136e481613441565b9050919050565b6000602082019050818103600083015261370481613464565b9050919050565b6000602082019050818103600083015261372481613487565b9050919050565b60006020820190508181036000830152613744816134aa565b9050919050565b60006020820190508181036000830152613764816134cd565b9050919050565b6000602082019050818103600083015261378481613513565b9050919050565b600060208201905081810360008301526137a481613536565b9050919050565b600060208201905081810360008301526137c481613559565b9050919050565b600060208201905081810360008301526137e48161357c565b9050919050565b6000602082019050613800600083018461359f565b92915050565b600060c08201905061381b600083018961359f565b613828602083018861359f565b613835604083018761359f565b613842606083018661359f565b61384f608083018561359f565b81810360a08301526138618184613391565b9050979650505050505050565b6000808335600160200384360303811261388b5761388a613f61565b5b80840192508235915067ffffffffffffffff8211156138ad576138ac613f57565b5b6020830192506001820236038313156138c9576138c8613f6b565b5b509250929050565b60006138db6138ec565b90506138e78282613d79565b919050565b6000604051905090565b600067ffffffffffffffff82111561391157613910613efe565b5b61391a82613f7f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600082905092915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139a082613b00565b91506139ab83613b00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139e0576139df613e42565b5b828201905092915050565b60006139f682613b00565b9150613a0183613b00565b925082613a1157613a10613e71565b5b828204905092915050565b6000613a2782613b00565b9150613a3283613b00565b925082821015613a4557613a44613e42565b5b828203905092915050565b601f821115613a9157613a6281613927565b613a6b84613d1b565b81016020851015613a7a578190505b613a8e613a8685613d1b565b830182613b0a565b50505b505050565b6000613aa182613ae0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b5b81811015613b2957613b1e600082613fb7565b600181019050613b0b565b5050565b6000613b3882613b00565b9050919050565b613b498383613947565b67ffffffffffffffff811115613b6257613b61613efe565b5b613b6c8254613d2b565b613b77828285613a50565b6000601f831160018114613ba65760008415613b94578287013590505b613b9e8582613d5d565b865550613c06565b601f198416613bb486613927565b60005b82811015613bdc57848901358255600182019150602085019450602081019050613bb7565b86831015613bf95784890135613bf5601f891682613df3565b8355505b6001600288020188555050505b50505050505050565b82818337600083830152505050565b60005b83811015613c3c578082015181840152602081019050613c21565b83811115613c4b576000848401525b50505050565b600081016000830180613c6381613f37565b9050613c6f8184614293565b505050600181016020830180613c8481613f37565b9050613c908184614293565b505050600281016040830180613ca581613f37565b9050613cb18184614293565b505050600381016060830180613cc681613f37565b9050613cd28184614293565b505050600481016080830180613ce781613f37565b9050613cf38184614293565b5050506005810160a08301613d08818561386e565b613d13818386614275565b505050505050565b60006020601f8301049050919050565b60006002820490506001821680613d4357607f821691505b60208210811415613d5757613d56613ea0565b5b50919050565b6000613d698383613df3565b9150826002028217905092915050565b613d8282613f7f565b810181811067ffffffffffffffff82111715613da157613da0613efe565b5b80604052505050565b6000613db582613b00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613de857613de7613e42565b5b600182019050919050565b6000613e0460001984600802613faa565b1980831691505092915050565b6000613e1c82613b00565b9150613e2783613b00565b925082613e3757613e36613e71565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60008135613f4481614320565b80915050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160001b9050919050565b600082821b905092915050565b600082821c905092915050565b613fbf614337565b613fca8184846142b6565b505050565b7f4e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f77726f6e67207061796d656e7400000000000000000000000000000000000000600082015250565b7f63616e206e6f742066726565206d696e742074686973206d616e790000000000600082015250565b7f4578636565642073616c6573206d6178206c696d697400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e747261637473206e6f7420616c6c6f7765640000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4d696e74207175616e74697479206e65656420736d616c6c657220657665727960008201527f2074780000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74207175616e74697479206e65656420736d616c6c6572000000000000600082015250565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61420d84613f90565b9350801983169250808416831791505092915050565b6000600883026142537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f9d565b61425d8683613f9d565b95508019841693508086168417925050509392505050565b614280838383613b3f565b505050565b61428f8282613c51565b5050565b61429c82613b2d565b6142af6142a882613f2d565b83546141e1565b8255505050565b6142bf83613b2d565b6142d36142cb82613f2d565b848454614223565b825550505050565b6142e481613a96565b81146142ef57600080fd5b50565b6142fb81613aa8565b811461430657600080fd5b50565b61431281613ab4565b811461431d57600080fd5b50565b61432981613b00565b811461433457600080fd5b50565b60009056fea26469706673582212206a8b2e85fa59911461d559801ea21ecb6f549cc86ff8d835b90fb16d3addb92764736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c8063715e6e58116100f7578063a424aa5011610095578063c87b56dd11610064578063c87b56dd14610623578063dc33e68114610660578063e985e9c51461069d578063f2fde38b146106da576101cd565b8063a424aa5014610591578063ad52e588146105ba578063b488cf18146105d1578063b88d4fde146105fa576101cd565b806394354fd0116100d157806394354fd0146104f657806395d89b4114610521578063a0712d681461054c578063a22cb46514610568576101cd565b8063715e6e581461047f57806379502c551461049b5780638da5cb5b146104cb576101cd565b80633ccfd60b1161016f578063604906dc1161013e578063604906dc146103b15780636352211e146103dc578063685731071461041957806370a0823114610442576101cd565b80633ccfd60b1461031f57806342842e0e14610336578063488299aa1461035f57806355f804b314610388576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a05780631869e7d4146102cb57806323b872dd146102f6576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906131dd565b610703565b604051610206919061364e565b60405180910390f35b34801561021b57600080fd5b506102246107e5565b6040516102319190613669565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906132cd565b610877565b60405161026e91906135e7565b60405180910390f35b34801561028357600080fd5b5061029e6004803603810190610299919061311c565b6108f3565b005b3480156102ac57600080fd5b506102b56109fe565b6040516102c291906137eb565b60405180910390f35b3480156102d757600080fd5b506102e0610a15565b6040516102ed919061364e565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190613006565b610a28565b005b34801561032b57600080fd5b50610334610a38565b005b34801561034257600080fd5b5061035d60048036038101906103589190613006565b610bb9565b005b34801561036b57600080fd5b5061038660048036038101906103819190613284565b610bd9565b005b34801561039457600080fd5b506103af60048036038101906103aa9190613237565b610c6a565b005b3480156103bd57600080fd5b506103c6610cff565b6040516103d391906137eb565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe91906132cd565b610d05565b60405161041091906135e7565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b919061315c565b610d1b565b005b34801561044e57600080fd5b5061046960048036038101906104649190612f99565b610e5f565b60405161047691906137eb565b60405180910390f35b610499600480360381019061049491906132cd565b610f2f565b005b3480156104a757600080fd5b506104b0611153565b6040516104c296959493929190613806565b60405180910390f35b3480156104d757600080fd5b506104e0611205565b6040516104ed91906135e7565b60405180910390f35b34801561050257600080fd5b5061050b61122e565b60405161051891906137eb565b60405180910390f35b34801561052d57600080fd5b50610536611234565b6040516105439190613669565b60405180910390f35b610566600480360381019061056191906132cd565b6112c6565b005b34801561057457600080fd5b5061058f600480360381019061058a91906130dc565b61155b565b005b34801561059d57600080fd5b506105b860048036038101906105b391906132fa565b6116d3565b005b3480156105c657600080fd5b506105cf611761565b005b3480156105dd57600080fd5b506105f860048036038101906105f391906132cd565b611809565b005b34801561060657600080fd5b50610621600480360381019061061c9190613059565b611892565b005b34801561062f57600080fd5b5061064a600480360381019061064591906132cd565b61190e565b6040516106579190613669565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190612f99565b6119ad565b60405161069491906137eb565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190612fc6565b6119bf565b6040516106d1919061364e565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612f99565b611a53565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ce57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107de57506107dd82611b4b565b5b9050919050565b6060600380546107f490613d2b565b80601f016020809104026020016040519081016040528092919081815260200182805461082090613d2b565b801561086d5780601f106108425761010080835404028352916020019161086d565b820191906000526020600020905b81548152906001019060200180831161085057829003601f168201915b5050505050905090565b600061088282611bb5565b6108b8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108fe82610d05565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610966576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610985611c03565b73ffffffffffffffffffffffffffffffffffffffff16141580156109b757506109b5816109b0611c03565b6119bf565b155b156109ee576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f9838383611c0b565b505050565b6000610a08611cbd565b6002546001540303905090565b601060009054906101000a900460ff1681565b610a33838383611cc2565b505050565b610a40611c03565b73ffffffffffffffffffffffffffffffffffffffff16610a5e611205565b73ffffffffffffffffffffffffffffffffffffffff1614610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab9061372b565b60405180910390fd5b60026009541415610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061378b565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610b28906135d2565b60006040518083038185875af1925050503d8060008114610b65576040519150601f19603f3d011682016040523d82523d6000602084013e610b6a565b606091505b5050905080610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba59061376b565b60405180910390fd5b506001600981905550565b610bd483838360405180602001604052806000815250611892565b505050565b610be1611c03565b73ffffffffffffffffffffffffffffffffffffffff16610bff611205565b73ffffffffffffffffffffffffffffffffffffffff1614610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c9061372b565b60405180910390fd5b80600a8181610c649190614285565b90505050565b610c72611c03565b73ffffffffffffffffffffffffffffffffffffffff16610c90611205565b73ffffffffffffffffffffffffffffffffffffffff1614610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd9061372b565b60405180910390fd5b8181600a6005019190610cfa929190612cb9565b505050565b60115481565b6000610d1082612178565b600001519050919050565b60026009541415610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d589061378b565b60405180910390fd5b6002600981905550610d71611c03565b73ffffffffffffffffffffffffffffffffffffffff16610d8f611205565b73ffffffffffffffffffffffffffffffffffffffff1614610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc9061372b565b60405180910390fd5b60005b84849050811015610e5057610e3d858583818110610e0957610e08613ecf565b5b9050602002016020810190610e1e9190612f99565b848484818110610e3157610e30613ecf565b5b90506020020135612407565b8080610e4890613daa565b915050610de8565b50600160098190555050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec7576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b60026009541415610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061378b565b60405180910390fd5b6002600981905550601060009054906101000a900460ff16610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc39061368b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110319061374b565b60405180910390fd5b6000600a60010154600a600001546110529190613a1c565b9050808261105e6109fe565b6110689190613995565b11156110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a09061370b565b60405180910390fd5b6012548211156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e5906137ab565b60405180910390fd5b600082600a6003015402905080341461113c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611133906136cb565b60405180910390fd5b6111463384612407565b5050600160098190555050565b600a80600001549080600101549080600201549080600301549080600401549080600501805461118290613d2b565b80601f01602080910402602001604051908101604052809291908181526020018280546111ae90613d2b565b80156111fb5780601f106111d0576101008083540402835291602001916111fb565b820191906000526020600020905b8154815290600101906020018083116111de57829003601f168201915b5050505050905086565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b60606004805461124390613d2b565b80601f016020809104026020016040519081016040528092919081815260200182805461126f90613d2b565b80156112bc5780601f10611291576101008083540402835291602001916112bc565b820191906000526020600020905b81548152906001019060200180831161129f57829003601f168201915b5050505050905090565b6002600954141561130c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113039061378b565b60405180910390fd5b6002600981905550601060009054906101000a900460ff16611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a9061368b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c89061374b565b60405180910390fd5b6000600a60010154600a600001546113e99190613a1c565b905080826113f56109fe565b6113ff9190613995565b1115611440576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114379061370b565b60405180910390fd5b600a6002015461144e6109fe565b106114ec57601254821115611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148f906137cb565b60405180910390fd5b600082600a600301540290508034146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906136cb565b60405180910390fd5b50611545565b601154826114f9336119ad565b6115039190613995565b1115611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b906136eb565b60405180910390fd5b5b61154f3383612407565b50600160098190555050565b611563611c03565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c8576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006115d5611c03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611682611c03565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116c7919061364e565b60405180910390a35050565b6116db611c03565b73ffffffffffffffffffffffffffffffffffffffff166116f9611205565b73ffffffffffffffffffffffffffffffffffffffff161461174f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117469061372b565b60405180910390fd5b81601181905550806012819055505050565b611769611c03565b73ffffffffffffffffffffffffffffffffffffffff16611787611205565b73ffffffffffffffffffffffffffffffffffffffff16146117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d49061372b565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b611811611c03565b73ffffffffffffffffffffffffffffffffffffffff1661182f611205565b73ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c9061372b565b60405180910390fd5b80600a6003018190555050565b61189d848484611cc2565b6118bc8373ffffffffffffffffffffffffffffffffffffffff16612425565b80156118d157506118cf84848484612448565b155b15611908576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061191982611bb5565b61194f576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119596125a8565b905060008151141561197a57604051806020016040528060008152506119a5565b806119848461263d565b6040516020016119959291906135ae565b6040516020818303038152906040525b915050919050565b60006119b88261279e565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a5b611c03565b73ffffffffffffffffffffffffffffffffffffffff16611a79611205565b73ffffffffffffffffffffffffffffffffffffffff1614611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac69061372b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b36906136ab565b60405180910390fd5b611b4881612808565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611bc0611cbd565b11158015611bcf575060015482105b8015611bfc575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611ccd82612178565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d38576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611d59611c03565b73ffffffffffffffffffffffffffffffffffffffff161480611d885750611d8785611d82611c03565b6119bf565b5b80611dcd5750611d96611c03565b73ffffffffffffffffffffffffffffffffffffffff16611db584610877565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e06576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e6d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e7a85858560016128cc565b611e8660008487611c0b565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561210657600154821461210557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461217185858560016128d2565b5050505050565b612180612d3f565b60008290508061218e611cbd565b1115801561219d575060015481105b156123d0576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516123ce57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122b2578092505050612402565b5b6001156123cd57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123c8578092505050612402565b6122b3565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6124218282604051806020016040528060008152506128d8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261246e611c03565b8786866040518563ffffffff1660e01b81526004016124909493929190613602565b602060405180830381600087803b1580156124aa57600080fd5b505af19250505080156124db57506040513d601f19601f820116820180604052508101906124d8919061320a565b60015b612555573d806000811461250b576040519150601f19603f3d011682016040523d82523d6000602084013e612510565b606091505b5060008151141561254d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a60050180546125ba90613d2b565b80601f01602080910402602001604051908101604052809291908181526020018280546125e690613d2b565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b5050505050905090565b60606000821415612685576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612799565b600082905060005b600082146126b75780806126a090613daa565b915050600a826126b091906139eb565b915061268d565b60008167ffffffffffffffff8111156126d3576126d2613efe565b5b6040519080825280601f01601f1916602001820160405280156127055781602001600182028036833780820191505090505b5090505b600085146127925760018261271e9190613a1c565b9150600a8561272d9190613e11565b60306127399190613995565b60f81b81838151811061274f5761274e613ecf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561278b91906139eb565b9450612709565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50505050565b50505050565b6128e583838360016128ea565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612958576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612993576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129a060008683876128cc565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612b6a5750612b698773ffffffffffffffffffffffffffffffffffffffff16612425565b5b15612c30575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bdf6000888480600101955088612448565b612c15576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612b70578260015414612c2b57600080fd5b612c9c565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612c31575b816001819055505050612cb260008683876128d2565b5050505050565b828054612cc590613d2b565b90600052602060002090601f016020900481019282612ce75760008555612d2e565b82601f10612d0057803560ff1916838001178555612d2e565b82800160010185558215612d2e579182015b82811115612d2d578235825591602001919060010190612d12565b5b509050612d3b9190612d82565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612d9b576000816000905550600101612d83565b5090565b6000612db2612dad846138f6565b6138d1565b905082815260208101848484011115612dce57612dcd613f70565b5b612dd9848285613c0f565b509392505050565b600081359050612df0816142db565b92915050565b60008083601f840112612e0c57612e0b613f52565b5b8235905067ffffffffffffffff811115612e2957612e28613f4d565b5b602083019150836020820283011115612e4557612e44613f66565b5b9250929050565b60008083601f840112612e6257612e61613f52565b5b8235905067ffffffffffffffff811115612e7f57612e7e613f4d565b5b602083019150836020820283011115612e9b57612e9a613f66565b5b9250929050565b600081359050612eb1816142f2565b92915050565b600081359050612ec681614309565b92915050565b600081519050612edb81614309565b92915050565b600082601f830112612ef657612ef5613f52565b5b8135612f06848260208601612d9f565b91505092915050565b60008083601f840112612f2557612f24613f52565b5b8235905067ffffffffffffffff811115612f4257612f41613f4d565b5b602083019150836001820283011115612f5e57612f5d613f66565b5b9250929050565b600060c08284031215612f7b57612f7a613f5c565b5b81905092915050565b600081359050612f9381614320565b92915050565b600060208284031215612faf57612fae613f7a565b5b6000612fbd84828501612de1565b91505092915050565b60008060408385031215612fdd57612fdc613f7a565b5b6000612feb85828601612de1565b9250506020612ffc85828601612de1565b9150509250929050565b60008060006060848603121561301f5761301e613f7a565b5b600061302d86828701612de1565b935050602061303e86828701612de1565b925050604061304f86828701612f84565b9150509250925092565b6000806000806080858703121561307357613072613f7a565b5b600061308187828801612de1565b945050602061309287828801612de1565b93505060406130a387828801612f84565b925050606085013567ffffffffffffffff8111156130c4576130c3613f75565b5b6130d087828801612ee1565b91505092959194509250565b600080604083850312156130f3576130f2613f7a565b5b600061310185828601612de1565b925050602061311285828601612ea2565b9150509250929050565b6000806040838503121561313357613132613f7a565b5b600061314185828601612de1565b925050602061315285828601612f84565b9150509250929050565b6000806000806040858703121561317657613175613f7a565b5b600085013567ffffffffffffffff81111561319457613193613f75565b5b6131a087828801612df6565b9450945050602085013567ffffffffffffffff8111156131c3576131c2613f75565b5b6131cf87828801612e4c565b925092505092959194509250565b6000602082840312156131f3576131f2613f7a565b5b600061320184828501612eb7565b91505092915050565b6000602082840312156132205761321f613f7a565b5b600061322e84828501612ecc565b91505092915050565b6000806020838503121561324e5761324d613f7a565b5b600083013567ffffffffffffffff81111561326c5761326b613f75565b5b61327885828601612f0f565b92509250509250929050565b60006020828403121561329a57613299613f7a565b5b600082013567ffffffffffffffff8111156132b8576132b7613f75565b5b6132c484828501612f65565b91505092915050565b6000602082840312156132e3576132e2613f7a565b5b60006132f184828501612f84565b91505092915050565b6000806040838503121561331157613310613f7a565b5b600061331f85828601612f84565b925050602061333085828601612f84565b9150509250929050565b61334381613a96565b82525050565b61335281613aa8565b82525050565b60006133638261393c565b61336d818561395d565b935061337d818560208601613c1e565b61338681613f7f565b840191505092915050565b600061339c82613952565b6133a68185613979565b93506133b6818560208601613c1e565b6133bf81613f7f565b840191505092915050565b60006133d582613952565b6133df818561398a565b93506133ef818560208601613c1e565b80840191505092915050565b6000613408600b83613979565b915061341382613fcf565b602082019050919050565b600061342b602683613979565b915061343682613ff8565b604082019050919050565b600061344e600d83613979565b915061345982614047565b602082019050919050565b6000613471601b83613979565b915061347c82614070565b602082019050919050565b6000613494601683613979565b915061349f82614099565b602082019050919050565b60006134b7602083613979565b91506134c2826140c2565b602082019050919050565b60006134da601583613979565b91506134e5826140eb565b602082019050919050565b60006134fd60008361396e565b915061350882614114565b600082019050919050565b6000613520601083613979565b915061352b82614117565b602082019050919050565b6000613543601f83613979565b915061354e82614140565b602082019050919050565b6000613566602383613979565b915061357182614169565b604082019050919050565b6000613589601a83613979565b9150613594826141b8565b602082019050919050565b6135a881613b00565b82525050565b60006135ba82856133ca565b91506135c682846133ca565b91508190509392505050565b60006135dd826134f0565b9150819050919050565b60006020820190506135fc600083018461333a565b92915050565b6000608082019050613617600083018761333a565b613624602083018661333a565b613631604083018561359f565b81810360608301526136438184613358565b905095945050505050565b60006020820190506136636000830184613349565b92915050565b600060208201905081810360008301526136838184613391565b905092915050565b600060208201905081810360008301526136a4816133fb565b9050919050565b600060208201905081810360008301526136c48161341e565b9050919050565b600060208201905081810360008301526136e481613441565b9050919050565b6000602082019050818103600083015261370481613464565b9050919050565b6000602082019050818103600083015261372481613487565b9050919050565b60006020820190508181036000830152613744816134aa565b9050919050565b60006020820190508181036000830152613764816134cd565b9050919050565b6000602082019050818103600083015261378481613513565b9050919050565b600060208201905081810360008301526137a481613536565b9050919050565b600060208201905081810360008301526137c481613559565b9050919050565b600060208201905081810360008301526137e48161357c565b9050919050565b6000602082019050613800600083018461359f565b92915050565b600060c08201905061381b600083018961359f565b613828602083018861359f565b613835604083018761359f565b613842606083018661359f565b61384f608083018561359f565b81810360a08301526138618184613391565b9050979650505050505050565b6000808335600160200384360303811261388b5761388a613f61565b5b80840192508235915067ffffffffffffffff8211156138ad576138ac613f57565b5b6020830192506001820236038313156138c9576138c8613f6b565b5b509250929050565b60006138db6138ec565b90506138e78282613d79565b919050565b6000604051905090565b600067ffffffffffffffff82111561391157613910613efe565b5b61391a82613f7f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600082905092915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139a082613b00565b91506139ab83613b00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139e0576139df613e42565b5b828201905092915050565b60006139f682613b00565b9150613a0183613b00565b925082613a1157613a10613e71565b5b828204905092915050565b6000613a2782613b00565b9150613a3283613b00565b925082821015613a4557613a44613e42565b5b828203905092915050565b601f821115613a9157613a6281613927565b613a6b84613d1b565b81016020851015613a7a578190505b613a8e613a8685613d1b565b830182613b0a565b50505b505050565b6000613aa182613ae0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b5b81811015613b2957613b1e600082613fb7565b600181019050613b0b565b5050565b6000613b3882613b00565b9050919050565b613b498383613947565b67ffffffffffffffff811115613b6257613b61613efe565b5b613b6c8254613d2b565b613b77828285613a50565b6000601f831160018114613ba65760008415613b94578287013590505b613b9e8582613d5d565b865550613c06565b601f198416613bb486613927565b60005b82811015613bdc57848901358255600182019150602085019450602081019050613bb7565b86831015613bf95784890135613bf5601f891682613df3565b8355505b6001600288020188555050505b50505050505050565b82818337600083830152505050565b60005b83811015613c3c578082015181840152602081019050613c21565b83811115613c4b576000848401525b50505050565b600081016000830180613c6381613f37565b9050613c6f8184614293565b505050600181016020830180613c8481613f37565b9050613c908184614293565b505050600281016040830180613ca581613f37565b9050613cb18184614293565b505050600381016060830180613cc681613f37565b9050613cd28184614293565b505050600481016080830180613ce781613f37565b9050613cf38184614293565b5050506005810160a08301613d08818561386e565b613d13818386614275565b505050505050565b60006020601f8301049050919050565b60006002820490506001821680613d4357607f821691505b60208210811415613d5757613d56613ea0565b5b50919050565b6000613d698383613df3565b9150826002028217905092915050565b613d8282613f7f565b810181811067ffffffffffffffff82111715613da157613da0613efe565b5b80604052505050565b6000613db582613b00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613de857613de7613e42565b5b600182019050919050565b6000613e0460001984600802613faa565b1980831691505092915050565b6000613e1c82613b00565b9150613e2783613b00565b925082613e3757613e36613e71565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60008135613f4481614320565b80915050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160001b9050919050565b600082821b905092915050565b600082821c905092915050565b613fbf614337565b613fca8184846142b6565b505050565b7f4e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f77726f6e67207061796d656e7400000000000000000000000000000000000000600082015250565b7f63616e206e6f742066726565206d696e742074686973206d616e790000000000600082015250565b7f4578636565642073616c6573206d6178206c696d697400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e747261637473206e6f7420616c6c6f7765640000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4d696e74207175616e74697479206e65656420736d616c6c657220657665727960008201527f2074780000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74207175616e74697479206e65656420736d616c6c6572000000000000600082015250565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61420d84613f90565b9350801983169250808416831791505092915050565b6000600883026142537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f9d565b61425d8683613f9d565b95508019841693508086168417925050509392505050565b614280838383613b3f565b505050565b61428f8282613c51565b5050565b61429c82613b2d565b6142af6142a882613f2d565b83546141e1565b8255505050565b6142bf83613b2d565b6142d36142cb82613f2d565b848454614223565b825550505050565b6142e481613a96565b81146142ef57600080fd5b50565b6142fb81613aa8565b811461430657600080fd5b50565b61431281613ab4565b811461431d57600080fd5b50565b61432981613b00565b811461433457600080fd5b50565b60009056fea26469706673582212206a8b2e85fa59911461d559801ea21ecb6f549cc86ff8d835b90fb16d3addb92764736f6c63430008070033

Deployed Bytecode Sourcemap

47397:3699:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27485:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30598:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32101:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31664:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26734:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47743:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32966:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48633:186;;;;;;;;;;;;;:::i;:::-;;33207:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48424:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48188:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47782:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30406:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48828:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27854:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50364:727;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47673:63;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;46292:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47828:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30767:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49359:997;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32377:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49103:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48530:95;;;;;;;;;;;;;:::i;:::-;;48308:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33463:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30942:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47947:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32735:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46750:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27485:305;27587:4;27639:25;27624:40;;;:11;:40;;;;:105;;;;27696:33;27681:48;;;:11;:48;;;;27624:105;:158;;;;27746:36;27770:11;27746:23;:36::i;:::-;27624:158;27604:178;;27485:305;;;:::o;30598:100::-;30652:13;30685:5;30678:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30598:100;:::o;32101:204::-;32169:7;32194:16;32202:7;32194;:16::i;:::-;32189:64;;32219:34;;;;;;;;;;;;;;32189:64;32273:15;:24;32289:7;32273:24;;;;;;;;;;;;;;;;;;;;;32266:31;;32101:204;;;:::o;31664:371::-;31737:13;31753:24;31769:7;31753:15;:24::i;:::-;31737:40;;31798:5;31792:11;;:2;:11;;;31788:48;;;31812:24;;;;;;;;;;;;;;31788:48;31869:5;31853:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;31879:37;31896:5;31903:12;:10;:12::i;:::-;31879:16;:37::i;:::-;31878:38;31853:63;31849:138;;;31940:35;;;;;;;;;;;;;;31849:138;31999:28;32008:2;32012:7;32021:5;31999:8;:28::i;:::-;31726:309;31664:371;;:::o;26734:303::-;26778:7;27003:15;:13;:15::i;:::-;26988:12;;26972:13;;:28;:46;26965:53;;26734:303;:::o;47743:32::-;;;;;;;;;;;;;:::o;32966:170::-;33100:28;33110:4;33116:2;33120:7;33100:9;:28::i;:::-;32966:170;;;:::o;48633:186::-;46523:12;:10;:12::i;:::-;46512:23;;:7;:5;:7::i;:::-;:23;;;46504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21375:1:::1;21973:7;;:19;;21965:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21375:1;22106:7;:18;;;;48697:12:::2;48715:10;:15;;48738:21;48715:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48696:68;;;48783:7;48775:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;48685:134;21331:1:::1;22285:7;:22;;;;48633:186::o:0;33207:185::-;33345:39;33362:4;33368:2;33372:7;33345:39;;;;;;;;;;;;:16;:39::i;:::-;33207:185;;;:::o;48424:98::-;46523:12;:10;:12::i;:::-;46512:23;;:7;:5;:7::i;:::-;:23;;;46504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48507:7:::1;48498:6;:16;;;;;;:::i;:::-;;;;48424:98:::0;:::o;48188:112::-;46523:12;:10;:12::i;:::-;46512:23;;:7;:5;:7::i;:::-;:23;;;46504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48285:7:::1;;48263:6;:19;;:29;;;;;;;:::i;:::-;;48188:112:::0;;:::o;47782:39::-;;;;:::o;30406:125::-;30470:7;30497:21;30510:7;30497:12;:21::i;:::-;:26;;;30490:33;;30406:125;;;:::o;48828:267::-;21375:1;21973:7;;:19;;21965:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21375:1;22106:7;:18;;;;46523:12:::1;:10;:12::i;:::-;46512:23;;:7;:5;:7::i;:::-;:23;;;46504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48981:9:::2;48976:112;49000:9;;:16;;48996:1;:20;48976:112;;;49038:38;49048:9;;49058:1;49048:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49062:10;;49073:1;49062:13;;;;;;;:::i;:::-;;;;;;;;49038:9;:38::i;:::-;49018:3;;;;;:::i;:::-;;;;48976:112;;;;21331:1:::0;22285:7;:22;;;;48828:267;;;;:::o;27854:206::-;27918:7;27959:1;27942:19;;:5;:19;;;27938:60;;;27970:28;;;;;;;;;;;;;;27938:60;28024:12;:19;28037:5;28024:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28016:36;;28009:43;;27854:206;;;:::o;50364:727::-;21375:1;21973:7;;:19;;21965:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21375:1;22106:7;:18;;;;50453:13:::1;;;;;;;;;;;50445:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;50514:10;50501:23;;:9;:23;;;50493:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50561:21;50604:6;:15;;;50585:6;:16;;;:34;;;;:::i;:::-;50561:58;;50680:13;50668:8;50652:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;50630:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;50788:18;;50776:8;:30;;50754:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;50888:12;50961:8;50944:6;:16;;;:25;50936:33;;51012:4;50999:9;:17;50991:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51052:31;51062:10;51074:8;51052:9;:31::i;:::-;50434:657;;21331:1:::0;22285:7;:22;;;;50364:727;:::o;47673:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46292:87::-;46338:7;46365:6;;;;;;;;;;;46358:13;;46292:87;:::o;47828:36::-;;;;:::o;30767:104::-;30823:13;30856:7;30849:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30767:104;:::o;49359:997::-;21375:1;21973:7;;:19;;21965:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21375:1;22106:7;:18;;;;49442:13:::1;;;;;;;;;;;49434:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;49503:10;49490:23;;:9;:23;;;49482:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;49550:21;49593:6;:15;;;49574:6;:16;;;:34;;;;:::i;:::-;49550:58;;49669:13;49657:8;49641:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;49619:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;49769:6;:20;;;49752:13;:11;:13::i;:::-;:37;49748:559;;49844:18;;49832:8;:30;;49806:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;49960:12;50043:8;50024:6;:16;;;:27;50016:35;;50102:4;50089:9;:17;50081:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;49791:345;49748:559;;;50216:22;;50205:8;50178:24;50191:10;50178:12;:24::i;:::-;:35;;;;:::i;:::-;:60;;50156:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;49748:559;50317:31;50327:10;50339:8;50317:9;:31::i;:::-;49423:933;21331:1:::0;22285:7;:22;;;;49359:997;:::o;32377:287::-;32488:12;:10;:12::i;:::-;32476:24;;:8;:24;;;32472:54;;;32509:17;;;;;;;;;;;;;;32472:54;32584:8;32539:18;:32;32558:12;:10;:12::i;:::-;32539:32;;;;;;;;;;;;;;;:42;32572:8;32539:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32637:8;32608:48;;32623:12;:10;:12::i;:::-;32608:48;;;32647:8;32608:48;;;;;;:::i;:::-;;;;;;;;32377:287;;:::o;49103:248::-;46523:12;:10;:12::i;:::-;46512:23;;:7;:5;:7::i;:::-;:23;;;46504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49269:23:::1;49244:22;:48;;;;49324:19;49303:18;:40;;;;49103:248:::0;;:::o;48530:95::-;46523:12;:10;:12::i;:::-;46512:23;;:7;:5;:7::i;:::-;:23;;;46504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48604:13:::1;;;;;;;;;;;48603:14;48587:13;;:30;;;;;;;;;;;;;;;;;;48530:95::o:0;48308:108::-;46523:12;:10;:12::i;:::-;46512:23;;:7;:5;:7::i;:::-;:23;;;46504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48399:9:::1;48380:6;:16;;:28;;;;48308:108:::0;:::o;33463:369::-;33630:28;33640:4;33646:2;33650:7;33630:9;:28::i;:::-;33673:15;:2;:13;;;:15::i;:::-;:76;;;;;33693:56;33724:4;33730:2;33734:7;33743:5;33693:30;:56::i;:::-;33692:57;33673:76;33669:156;;;33773:40;;;;;;;;;;;;;;33669:156;33463:369;;;;:::o;30942:318::-;31015:13;31046:16;31054:7;31046;:16::i;:::-;31041:59;;31071:29;;;;;;;;;;;;;;31041:59;31113:21;31137:10;:8;:10::i;:::-;31113:34;;31190:1;31171:7;31165:21;:26;;:87;;;;;;;;;;;;;;;;;31218:7;31227:18;:7;:16;:18::i;:::-;31201:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31165:87;31158:94;;;30942:318;;;:::o;47947:113::-;48005:7;48032:20;48046:5;48032:13;:20::i;:::-;48025:27;;47947:113;;;:::o;32735:164::-;32832:4;32856:18;:25;32875:5;32856:25;;;;;;;;;;;;;;;:35;32882:8;32856:35;;;;;;;;;;;;;;;;;;;;;;;;;32849:42;;32735:164;;;;:::o;46750:201::-;46523:12;:10;:12::i;:::-;46512:23;;:7;:5;:7::i;:::-;:23;;;46504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46859:1:::1;46839:22;;:8;:22;;;;46831:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46915:28;46934:8;46915:18;:28::i;:::-;46750:201:::0;:::o;13724:157::-;13809:4;13848:25;13833:40;;;:11;:40;;;;13826:47;;13724:157;;;:::o;34087:174::-;34144:4;34187:7;34168:15;:13;:15::i;:::-;:26;;:53;;;;;34208:13;;34198:7;:23;34168:53;:85;;;;;34226:11;:20;34238:7;34226:20;;;;;;;;;;;:27;;;;;;;;;;;;34225:28;34168:85;34161:92;;34087:174;;;:::o;23001:98::-;23054:7;23081:10;23074:17;;23001:98;:::o;42244:196::-;42386:2;42359:15;:24;42375:7;42359:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42424:7;42420:2;42404:28;;42413:5;42404:28;;;;;;;;;;;;42244:196;;;:::o;26508:92::-;26564:7;26508:92;:::o;37187:2130::-;37302:35;37340:21;37353:7;37340:12;:21::i;:::-;37302:59;;37400:4;37378:26;;:13;:18;;;:26;;;37374:67;;37413:28;;;;;;;;;;;;;;37374:67;37454:22;37496:4;37480:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;37517:36;37534:4;37540:12;:10;:12::i;:::-;37517:16;:36::i;:::-;37480:73;:126;;;;37594:12;:10;:12::i;:::-;37570:36;;:20;37582:7;37570:11;:20::i;:::-;:36;;;37480:126;37454:153;;37625:17;37620:66;;37651:35;;;;;;;;;;;;;;37620:66;37715:1;37701:16;;:2;:16;;;37697:52;;;37726:23;;;;;;;;;;;;;;37697:52;37762:43;37784:4;37790:2;37794:7;37803:1;37762:21;:43::i;:::-;37870:35;37887:1;37891:7;37900:4;37870:8;:35::i;:::-;38231:1;38201:12;:18;38214:4;38201:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38275:1;38247:12;:16;38260:2;38247:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38293:31;38327:11;:20;38339:7;38327:20;;;;;;;;;;;38293:54;;38378:2;38362:8;:13;;;:18;;;;;;;;;;;;;;;;;;38428:15;38395:8;:23;;;:49;;;;;;;;;;;;;;;;;;38696:19;38728:1;38718:7;:11;38696:33;;38744:31;38778:11;:24;38790:11;38778:24;;;;;;;;;;;38744:58;;38846:1;38821:27;;:8;:13;;;;;;;;;;;;:27;;;38817:384;;;39031:13;;39016:11;:28;39012:174;;39085:4;39069:8;:13;;;:20;;;;;;;;;;;;;;;;;;39138:13;:28;;;39112:8;:23;;;:54;;;;;;;;;;;;;;;;;;39012:174;38817:384;38176:1036;;;39248:7;39244:2;39229:27;;39238:4;39229:27;;;;;;;;;;;;39267:42;39288:4;39294:2;39298:7;39307:1;39267:20;:42::i;:::-;37291:2026;;37187:2130;;;:::o;29235:1109::-;29297:21;;:::i;:::-;29331:12;29346:7;29331:22;;29414:4;29395:15;:13;:15::i;:::-;:23;;:47;;;;;29429:13;;29422:4;:20;29395:47;29391:886;;;29463:31;29497:11;:17;29509:4;29497:17;;;;;;;;;;;29463:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29538:9;:16;;;29533:729;;29609:1;29583:28;;:9;:14;;;:28;;;29579:101;;29647:9;29640:16;;;;;;29579:101;29982:261;29989:4;29982:261;;;30022:6;;;;;;;;30067:11;:17;30079:4;30067:17;;;;;;;;;;;30055:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30141:1;30115:28;;:9;:14;;;:28;;;30111:109;;30183:9;30176:16;;;;;;30111:109;29982:261;;;29533:729;29444:833;29391:886;30305:31;;;;;;;;;;;;;;29235:1109;;;;:::o;34269:104::-;34338:27;34348:2;34352:8;34338:27;;;;;;;;;;;;:9;:27::i;:::-;34269:104;;:::o;3641:326::-;3701:4;3958:1;3936:7;:19;;;:23;3929:30;;3641:326;;;:::o;42932:667::-;43095:4;43132:2;43116:36;;;43153:12;:10;:12::i;:::-;43167:4;43173:7;43182:5;43116:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43112:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43367:1;43350:6;:13;:18;43346:235;;;43396:40;;;;;;;;;;;;;;43346:235;43539:6;43533:13;43524:6;43520:2;43516:15;43509:38;43112:480;43245:45;;;43235:55;;;:6;:55;;;;43228:62;;;42932:667;;;;;;:::o;48068:112::-;48120:13;48153:6;:19;;48146:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48068:112;:::o;649:723::-;705:13;935:1;926:5;:10;922:53;;;953:10;;;;;;;;;;;;;;;;;;;;;922:53;985:12;1000:5;985:20;;1016:14;1041:78;1056:1;1048:4;:9;1041:78;;1074:8;;;;;:::i;:::-;;;;1105:2;1097:10;;;;;:::i;:::-;;;1041:78;;;1129:19;1161:6;1151:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:39;;1179:154;1195:1;1186:5;:10;1179:154;;1223:1;1213:11;;;;;:::i;:::-;;;1290:2;1282:5;:10;;;;:::i;:::-;1269:2;:24;;;;:::i;:::-;1256:39;;1239:6;1246;1239:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1319:2;1310:11;;;;;:::i;:::-;;;1179:154;;;1357:6;1343:21;;;;;649:723;;;;:::o;28142:137::-;28203:7;28238:12;:19;28251:5;28238:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28230:41;;28223:48;;28142:137;;;:::o;47111:191::-;47185:16;47204:6;;;;;;;;;;;47185:25;;47230:8;47221:6;;:17;;;;;;;;;;;;;;;;;;47285:8;47254:40;;47275:8;47254:40;;;;;;;;;;;;47174:128;47111:191;:::o;44247:159::-;;;;;:::o;45065:158::-;;;;;:::o;34736:163::-;34859:32;34865:2;34869:8;34879:5;34886:4;34859:5;:32::i;:::-;34736:163;;;:::o;35158:1775::-;35297:20;35320:13;;35297:36;;35362:1;35348:16;;:2;:16;;;35344:48;;;35373:19;;;;;;;;;;;;;;35344:48;35419:1;35407:8;:13;35403:44;;;35429:18;;;;;;;;;;;;;;35403:44;35460:61;35490:1;35494:2;35498:12;35512:8;35460:21;:61::i;:::-;35833:8;35798:12;:16;35811:2;35798:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35897:8;35857:12;:16;35870:2;35857:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35956:2;35923:11;:25;35935:12;35923:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;36023:15;35973:11;:25;35985:12;35973:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;36056:20;36079:12;36056:35;;36106:11;36135:8;36120:12;:23;36106:37;;36164:4;:23;;;;;36172:15;:2;:13;;;:15::i;:::-;36164:23;36160:641;;;36208:314;36264:12;36260:2;36239:38;;36256:1;36239:38;;;;;;;;;;;;36305:69;36344:1;36348:2;36352:14;;;;;;36368:5;36305:30;:69::i;:::-;36300:174;;36410:40;;;;;;;;;;;;;;36300:174;36517:3;36501:12;:19;;36208:314;;36603:12;36586:13;;:29;36582:43;;36617:8;;;36582:43;36160:641;;;36666:120;36722:14;;;;;;36718:2;36697:40;;36714:1;36697:40;;;;;;;;;;;;36781:3;36765:12;:19;;36666:120;;36160:641;36831:12;36815:13;:28;;;;35773:1082;;36865:60;36894:1;36898:2;36902:12;36916:8;36865:20;:60::i;:::-;35286:1647;35158:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1176:::-;1249:8;1259:6;1309:3;1302:4;1294:6;1290:17;1286:27;1276:122;;1317:79;;:::i;:::-;1276:122;1430:6;1417:20;1407:30;;1460:18;1452:6;1449:30;1446:117;;;1482:79;;:::i;:::-;1446:117;1596:4;1588:6;1584:17;1572:29;;1650:3;1642:4;1634:6;1630:17;1620:8;1616:32;1613:41;1610:128;;;1657:79;;:::i;:::-;1610:128;1176:568;;;;;:::o;1750:133::-;1793:5;1831:6;1818:20;1809:29;;1847:30;1871:5;1847:30;:::i;:::-;1750:133;;;;:::o;1889:137::-;1934:5;1972:6;1959:20;1950:29;;1988:32;2014:5;1988:32;:::i;:::-;1889:137;;;;:::o;2032:141::-;2088:5;2119:6;2113:13;2104:22;;2135:32;2161:5;2135:32;:::i;:::-;2032:141;;;;:::o;2192:338::-;2247:5;2296:3;2289:4;2281:6;2277:17;2273:27;2263:122;;2304:79;;:::i;:::-;2263:122;2421:6;2408:20;2446:78;2520:3;2512:6;2505:4;2497:6;2493:17;2446:78;:::i;:::-;2437:87;;2253:277;2192:338;;;;:::o;2550:553::-;2608:8;2618:6;2668:3;2661:4;2653:6;2649:17;2645:27;2635:122;;2676:79;;:::i;:::-;2635:122;2789:6;2776:20;2766:30;;2819:18;2811:6;2808:30;2805:117;;;2841:79;;:::i;:::-;2805:117;2955:4;2947:6;2943:17;2931:29;;3009:3;3001:4;2993:6;2989:17;2979:8;2975:32;2972:41;2969:128;;;3016:79;;:::i;:::-;2969:128;2550:553;;;;;:::o;3141:231::-;3213:5;3254:3;3245:6;3240:3;3236:16;3232:26;3229:113;;;3261:79;;:::i;:::-;3229:113;3360:6;3351:15;;3141:231;;;;:::o;3378:139::-;3424:5;3462:6;3449:20;3440:29;;3478:33;3505:5;3478:33;:::i;:::-;3378:139;;;;:::o;3523:329::-;3582:6;3631:2;3619:9;3610:7;3606:23;3602:32;3599:119;;;3637:79;;:::i;:::-;3599:119;3757:1;3782:53;3827:7;3818:6;3807:9;3803:22;3782:53;:::i;:::-;3772:63;;3728:117;3523:329;;;;:::o;3858:474::-;3926:6;3934;3983:2;3971:9;3962:7;3958:23;3954:32;3951:119;;;3989:79;;:::i;:::-;3951:119;4109:1;4134:53;4179:7;4170:6;4159:9;4155:22;4134:53;:::i;:::-;4124:63;;4080:117;4236:2;4262:53;4307:7;4298:6;4287:9;4283:22;4262:53;:::i;:::-;4252:63;;4207:118;3858:474;;;;;:::o;4338:619::-;4415:6;4423;4431;4480:2;4468:9;4459:7;4455:23;4451:32;4448:119;;;4486:79;;:::i;:::-;4448:119;4606:1;4631:53;4676:7;4667:6;4656:9;4652:22;4631:53;:::i;:::-;4621:63;;4577:117;4733:2;4759:53;4804:7;4795:6;4784:9;4780:22;4759:53;:::i;:::-;4749:63;;4704:118;4861:2;4887:53;4932:7;4923:6;4912:9;4908:22;4887:53;:::i;:::-;4877:63;;4832:118;4338:619;;;;;:::o;4963:943::-;5058:6;5066;5074;5082;5131:3;5119:9;5110:7;5106:23;5102:33;5099:120;;;5138:79;;:::i;:::-;5099:120;5258:1;5283:53;5328:7;5319:6;5308:9;5304:22;5283:53;:::i;:::-;5273:63;;5229:117;5385:2;5411:53;5456:7;5447:6;5436:9;5432:22;5411:53;:::i;:::-;5401:63;;5356:118;5513:2;5539:53;5584:7;5575:6;5564:9;5560:22;5539:53;:::i;:::-;5529:63;;5484:118;5669:2;5658:9;5654:18;5641:32;5700:18;5692:6;5689:30;5686:117;;;5722:79;;:::i;:::-;5686:117;5827:62;5881:7;5872:6;5861:9;5857:22;5827:62;:::i;:::-;5817:72;;5612:287;4963:943;;;;;;;:::o;5912:468::-;5977:6;5985;6034:2;6022:9;6013:7;6009:23;6005:32;6002:119;;;6040:79;;:::i;:::-;6002:119;6160:1;6185:53;6230:7;6221:6;6210:9;6206:22;6185:53;:::i;:::-;6175:63;;6131:117;6287:2;6313:50;6355:7;6346:6;6335:9;6331:22;6313:50;:::i;:::-;6303:60;;6258:115;5912:468;;;;;:::o;6386:474::-;6454:6;6462;6511:2;6499:9;6490:7;6486:23;6482:32;6479:119;;;6517:79;;:::i;:::-;6479:119;6637:1;6662:53;6707:7;6698:6;6687:9;6683:22;6662:53;:::i;:::-;6652:63;;6608:117;6764:2;6790:53;6835:7;6826:6;6815:9;6811:22;6790:53;:::i;:::-;6780:63;;6735:118;6386:474;;;;;:::o;6866:934::-;6988:6;6996;7004;7012;7061:2;7049:9;7040:7;7036:23;7032:32;7029:119;;;7067:79;;:::i;:::-;7029:119;7215:1;7204:9;7200:17;7187:31;7245:18;7237:6;7234:30;7231:117;;;7267:79;;:::i;:::-;7231:117;7380:80;7452:7;7443:6;7432:9;7428:22;7380:80;:::i;:::-;7362:98;;;;7158:312;7537:2;7526:9;7522:18;7509:32;7568:18;7560:6;7557:30;7554:117;;;7590:79;;:::i;:::-;7554:117;7703:80;7775:7;7766:6;7755:9;7751:22;7703:80;:::i;:::-;7685:98;;;;7480:313;6866:934;;;;;;;:::o;7806:327::-;7864:6;7913:2;7901:9;7892:7;7888:23;7884:32;7881:119;;;7919:79;;:::i;:::-;7881:119;8039:1;8064:52;8108:7;8099:6;8088:9;8084:22;8064:52;:::i;:::-;8054:62;;8010:116;7806:327;;;;:::o;8139:349::-;8208:6;8257:2;8245:9;8236:7;8232:23;8228:32;8225:119;;;8263:79;;:::i;:::-;8225:119;8383:1;8408:63;8463:7;8454:6;8443:9;8439:22;8408:63;:::i;:::-;8398:73;;8354:127;8139:349;;;;:::o;8494:529::-;8565:6;8573;8622:2;8610:9;8601:7;8597:23;8593:32;8590:119;;;8628:79;;:::i;:::-;8590:119;8776:1;8765:9;8761:17;8748:31;8806:18;8798:6;8795:30;8792:117;;;8828:79;;:::i;:::-;8792:117;8941:65;8998:7;8989:6;8978:9;8974:22;8941:65;:::i;:::-;8923:83;;;;8719:297;8494:529;;;;;:::o;9029:541::-;9114:6;9163:2;9151:9;9142:7;9138:23;9134:32;9131:119;;;9169:79;;:::i;:::-;9131:119;9317:1;9306:9;9302:17;9289:31;9347:18;9339:6;9336:30;9333:117;;;9369:79;;:::i;:::-;9333:117;9474:79;9545:7;9536:6;9525:9;9521:22;9474:79;:::i;:::-;9464:89;;9260:303;9029:541;;;;:::o;9576:329::-;9635:6;9684:2;9672:9;9663:7;9659:23;9655:32;9652:119;;;9690:79;;:::i;:::-;9652:119;9810:1;9835:53;9880:7;9871:6;9860:9;9856:22;9835:53;:::i;:::-;9825:63;;9781:117;9576:329;;;;:::o;9911:474::-;9979:6;9987;10036:2;10024:9;10015:7;10011:23;10007:32;10004:119;;;10042:79;;:::i;:::-;10004:119;10162:1;10187:53;10232:7;10223:6;10212:9;10208:22;10187:53;:::i;:::-;10177:63;;10133:117;10289:2;10315:53;10360:7;10351:6;10340:9;10336:22;10315:53;:::i;:::-;10305:63;;10260:118;9911:474;;;;;:::o;10391:118::-;10478:24;10496:5;10478:24;:::i;:::-;10473:3;10466:37;10391:118;;:::o;10515:109::-;10596:21;10611:5;10596:21;:::i;:::-;10591:3;10584:34;10515:109;;:::o;10630:360::-;10716:3;10744:38;10776:5;10744:38;:::i;:::-;10798:70;10861:6;10856:3;10798:70;:::i;:::-;10791:77;;10877:52;10922:6;10917:3;10910:4;10903:5;10899:16;10877:52;:::i;:::-;10954:29;10976:6;10954:29;:::i;:::-;10949:3;10945:39;10938:46;;10720:270;10630:360;;;;:::o;10996:364::-;11084:3;11112:39;11145:5;11112:39;:::i;:::-;11167:71;11231:6;11226:3;11167:71;:::i;:::-;11160:78;;11247:52;11292:6;11287:3;11280:4;11273:5;11269:16;11247:52;:::i;:::-;11324:29;11346:6;11324:29;:::i;:::-;11319:3;11315:39;11308:46;;11088:272;10996:364;;;;:::o;11366:377::-;11472:3;11500:39;11533:5;11500:39;:::i;:::-;11555:89;11637:6;11632:3;11555:89;:::i;:::-;11548:96;;11653:52;11698:6;11693:3;11686:4;11679:5;11675:16;11653:52;:::i;:::-;11730:6;11725:3;11721:16;11714:23;;11476:267;11366:377;;;;:::o;11749:366::-;11891:3;11912:67;11976:2;11971:3;11912:67;:::i;:::-;11905:74;;11988:93;12077:3;11988:93;:::i;:::-;12106:2;12101:3;12097:12;12090:19;;11749:366;;;:::o;12121:::-;12263:3;12284:67;12348:2;12343:3;12284:67;:::i;:::-;12277:74;;12360:93;12449:3;12360:93;:::i;:::-;12478:2;12473:3;12469:12;12462:19;;12121:366;;;:::o;12493:::-;12635:3;12656:67;12720:2;12715:3;12656:67;:::i;:::-;12649:74;;12732:93;12821:3;12732:93;:::i;:::-;12850:2;12845:3;12841:12;12834:19;;12493:366;;;:::o;12865:::-;13007:3;13028:67;13092:2;13087:3;13028:67;:::i;:::-;13021:74;;13104:93;13193:3;13104:93;:::i;:::-;13222:2;13217:3;13213:12;13206:19;;12865:366;;;:::o;13237:::-;13379:3;13400:67;13464:2;13459:3;13400:67;:::i;:::-;13393:74;;13476:93;13565:3;13476:93;:::i;:::-;13594:2;13589:3;13585:12;13578:19;;13237:366;;;:::o;13609:::-;13751:3;13772:67;13836:2;13831:3;13772:67;:::i;:::-;13765:74;;13848:93;13937:3;13848:93;:::i;:::-;13966:2;13961:3;13957:12;13950:19;;13609:366;;;:::o;13981:::-;14123:3;14144:67;14208:2;14203:3;14144:67;:::i;:::-;14137:74;;14220:93;14309:3;14220:93;:::i;:::-;14338:2;14333:3;14329:12;14322:19;;13981:366;;;:::o;14353:398::-;14512:3;14533:83;14614:1;14609:3;14533:83;:::i;:::-;14526:90;;14625:93;14714:3;14625:93;:::i;:::-;14743:1;14738:3;14734:11;14727:18;;14353:398;;;:::o;14757:366::-;14899:3;14920:67;14984:2;14979:3;14920:67;:::i;:::-;14913:74;;14996:93;15085:3;14996:93;:::i;:::-;15114:2;15109:3;15105:12;15098:19;;14757:366;;;:::o;15129:::-;15271:3;15292:67;15356:2;15351:3;15292:67;:::i;:::-;15285:74;;15368:93;15457:3;15368:93;:::i;:::-;15486:2;15481:3;15477:12;15470:19;;15129:366;;;:::o;15501:::-;15643:3;15664:67;15728:2;15723:3;15664:67;:::i;:::-;15657:74;;15740:93;15829:3;15740:93;:::i;:::-;15858:2;15853:3;15849:12;15842:19;;15501:366;;;:::o;15873:::-;16015:3;16036:67;16100:2;16095:3;16036:67;:::i;:::-;16029:74;;16112:93;16201:3;16112:93;:::i;:::-;16230:2;16225:3;16221:12;16214:19;;15873:366;;;:::o;16245:118::-;16332:24;16350:5;16332:24;:::i;:::-;16327:3;16320:37;16245:118;;:::o;16369:435::-;16549:3;16571:95;16662:3;16653:6;16571:95;:::i;:::-;16564:102;;16683:95;16774:3;16765:6;16683:95;:::i;:::-;16676:102;;16795:3;16788:10;;16369:435;;;;;:::o;16810:379::-;16994:3;17016:147;17159:3;17016:147;:::i;:::-;17009:154;;17180:3;17173:10;;16810:379;;;:::o;17195:222::-;17288:4;17326:2;17315:9;17311:18;17303:26;;17339:71;17407:1;17396:9;17392:17;17383:6;17339:71;:::i;:::-;17195:222;;;;:::o;17423:640::-;17618:4;17656:3;17645:9;17641:19;17633:27;;17670:71;17738:1;17727:9;17723:17;17714:6;17670:71;:::i;:::-;17751:72;17819:2;17808:9;17804:18;17795:6;17751:72;:::i;:::-;17833;17901:2;17890:9;17886:18;17877:6;17833:72;:::i;:::-;17952:9;17946:4;17942:20;17937:2;17926:9;17922:18;17915:48;17980:76;18051:4;18042:6;17980:76;:::i;:::-;17972:84;;17423:640;;;;;;;:::o;18069:210::-;18156:4;18194:2;18183:9;18179:18;18171:26;;18207:65;18269:1;18258:9;18254:17;18245:6;18207:65;:::i;:::-;18069:210;;;;:::o;18285:313::-;18398:4;18436:2;18425:9;18421:18;18413:26;;18485:9;18479:4;18475:20;18471:1;18460:9;18456:17;18449:47;18513:78;18586:4;18577:6;18513:78;:::i;:::-;18505:86;;18285:313;;;;:::o;18604:419::-;18770:4;18808:2;18797:9;18793:18;18785:26;;18857:9;18851:4;18847:20;18843:1;18832:9;18828:17;18821:47;18885:131;19011:4;18885:131;:::i;:::-;18877:139;;18604:419;;;:::o;19029:::-;19195:4;19233:2;19222:9;19218:18;19210:26;;19282:9;19276:4;19272:20;19268:1;19257:9;19253:17;19246:47;19310:131;19436:4;19310:131;:::i;:::-;19302:139;;19029:419;;;:::o;19454:::-;19620:4;19658:2;19647:9;19643:18;19635:26;;19707:9;19701:4;19697:20;19693:1;19682:9;19678:17;19671:47;19735:131;19861:4;19735:131;:::i;:::-;19727:139;;19454:419;;;:::o;19879:::-;20045:4;20083:2;20072:9;20068:18;20060:26;;20132:9;20126:4;20122:20;20118:1;20107:9;20103:17;20096:47;20160:131;20286:4;20160:131;:::i;:::-;20152:139;;19879:419;;;:::o;20304:::-;20470:4;20508:2;20497:9;20493:18;20485:26;;20557:9;20551:4;20547:20;20543:1;20532:9;20528:17;20521:47;20585:131;20711:4;20585:131;:::i;:::-;20577:139;;20304:419;;;:::o;20729:::-;20895:4;20933:2;20922:9;20918:18;20910:26;;20982:9;20976:4;20972:20;20968:1;20957:9;20953:17;20946:47;21010:131;21136:4;21010:131;:::i;:::-;21002:139;;20729:419;;;:::o;21154:::-;21320:4;21358:2;21347:9;21343:18;21335:26;;21407:9;21401:4;21397:20;21393:1;21382:9;21378:17;21371:47;21435:131;21561:4;21435:131;:::i;:::-;21427:139;;21154:419;;;:::o;21579:::-;21745:4;21783:2;21772:9;21768:18;21760:26;;21832:9;21826:4;21822:20;21818:1;21807:9;21803:17;21796:47;21860:131;21986:4;21860:131;:::i;:::-;21852:139;;21579:419;;;:::o;22004:::-;22170:4;22208:2;22197:9;22193:18;22185:26;;22257:9;22251:4;22247:20;22243:1;22232:9;22228:17;22221:47;22285:131;22411:4;22285:131;:::i;:::-;22277:139;;22004:419;;;:::o;22429:::-;22595:4;22633:2;22622:9;22618:18;22610:26;;22682:9;22676:4;22672:20;22668:1;22657:9;22653:17;22646:47;22710:131;22836:4;22710:131;:::i;:::-;22702:139;;22429:419;;;:::o;22854:::-;23020:4;23058:2;23047:9;23043:18;23035:26;;23107:9;23101:4;23097:20;23093:1;23082:9;23078:17;23071:47;23135:131;23261:4;23135:131;:::i;:::-;23127:139;;22854:419;;;:::o;23279:222::-;23372:4;23410:2;23399:9;23395:18;23387:26;;23423:71;23491:1;23480:9;23476:17;23467:6;23423:71;:::i;:::-;23279:222;;;;:::o;23507:866::-;23760:4;23798:3;23787:9;23783:19;23775:27;;23812:71;23880:1;23869:9;23865:17;23856:6;23812:71;:::i;:::-;23893:72;23961:2;23950:9;23946:18;23937:6;23893:72;:::i;:::-;23975;24043:2;24032:9;24028:18;24019:6;23975:72;:::i;:::-;24057;24125:2;24114:9;24110:18;24101:6;24057:72;:::i;:::-;24139:73;24207:3;24196:9;24192:19;24183:6;24139:73;:::i;:::-;24260:9;24254:4;24250:20;24244:3;24233:9;24229:19;24222:49;24288:78;24361:4;24352:6;24288:78;:::i;:::-;24280:86;;23507:866;;;;;;;;;:::o;24379:725::-;24457:4;24463:6;24519:11;24506:25;24619:1;24613:4;24609:12;24598:8;24582:14;24578:29;24574:48;24554:18;24550:73;24540:168;;24627:79;;:::i;:::-;24540:168;24739:18;24729:8;24725:33;24717:41;;24791:4;24778:18;24768:28;;24819:18;24811:6;24808:30;24805:117;;;24841:79;;:::i;:::-;24805:117;24949:2;24943:4;24939:13;24931:21;;25006:4;24998:6;24994:17;24978:14;24974:38;24968:4;24964:49;24961:136;;;25016:79;;:::i;:::-;24961:136;24470:634;24379:725;;;;;:::o;25110:129::-;25144:6;25171:20;;:::i;:::-;25161:30;;25200:33;25228:4;25220:6;25200:33;:::i;:::-;25110:129;;;:::o;25245:75::-;25278:6;25311:2;25305:9;25295:19;;25245:75;:::o;25326:307::-;25387:4;25477:18;25469:6;25466:30;25463:56;;;25499:18;;:::i;:::-;25463:56;25537:29;25559:6;25537:29;:::i;:::-;25529:37;;25621:4;25615;25611:15;25603:23;;25326:307;;;:::o;25639:141::-;25688:4;25711:3;25703:11;;25734:3;25731:1;25724:14;25768:4;25765:1;25755:18;25747:26;;25639:141;;;:::o;25786:98::-;25837:6;25871:5;25865:12;25855:22;;25786:98;;;:::o;25890:97::-;25949:6;25977:3;25967:13;;25890:97;;;;:::o;25993:99::-;26045:6;26079:5;26073:12;26063:22;;25993:99;;;:::o;26098:168::-;26181:11;26215:6;26210:3;26203:19;26255:4;26250:3;26246:14;26231:29;;26098:168;;;;:::o;26272:147::-;26373:11;26410:3;26395:18;;26272:147;;;;:::o;26425:169::-;26509:11;26543:6;26538:3;26531:19;26583:4;26578:3;26574:14;26559:29;;26425:169;;;;:::o;26600:148::-;26702:11;26739:3;26724:18;;26600:148;;;;:::o;26754:305::-;26794:3;26813:20;26831:1;26813:20;:::i;:::-;26808:25;;26847:20;26865:1;26847:20;:::i;:::-;26842:25;;27001:1;26933:66;26929:74;26926:1;26923:81;26920:107;;;27007:18;;:::i;:::-;26920:107;27051:1;27048;27044:9;27037:16;;26754:305;;;;:::o;27065:185::-;27105:1;27122:20;27140:1;27122:20;:::i;:::-;27117:25;;27156:20;27174:1;27156:20;:::i;:::-;27151:25;;27195:1;27185:35;;27200:18;;:::i;:::-;27185:35;27242:1;27239;27235:9;27230:14;;27065:185;;;;:::o;27256:191::-;27296:4;27316:20;27334:1;27316:20;:::i;:::-;27311:25;;27350:20;27368:1;27350:20;:::i;:::-;27345:25;;27389:1;27386;27383:8;27380:34;;;27394:18;;:::i;:::-;27380:34;27439:1;27436;27432:9;27424:17;;27256:191;;;;:::o;27453:543::-;27554:2;27549:3;27546:11;27543:446;;;27588:38;27620:5;27588:38;:::i;:::-;27672:29;27690:10;27672:29;:::i;:::-;27662:8;27658:44;27855:2;27843:10;27840:18;27837:49;;;27876:8;27861:23;;27837:49;27899:80;27955:22;27973:3;27955:22;:::i;:::-;27945:8;27941:37;27928:11;27899:80;:::i;:::-;27558:431;;27543:446;27453:543;;;:::o;28002:96::-;28039:7;28068:24;28086:5;28068:24;:::i;:::-;28057:35;;28002:96;;;:::o;28104:90::-;28138:7;28181:5;28174:13;28167:21;28156:32;;28104:90;;;:::o;28200:149::-;28236:7;28276:66;28269:5;28265:78;28254:89;;28200:149;;;:::o;28355:126::-;28392:7;28432:42;28425:5;28421:54;28410:65;;28355:126;;;:::o;28487:77::-;28524:7;28553:5;28542:16;;28487:77;;;:::o;28570:186::-;28630:120;28647:3;28640:5;28637:14;28630:120;;;28701:39;28738:1;28731:5;28701:39;:::i;:::-;28674:1;28667:5;28663:13;28654:22;;28630:120;;;28570:186;;:::o;28762:113::-;28812:9;28845:24;28863:5;28845:24;:::i;:::-;28832:37;;28762:113;;;:::o;28881:1403::-;29005:44;29045:3;29040;29005:44;:::i;:::-;29114:18;29106:6;29103:30;29100:56;;;29136:18;;:::i;:::-;29100:56;29180:38;29212:4;29206:11;29180:38;:::i;:::-;29265:67;29325:6;29317;29311:4;29265:67;:::i;:::-;29359:1;29388:2;29380:6;29377:14;29405:1;29400:632;;;;30076:1;30093:6;30090:84;;;30149:9;30144:3;30140:19;30127:33;30118:42;;30090:84;30200:67;30260:6;30253:5;30200:67;:::i;:::-;30194:4;30187:81;30049:229;29370:908;;29400:632;29452:4;29448:9;29440:6;29436:22;29486:37;29518:4;29486:37;:::i;:::-;29545:1;29559:215;29573:7;29570:1;29567:14;29559:215;;;29659:9;29654:3;29650:19;29637:33;29629:6;29622:49;29710:1;29702:6;29698:14;29688:24;;29757:2;29746:9;29742:18;29729:31;;29596:4;29593:1;29589:12;29584:17;;29559:215;;;29802:6;29793:7;29790:19;29787:186;;;29867:9;29862:3;29858:19;29845:33;29910:48;29952:4;29944:6;29940:17;29929:9;29910:48;:::i;:::-;29902:6;29895:64;29810:163;29787:186;30019:1;30015;30007:6;30003:14;29999:22;29993:4;29986:36;29407:625;;;29370:908;;28980:1304;;;28881:1403;;;:::o;30290:154::-;30374:6;30369:3;30364;30351:30;30436:1;30427:6;30422:3;30418:16;30411:27;30290:154;;;:::o;30450:307::-;30518:1;30528:113;30542:6;30539:1;30536:13;30528:113;;;30627:1;30622:3;30618:11;30612:18;30608:1;30603:3;30599:11;30592:39;30564:2;30561:1;30557:10;30552:15;;30528:113;;;30659:6;30656:1;30653:13;30650:101;;;30739:1;30730:6;30725:3;30721:16;30714:27;30650:101;30499:258;30450:307;;;:::o;30763:2184::-;30937:1;30931:4;30927:12;30983:1;30976:5;30972:13;31033:12;31076:42;31104:13;31076:42;:::i;:::-;31059:59;;31132:78;31196:13;31184:10;31132:78;:::i;:::-;30894:327;;;31274:1;31268:4;31264:12;31320:2;31313:5;31309:14;31371:12;31414:42;31442:13;31414:42;:::i;:::-;31397:59;;31470:78;31534:13;31522:10;31470:78;:::i;:::-;31231:328;;;31612:1;31606:4;31602:12;31658:2;31651:5;31647:14;31709:12;31752:42;31780:13;31752:42;:::i;:::-;31735:59;;31808:78;31872:13;31860:10;31808:78;:::i;:::-;31569:328;;;31950:1;31944:4;31940:12;31996:2;31989:5;31985:14;32047:12;32090:42;32118:13;32090:42;:::i;:::-;32073:59;;32146:78;32210:13;32198:10;32146:78;:::i;:::-;31907:328;;;32288:1;32282:4;32278:12;32334:3;32327:5;32323:15;32386:12;32429:42;32457:13;32429:42;:::i;:::-;32412:59;;32485:78;32549:13;32537:10;32485:78;:::i;:::-;32245:329;;;32627:1;32621:4;32617:12;32673:3;32666:5;32662:15;32740:63;32790:12;32783:5;32740:63;:::i;:::-;32817:112;32915:13;32900;32888:10;32817:112;:::i;:::-;32584:356;;;;30763:2184;;:::o;32953:93::-;32990:6;33037:2;33032;33025:5;33021:14;33017:23;33007:33;;32953:93;;;:::o;33052:320::-;33096:6;33133:1;33127:4;33123:12;33113:22;;33180:1;33174:4;33170:12;33201:18;33191:81;;33257:4;33249:6;33245:17;33235:27;;33191:81;33319:2;33311:6;33308:14;33288:18;33285:38;33282:84;;;33338:18;;:::i;:::-;33282:84;33103:269;33052:320;;;:::o;33378:295::-;33454:4;33600:29;33625:3;33619:4;33600:29;:::i;:::-;33592:37;;33662:3;33659:1;33655:11;33649:4;33646:21;33638:29;;33378:295;;;;:::o;33678:281::-;33761:27;33783:4;33761:27;:::i;:::-;33753:6;33749:40;33891:6;33879:10;33876:22;33855:18;33843:10;33840:34;33837:62;33834:88;;;33902:18;;:::i;:::-;33834:88;33942:10;33938:2;33931:22;33721:238;33678:281;;:::o;33965:233::-;34004:3;34027:24;34045:5;34027:24;:::i;:::-;34018:33;;34073:66;34066:5;34063:77;34060:103;;;34143:18;;:::i;:::-;34060:103;34190:1;34183:5;34179:13;34172:20;;33965:233;;;:::o;34204:169::-;34248:6;34281:51;34329:1;34325:6;34317:5;34314:1;34310:13;34281:51;:::i;:::-;34277:56;34362:4;34356;34352:15;34342:25;;34255:118;34204:169;;;;:::o;34378:176::-;34410:1;34427:20;34445:1;34427:20;:::i;:::-;34422:25;;34461:20;34479:1;34461:20;:::i;:::-;34456:25;;34500:1;34490:35;;34505:18;;:::i;:::-;34490:35;34546:1;34543;34539:9;34534:14;;34378:176;;;;:::o;34746:180::-;34794:77;34791:1;34784:88;34891:4;34888:1;34881:15;34915:4;34912:1;34905:15;34932:180;34980:77;34977:1;34970:88;35077:4;35074:1;35067:15;35101:4;35098:1;35091:15;35118:180;35166:77;35163:1;35156:88;35263:4;35260:1;35253:15;35287:4;35284:1;35277:15;35304:180;35352:77;35349:1;35342:88;35449:4;35446:1;35439:15;35473:4;35470:1;35463:15;35490:180;35538:77;35535:1;35528:88;35635:4;35632:1;35625:15;35659:4;35656:1;35649:15;35676:75;35719:3;35740:5;35733:12;;35676:75;;;:::o;35757:186::-;35802:11;35851:3;35838:17;35864:33;35891:5;35864:33;:::i;:::-;35931:5;35907:29;;35814:129;35757:186;;;:::o;35949:117::-;36058:1;36055;36048:12;36072:117;36181:1;36178;36171:12;36195:117;36304:1;36301;36294:12;36318:117;36427:1;36424;36417:12;36441:117;36550:1;36547;36540:12;36564:117;36673:1;36670;36663:12;36687:117;36796:1;36793;36786:12;36810:117;36919:1;36916;36909:12;36933:117;37042:1;37039;37032:12;37056:117;37165:1;37162;37155:12;37179:102;37220:6;37271:2;37267:7;37262:2;37255:5;37251:14;37247:28;37237:38;;37179:102;;;:::o;37287:92::-;37319:8;37366:5;37363:1;37359:13;37338:34;;37287:92;;;:::o;37385:107::-;37429:8;37479:5;37473:4;37469:16;37448:37;;37385:107;;;;:::o;37498:117::-;37552:8;37602:5;37596:4;37592:16;37571:37;;37498:117;;;;:::o;37621:189::-;37698:32;;:::i;:::-;37739:65;37797:6;37789;37783:4;37739:65;:::i;:::-;37674:136;37621:189;;:::o;37816:161::-;37956:13;37952:1;37944:6;37940:14;37933:37;37816:161;:::o;37983:225::-;38123:34;38119:1;38111:6;38107:14;38100:58;38192:8;38187:2;38179:6;38175:15;38168:33;37983:225;:::o;38214:163::-;38354:15;38350:1;38342:6;38338:14;38331:39;38214:163;:::o;38383:177::-;38523:29;38519:1;38511:6;38507:14;38500:53;38383:177;:::o;38566:172::-;38706:24;38702:1;38694:6;38690:14;38683:48;38566:172;:::o;38744:182::-;38884:34;38880:1;38872:6;38868:14;38861:58;38744:182;:::o;38932:171::-;39072:23;39068:1;39060:6;39056:14;39049:47;38932:171;:::o;39109:114::-;;:::o;39229:166::-;39369:18;39365:1;39357:6;39353:14;39346:42;39229:166;:::o;39401:181::-;39541:33;39537:1;39529:6;39525:14;39518:57;39401:181;:::o;39588:222::-;39728:34;39724:1;39716:6;39712:14;39705:58;39797:5;39792:2;39784:6;39780:15;39773:30;39588:222;:::o;39816:176::-;39956:28;39952:1;39944:6;39940:14;39933:52;39816:176;:::o;39998:290::-;40056:6;40085:66;40172:22;40185:8;40172:22;:::i;:::-;40160:34;;40227:4;40223:9;40216:5;40212:21;40203:30;;40276:4;40266:8;40262:19;40255:5;40252:30;40242:40;;40063:225;39998:290;;;;:::o;40294:393::-;40363:6;40413:1;40401:10;40397:18;40436:97;40466:66;40455:9;40436:97;:::i;:::-;40554:39;40584:8;40573:9;40554:39;:::i;:::-;40542:51;;40626:4;40622:9;40615:5;40611:21;40602:30;;40675:4;40665:8;40661:19;40654:5;40651:30;40641:40;;40370:317;;40294:393;;;;;:::o;40693:218::-;40808:97;40897:7;40888;40882:4;40808:97;:::i;:::-;40693:218;;;:::o;40917:252::-;41051:112;41155:7;41149:4;41051:112;:::i;:::-;40917:252;;:::o;41175:262::-;41285:39;41316:7;41285:39;:::i;:::-;41346:84;41388:41;41412:16;41388:41;:::i;:::-;41381:4;41375:11;41346:84;:::i;:::-;41340:4;41333:98;41251:186;41175:262;;:::o;41443:269::-;41553:39;41584:7;41553:39;:::i;:::-;41614:91;41663:41;41687:16;41663:41;:::i;:::-;41655:6;41648:4;41642:11;41614:91;:::i;:::-;41608:4;41601:105;41519:193;41443:269;;;:::o;41718:122::-;41791:24;41809:5;41791:24;:::i;:::-;41784:5;41781:35;41771:63;;41830:1;41827;41820:12;41771:63;41718:122;:::o;41846:116::-;41916:21;41931:5;41916:21;:::i;:::-;41909:5;41906:32;41896:60;;41952:1;41949;41942:12;41896:60;41846:116;:::o;41968:120::-;42040:23;42057:5;42040:23;:::i;:::-;42033:5;42030:34;42020:62;;42078:1;42075;42068:12;42020:62;41968:120;:::o;42094:122::-;42167:24;42185:5;42167:24;:::i;:::-;42160:5;42157:35;42147:63;;42206:1;42203;42196:12;42147:63;42094:122;:::o;42222:73::-;42267:3;42222:73;:::o

Swarm Source

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