ETH Price: $3,055.87 (+4.98%)
 

Overview

Max Total Supply

9,999 YB

Holders

2,153

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
0 YB
0x94046b74659ea7df2932e97467c4ef68f7bd904b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

YBCC is a premium club that consist of 9,999 YOLO Bunnies - music artists & lovers that traveled across a wormhole from the No. 1,402 universe.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Head

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// 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: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: contracts/1_Storage.sol




pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    /**
     * The `quantity` minted with ERC2309 exceeds the safety limit.
     */
    error MintERC2309QuantityExceedsLimit();

    /**
     * The `extraData` cannot be set on an unintialized ownership slot.
     */
    error OwnershipNotInitializedForExtraData();

    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;
        // Arbitrary data similar to `startTimestamp` that can be set through `_extraData`.
        uint24 extraData;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     *
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);

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

    // ==============================
    //            IERC721
    // ==============================

    /**
     * @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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

    // ==============================
    //        IERC721Metadata
    // ==============================

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

    // ==============================
    //            IERC2309
    // ==============================

    /**
     * @dev Emitted when tokens in `fromTokenId` to `toTokenId` (inclusive) is transferred from `from` to `to`,
     * as defined in the ERC2309 standard. See `_mintERC2309` for more details.
     */
    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}



pragma solidity ^0.8.4;

/**
 * @dev ERC721 token receiver interface.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @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 IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;

    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The bit position of `extraData` in packed ownership.
    uint256 private constant BITPOS_EXTRA_DATA = 232;

    // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`.
    uint256 private constant BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    // The mask of the lower 160 bits for addresses.
    uint256 private constant BITMASK_ADDRESS = (1 << 160) - 1;

    // The maximum `quantity` that can be minted with `_mintERC2309`.
    // This limit is to prevent overflows on the address data entries.
    // For a limit of 5000, a total of 3.689e15 calls to `_mintERC2309`
    // is required to cause an overflow, which is unrealistic.
    uint256 private constant MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

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

    // The number of tokens burned.
    uint256 private _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 `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    // - [232..255] `extraData`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

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

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

    /**
     * @dev Returns the next token ID to be minted.
     */
    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count.
     * To get the total number of tokens minted, please see `_totalMinted`.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * @dev 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 Returns the total number of tokens burned.
     */
    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

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

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

    /**
     * Sets the auxiliary 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 {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // 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.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * Returns the unpacked `TokenOwnership` struct from `packed`.
     */
    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
        ownership.burned = packed & BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> BITPOS_EXTRA_DATA);
    }

    /**
     * Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * 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) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    /**
     * @dev Packs ownership data into a single uint256.
     */
    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, BITMASK_ADDRESS)
            // `owner | (block.timestamp << BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

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

    /**
     * @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, _toString(tokenId))) : '';
    }

    /**
     * @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, it can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev Returns the `nextInitialized` flag set if `quantity` equals 1.
     */
    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << BITPOS_NEXT_INITIALIZED`.
            result := shl(BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

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

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

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @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 == _msgSenderERC721A()) revert ApproveToCaller();

        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), 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-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 {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_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 && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    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.
     *
     * See {_mint}.
     *
     * Emits a {Transfer} event for each mint.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

    /**
     * @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 for each mint.
     */
    function _mint(address to, uint256 quantity) 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` and `numberMinted` have a maximum limit of 2**64.
        // `tokenId` has a maximum limit of 2**256.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 tokenId = startTokenId;
            uint256 end = startTokenId + quantity;
            do {
                emit Transfer(address(0), to, tokenId++);
            } while (tokenId < end);

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * This function is intended for efficient minting only during contract creation.
     *
     * It emits only one {ConsecutiveTransfer} as defined in
     * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309),
     * instead of a sequence of {Transfer} event(s).
     *
     * Calling this function outside of contract creation WILL make your contract
     * non-compliant with the ERC721 standard.
     * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309
     * {ConsecutiveTransfer} event is only permissible during contract creation.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {ConsecutiveTransfer} event.
     */
    function _mintERC2309(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

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

        // Overflows are unrealistic due to the above check for `quantity` to be below the limit.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Returns the storage slot and value for the approved address of `tokenId`.
     */
    function _getApprovedAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals;
        // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId]`.
        assembly {
            // Compute the slot.
            mstore(0x00, tokenId)
            mstore(0x20, tokenApprovalsPtr.slot)
            approvedAddressSlot := keccak256(0x00, 0x40)
            // Load the slot's value from storage.
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    /**
     * @dev Returns whether the `approvedAddress` is equals to `from` or `msgSender`.
     */
    function _isOwnerOrApproved(
        address approvedAddress,
        address from,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            // Mask `from` to the lower 160 bits, in case the upper bits somehow aren't clean.
            from := and(from, BITMASK_ADDRESS)
            // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean.
            msgSender := and(msgSender, BITMASK_ADDRESS)
            // `msgSender == from || msgSender == approvedAddress`.
            result := or(eq(msgSender, from), eq(msgSender, approvedAddress))
        }
    }

    /**
     * @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 transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);

        // The nested ifs save around 20+ gas over a compound boolean condition.
        if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // 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 {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

    /**
     * @dev 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 {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);

        if (approvalCheck) {
            // The nested ifs save around 20+ gas over a compound boolean condition.
            if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

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

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // 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 {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (BITMASK_BURNED | BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        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 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 ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Directly sets the extra data for the ownership data `index`.
     */
    function _setExtraDataAt(uint256 index, uint24 extraData) internal {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        // Cast `extraData` with assembly to avoid redundant masking.
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    /**
     * @dev Returns the next extra data for the packed ownership data.
     * The returned result is shifted into position.
     */
    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << BITPOS_EXTRA_DATA;
    }

    /**
     * @dev Called during each token transfer to set the 24bit `extraData` field.
     * Intended to be overridden by the cosumer contract.
     *
     * `previousExtraData` - the value of `extraData` before transfer.
     *
     * 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 _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

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

    /**
     * @dev Returns the message sender (defaults to `msg.sender`).
     *
     * If you are writing GSN compatible contracts, you need to override this function.
     */
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit),
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length,
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for {
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp {
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } {
                // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }

            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}


pragma solidity ^0.8.4;



contract Head is ERC721A,Ownable {
    using Strings for uint256;

    string public baseURI = "https://muverse.info/info/";

    uint256 public price=200000000000000000;
    uint256 public plain_price=400000000000000000;

    uint256 public MaxNum = 50;
    mapping (address => uint256) private minter;

    bool public white_time;
    bool public plain_time;

    constructor() ERC721A("YOLO Bunny", "YB") {}
    function mint(uint256 num) external payable {
        require(white_time, "not start");
        require(MaxNum >= num, "num err");
        require(minter[msg.sender] >= num, "not enough num");
        if(price > 0){
             require(msg.value >= price*num  , "not enough price");
        }
        minter[msg.sender] = minter[msg.sender] - num;
        _mint(msg.sender, num);
    }

  
    function PlainMint(uint256 num) external payable {
        require(plain_time, "not start");
        require(MaxNum >= num, "num err");
        if(plain_price > 0){
             require(msg.value >= plain_price*num  , "not enough price");
        }
        _mint(msg.sender, num);
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
       
        return string(abi.encodePacked(baseURI, _tokenId.toString()));
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        baseURI = baseURI_;
    }

  
    function setWhite(address[] memory _to, uint8[] memory _num) external onlyOwner {
        require(_to.length == _num.length, "_to len must =  _num len");

        for(uint256 i = 0;i < _to.length;i++){
            minter[_to[i]] = minter[_to[i]]+_num[i];
        }

    }

  
    function updatePrice(uint256 _price) external onlyOwner {
        price = _price;
    }

  
    function updatePlanPrice(uint256 _price) external onlyOwner {
        plain_price = _price;
    }

   
    function setTime(uint8 _is) external onlyOwner {
        if(_is == 0){
            plain_time = false;
        }else{
            plain_time = true;
        }
    }


    function setWhiteTime(uint8 _is) external onlyOwner {
        if(_is == 0){
            white_time = false;
        }else{
            white_time = true;
        }
    }

   
    function updateMaxNun(uint256 _num) external onlyOwner {
        MaxNum = _num;
    }
   
    function getWhite(address _to) public view returns(uint256 ){
        return minter[_to];
    }
    
    function withdraw() external onlyOwner {
        address payable _owner = payable(owner());
        _owner.transfer(address(this).balance);
    }


 
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MaxNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"PlainMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"getWhite","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plain_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plain_time","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_is","type":"uint8"}],"name":"setTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint8[]","name":"_num","type":"uint8[]"}],"name":"setWhite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_is","type":"uint8"}],"name":"setWhiteTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"updateMaxNun","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updatePlanPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"white_time","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280601a81526020017f68747470733a2f2f6d7576657273652e696e666f2f696e666f2f00000000000081525060099080519060200190620000519291906200022c565b506702c68af0bb140000600a5567058d15e176280000600b556032600c553480156200007c57600080fd5b506040518060400160405280600a81526020017f594f4c4f2042756e6e79000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f59420000000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001019291906200022c565b5080600390805190602001906200011a9291906200022c565b506200012b6200015960201b60201c565b600081905550505062000153620001476200015e60201b60201c565b6200016660201b60201c565b62000341565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023a90620002dc565b90600052602060002090601f0160209004810192826200025e5760008555620002aa565b82601f106200027957805160ff1916838001178555620002aa565b82800160010185558215620002aa579182015b82811115620002a95782518255916020019190600101906200028c565b5b509050620002b99190620002bd565b5090565b5b80821115620002d8576000816000905550600101620002be565b5090565b60006002820490506001821680620002f557607f821691505b602082108114156200030c576200030b62000312565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6133bd80620003516000396000f3fe6080604052600436106101f95760003560e01c8063715018a61161010d578063a0712d68116100a0578063de7b66f51161006f578063de7b66f5146106eb578063e4c661ac14610716578063e9639a1614610741578063e985e9c51461076c578063f2fde38b146107a9576101f9565b8063a0712d6814610640578063a22cb4651461065c578063b88d4fde14610685578063c87b56dd146106ae576101f9565b80638d6cc56d116100dc5780638d6cc56d146105965780638da5cb5b146105bf57806395d89b41146105ea578063a035b1fe14610615576101f9565b8063715018a6146105115780637442be811461052857806377bab7ba1461054457806389c82bc21461056d576101f9565b806326cfd13f1161019057806355f804b31161015f57806355f804b3146104185780635d5669aa146104415780636352211e1461046c5780636c0360eb146104a957806370a08231146104d4576101f9565b806326cfd13f146103725780632f425f2d146103af5780633ccfd60b146103d857806342842e0e146103ef576101f9565b806317c4d20f116101cc57806317c4d20f146102cc57806318160ddd146102f55780632051d0091461032057806323b872dd14610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061275e565b6107d2565b6040516102329190612b4d565b60405180910390f35b34801561024757600080fd5b50610250610864565b60405161025d9190612b68565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612801565b6108f6565b60405161029a9190612ae6565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906126a6565b610972565b005b3480156102d857600080fd5b506102f360048036038101906102ee91906126e6565b610ab3565b005b34801561030157600080fd5b5061030a610c02565b6040516103179190612c8a565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190612801565b610c19565b005b34801561035557600080fd5b50610370600480360381019061036b9190612590565b610c2b565b005b34801561037e57600080fd5b5061039960048036038101906103949190612523565b610f50565b6040516103a69190612c8a565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d1919061282e565b610f99565b005b3480156103e457600080fd5b506103ed610fec565b005b3480156103fb57600080fd5b5061041660048036038101906104119190612590565b61104a565b005b34801561042457600080fd5b5061043f600480360381019061043a91906127b8565b61106a565b005b34801561044d57600080fd5b5061045661108c565b6040516104639190612c8a565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612801565b611092565b6040516104a09190612ae6565b60405180910390f35b3480156104b557600080fd5b506104be6110a4565b6040516104cb9190612b68565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612523565b611132565b6040516105089190612c8a565b60405180910390f35b34801561051d57600080fd5b506105266111eb565b005b610542600480360381019061053d9190612801565b6111ff565b005b34801561055057600080fd5b5061056b6004803603810190610566919061282e565b6112fc565b005b34801561057957600080fd5b50610594600480360381019061058f9190612801565b61134f565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190612801565b611361565b005b3480156105cb57600080fd5b506105d4611373565b6040516105e19190612ae6565b60405180910390f35b3480156105f657600080fd5b506105ff61139d565b60405161060c9190612b68565b60405180910390f35b34801561062157600080fd5b5061062a61142f565b6040516106379190612c8a565b60405180910390f35b61065a60048036038101906106559190612801565b611435565b005b34801561066857600080fd5b50610683600480360381019061067e9190612666565b611642565b005b34801561069157600080fd5b506106ac60048036038101906106a791906125e3565b6117ba565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190612801565b61182d565b6040516106e29190612b68565b60405180910390f35b3480156106f757600080fd5b506107006118a9565b60405161070d9190612b4d565b60405180910390f35b34801561072257600080fd5b5061072b6118bc565b6040516107389190612b4d565b60405180910390f35b34801561074d57600080fd5b506107566118cf565b6040516107639190612c8a565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190612550565b6118d5565b6040516107a09190612b4d565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190612523565b611969565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082d57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085d5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461087390612fb4565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90612fb4565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b5050505050905090565b6000610901826119ed565b610937576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097d82611092565b90508073ffffffffffffffffffffffffffffffffffffffff1661099e611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614610a01576109ca816109c5611a4c565b6118d5565b610a00576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610abb611a54565b8051825114610aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af690612c2a565b60405180910390fd5b60005b8251811015610bfd57818181518110610b1e57610b1d61311e565b5b602002602001015160ff16600d6000858481518110610b4057610b3f61311e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b8d9190612ddc565b600d6000858481518110610ba457610ba361311e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610bf590613017565b915050610b02565b505050565b6000610c0c611ad2565b6001546000540303905090565b610c21611a54565b80600b8190555050565b6000610c3682611ad7565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610ca984611ba5565b91509150610cbf8187610cba611a4c565b611bc7565b610d0b57610cd486610ccf611a4c565b6118d5565b610d0a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d72576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7f8686866001611c0b565b8015610d8a57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e5885610e34888887611c11565b7c020000000000000000000000000000000000000000000000000000000017611c39565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610ee0576000600185019050600060046000838152602001908152602001600020541415610ede576000548114610edd578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f488686866001611c64565b505050505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fa1611a54565b60008160ff161415610fcd576000600e60006101000a81548160ff021916908315150217905550610fe9565b6001600e60006101000a81548160ff0219169083151502179055505b50565b610ff4611a54565b6000610ffe611373565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611046573d6000803e3d6000fd5b5050565b611065838383604051806020016040528060008152506117ba565b505050565b611072611a54565b80600990805190602001906110889291906121e6565b5050565b600b5481565b600061109d82611ad7565b9050919050565b600980546110b190612fb4565b80601f01602080910402602001604051908101604052809291908181526020018280546110dd90612fb4565b801561112a5780601f106110ff5761010080835404028352916020019161112a565b820191906000526020600020905b81548152906001019060200180831161110d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111f3611a54565b6111fd6000611c6a565b565b600e60019054906101000a900460ff1661124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124590612b8a565b60405180910390fd5b80600c541015611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90612baa565b60405180910390fd5b6000600b5411156112ef5780600b546112ac9190612e63565b3410156112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e590612c0a565b60405180910390fd5b5b6112f93382611d30565b50565b611304611a54565b60008160ff161415611330576000600e60016101000a81548160ff02191690831515021790555061134c565b6001600e60016101000a81548160ff0219169083151502179055505b50565b611357611a54565b80600c8190555050565b611369611a54565b80600a8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546113ac90612fb4565b80601f01602080910402602001604051908101604052809291908181526020018280546113d890612fb4565b80156114255780601f106113fa57610100808354040283529160200191611425565b820191906000526020600020905b81548152906001019060200180831161140857829003601f168201915b5050505050905090565b600a5481565b600e60009054906101000a900460ff16611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90612b8a565b60405180910390fd5b80600c5410156114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090612baa565b60405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290612bea565b60405180910390fd5b6000600a5411156115a75780600a546115649190612e63565b3410156115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90612c0a565b60405180910390fd5b5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f29190612ebd565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061163f3382611d30565b50565b61164a611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116af576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006116bc611a4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611769611a4c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ae9190612b4d565b60405180910390a35050565b6117c5848484610c2b565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611827576117f084848484611f04565b611826576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611838826119ed565b611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e90612c4a565b60405180910390fd5b600961188283612064565b604051602001611893929190612ac2565b6040516020818303038152906040529050919050565b600e60009054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611971611a54565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890612bca565b60405180910390fd5b6119ea81611c6a565b50565b6000816119f8611ad2565b11158015611a07575060005482105b8015611a45575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611a5c6121c5565b73ffffffffffffffffffffffffffffffffffffffff16611a7a611373565b73ffffffffffffffffffffffffffffffffffffffff1614611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790612c6a565b60405180910390fd5b565b600090565b60008082905080611ae6611ad2565b11611b6e57600054811015611b6d5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611b6b575b6000811415611b61576004600083600190039350838152602001908152602001600020549050611b36565b8092505050611ba0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611c288686846121cd565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d9d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415611dd8576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de56000848385611c0b565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611e5c83611e4d6000866000611c11565b611e56856121d6565b17611c39565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611e8057806000819055505050611eff6000848385611c64565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f2a611a4c565b8786866040518563ffffffff1660e01b8152600401611f4c9493929190612b01565b602060405180830381600087803b158015611f6657600080fd5b505af1925050508015611f9757506040513d601f19601f82011682018060405250810190611f94919061278b565b60015b612011573d8060008114611fc7576040519150601f19603f3d011682016040523d82523d6000602084013e611fcc565b606091505b50600081511415612009576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008214156120ac576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121c0565b600082905060005b600082146120de5780806120c790613017565b915050600a826120d79190612e32565b91506120b4565b60008167ffffffffffffffff8111156120fa576120f961314d565b5b6040519080825280601f01601f19166020018201604052801561212c5781602001600182028036833780820191505090505b5090505b600085146121b9576001826121459190612ebd565b9150600a856121549190613060565b60306121609190612ddc565b60f81b8183815181106121765761217561311e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121b29190612e32565b9450612130565b8093505050505b919050565b600033905090565b60009392505050565b60006001821460e11b9050919050565b8280546121f290612fb4565b90600052602060002090601f016020900481019282612214576000855561225b565b82601f1061222d57805160ff191683800117855561225b565b8280016001018555821561225b579182015b8281111561225a57825182559160200191906001019061223f565b5b509050612268919061226c565b5090565b5b8082111561228557600081600090555060010161226d565b5090565b600061229c61229784612cca565b612ca5565b905080838252602082019050828560208602820111156122bf576122be613181565b5b60005b858110156122ef57816122d588826123ed565b8452602084019350602083019250506001810190506122c2565b5050509392505050565b600061230c61230784612cf6565b612ca5565b9050808382526020820190508285602086028201111561232f5761232e613181565b5b60005b8581101561235f5781612345888261250e565b845260208401935060208301925050600181019050612332565b5050509392505050565b600061237c61237784612d22565b612ca5565b90508281526020810184848401111561239857612397613186565b5b6123a3848285612f72565b509392505050565b60006123be6123b984612d53565b612ca5565b9050828152602081018484840111156123da576123d9613186565b5b6123e5848285612f72565b509392505050565b6000813590506123fc81613314565b92915050565b600082601f8301126124175761241661317c565b5b8135612427848260208601612289565b91505092915050565b600082601f8301126124455761244461317c565b5b81356124558482602086016122f9565b91505092915050565b60008135905061246d8161332b565b92915050565b60008135905061248281613342565b92915050565b60008151905061249781613342565b92915050565b600082601f8301126124b2576124b161317c565b5b81356124c2848260208601612369565b91505092915050565b600082601f8301126124e0576124df61317c565b5b81356124f08482602086016123ab565b91505092915050565b60008135905061250881613359565b92915050565b60008135905061251d81613370565b92915050565b60006020828403121561253957612538613190565b5b6000612547848285016123ed565b91505092915050565b6000806040838503121561256757612566613190565b5b6000612575858286016123ed565b9250506020612586858286016123ed565b9150509250929050565b6000806000606084860312156125a9576125a8613190565b5b60006125b7868287016123ed565b93505060206125c8868287016123ed565b92505060406125d9868287016124f9565b9150509250925092565b600080600080608085870312156125fd576125fc613190565b5b600061260b878288016123ed565b945050602061261c878288016123ed565b935050604061262d878288016124f9565b925050606085013567ffffffffffffffff81111561264e5761264d61318b565b5b61265a8782880161249d565b91505092959194509250565b6000806040838503121561267d5761267c613190565b5b600061268b858286016123ed565b925050602061269c8582860161245e565b9150509250929050565b600080604083850312156126bd576126bc613190565b5b60006126cb858286016123ed565b92505060206126dc858286016124f9565b9150509250929050565b600080604083850312156126fd576126fc613190565b5b600083013567ffffffffffffffff81111561271b5761271a61318b565b5b61272785828601612402565b925050602083013567ffffffffffffffff8111156127485761274761318b565b5b61275485828601612430565b9150509250929050565b60006020828403121561277457612773613190565b5b600061278284828501612473565b91505092915050565b6000602082840312156127a1576127a0613190565b5b60006127af84828501612488565b91505092915050565b6000602082840312156127ce576127cd613190565b5b600082013567ffffffffffffffff8111156127ec576127eb61318b565b5b6127f8848285016124cb565b91505092915050565b60006020828403121561281757612816613190565b5b6000612825848285016124f9565b91505092915050565b60006020828403121561284457612843613190565b5b60006128528482850161250e565b91505092915050565b61286481612ef1565b82525050565b61287381612f03565b82525050565b600061288482612d99565b61288e8185612daf565b935061289e818560208601612f81565b6128a781613195565b840191505092915050565b60006128bd82612da4565b6128c78185612dc0565b93506128d7818560208601612f81565b6128e081613195565b840191505092915050565b60006128f682612da4565b6129008185612dd1565b9350612910818560208601612f81565b80840191505092915050565b6000815461292981612fb4565b6129338186612dd1565b9450600182166000811461294e576001811461295f57612992565b60ff19831686528186019350612992565b61296885612d84565b60005b8381101561298a5781548189015260018201915060208101905061296b565b838801955050505b50505092915050565b60006129a8600983612dc0565b91506129b3826131a6565b602082019050919050565b60006129cb600783612dc0565b91506129d6826131cf565b602082019050919050565b60006129ee602683612dc0565b91506129f9826131f8565b604082019050919050565b6000612a11600e83612dc0565b9150612a1c82613247565b602082019050919050565b6000612a34601083612dc0565b9150612a3f82613270565b602082019050919050565b6000612a57601883612dc0565b9150612a6282613299565b602082019050919050565b6000612a7a601583612dc0565b9150612a85826132c2565b602082019050919050565b6000612a9d602083612dc0565b9150612aa8826132eb565b602082019050919050565b612abc81612f5b565b82525050565b6000612ace828561291c565b9150612ada82846128eb565b91508190509392505050565b6000602082019050612afb600083018461285b565b92915050565b6000608082019050612b16600083018761285b565b612b23602083018661285b565b612b306040830185612ab3565b8181036060830152612b428184612879565b905095945050505050565b6000602082019050612b62600083018461286a565b92915050565b60006020820190508181036000830152612b8281846128b2565b905092915050565b60006020820190508181036000830152612ba38161299b565b9050919050565b60006020820190508181036000830152612bc3816129be565b9050919050565b60006020820190508181036000830152612be3816129e1565b9050919050565b60006020820190508181036000830152612c0381612a04565b9050919050565b60006020820190508181036000830152612c2381612a27565b9050919050565b60006020820190508181036000830152612c4381612a4a565b9050919050565b60006020820190508181036000830152612c6381612a6d565b9050919050565b60006020820190508181036000830152612c8381612a90565b9050919050565b6000602082019050612c9f6000830184612ab3565b92915050565b6000612caf612cc0565b9050612cbb8282612fe6565b919050565b6000604051905090565b600067ffffffffffffffff821115612ce557612ce461314d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d1157612d1061314d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d3d57612d3c61314d565b5b612d4682613195565b9050602081019050919050565b600067ffffffffffffffff821115612d6e57612d6d61314d565b5b612d7782613195565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612de782612f5b565b9150612df283612f5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2757612e26613091565b5b828201905092915050565b6000612e3d82612f5b565b9150612e4883612f5b565b925082612e5857612e576130c0565b5b828204905092915050565b6000612e6e82612f5b565b9150612e7983612f5b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612eb257612eb1613091565b5b828202905092915050565b6000612ec882612f5b565b9150612ed383612f5b565b925082821015612ee657612ee5613091565b5b828203905092915050565b6000612efc82612f3b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612f9f578082015181840152602081019050612f84565b83811115612fae576000848401525b50505050565b60006002820490506001821680612fcc57607f821691505b60208210811415612fe057612fdf6130ef565b5b50919050565b612fef82613195565b810181811067ffffffffffffffff8211171561300e5761300d61314d565b5b80604052505050565b600061302282612f5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561305557613054613091565b5b600182019050919050565b600061306b82612f5b565b915061307683612f5b565b925082613086576130856130c0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6e6f742073746172740000000000000000000000000000000000000000000000600082015250565b7f6e756d2065727200000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206e756d000000000000000000000000000000000000600082015250565b7f6e6f7420656e6f75676820707269636500000000000000000000000000000000600082015250565b7f5f746f206c656e206d757374203d20205f6e756d206c656e0000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61331d81612ef1565b811461332857600080fd5b50565b61333481612f03565b811461333f57600080fd5b50565b61334b81612f0f565b811461335657600080fd5b50565b61336281612f5b565b811461336d57600080fd5b50565b61337981612f65565b811461338457600080fd5b5056fea2646970667358221220afaeb64c5d686c2a63d5b144f2b7ddfe96ee5f5900d6f036251fb83ab8eb7ac064736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101f95760003560e01c8063715018a61161010d578063a0712d68116100a0578063de7b66f51161006f578063de7b66f5146106eb578063e4c661ac14610716578063e9639a1614610741578063e985e9c51461076c578063f2fde38b146107a9576101f9565b8063a0712d6814610640578063a22cb4651461065c578063b88d4fde14610685578063c87b56dd146106ae576101f9565b80638d6cc56d116100dc5780638d6cc56d146105965780638da5cb5b146105bf57806395d89b41146105ea578063a035b1fe14610615576101f9565b8063715018a6146105115780637442be811461052857806377bab7ba1461054457806389c82bc21461056d576101f9565b806326cfd13f1161019057806355f804b31161015f57806355f804b3146104185780635d5669aa146104415780636352211e1461046c5780636c0360eb146104a957806370a08231146104d4576101f9565b806326cfd13f146103725780632f425f2d146103af5780633ccfd60b146103d857806342842e0e146103ef576101f9565b806317c4d20f116101cc57806317c4d20f146102cc57806318160ddd146102f55780632051d0091461032057806323b872dd14610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061275e565b6107d2565b6040516102329190612b4d565b60405180910390f35b34801561024757600080fd5b50610250610864565b60405161025d9190612b68565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612801565b6108f6565b60405161029a9190612ae6565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906126a6565b610972565b005b3480156102d857600080fd5b506102f360048036038101906102ee91906126e6565b610ab3565b005b34801561030157600080fd5b5061030a610c02565b6040516103179190612c8a565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190612801565b610c19565b005b34801561035557600080fd5b50610370600480360381019061036b9190612590565b610c2b565b005b34801561037e57600080fd5b5061039960048036038101906103949190612523565b610f50565b6040516103a69190612c8a565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d1919061282e565b610f99565b005b3480156103e457600080fd5b506103ed610fec565b005b3480156103fb57600080fd5b5061041660048036038101906104119190612590565b61104a565b005b34801561042457600080fd5b5061043f600480360381019061043a91906127b8565b61106a565b005b34801561044d57600080fd5b5061045661108c565b6040516104639190612c8a565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612801565b611092565b6040516104a09190612ae6565b60405180910390f35b3480156104b557600080fd5b506104be6110a4565b6040516104cb9190612b68565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612523565b611132565b6040516105089190612c8a565b60405180910390f35b34801561051d57600080fd5b506105266111eb565b005b610542600480360381019061053d9190612801565b6111ff565b005b34801561055057600080fd5b5061056b6004803603810190610566919061282e565b6112fc565b005b34801561057957600080fd5b50610594600480360381019061058f9190612801565b61134f565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190612801565b611361565b005b3480156105cb57600080fd5b506105d4611373565b6040516105e19190612ae6565b60405180910390f35b3480156105f657600080fd5b506105ff61139d565b60405161060c9190612b68565b60405180910390f35b34801561062157600080fd5b5061062a61142f565b6040516106379190612c8a565b60405180910390f35b61065a60048036038101906106559190612801565b611435565b005b34801561066857600080fd5b50610683600480360381019061067e9190612666565b611642565b005b34801561069157600080fd5b506106ac60048036038101906106a791906125e3565b6117ba565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190612801565b61182d565b6040516106e29190612b68565b60405180910390f35b3480156106f757600080fd5b506107006118a9565b60405161070d9190612b4d565b60405180910390f35b34801561072257600080fd5b5061072b6118bc565b6040516107389190612b4d565b60405180910390f35b34801561074d57600080fd5b506107566118cf565b6040516107639190612c8a565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190612550565b6118d5565b6040516107a09190612b4d565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190612523565b611969565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082d57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085d5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461087390612fb4565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90612fb4565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b5050505050905090565b6000610901826119ed565b610937576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097d82611092565b90508073ffffffffffffffffffffffffffffffffffffffff1661099e611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614610a01576109ca816109c5611a4c565b6118d5565b610a00576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610abb611a54565b8051825114610aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af690612c2a565b60405180910390fd5b60005b8251811015610bfd57818181518110610b1e57610b1d61311e565b5b602002602001015160ff16600d6000858481518110610b4057610b3f61311e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b8d9190612ddc565b600d6000858481518110610ba457610ba361311e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610bf590613017565b915050610b02565b505050565b6000610c0c611ad2565b6001546000540303905090565b610c21611a54565b80600b8190555050565b6000610c3682611ad7565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610ca984611ba5565b91509150610cbf8187610cba611a4c565b611bc7565b610d0b57610cd486610ccf611a4c565b6118d5565b610d0a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d72576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7f8686866001611c0b565b8015610d8a57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e5885610e34888887611c11565b7c020000000000000000000000000000000000000000000000000000000017611c39565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610ee0576000600185019050600060046000838152602001908152602001600020541415610ede576000548114610edd578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f488686866001611c64565b505050505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fa1611a54565b60008160ff161415610fcd576000600e60006101000a81548160ff021916908315150217905550610fe9565b6001600e60006101000a81548160ff0219169083151502179055505b50565b610ff4611a54565b6000610ffe611373565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611046573d6000803e3d6000fd5b5050565b611065838383604051806020016040528060008152506117ba565b505050565b611072611a54565b80600990805190602001906110889291906121e6565b5050565b600b5481565b600061109d82611ad7565b9050919050565b600980546110b190612fb4565b80601f01602080910402602001604051908101604052809291908181526020018280546110dd90612fb4565b801561112a5780601f106110ff5761010080835404028352916020019161112a565b820191906000526020600020905b81548152906001019060200180831161110d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111f3611a54565b6111fd6000611c6a565b565b600e60019054906101000a900460ff1661124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124590612b8a565b60405180910390fd5b80600c541015611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90612baa565b60405180910390fd5b6000600b5411156112ef5780600b546112ac9190612e63565b3410156112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e590612c0a565b60405180910390fd5b5b6112f93382611d30565b50565b611304611a54565b60008160ff161415611330576000600e60016101000a81548160ff02191690831515021790555061134c565b6001600e60016101000a81548160ff0219169083151502179055505b50565b611357611a54565b80600c8190555050565b611369611a54565b80600a8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546113ac90612fb4565b80601f01602080910402602001604051908101604052809291908181526020018280546113d890612fb4565b80156114255780601f106113fa57610100808354040283529160200191611425565b820191906000526020600020905b81548152906001019060200180831161140857829003601f168201915b5050505050905090565b600a5481565b600e60009054906101000a900460ff16611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90612b8a565b60405180910390fd5b80600c5410156114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090612baa565b60405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290612bea565b60405180910390fd5b6000600a5411156115a75780600a546115649190612e63565b3410156115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90612c0a565b60405180910390fd5b5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f29190612ebd565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061163f3382611d30565b50565b61164a611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116af576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006116bc611a4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611769611a4c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ae9190612b4d565b60405180910390a35050565b6117c5848484610c2b565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611827576117f084848484611f04565b611826576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611838826119ed565b611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e90612c4a565b60405180910390fd5b600961188283612064565b604051602001611893929190612ac2565b6040516020818303038152906040529050919050565b600e60009054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611971611a54565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890612bca565b60405180910390fd5b6119ea81611c6a565b50565b6000816119f8611ad2565b11158015611a07575060005482105b8015611a45575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611a5c6121c5565b73ffffffffffffffffffffffffffffffffffffffff16611a7a611373565b73ffffffffffffffffffffffffffffffffffffffff1614611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790612c6a565b60405180910390fd5b565b600090565b60008082905080611ae6611ad2565b11611b6e57600054811015611b6d5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611b6b575b6000811415611b61576004600083600190039350838152602001908152602001600020549050611b36565b8092505050611ba0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611c288686846121cd565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d9d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415611dd8576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de56000848385611c0b565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611e5c83611e4d6000866000611c11565b611e56856121d6565b17611c39565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611e8057806000819055505050611eff6000848385611c64565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f2a611a4c565b8786866040518563ffffffff1660e01b8152600401611f4c9493929190612b01565b602060405180830381600087803b158015611f6657600080fd5b505af1925050508015611f9757506040513d601f19601f82011682018060405250810190611f94919061278b565b60015b612011573d8060008114611fc7576040519150601f19603f3d011682016040523d82523d6000602084013e611fcc565b606091505b50600081511415612009576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008214156120ac576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121c0565b600082905060005b600082146120de5780806120c790613017565b915050600a826120d79190612e32565b91506120b4565b60008167ffffffffffffffff8111156120fa576120f961314d565b5b6040519080825280601f01601f19166020018201604052801561212c5781602001600182028036833780820191505090505b5090505b600085146121b9576001826121459190612ebd565b9150600a856121549190613060565b60306121609190612ddc565b60f81b8183815181106121765761217561311e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121b29190612e32565b9450612130565b8093505050505b919050565b600033905090565b60009392505050565b60006001821460e11b9050919050565b8280546121f290612fb4565b90600052602060002090601f016020900481019282612214576000855561225b565b82601f1061222d57805160ff191683800117855561225b565b8280016001018555821561225b579182015b8281111561225a57825182559160200191906001019061223f565b5b509050612268919061226c565b5090565b5b8082111561228557600081600090555060010161226d565b5090565b600061229c61229784612cca565b612ca5565b905080838252602082019050828560208602820111156122bf576122be613181565b5b60005b858110156122ef57816122d588826123ed565b8452602084019350602083019250506001810190506122c2565b5050509392505050565b600061230c61230784612cf6565b612ca5565b9050808382526020820190508285602086028201111561232f5761232e613181565b5b60005b8581101561235f5781612345888261250e565b845260208401935060208301925050600181019050612332565b5050509392505050565b600061237c61237784612d22565b612ca5565b90508281526020810184848401111561239857612397613186565b5b6123a3848285612f72565b509392505050565b60006123be6123b984612d53565b612ca5565b9050828152602081018484840111156123da576123d9613186565b5b6123e5848285612f72565b509392505050565b6000813590506123fc81613314565b92915050565b600082601f8301126124175761241661317c565b5b8135612427848260208601612289565b91505092915050565b600082601f8301126124455761244461317c565b5b81356124558482602086016122f9565b91505092915050565b60008135905061246d8161332b565b92915050565b60008135905061248281613342565b92915050565b60008151905061249781613342565b92915050565b600082601f8301126124b2576124b161317c565b5b81356124c2848260208601612369565b91505092915050565b600082601f8301126124e0576124df61317c565b5b81356124f08482602086016123ab565b91505092915050565b60008135905061250881613359565b92915050565b60008135905061251d81613370565b92915050565b60006020828403121561253957612538613190565b5b6000612547848285016123ed565b91505092915050565b6000806040838503121561256757612566613190565b5b6000612575858286016123ed565b9250506020612586858286016123ed565b9150509250929050565b6000806000606084860312156125a9576125a8613190565b5b60006125b7868287016123ed565b93505060206125c8868287016123ed565b92505060406125d9868287016124f9565b9150509250925092565b600080600080608085870312156125fd576125fc613190565b5b600061260b878288016123ed565b945050602061261c878288016123ed565b935050604061262d878288016124f9565b925050606085013567ffffffffffffffff81111561264e5761264d61318b565b5b61265a8782880161249d565b91505092959194509250565b6000806040838503121561267d5761267c613190565b5b600061268b858286016123ed565b925050602061269c8582860161245e565b9150509250929050565b600080604083850312156126bd576126bc613190565b5b60006126cb858286016123ed565b92505060206126dc858286016124f9565b9150509250929050565b600080604083850312156126fd576126fc613190565b5b600083013567ffffffffffffffff81111561271b5761271a61318b565b5b61272785828601612402565b925050602083013567ffffffffffffffff8111156127485761274761318b565b5b61275485828601612430565b9150509250929050565b60006020828403121561277457612773613190565b5b600061278284828501612473565b91505092915050565b6000602082840312156127a1576127a0613190565b5b60006127af84828501612488565b91505092915050565b6000602082840312156127ce576127cd613190565b5b600082013567ffffffffffffffff8111156127ec576127eb61318b565b5b6127f8848285016124cb565b91505092915050565b60006020828403121561281757612816613190565b5b6000612825848285016124f9565b91505092915050565b60006020828403121561284457612843613190565b5b60006128528482850161250e565b91505092915050565b61286481612ef1565b82525050565b61287381612f03565b82525050565b600061288482612d99565b61288e8185612daf565b935061289e818560208601612f81565b6128a781613195565b840191505092915050565b60006128bd82612da4565b6128c78185612dc0565b93506128d7818560208601612f81565b6128e081613195565b840191505092915050565b60006128f682612da4565b6129008185612dd1565b9350612910818560208601612f81565b80840191505092915050565b6000815461292981612fb4565b6129338186612dd1565b9450600182166000811461294e576001811461295f57612992565b60ff19831686528186019350612992565b61296885612d84565b60005b8381101561298a5781548189015260018201915060208101905061296b565b838801955050505b50505092915050565b60006129a8600983612dc0565b91506129b3826131a6565b602082019050919050565b60006129cb600783612dc0565b91506129d6826131cf565b602082019050919050565b60006129ee602683612dc0565b91506129f9826131f8565b604082019050919050565b6000612a11600e83612dc0565b9150612a1c82613247565b602082019050919050565b6000612a34601083612dc0565b9150612a3f82613270565b602082019050919050565b6000612a57601883612dc0565b9150612a6282613299565b602082019050919050565b6000612a7a601583612dc0565b9150612a85826132c2565b602082019050919050565b6000612a9d602083612dc0565b9150612aa8826132eb565b602082019050919050565b612abc81612f5b565b82525050565b6000612ace828561291c565b9150612ada82846128eb565b91508190509392505050565b6000602082019050612afb600083018461285b565b92915050565b6000608082019050612b16600083018761285b565b612b23602083018661285b565b612b306040830185612ab3565b8181036060830152612b428184612879565b905095945050505050565b6000602082019050612b62600083018461286a565b92915050565b60006020820190508181036000830152612b8281846128b2565b905092915050565b60006020820190508181036000830152612ba38161299b565b9050919050565b60006020820190508181036000830152612bc3816129be565b9050919050565b60006020820190508181036000830152612be3816129e1565b9050919050565b60006020820190508181036000830152612c0381612a04565b9050919050565b60006020820190508181036000830152612c2381612a27565b9050919050565b60006020820190508181036000830152612c4381612a4a565b9050919050565b60006020820190508181036000830152612c6381612a6d565b9050919050565b60006020820190508181036000830152612c8381612a90565b9050919050565b6000602082019050612c9f6000830184612ab3565b92915050565b6000612caf612cc0565b9050612cbb8282612fe6565b919050565b6000604051905090565b600067ffffffffffffffff821115612ce557612ce461314d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d1157612d1061314d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d3d57612d3c61314d565b5b612d4682613195565b9050602081019050919050565b600067ffffffffffffffff821115612d6e57612d6d61314d565b5b612d7782613195565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612de782612f5b565b9150612df283612f5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2757612e26613091565b5b828201905092915050565b6000612e3d82612f5b565b9150612e4883612f5b565b925082612e5857612e576130c0565b5b828204905092915050565b6000612e6e82612f5b565b9150612e7983612f5b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612eb257612eb1613091565b5b828202905092915050565b6000612ec882612f5b565b9150612ed383612f5b565b925082821015612ee657612ee5613091565b5b828203905092915050565b6000612efc82612f3b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612f9f578082015181840152602081019050612f84565b83811115612fae576000848401525b50505050565b60006002820490506001821680612fcc57607f821691505b60208210811415612fe057612fdf6130ef565b5b50919050565b612fef82613195565b810181811067ffffffffffffffff8211171561300e5761300d61314d565b5b80604052505050565b600061302282612f5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561305557613054613091565b5b600182019050919050565b600061306b82612f5b565b915061307683612f5b565b925082613086576130856130c0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6e6f742073746172740000000000000000000000000000000000000000000000600082015250565b7f6e756d2065727200000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206e756d000000000000000000000000000000000000600082015250565b7f6e6f7420656e6f75676820707269636500000000000000000000000000000000600082015250565b7f5f746f206c656e206d757374203d20205f6e756d206c656e0000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61331d81612ef1565b811461332857600080fd5b50565b61333481612f03565b811461333f57600080fd5b50565b61334b81612f0f565b811461335657600080fd5b50565b61336281612f5b565b811461336d57600080fd5b50565b61337981612f65565b811461338457600080fd5b5056fea2646970667358221220afaeb64c5d686c2a63d5b144f2b7ddfe96ee5f5900d6f036251fb83ab8eb7ac064736f6c63430008070033

Deployed Bytecode Sourcemap

50692:2726:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20527:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26174:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28120:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27668:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52182:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19581:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52573:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37385:2800;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53151:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52865:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53260:148;;;;;;;;;;;;;:::i;:::-;;29010:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52070:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50873:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25963:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50766:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21206:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2776:103;;;;;;;;;;;;;:::i;:::-;;51529:293;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52685:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53053:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52472:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26343:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50827:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51122:395;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28396:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29266:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51830:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51012:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51041;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50927:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28775:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3034:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20527:615;20612:4;20927:10;20912:25;;:11;:25;;;;:102;;;;21004:10;20989:25;;:11;:25;;;;20912:102;:179;;;;21081:10;21066:25;;:11;:25;;;;20912:179;20892:199;;20527:615;;;:::o;26174:100::-;26228:13;26261:5;26254:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26174:100;:::o;28120:204::-;28188:7;28213:16;28221:7;28213;:16::i;:::-;28208:64;;28238:34;;;;;;;;;;;;;;28208:64;28292:15;:24;28308:7;28292:24;;;;;;;;;;;;;;;;;;;;;28285:31;;28120:204;;;:::o;27668:386::-;27741:13;27757:16;27765:7;27757;:16::i;:::-;27741:32;;27813:5;27790:28;;:19;:17;:19::i;:::-;:28;;;27786:175;;27838:44;27855:5;27862:19;:17;:19::i;:::-;27838:16;:44::i;:::-;27833:128;;27910:35;;;;;;;;;;;;;;27833:128;27786:175;28000:2;27973:15;:24;27989:7;27973:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28038:7;28034:2;28018:28;;28027:5;28018:28;;;;;;;;;;;;27730:324;27668:386;;:::o;52182:278::-;2014:13;:11;:13::i;:::-;52295:4:::1;:11;52281:3;:10;:25;52273:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;52352:9;52348:103;52370:3;:10;52366:1;:14;52348:103;;;52432:4;52437:1;52432:7;;;;;;;;:::i;:::-;;;;;;;;52417:22;;:6;:14;52424:3;52428:1;52424:6;;;;;;;;:::i;:::-;;;;;;;;52417:14;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;52400:6;:14;52407:3;52411:1;52407:6;;;;;;;;:::i;:::-;;;;;;;;52400:14;;;;;;;;;;;;;;;:39;;;;52381:3;;;;;:::i;:::-;;;;52348:103;;;;52182:278:::0;;:::o;19581:315::-;19634:7;19862:15;:13;:15::i;:::-;19847:12;;19831:13;;:28;:46;19824:53;;19581:315;:::o;52573:99::-;2014:13;:11;:13::i;:::-;52658:6:::1;52644:11;:20;;;;52573:99:::0;:::o;37385:2800::-;37519:27;37549;37568:7;37549:18;:27::i;:::-;37519:57;;37634:4;37593:45;;37609:19;37593:45;;;37589:86;;37647:28;;;;;;;;;;;;;;37589:86;37689:27;37718:23;37745:28;37765:7;37745:19;:28::i;:::-;37688:85;;;;37873:62;37892:15;37909:4;37915:19;:17;:19::i;:::-;37873:18;:62::i;:::-;37868:174;;37955:43;37972:4;37978:19;:17;:19::i;:::-;37955:16;:43::i;:::-;37950:92;;38007:35;;;;;;;;;;;;;;37950:92;37868:174;38073:1;38059:16;;:2;:16;;;38055:52;;;38084:23;;;;;;;;;;;;;;38055:52;38120:43;38142:4;38148:2;38152:7;38161:1;38120:21;:43::i;:::-;38256:15;38253:160;;;38396:1;38375:19;38368:30;38253:160;38791:18;:24;38810:4;38791:24;;;;;;;;;;;;;;;;38789:26;;;;;;;;;;;;38860:18;:22;38879:2;38860:22;;;;;;;;;;;;;;;;38858:24;;;;;;;;;;;39182:145;39219:2;39267:45;39282:4;39288:2;39292:19;39267:14;:45::i;:::-;16809:8;39240:72;39182:18;:145::i;:::-;39153:17;:26;39171:7;39153:26;;;;;;;;;;;:174;;;;39497:1;16809:8;39447:19;:46;:51;39443:626;;;39519:19;39551:1;39541:7;:11;39519:33;;39708:1;39674:17;:30;39692:11;39674:30;;;;;;;;;;;;:35;39670:384;;;39812:13;;39797:11;:28;39793:242;;39992:19;39959:17;:30;39977:11;39959:30;;;;;;;;;;;:52;;;;39793:242;39670:384;39500:569;39443:626;40116:7;40112:2;40097:27;;40106:4;40097:27;;;;;;;;;;;;40135:42;40156:4;40162:2;40166:7;40175:1;40135:20;:42::i;:::-;37508:2677;;;37385:2800;;;:::o;53151:97::-;53202:7;53229:6;:11;53236:3;53229:11;;;;;;;;;;;;;;;;53222:18;;53151:97;;;:::o;52865:175::-;2014:13;:11;:13::i;:::-;52938:1:::1;52931:3;:8;;;52928:105;;;52968:5;52955:10;;:18;;;;;;;;;;;;;;;;;;52928:105;;;53017:4;53004:10;;:17;;;;;;;;;;;;;;;;;;52928:105;52865:175:::0;:::o;53260:148::-;2014:13;:11;:13::i;:::-;53310:22:::1;53343:7;:5;:7::i;:::-;53310:41;;53362:6;:15;;:38;53378:21;53362:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53299:109;53260:148::o:0;29010:185::-;29148:39;29165:4;29171:2;29175:7;29148:39;;;;;;;;;;;;:16;:39::i;:::-;29010:185;;;:::o;52070:100::-;2014:13;:11;:13::i;:::-;52154:8:::1;52144:7;:18;;;;;;;;;;;;:::i;:::-;;52070:100:::0;:::o;50873:45::-;;;;:::o;25963:144::-;26027:7;26070:27;26089:7;26070:18;:27::i;:::-;26047:52;;25963:144;;;:::o;50766:52::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21206:224::-;21270:7;21311:1;21294:19;;:5;:19;;;21290:60;;;21322:28;;;;;;;;;;;;;;21290:60;15761:13;21368:18;:25;21387:5;21368:25;;;;;;;;;;;;;;;;:54;21361:61;;21206:224;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;51529:293::-;51597:10;;;;;;;;;;;51589:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;51650:3;51640:6;;:13;;51632:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;51693:1;51679:11;;:15;51676:106;;;51744:3;51732:11;;:15;;;;:::i;:::-;51719:9;:28;;51711:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51676:106;51792:22;51798:10;51810:3;51792:5;:22::i;:::-;51529:293;:::o;52685:170::-;2014:13;:11;:13::i;:::-;52753:1:::1;52746:3;:8;;;52743:105;;;52783:5;52770:10;;:18;;;;;;;;;;;;;;;;;;52743:105;;;52832:4;52819:10;;:17;;;;;;;;;;;;;;;;;;52743:105;52685:170:::0;:::o;53053:87::-;2014:13;:11;:13::i;:::-;53128:4:::1;53119:6;:13;;;;53053:87:::0;:::o;52472:89::-;2014:13;:11;:13::i;:::-;52547:6:::1;52539:5;:14;;;;52472:89:::0;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;26343:104::-;26399:13;26432:7;26425:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26343:104;:::o;50827:39::-;;;;:::o;51122:395::-;51185:10;;;;;;;;;;;51177:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;51238:3;51228:6;;:13;;51220:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;51294:3;51272:6;:18;51279:10;51272:18;;;;;;;;;;;;;;;;:25;;51264:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;51338:1;51330:5;;:9;51327:94;;;51383:3;51377:5;;:9;;;;:::i;:::-;51364;:22;;51356:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;51327:94;51473:3;51452:6;:18;51459:10;51452:18;;;;;;;;;;;;;;;;:24;;;;:::i;:::-;51431:6;:18;51438:10;51431:18;;;;;;;;;;;;;;;:45;;;;51487:22;51493:10;51505:3;51487:5;:22::i;:::-;51122:395;:::o;28396:308::-;28507:19;:17;:19::i;:::-;28495:31;;:8;:31;;;28491:61;;;28535:17;;;;;;;;;;;;;;28491:61;28617:8;28565:18;:39;28584:19;:17;:19::i;:::-;28565:39;;;;;;;;;;;;;;;:49;28605:8;28565:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;28677:8;28641:55;;28656:19;:17;:19::i;:::-;28641:55;;;28687:8;28641:55;;;;;;:::i;:::-;;;;;;;;28396:308;;:::o;29266:399::-;29433:31;29446:4;29452:2;29456:7;29433:12;:31::i;:::-;29497:1;29479:2;:14;;;:19;29475:183;;29518:56;29549:4;29555:2;29559:7;29568:5;29518:30;:56::i;:::-;29513:145;;29602:40;;;;;;;;;;;;;;29513:145;29475:183;29266:399;;;;:::o;51830:232::-;51896:13;51930:17;51938:8;51930:7;:17::i;:::-;51922:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;52024:7;52033:19;:8;:17;:19::i;:::-;52007:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51993:61;;51830:232;;;:::o;51012:22::-;;;;;;;;;;;;;:::o;51041:::-;;;;;;;;;;;;;:::o;50927:26::-;;;;:::o;28775:164::-;28872:4;28896:18;:25;28915:5;28896:25;;;;;;;;;;;;;;;:35;28922:8;28896:35;;;;;;;;;;;;;;;;;;;;;;;;;28889:42;;28775:164;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;;;3115:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;29920:273::-;29977:4;30033:7;30014:15;:13;:15::i;:::-;:26;;:66;;;;;30067:13;;30057:7;:23;30014:66;:152;;;;;30165:1;16531:8;30118:17;:26;30136:7;30118:26;;;;;;;;;;;;:43;:48;30014:152;29994:172;;29920:273;;;:::o;48481:105::-;48541:7;48568:10;48561:17;;48481:105;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;19105:92::-;19161:7;19105:92;:::o;22880:1129::-;22947:7;22967:12;22982:7;22967:22;;23050:4;23031:15;:13;:15::i;:::-;:23;23027:915;;23084:13;;23077:4;:20;23073:869;;;23122:14;23139:17;:23;23157:4;23139:23;;;;;;;;;;;;23122:40;;23255:1;16531:8;23228:6;:23;:28;23224:699;;;23747:113;23764:1;23754:6;:11;23747:113;;;23807:17;:25;23825:6;;;;;;;23807:25;;;;;;;;;;;;23798:34;;23747:113;;;23893:6;23886:13;;;;;;23224:699;23099:843;23073:869;23027:915;23970:31;;;;;;;;;;;;;;22880:1129;;;;:::o;35721:652::-;35816:27;35845:23;35886:53;35942:15;35886:71;;36128:7;36122:4;36115:21;36163:22;36157:4;36150:36;36239:4;36233;36223:21;36200:44;;36335:19;36329:26;36310:45;;36066:300;35721:652;;;:::o;36486:645::-;36628:11;36790:15;36784:4;36780:26;36772:34;;36949:15;36938:9;36934:31;36921:44;;37096:15;37085:9;37082:30;37075:4;37064:9;37061:19;37058:55;37048:65;;36486:645;;;;;:::o;47314:159::-;;;;;:::o;45626:309::-;45761:7;45781:16;16932:3;45807:19;:40;;45781:67;;16932:3;45874:31;45885:4;45891:2;45895:9;45874:10;:31::i;:::-;45866:40;;:61;;45859:68;;;45626:309;;;;;:::o;25454:447::-;25534:14;25702:15;25695:5;25691:27;25682:36;;25876:5;25862:11;25838:22;25834:40;25831:51;25824:5;25821:62;25811:72;;25454:447;;;;:::o;48132:158::-;;;;;:::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3458:128;3395:191;:::o;31751:1529::-;31816:20;31839:13;;31816:36;;31881:1;31867:16;;:2;:16;;;31863:48;;;31892:19;;;;;;;;;;;;;;31863:48;31938:1;31926:8;:13;31922:44;;;31948:18;;;;;;;;;;;;;;31922:44;31979:61;32009:1;32013:2;32017:12;32031:8;31979:21;:61::i;:::-;32522:1;15898:2;32493:1;:25;;32492:31;32480:8;:44;32454:18;:22;32473:2;32454:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;32801:139;32838:2;32892:33;32915:1;32919:2;32923:1;32892:14;:33::i;:::-;32859:30;32880:8;32859:20;:30::i;:::-;:66;32801:18;:139::i;:::-;32767:17;:31;32785:12;32767:31;;;;;;;;;;;:173;;;;32957:15;32975:12;32957:30;;33002:11;33031:8;33016:12;:23;33002:37;;33054:101;33106:9;;;;;;33102:2;33081:35;;33098:1;33081:35;;;;;;;;;;;;33150:3;33140:7;:13;33054:101;;33187:3;33171:13;:19;;;;32228:974;;33212:60;33241:1;33245:2;33249:12;33263:8;33212:20;:60::i;:::-;31805:1475;31751:1529;;:::o;44136:716::-;44299:4;44345:2;44320:45;;;44366:19;:17;:19::i;:::-;44387:4;44393:7;44402:5;44320:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44316:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44620:1;44603:6;:13;:18;44599:235;;;44649:40;;;;;;;;;;;;;;44599:235;44792:6;44786:13;44777:6;44773:2;44769:15;44762:38;44316:529;44489:54;;;44479:64;;;:6;:64;;;;44472:71;;;44136:716;;;;;;:::o;4023:723::-;4079:13;4309:1;4300:5;:10;4296:53;;;4327:10;;;;;;;;;;;;;;;;;;;;;4296:53;4359:12;4374:5;4359:20;;4390:14;4415:78;4430:1;4422:4;:9;4415:78;;4448:8;;;;;:::i;:::-;;;;4479:2;4471:10;;;;;:::i;:::-;;;4415:78;;;4503:19;4535:6;4525:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4503:39;;4553:154;4569:1;4560:5;:10;4553:154;;4597:1;4587:11;;;;;:::i;:::-;;;4664:2;4656:5;:10;;;;:::i;:::-;4643:2;:24;;;;:::i;:::-;4630:39;;4613:6;4620;4613:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4693:2;4684:11;;;;;:::i;:::-;;;4553:154;;;4731:6;4717:21;;;;;4023:723;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;46511:147::-;46648:6;46511:147;;;;;:::o;27284:322::-;27354:14;27585:1;27575:8;27572:15;27547:23;27543:45;27533:55;;27284:322;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;767:716::-;861:5;886:79;902:62;957:6;902:62;:::i;:::-;886:79;:::i;:::-;877:88;;985:5;1014:6;1007:5;1000:21;1048:4;1041:5;1037:16;1030:23;;1074:6;1124:3;1116:4;1108:6;1104:17;1099:3;1095:27;1092:36;1089:143;;;1143:79;;:::i;:::-;1089:143;1256:1;1241:236;1266:6;1263:1;1260:13;1241:236;;;1334:3;1363:35;1394:3;1382:10;1363:35;:::i;:::-;1358:3;1351:48;1428:4;1423:3;1419:14;1412:21;;1462:4;1457:3;1453:14;1446:21;;1301:176;1288:1;1285;1281:9;1276:14;;1241:236;;;1245:14;867:616;;767:716;;;;;:::o;1489:410::-;1566:5;1591:65;1607:48;1648:6;1607:48;:::i;:::-;1591:65;:::i;:::-;1582:74;;1679:6;1672:5;1665:21;1717:4;1710:5;1706:16;1755:3;1746:6;1741:3;1737:16;1734:25;1731:112;;;1762:79;;:::i;:::-;1731:112;1852:41;1886:6;1881:3;1876;1852:41;:::i;:::-;1572:327;1489:410;;;;;:::o;1905:412::-;1983:5;2008:66;2024:49;2066:6;2024:49;:::i;:::-;2008:66;:::i;:::-;1999:75;;2097:6;2090:5;2083:21;2135:4;2128:5;2124:16;2173:3;2164:6;2159:3;2155:16;2152:25;2149:112;;;2180:79;;:::i;:::-;2149:112;2270:41;2304:6;2299:3;2294;2270:41;:::i;:::-;1989:328;1905:412;;;;;:::o;2323:139::-;2369:5;2407:6;2394:20;2385:29;;2423:33;2450:5;2423:33;:::i;:::-;2323:139;;;;:::o;2485:370::-;2556:5;2605:3;2598:4;2590:6;2586:17;2582:27;2572:122;;2613:79;;:::i;:::-;2572:122;2730:6;2717:20;2755:94;2845:3;2837:6;2830:4;2822:6;2818:17;2755:94;:::i;:::-;2746:103;;2562:293;2485:370;;;;:::o;2876:366::-;2945:5;2994:3;2987:4;2979:6;2975:17;2971:27;2961:122;;3002:79;;:::i;:::-;2961:122;3119:6;3106:20;3144:92;3232:3;3224:6;3217:4;3209:6;3205:17;3144:92;:::i;:::-;3135:101;;2951:291;2876:366;;;;:::o;3248:133::-;3291:5;3329:6;3316:20;3307:29;;3345:30;3369:5;3345:30;:::i;:::-;3248:133;;;;:::o;3387:137::-;3432:5;3470:6;3457:20;3448:29;;3486:32;3512:5;3486:32;:::i;:::-;3387:137;;;;:::o;3530:141::-;3586:5;3617:6;3611:13;3602:22;;3633:32;3659:5;3633:32;:::i;:::-;3530:141;;;;:::o;3690:338::-;3745:5;3794:3;3787:4;3779:6;3775:17;3771:27;3761:122;;3802:79;;:::i;:::-;3761:122;3919:6;3906:20;3944:78;4018:3;4010:6;4003:4;3995:6;3991:17;3944:78;:::i;:::-;3935:87;;3751:277;3690:338;;;;:::o;4048:340::-;4104:5;4153:3;4146:4;4138:6;4134:17;4130:27;4120:122;;4161:79;;:::i;:::-;4120:122;4278:6;4265:20;4303:79;4378:3;4370:6;4363:4;4355:6;4351:17;4303:79;:::i;:::-;4294:88;;4110:278;4048:340;;;;:::o;4394:139::-;4440:5;4478:6;4465:20;4456:29;;4494:33;4521:5;4494:33;:::i;:::-;4394:139;;;;:::o;4539:135::-;4583:5;4621:6;4608:20;4599:29;;4637:31;4662:5;4637:31;:::i;:::-;4539:135;;;;:::o;4680:329::-;4739:6;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;4680:329;;;;:::o;5015:474::-;5083:6;5091;5140:2;5128:9;5119:7;5115:23;5111:32;5108:119;;;5146:79;;:::i;:::-;5108:119;5266:1;5291:53;5336:7;5327:6;5316:9;5312:22;5291:53;:::i;:::-;5281:63;;5237:117;5393:2;5419:53;5464:7;5455:6;5444:9;5440:22;5419:53;:::i;:::-;5409:63;;5364:118;5015:474;;;;;:::o;5495:619::-;5572:6;5580;5588;5637:2;5625:9;5616:7;5612:23;5608:32;5605:119;;;5643:79;;:::i;:::-;5605:119;5763:1;5788:53;5833:7;5824:6;5813:9;5809:22;5788:53;:::i;:::-;5778:63;;5734:117;5890:2;5916:53;5961:7;5952:6;5941:9;5937:22;5916:53;:::i;:::-;5906:63;;5861:118;6018:2;6044:53;6089:7;6080:6;6069:9;6065:22;6044:53;:::i;:::-;6034:63;;5989:118;5495:619;;;;;:::o;6120:943::-;6215:6;6223;6231;6239;6288:3;6276:9;6267:7;6263:23;6259:33;6256:120;;;6295:79;;:::i;:::-;6256:120;6415:1;6440:53;6485:7;6476:6;6465:9;6461:22;6440:53;:::i;:::-;6430:63;;6386:117;6542:2;6568:53;6613:7;6604:6;6593:9;6589:22;6568:53;:::i;:::-;6558:63;;6513:118;6670:2;6696:53;6741:7;6732:6;6721:9;6717:22;6696:53;:::i;:::-;6686:63;;6641:118;6826:2;6815:9;6811:18;6798:32;6857:18;6849:6;6846:30;6843:117;;;6879:79;;:::i;:::-;6843:117;6984:62;7038:7;7029:6;7018:9;7014:22;6984:62;:::i;:::-;6974:72;;6769:287;6120:943;;;;;;;:::o;7069:468::-;7134:6;7142;7191:2;7179:9;7170:7;7166:23;7162:32;7159:119;;;7197:79;;:::i;:::-;7159:119;7317:1;7342:53;7387:7;7378:6;7367:9;7363:22;7342:53;:::i;:::-;7332:63;;7288:117;7444:2;7470:50;7512:7;7503:6;7492:9;7488:22;7470:50;:::i;:::-;7460:60;;7415:115;7069:468;;;;;:::o;7543:474::-;7611:6;7619;7668:2;7656:9;7647:7;7643:23;7639:32;7636:119;;;7674:79;;:::i;:::-;7636:119;7794:1;7819:53;7864:7;7855:6;7844:9;7840:22;7819:53;:::i;:::-;7809:63;;7765:117;7921:2;7947:53;7992:7;7983:6;7972:9;7968:22;7947:53;:::i;:::-;7937:63;;7892:118;7543:474;;;;;:::o;8023:890::-;8139:6;8147;8196:2;8184:9;8175:7;8171:23;8167:32;8164:119;;;8202:79;;:::i;:::-;8164:119;8350:1;8339:9;8335:17;8322:31;8380:18;8372:6;8369:30;8366:117;;;8402:79;;:::i;:::-;8366:117;8507:78;8577:7;8568:6;8557:9;8553:22;8507:78;:::i;:::-;8497:88;;8293:302;8662:2;8651:9;8647:18;8634:32;8693:18;8685:6;8682:30;8679:117;;;8715:79;;:::i;:::-;8679:117;8820:76;8888:7;8879:6;8868:9;8864:22;8820:76;:::i;:::-;8810:86;;8605:301;8023:890;;;;;:::o;8919:327::-;8977:6;9026:2;9014:9;9005:7;9001:23;8997:32;8994:119;;;9032:79;;:::i;:::-;8994:119;9152:1;9177:52;9221:7;9212:6;9201:9;9197:22;9177:52;:::i;:::-;9167:62;;9123:116;8919:327;;;;:::o;9252:349::-;9321:6;9370:2;9358:9;9349:7;9345:23;9341:32;9338:119;;;9376:79;;:::i;:::-;9338:119;9496:1;9521:63;9576:7;9567:6;9556:9;9552:22;9521:63;:::i;:::-;9511:73;;9467:127;9252:349;;;;:::o;9607:509::-;9676:6;9725:2;9713:9;9704:7;9700:23;9696:32;9693:119;;;9731:79;;:::i;:::-;9693:119;9879:1;9868:9;9864:17;9851:31;9909:18;9901:6;9898:30;9895:117;;;9931:79;;:::i;:::-;9895:117;10036:63;10091:7;10082:6;10071:9;10067:22;10036:63;:::i;:::-;10026:73;;9822:287;9607:509;;;;:::o;10122:329::-;10181:6;10230:2;10218:9;10209:7;10205:23;10201:32;10198:119;;;10236:79;;:::i;:::-;10198:119;10356:1;10381:53;10426:7;10417:6;10406:9;10402:22;10381:53;:::i;:::-;10371:63;;10327:117;10122:329;;;;:::o;10457:325::-;10514:6;10563:2;10551:9;10542:7;10538:23;10534:32;10531:119;;;10569:79;;:::i;:::-;10531:119;10689:1;10714:51;10757:7;10748:6;10737:9;10733:22;10714:51;:::i;:::-;10704:61;;10660:115;10457:325;;;;:::o;10788:118::-;10875:24;10893:5;10875:24;:::i;:::-;10870:3;10863:37;10788:118;;:::o;10912:109::-;10993:21;11008:5;10993:21;:::i;:::-;10988:3;10981:34;10912:109;;:::o;11027:360::-;11113:3;11141:38;11173:5;11141:38;:::i;:::-;11195:70;11258:6;11253:3;11195:70;:::i;:::-;11188:77;;11274:52;11319:6;11314:3;11307:4;11300:5;11296:16;11274:52;:::i;:::-;11351:29;11373:6;11351:29;:::i;:::-;11346:3;11342:39;11335:46;;11117:270;11027:360;;;;:::o;11393:364::-;11481:3;11509:39;11542:5;11509:39;:::i;:::-;11564:71;11628:6;11623:3;11564:71;:::i;:::-;11557:78;;11644:52;11689:6;11684:3;11677:4;11670:5;11666:16;11644:52;:::i;:::-;11721:29;11743:6;11721:29;:::i;:::-;11716:3;11712:39;11705:46;;11485:272;11393:364;;;;:::o;11763:377::-;11869:3;11897:39;11930:5;11897:39;:::i;:::-;11952:89;12034:6;12029:3;11952:89;:::i;:::-;11945:96;;12050:52;12095:6;12090:3;12083:4;12076:5;12072:16;12050:52;:::i;:::-;12127:6;12122:3;12118:16;12111:23;;11873:267;11763:377;;;;:::o;12170:845::-;12273:3;12310:5;12304:12;12339:36;12365:9;12339:36;:::i;:::-;12391:89;12473:6;12468:3;12391:89;:::i;:::-;12384:96;;12511:1;12500:9;12496:17;12527:1;12522:137;;;;12673:1;12668:341;;;;12489:520;;12522:137;12606:4;12602:9;12591;12587:25;12582:3;12575:38;12642:6;12637:3;12633:16;12626:23;;12522:137;;12668:341;12735:38;12767:5;12735:38;:::i;:::-;12795:1;12809:154;12823:6;12820:1;12817:13;12809:154;;;12897:7;12891:14;12887:1;12882:3;12878:11;12871:35;12947:1;12938:7;12934:15;12923:26;;12845:4;12842:1;12838:12;12833:17;;12809:154;;;12992:6;12987:3;12983:16;12976:23;;12675:334;;12489:520;;12277:738;;12170:845;;;;:::o;13021:365::-;13163:3;13184:66;13248:1;13243:3;13184:66;:::i;:::-;13177:73;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13021:365;;;:::o;13392:::-;13534:3;13555:66;13619:1;13614:3;13555:66;:::i;:::-;13548:73;;13630:93;13719:3;13630:93;:::i;:::-;13748:2;13743:3;13739:12;13732:19;;13392:365;;;:::o;13763:366::-;13905:3;13926:67;13990:2;13985:3;13926:67;:::i;:::-;13919:74;;14002:93;14091:3;14002:93;:::i;:::-;14120:2;14115:3;14111:12;14104:19;;13763:366;;;:::o;14135:::-;14277:3;14298:67;14362:2;14357:3;14298:67;:::i;:::-;14291:74;;14374:93;14463:3;14374:93;:::i;:::-;14492:2;14487:3;14483:12;14476:19;;14135:366;;;:::o;14507:::-;14649:3;14670:67;14734:2;14729:3;14670:67;:::i;:::-;14663:74;;14746:93;14835:3;14746:93;:::i;:::-;14864:2;14859:3;14855:12;14848:19;;14507:366;;;:::o;14879:::-;15021:3;15042:67;15106:2;15101:3;15042:67;:::i;:::-;15035:74;;15118:93;15207:3;15118:93;:::i;:::-;15236:2;15231:3;15227:12;15220:19;;14879:366;;;:::o;15251:::-;15393:3;15414:67;15478:2;15473:3;15414:67;:::i;:::-;15407:74;;15490:93;15579:3;15490:93;:::i;:::-;15608:2;15603:3;15599:12;15592:19;;15251:366;;;:::o;15623:::-;15765:3;15786:67;15850:2;15845:3;15786:67;:::i;:::-;15779:74;;15862:93;15951:3;15862:93;:::i;:::-;15980:2;15975:3;15971:12;15964:19;;15623:366;;;:::o;15995:118::-;16082:24;16100:5;16082:24;:::i;:::-;16077:3;16070:37;15995:118;;:::o;16119:429::-;16296:3;16318:92;16406:3;16397:6;16318:92;:::i;:::-;16311:99;;16427:95;16518:3;16509:6;16427:95;:::i;:::-;16420:102;;16539:3;16532:10;;16119:429;;;;;:::o;16554:222::-;16647:4;16685:2;16674:9;16670:18;16662:26;;16698:71;16766:1;16755:9;16751:17;16742:6;16698:71;:::i;:::-;16554:222;;;;:::o;16782:640::-;16977:4;17015:3;17004:9;17000:19;16992:27;;17029:71;17097:1;17086:9;17082:17;17073:6;17029:71;:::i;:::-;17110:72;17178:2;17167:9;17163:18;17154:6;17110:72;:::i;:::-;17192;17260:2;17249:9;17245:18;17236:6;17192:72;:::i;:::-;17311:9;17305:4;17301:20;17296:2;17285:9;17281:18;17274:48;17339:76;17410:4;17401:6;17339:76;:::i;:::-;17331:84;;16782:640;;;;;;;:::o;17428:210::-;17515:4;17553:2;17542:9;17538:18;17530:26;;17566:65;17628:1;17617:9;17613:17;17604:6;17566:65;:::i;:::-;17428:210;;;;:::o;17644:313::-;17757:4;17795:2;17784:9;17780:18;17772:26;;17844:9;17838:4;17834:20;17830:1;17819:9;17815:17;17808:47;17872:78;17945:4;17936:6;17872:78;:::i;:::-;17864:86;;17644:313;;;;:::o;17963:419::-;18129:4;18167:2;18156:9;18152:18;18144:26;;18216:9;18210:4;18206:20;18202:1;18191:9;18187:17;18180:47;18244:131;18370:4;18244:131;:::i;:::-;18236:139;;17963:419;;;:::o;18388:::-;18554:4;18592:2;18581:9;18577:18;18569:26;;18641:9;18635:4;18631:20;18627:1;18616:9;18612:17;18605:47;18669:131;18795:4;18669:131;:::i;:::-;18661:139;;18388:419;;;:::o;18813:::-;18979:4;19017:2;19006:9;19002:18;18994:26;;19066:9;19060:4;19056:20;19052:1;19041:9;19037:17;19030:47;19094:131;19220:4;19094:131;:::i;:::-;19086:139;;18813:419;;;:::o;19238:::-;19404:4;19442:2;19431:9;19427:18;19419:26;;19491:9;19485:4;19481:20;19477:1;19466:9;19462:17;19455:47;19519:131;19645:4;19519:131;:::i;:::-;19511:139;;19238:419;;;:::o;19663:::-;19829:4;19867:2;19856:9;19852:18;19844:26;;19916:9;19910:4;19906:20;19902:1;19891:9;19887:17;19880:47;19944:131;20070:4;19944:131;:::i;:::-;19936:139;;19663:419;;;:::o;20088:::-;20254:4;20292:2;20281:9;20277:18;20269:26;;20341:9;20335:4;20331:20;20327:1;20316:9;20312:17;20305:47;20369:131;20495:4;20369:131;:::i;:::-;20361:139;;20088:419;;;:::o;20513:::-;20679:4;20717:2;20706:9;20702:18;20694:26;;20766:9;20760:4;20756:20;20752:1;20741:9;20737:17;20730:47;20794:131;20920:4;20794:131;:::i;:::-;20786:139;;20513:419;;;:::o;20938:::-;21104:4;21142:2;21131:9;21127:18;21119:26;;21191:9;21185:4;21181:20;21177:1;21166:9;21162:17;21155:47;21219:131;21345:4;21219:131;:::i;:::-;21211:139;;20938:419;;;:::o;21363:222::-;21456:4;21494:2;21483:9;21479:18;21471:26;;21507:71;21575:1;21564:9;21560:17;21551:6;21507:71;:::i;:::-;21363:222;;;;:::o;21591:129::-;21625:6;21652:20;;:::i;:::-;21642:30;;21681:33;21709:4;21701:6;21681:33;:::i;:::-;21591:129;;;:::o;21726:75::-;21759:6;21792:2;21786:9;21776:19;;21726:75;:::o;21807:311::-;21884:4;21974:18;21966:6;21963:30;21960:56;;;21996:18;;:::i;:::-;21960:56;22046:4;22038:6;22034:17;22026:25;;22106:4;22100;22096:15;22088:23;;21807:311;;;:::o;22124:309::-;22199:4;22289:18;22281:6;22278:30;22275:56;;;22311:18;;:::i;:::-;22275:56;22361:4;22353:6;22349:17;22341:25;;22421:4;22415;22411:15;22403:23;;22124:309;;;:::o;22439:307::-;22500:4;22590:18;22582:6;22579:30;22576:56;;;22612:18;;:::i;:::-;22576:56;22650:29;22672:6;22650:29;:::i;:::-;22642:37;;22734:4;22728;22724:15;22716:23;;22439:307;;;:::o;22752:308::-;22814:4;22904:18;22896:6;22893:30;22890:56;;;22926:18;;:::i;:::-;22890:56;22964:29;22986:6;22964:29;:::i;:::-;22956:37;;23048:4;23042;23038:15;23030:23;;22752:308;;;:::o;23066:141::-;23115:4;23138:3;23130:11;;23161:3;23158:1;23151:14;23195:4;23192:1;23182:18;23174:26;;23066:141;;;:::o;23213:98::-;23264:6;23298:5;23292:12;23282:22;;23213:98;;;:::o;23317:99::-;23369:6;23403:5;23397:12;23387:22;;23317:99;;;:::o;23422:168::-;23505:11;23539:6;23534:3;23527:19;23579:4;23574:3;23570:14;23555:29;;23422:168;;;;:::o;23596:169::-;23680:11;23714:6;23709:3;23702:19;23754:4;23749:3;23745:14;23730:29;;23596:169;;;;:::o;23771:148::-;23873:11;23910:3;23895:18;;23771:148;;;;:::o;23925:305::-;23965:3;23984:20;24002:1;23984:20;:::i;:::-;23979:25;;24018:20;24036:1;24018:20;:::i;:::-;24013:25;;24172:1;24104:66;24100:74;24097:1;24094:81;24091:107;;;24178:18;;:::i;:::-;24091:107;24222:1;24219;24215:9;24208:16;;23925:305;;;;:::o;24236:185::-;24276:1;24293:20;24311:1;24293:20;:::i;:::-;24288:25;;24327:20;24345:1;24327:20;:::i;:::-;24322:25;;24366:1;24356:35;;24371:18;;:::i;:::-;24356:35;24413:1;24410;24406:9;24401:14;;24236:185;;;;:::o;24427:348::-;24467:7;24490:20;24508:1;24490:20;:::i;:::-;24485:25;;24524:20;24542:1;24524:20;:::i;:::-;24519:25;;24712:1;24644:66;24640:74;24637:1;24634:81;24629:1;24622:9;24615:17;24611:105;24608:131;;;24719:18;;:::i;:::-;24608:131;24767:1;24764;24760:9;24749:20;;24427:348;;;;:::o;24781:191::-;24821:4;24841:20;24859:1;24841:20;:::i;:::-;24836:25;;24875:20;24893:1;24875:20;:::i;:::-;24870:25;;24914:1;24911;24908:8;24905:34;;;24919:18;;:::i;:::-;24905:34;24964:1;24961;24957:9;24949:17;;24781:191;;;;:::o;24978:96::-;25015:7;25044:24;25062:5;25044:24;:::i;:::-;25033:35;;24978:96;;;:::o;25080:90::-;25114:7;25157:5;25150:13;25143:21;25132:32;;25080:90;;;:::o;25176:149::-;25212:7;25252:66;25245:5;25241:78;25230:89;;25176:149;;;:::o;25331:126::-;25368:7;25408:42;25401:5;25397:54;25386:65;;25331:126;;;:::o;25463:77::-;25500:7;25529:5;25518:16;;25463:77;;;:::o;25546:86::-;25581:7;25621:4;25614:5;25610:16;25599:27;;25546:86;;;:::o;25638:154::-;25722:6;25717:3;25712;25699:30;25784:1;25775:6;25770:3;25766:16;25759:27;25638:154;;;:::o;25798:307::-;25866:1;25876:113;25890:6;25887:1;25884:13;25876:113;;;25975:1;25970:3;25966:11;25960:18;25956:1;25951:3;25947:11;25940:39;25912:2;25909:1;25905:10;25900:15;;25876:113;;;26007:6;26004:1;26001:13;25998:101;;;26087:1;26078:6;26073:3;26069:16;26062:27;25998:101;25847:258;25798:307;;;:::o;26111:320::-;26155:6;26192:1;26186:4;26182:12;26172:22;;26239:1;26233:4;26229:12;26260:18;26250:81;;26316:4;26308:6;26304:17;26294:27;;26250:81;26378:2;26370:6;26367:14;26347:18;26344:38;26341:84;;;26397:18;;:::i;:::-;26341:84;26162:269;26111:320;;;:::o;26437:281::-;26520:27;26542:4;26520:27;:::i;:::-;26512:6;26508:40;26650:6;26638:10;26635:22;26614:18;26602:10;26599:34;26596:62;26593:88;;;26661:18;;:::i;:::-;26593:88;26701:10;26697:2;26690:22;26480:238;26437:281;;:::o;26724:233::-;26763:3;26786:24;26804:5;26786:24;:::i;:::-;26777:33;;26832:66;26825:5;26822:77;26819:103;;;26902:18;;:::i;:::-;26819:103;26949:1;26942:5;26938:13;26931:20;;26724:233;;;:::o;26963:176::-;26995:1;27012:20;27030:1;27012:20;:::i;:::-;27007:25;;27046:20;27064:1;27046:20;:::i;:::-;27041:25;;27085:1;27075:35;;27090:18;;:::i;:::-;27075:35;27131:1;27128;27124:9;27119:14;;26963:176;;;;:::o;27145:180::-;27193:77;27190:1;27183:88;27290:4;27287:1;27280:15;27314:4;27311:1;27304:15;27331:180;27379:77;27376:1;27369:88;27476:4;27473:1;27466:15;27500:4;27497:1;27490:15;27517:180;27565:77;27562:1;27555:88;27662:4;27659:1;27652:15;27686:4;27683:1;27676:15;27703:180;27751:77;27748:1;27741:88;27848:4;27845:1;27838:15;27872:4;27869:1;27862:15;27889:180;27937:77;27934:1;27927:88;28034:4;28031:1;28024:15;28058:4;28055:1;28048:15;28075:117;28184:1;28181;28174:12;28198:117;28307:1;28304;28297:12;28321:117;28430:1;28427;28420:12;28444:117;28553:1;28550;28543:12;28567:117;28676:1;28673;28666:12;28690:102;28731:6;28782:2;28778:7;28773:2;28766:5;28762:14;28758:28;28748:38;;28690:102;;;:::o;28798:159::-;28938:11;28934:1;28926:6;28922:14;28915:35;28798:159;:::o;28963:157::-;29103:9;29099:1;29091:6;29087:14;29080:33;28963:157;:::o;29126:225::-;29266:34;29262:1;29254:6;29250:14;29243:58;29335:8;29330:2;29322:6;29318:15;29311:33;29126:225;:::o;29357:164::-;29497:16;29493:1;29485:6;29481:14;29474:40;29357:164;:::o;29527:166::-;29667:18;29663:1;29655:6;29651:14;29644:42;29527:166;:::o;29699:174::-;29839:26;29835:1;29827:6;29823:14;29816:50;29699:174;:::o;29879:171::-;30019:23;30015:1;30007:6;30003:14;29996:47;29879:171;:::o;30056:182::-;30196:34;30192:1;30184:6;30180:14;30173:58;30056:182;:::o;30244:122::-;30317:24;30335:5;30317:24;:::i;:::-;30310:5;30307:35;30297:63;;30356:1;30353;30346:12;30297:63;30244:122;:::o;30372:116::-;30442:21;30457:5;30442:21;:::i;:::-;30435:5;30432:32;30422:60;;30478:1;30475;30468:12;30422:60;30372:116;:::o;30494:120::-;30566:23;30583:5;30566:23;:::i;:::-;30559:5;30556:34;30546:62;;30604:1;30601;30594:12;30546:62;30494:120;:::o;30620:122::-;30693:24;30711:5;30693:24;:::i;:::-;30686:5;30683:35;30673:63;;30732:1;30729;30722:12;30673:63;30620:122;:::o;30748:118::-;30819:22;30835:5;30819:22;:::i;:::-;30812:5;30809:33;30799:61;;30856:1;30853;30846:12;30799:61;30748:118;:::o

Swarm Source

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