ETH Price: $2,675.51 (+10.37%)
Gas: 1 Gwei

Token

UNKNOWN (UNKNOWN)
 

Overview

Max Total Supply

6,302 UNKNOWN

Holders

458

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 UNKNOWN
0xfda47d20e5dda48088fa9b171066c052c758013e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
UnknownNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev 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: erc721a/contracts/IERC721A.sol


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

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

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

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

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

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

// File: erc721a/contracts/ERC721A.sol


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

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 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`
    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 auxillary 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 auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly { // Cast aux without masking.
            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;
    }

    /**
     * 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 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), ".json")) : '';
    }

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

    /**
     * @dev Casts the address to uint256 without masking.
     */
    function _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev Casts the boolean to uint256 without branching.
     */
    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

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

        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-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.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.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _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] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

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

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

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

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _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] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

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

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

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

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

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // 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] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;

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

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

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];

        // 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] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED | 
                BITMASK_NEXT_INITIALIZED;

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

// File: Unknown.sol



pragma solidity ^0.8.4;



contract UnknownNFT is ERC721A, Ownable {
    address public bossAddress;
    uint256 public maxSupply;
    uint256 public threshold;

    bool public allowPublicMint; 
    bool public allowWhitelistMint;
    
    uint256 public whitelistPrice;
    uint256 public publicPrice;

    mapping( address => uint256 ) public whitelist;

    uint256 public upperQuantityLimit;

    string public baseURI;

    constructor(
        address devMintAddress_,
        uint256 devMintCount_,
        address bossAddress_,
        string memory baseURI_
    ) ERC721A("UNKNOWN", "UNKNOWN") {
        maxSupply = 20000;
        threshold = 6666;
        whitelistPrice = 0 ether;
        publicPrice = 0 ether;
        allowPublicMint = false;
        allowWhitelistMint = false;
        upperQuantityLimit = 1;
        devMint(devMintCount_, devMintAddress_);
        bossAddress = bossAddress_;
        baseURI = baseURI_;
    }

    function flipAllowWhitelistMint() public onlyOwner {
        allowWhitelistMint = !allowWhitelistMint;
    }

    function flipAllowPublicMint() public onlyOwner {
        allowPublicMint = !allowPublicMint;
    }

    function setWhitelist( address[] memory newWhitelist ) external onlyOwner {
        for( uint256 i = 0 ; i < newWhitelist.length ; i++ ) {
            whitelist[newWhitelist[i]] = 1 ;
        }
    }

    function deleteWhitelist( address[] memory oldWhitelist ) external onlyOwner {
        for( uint256 i = 0 ; i < oldWhitelist.length ; i++ ) {
            whitelist[oldWhitelist[i]] = 0 ;
        }
    }

    function whitelistMint(
        uint256 quantity
    ) external payable {
        require( whitelist[msg.sender] > 0, "UNKNOWN: not permission to whitelist mint" );
        require( allowWhitelistMint, "UNKNOWN: not allow to mint now" );
        require( quantity >= 1, "UNKNOWN: quantity must be bigger then 1" );
        require( quantity <= upperQuantityLimit, string(abi.encodePacked("UNKNOWN: quantity must be smaller then upper quantity limit", upperQuantityLimit)));
        require( totalSupply() + quantity <= maxSupply, "UNKNOWN: out of max supply" );
        require( totalSupply() + quantity <= threshold, "UNKNOWN: out of current wave" );
        require( msg.value >= whitelistPrice * quantity, "UNKNOWN: not enough ether" );
        whitelist[msg.sender] = whitelist[msg.sender] - 1;
        _safeMint(msg.sender, quantity);
    }

    function publicMint(
        uint256 quantity
    ) external payable {
        require( allowPublicMint, "UNKNOWN: not allow to mint now" );
        require( quantity >= 1, "UNKNOWN: quantity must be bigger then 1" );
        require( quantity <= upperQuantityLimit, string(abi.encodePacked("UNKNOWN: quantity must be smaller then upper quantity limit", upperQuantityLimit)));
        require( totalSupply() + quantity <= maxSupply, "UNKNOWN: out of max supply" );
        require( totalSupply() + quantity <= threshold, "UNKNOWN: out of current wave" );
        require( msg.value >= publicPrice * quantity, "UNKNOWN: not enough ether" );
        _safeMint(msg.sender, quantity);
    }

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

    function airdrop(
        address to,
        uint256 quantity
    ) external onlyOwner {
        require( totalSupply() + quantity <= maxSupply, "UNKNOWN: out of max supply" );
        require( totalSupply() + quantity <= threshold, "UNKNOWN: out of current wave" );
        _safeMint(to, quantity);
    }

    function setTokenURI(
        string memory newBaseURI
    ) external onlyOwner {
        baseURI = newBaseURI;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId), ".json")) : '';
    }

    function setWhitelistPrice(
        uint256 newWhitelistPrice
    ) external onlyOwner {
        whitelistPrice = newWhitelistPrice;
    }

    function setPublicPrice(
        uint256 newPublicPrice
    ) external onlyOwner {
        publicPrice = newPublicPrice;
    }

    function setThreshold(
        uint256 newThreshold
    ) external onlyOwner {
        threshold = newThreshold;
    }

    function setUpperQuantityLimit(
        uint256 newUpperQuantityLimit
    ) external onlyOwner {
        upperQuantityLimit = newUpperQuantityLimit;
    }

    function setBossAddress(
        address newBossAddress
    ) external onlyOwner {
        bossAddress = newBossAddress;
    }

    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "UNKNOWN: insufficient balance");
        payable(bossAddress).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"devMintAddress_","type":"address"},{"internalType":"uint256","name":"devMintCount_","type":"uint256"},{"internalType":"address","name":"bossAddress_","type":"address"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowPublicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowWhitelistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bossAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"oldWhitelist","type":"address[]"}],"name":"deleteWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipAllowPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipAllowWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicPrice","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":"address","name":"newBossAddress","type":"address"}],"name":"setBossAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPublicPrice","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newUpperQuantityLimit","type":"uint256"}],"name":"setUpperQuantityLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newWhitelist","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWhitelistPrice","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upperQuantityLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162004af538038062004af58339818101604052810190620000379190620008e4565b6040518060400160405280600781526020017f554e4b4e4f574e000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f554e4b4e4f574e000000000000000000000000000000000000000000000000008152508160029080519060200190620000bb92919062000771565b508060039080519060200190620000d492919062000771565b50620000e5620001e360201b60201c565b60008190555050506200010d62000101620001e860201b60201c565b620001f060201b60201c565b614e20600a81905550611a0a600b819055506000600d819055506000600e819055506000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff02191690831515021790555060016010819055506200017f8385620002b660201b60201c565b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060119080519060200190620001d892919062000771565b505050505062000cb6565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c88183620002cc60201b60201c565b5050565b620002ee828260405180602001604052806000815250620002f260201b60201c565b5050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000360576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156200039c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620003b16000858386620005d760201b60201c565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16200041e60018514620005dd60201b60201c565b901b60a042901b6200043686620005e760201b60201c565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b1462000547575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620004f36000878480600101955087620005f160201b60201c565b6200052a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106200047c5782600054146200054157600080fd5b620005b3565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821062000548575b816000819055505050620005d160008583866200076360201b60201c565b50505050565b50505050565b6000819050919050565b6000819050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200061f6200076960201b60201c565b8786866040518563ffffffff1660e01b815260040162000643949392919062000a0a565b602060405180830381600087803b1580156200065e57600080fd5b505af19250505080156200069257506040513d601f19601f820116820180604052508101906200068f919062000975565b60015b62000710573d8060008114620006c5576040519150601f19603f3d011682016040523d82523d6000602084013e620006ca565b606091505b5060008151141562000708576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600033905090565b8280546200077f9062000b79565b90600052602060002090601f016020900481019282620007a35760008555620007ef565b82601f10620007be57805160ff1916838001178555620007ef565b82800160010185558215620007ef579182015b82811115620007ee578251825591602001919060010190620007d1565b5b509050620007fe919062000802565b5090565b5b808211156200081d57600081600090555060010162000803565b5090565b600062000838620008328462000a87565b62000a5e565b90508281526020810184848401111562000857576200085662000c48565b5b6200086484828562000b43565b509392505050565b6000815190506200087d8162000c68565b92915050565b600081519050620008948162000c82565b92915050565b600082601f830112620008b257620008b162000c43565b5b8151620008c484826020860162000821565b91505092915050565b600081519050620008de8162000c9c565b92915050565b6000806000806080858703121562000901576200090062000c52565b5b600062000911878288016200086c565b94505060206200092487828801620008cd565b935050604062000937878288016200086c565b925050606085015167ffffffffffffffff8111156200095b576200095a62000c4d565b5b62000969878288016200089a565b91505092959194509250565b6000602082840312156200098e576200098d62000c52565b5b60006200099e8482850162000883565b91505092915050565b620009b28162000ad9565b82525050565b6000620009c58262000abd565b620009d1818562000ac8565b9350620009e381856020860162000b43565b620009ee8162000c57565b840191505092915050565b62000a048162000b39565b82525050565b600060808201905062000a216000830187620009a7565b62000a306020830186620009a7565b62000a3f6040830185620009f9565b818103606083015262000a538184620009b8565b905095945050505050565b600062000a6a62000a7d565b905062000a78828262000baf565b919050565b6000604051905090565b600067ffffffffffffffff82111562000aa55762000aa462000c14565b5b62000ab08262000c57565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600062000ae68262000b19565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000b6357808201518184015260208101905062000b46565b8381111562000b73576000848401525b50505050565b6000600282049050600182168062000b9257607f821691505b6020821081141562000ba95762000ba862000be5565b5b50919050565b62000bba8262000c57565b810181811067ffffffffffffffff8211171562000bdc5762000bdb62000c14565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b62000c738162000ad9565b811462000c7f57600080fd5b50565b62000c8d8162000aed565b811462000c9957600080fd5b50565b62000ca78162000b39565b811462000cb357600080fd5b50565b613e2f8062000cc66000396000f3fe6080604052600436106102465760003560e01c8063868ff4a211610139578063c6275255116100b6578063f2fde38b1161007a578063f2fde38b14610824578063f42176481461084d578063f5f55cd714610876578063f9c4ba48146108a1578063fc1a1c36146108ca578063ff7aa51f146108f557610246565b8063c62752551461072d578063c87b56dd14610756578063d5abeb0114610793578063e0df5b6f146107be578063e985e9c5146107e757610246565b80639b19251a116100fd5780639b19251a146106485780639edcc31014610685578063a22cb465146106b0578063a945bf80146106d9578063b88d4fde1461070457610246565b8063868ff4a2146105845780638ba4cc3c146105a05780638da5cb5b146105c957806395d89b41146105f4578063960bfe041461061f57610246565b80633ccfd60b116101c757806370a082311161018b57806370a08231146104b5578063715018a6146104f2578063717d57d314610509578063740f737c1461053257806374d6bc7a1461055b57610246565b80633ccfd60b146103e257806342842e0e146103f957806342cde4e8146104225780636352211e1461044d5780636c0360eb1461048a57610246565b806318160ddd1161020e57806318160ddd1461033057806323b872dd1461035b5780632c97c98f146103845780632db115441461039b57806331b6e479146103b757610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806312798d6a14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613116565b610920565b60405161027f9190613589565b60405180910390f35b34801561029457600080fd5b5061029d6109b2565b6040516102aa91906135a4565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906131b9565b610a44565b6040516102e79190613522565b60405180910390f35b3480156102fc57600080fd5b506103176004803603810190610312919061308d565b610ac0565b005b34801561032557600080fd5b5061032e610c67565b005b34801561033c57600080fd5b50610345610d0f565b60405161035291906136e6565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190612f77565b610d26565b005b34801561039057600080fd5b50610399610d36565b005b6103b560048036038101906103b091906131b9565b610dde565b005b3480156103c357600080fd5b506103cc610fe6565b6040516103d991906136e6565b60405180910390f35b3480156103ee57600080fd5b506103f7610fec565b005b34801561040557600080fd5b50610420600480360381019061041b9190612f77565b611116565b005b34801561042e57600080fd5b50610437611136565b60405161044491906136e6565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f91906131b9565b61113c565b6040516104819190613522565b60405180910390f35b34801561049657600080fd5b5061049f61114e565b6040516104ac91906135a4565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612f0a565b6111dc565b6040516104e991906136e6565b60405180910390f35b3480156104fe57600080fd5b50610507611295565b005b34801561051557600080fd5b50610530600480360381019061052b91906131b9565b61131d565b005b34801561053e57600080fd5b5061055960048036038101906105549190612f0a565b6113a3565b005b34801561056757600080fd5b50610582600480360381019061057d91906131b9565b611463565b005b61059e600480360381019061059991906131b9565b6114e9565b005b3480156105ac57600080fd5b506105c760048036038101906105c2919061308d565b611802565b005b3480156105d557600080fd5b506105de61193a565b6040516105eb9190613522565b60405180910390f35b34801561060057600080fd5b50610609611964565b60405161061691906135a4565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906131b9565b6119f6565b005b34801561065457600080fd5b5061066f600480360381019061066a9190612f0a565b611a7c565b60405161067c91906136e6565b60405180910390f35b34801561069157600080fd5b5061069a611a94565b6040516106a79190613589565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061304d565b611aa7565b005b3480156106e557600080fd5b506106ee611c1f565b6040516106fb91906136e6565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190612fca565b611c25565b005b34801561073957600080fd5b50610754600480360381019061074f91906131b9565b611c98565b005b34801561076257600080fd5b5061077d600480360381019061077891906131b9565b611d1e565b60405161078a91906135a4565b60405180910390f35b34801561079f57600080fd5b506107a8611dbe565b6040516107b591906136e6565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190613170565b611dc4565b005b3480156107f357600080fd5b5061080e60048036038101906108099190612f37565b611e5a565b60405161081b9190613589565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190612f0a565b611eee565b005b34801561085957600080fd5b50610874600480360381019061086f91906130cd565b611fe6565b005b34801561088257600080fd5b5061088b6120e4565b6040516108989190613522565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c391906130cd565b61210a565b005b3480156108d657600080fd5b506108df612208565b6040516108ec91906136e6565b60405180910390f35b34801561090157600080fd5b5061090a61220e565b6040516109179190613589565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ab5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546109c1906139a6565b80601f01602080910402602001604051908101604052809291908181526020018280546109ed906139a6565b8015610a3a5780601f10610a0f57610100808354040283529160200191610a3a565b820191906000526020600020905b815481529060010190602001808311610a1d57829003601f168201915b5050505050905090565b6000610a4f82612221565b610a85576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610acb82612280565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b33576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b5261234e565b73ffffffffffffffffffffffffffffffffffffffff1614610bb557610b7e81610b7961234e565b611e5a565b610bb4576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610c6f612356565b73ffffffffffffffffffffffffffffffffffffffff16610c8d61193a565b73ffffffffffffffffffffffffffffffffffffffff1614610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613646565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000610d1961235e565b6001546000540303905090565b610d31838383612363565b505050565b610d3e612356565b73ffffffffffffffffffffffffffffffffffffffff16610d5c61193a565b73ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613646565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff16610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e24906135c6565b60405180910390fd5b6001811015610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e68906136c6565b60405180910390fd5b601054811115601054604051602001610e8a91906134fc565b60405160208183030381529060405290610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed191906135a4565b60405180910390fd5b50600a5481610ee7610d0f565b610ef1919061380c565b1115610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990613606565b60405180910390fd5b600b5481610f3e610d0f565b610f48919061380c565b1115610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090613626565b60405180910390fd5b80600e54610f979190613862565b341015610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613666565b60405180910390fd5b610fe3338261270d565b50565b60105481565b610ff4612356565b73ffffffffffffffffffffffffffffffffffffffff1661101261193a565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90613646565b60405180910390fd5b600047116110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a2906136a6565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611113573d6000803e3d6000fd5b50565b61113183838360405180602001604052806000815250611c25565b505050565b600b5481565b600061114782612280565b9050919050565b6011805461115b906139a6565b80601f0160208091040260200160405190810160405280929190818152602001828054611187906139a6565b80156111d45780601f106111a9576101008083540402835291602001916111d4565b820191906000526020600020905b8154815290600101906020018083116111b757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611244576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b61129d612356565b73ffffffffffffffffffffffffffffffffffffffff166112bb61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613646565b60405180910390fd5b61131b600061272b565b565b611325612356565b73ffffffffffffffffffffffffffffffffffffffff1661134361193a565b73ffffffffffffffffffffffffffffffffffffffff1614611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090613646565b60405180910390fd5b80600d8190555050565b6113ab612356565b73ffffffffffffffffffffffffffffffffffffffff166113c961193a565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690613646565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61146b612356565b73ffffffffffffffffffffffffffffffffffffffff1661148961193a565b73ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d690613646565b60405180910390fd5b8060108190555050565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613686565b60405180910390fd5b600c60019054906101000a900460ff166115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906135c6565b60405180910390fd5b60018110156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f5906136c6565b60405180910390fd5b60105481111560105460405160200161161791906134fc565b60405160208183030381529060405290611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e91906135a4565b60405180910390fd5b50600a5481611674610d0f565b61167e919061380c565b11156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b690613606565b60405180910390fd5b600b54816116cb610d0f565b6116d5919061380c565b1115611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d90613626565b60405180910390fd5b80600d546117249190613862565b341015611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90613666565b60405180910390fd5b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117b291906138bc565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ff338261270d565b50565b61180a612356565b73ffffffffffffffffffffffffffffffffffffffff1661182861193a565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613646565b60405180910390fd5b600a548161188a610d0f565b611894919061380c565b11156118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90613606565b60405180910390fd5b600b54816118e1610d0f565b6118eb919061380c565b111561192c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192390613626565b60405180910390fd5b611936828261270d565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611973906139a6565b80601f016020809104026020016040519081016040528092919081815260200182805461199f906139a6565b80156119ec5780601f106119c1576101008083540402835291602001916119ec565b820191906000526020600020905b8154815290600101906020018083116119cf57829003601f168201915b5050505050905090565b6119fe612356565b73ffffffffffffffffffffffffffffffffffffffff16611a1c61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990613646565b60405180910390fd5b80600b8190555050565b600f6020528060005260406000206000915090505481565b600c60009054906101000a900460ff1681565b611aaf61234e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b14576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611b2161234e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bce61234e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c139190613589565b60405180910390a35050565b600e5481565b611c30848484612363565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611c9257611c5b848484846127f1565b611c91576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611ca0612356565b73ffffffffffffffffffffffffffffffffffffffff16611cbe61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90613646565b60405180910390fd5b80600e8190555050565b6060611d2982612221565b611d5f576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060118054611d6e906139a6565b90501415611d8b5760405180602001604052806000815250611db7565b6011611d9683612951565b604051602001611da79291906134cd565b6040516020818303038152906040525b9050919050565b600a5481565b611dcc612356565b73ffffffffffffffffffffffffffffffffffffffff16611dea61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790613646565b60405180910390fd5b8060119080519060200190611e56929190612c80565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ef6612356565b73ffffffffffffffffffffffffffffffffffffffff16611f1461193a565b73ffffffffffffffffffffffffffffffffffffffff1614611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190613646565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd1906135e6565b60405180910390fd5b611fe38161272b565b50565b611fee612356565b73ffffffffffffffffffffffffffffffffffffffff1661200c61193a565b73ffffffffffffffffffffffffffffffffffffffff1614612062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205990613646565b60405180910390fd5b60005b81518110156120e0576001600f600084848151811061208757612086613aba565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806120d890613a09565b915050612065565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612112612356565b73ffffffffffffffffffffffffffffffffffffffff1661213061193a565b73ffffffffffffffffffffffffffffffffffffffff1614612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d90613646565b60405180910390fd5b60005b8151811015612204576000600f60008484815181106121ab576121aa613aba565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806121fc90613a09565b915050612189565b5050565b600d5481565b600c60019054906101000a900460ff1681565b60008161222c61235e565b1115801561223b575060005482105b8015612279575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000808290508061228f61235e565b11612317576000548110156123165760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612314575b600081141561230a5760046000836001900393508381526020019081526020016000205490506122df565b8092505050612349565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b600090565b600061236e82612280565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123d5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123f661234e565b73ffffffffffffffffffffffffffffffffffffffff16148061242557506124248561241f61234e565b611e5a565b5b8061246a575061243361234e565b73ffffffffffffffffffffffffffffffffffffffff1661245284610a44565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806124a3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561250a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61251785858560016129ab565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b612614866129b1565b1717600460008581526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008316141561269e57600060018401905060006004600083815260200190815260200160002054141561269c57600054811461269b578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461270685858560016129bb565b5050505050565b6127278282604051806020016040528060008152506129c1565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261281761234e565b8786866040518563ffffffff1660e01b8152600401612839949392919061353d565b602060405180830381600087803b15801561285357600080fd5b505af192505050801561288457506040513d601f19601f820116820180604052508101906128819190613143565b60015b6128fe573d80600081146128b4576040519150601f19603f3d011682016040523d82523d6000602084013e6128b9565b606091505b506000815114156128f6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561299757600183039250600a81066030018353600a81049050612977565b508181036020830392508083525050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a2e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612a69576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a7660008583866129ab565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612adb60018514612c76565b901b60a042901b612aeb866129b1565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612bef575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b9f60008784806001019550876127f1565b612bd5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612b30578260005414612bea57600080fd5b612c5a565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612bf0575b816000819055505050612c7060008583866129bb565b50505050565b6000819050919050565b828054612c8c906139a6565b90600052602060002090601f016020900481019282612cae5760008555612cf5565b82601f10612cc757805160ff1916838001178555612cf5565b82800160010185558215612cf5579182015b82811115612cf4578251825591602001919060010190612cd9565b5b509050612d029190612d06565b5090565b5b80821115612d1f576000816000905550600101612d07565b5090565b6000612d36612d3184613726565b613701565b90508083825260208201905082856020860282011115612d5957612d58613b1d565b5b60005b85811015612d895781612d6f8882612e17565b845260208401935060208301925050600181019050612d5c565b5050509392505050565b6000612da6612da184613752565b613701565b905082815260208101848484011115612dc257612dc1613b22565b5b612dcd848285613964565b509392505050565b6000612de8612de384613783565b613701565b905082815260208101848484011115612e0457612e03613b22565b5b612e0f848285613964565b509392505050565b600081359050612e2681613d9d565b92915050565b600082601f830112612e4157612e40613b18565b5b8135612e51848260208601612d23565b91505092915050565b600081359050612e6981613db4565b92915050565b600081359050612e7e81613dcb565b92915050565b600081519050612e9381613dcb565b92915050565b600082601f830112612eae57612ead613b18565b5b8135612ebe848260208601612d93565b91505092915050565b600082601f830112612edc57612edb613b18565b5b8135612eec848260208601612dd5565b91505092915050565b600081359050612f0481613de2565b92915050565b600060208284031215612f2057612f1f613b2c565b5b6000612f2e84828501612e17565b91505092915050565b60008060408385031215612f4e57612f4d613b2c565b5b6000612f5c85828601612e17565b9250506020612f6d85828601612e17565b9150509250929050565b600080600060608486031215612f9057612f8f613b2c565b5b6000612f9e86828701612e17565b9350506020612faf86828701612e17565b9250506040612fc086828701612ef5565b9150509250925092565b60008060008060808587031215612fe457612fe3613b2c565b5b6000612ff287828801612e17565b945050602061300387828801612e17565b935050604061301487828801612ef5565b925050606085013567ffffffffffffffff81111561303557613034613b27565b5b61304187828801612e99565b91505092959194509250565b6000806040838503121561306457613063613b2c565b5b600061307285828601612e17565b925050602061308385828601612e5a565b9150509250929050565b600080604083850312156130a4576130a3613b2c565b5b60006130b285828601612e17565b92505060206130c385828601612ef5565b9150509250929050565b6000602082840312156130e3576130e2613b2c565b5b600082013567ffffffffffffffff81111561310157613100613b27565b5b61310d84828501612e2c565b91505092915050565b60006020828403121561312c5761312b613b2c565b5b600061313a84828501612e6f565b91505092915050565b60006020828403121561315957613158613b2c565b5b600061316784828501612e84565b91505092915050565b60006020828403121561318657613185613b2c565b5b600082013567ffffffffffffffff8111156131a4576131a3613b27565b5b6131b084828501612ec7565b91505092915050565b6000602082840312156131cf576131ce613b2c565b5b60006131dd84828501612ef5565b91505092915050565b6131ef816138f0565b82525050565b6131fe81613902565b82525050565b600061320f826137c9565b61321981856137df565b9350613229818560208601613973565b61323281613b31565b840191505092915050565b6000613248826137d4565b61325281856137f0565b9350613262818560208601613973565b61326b81613b31565b840191505092915050565b6000613281826137d4565b61328b8185613801565b935061329b818560208601613973565b80840191505092915050565b600081546132b4816139a6565b6132be8186613801565b945060018216600081146132d957600181146132ea5761331d565b60ff1983168652818601935061331d565b6132f3856137b4565b60005b83811015613315578154818901526001820191506020810190506132f6565b838801955050505b50505092915050565b6000613333601e836137f0565b915061333e82613b42565b602082019050919050565b60006133566026836137f0565b915061336182613b6b565b604082019050919050565b6000613379601a836137f0565b915061338482613bba565b602082019050919050565b600061339c601c836137f0565b91506133a782613be3565b602082019050919050565b60006133bf600583613801565b91506133ca82613c0c565b600582019050919050565b60006133e26020836137f0565b91506133ed82613c35565b602082019050919050565b60006134056019836137f0565b915061341082613c5e565b602082019050919050565b60006134286029836137f0565b915061343382613c87565b604082019050919050565b600061344b603b83613801565b915061345682613cd6565b603b82019050919050565b600061346e601d836137f0565b915061347982613d25565b602082019050919050565b60006134916027836137f0565b915061349c82613d4e565b604082019050919050565b6134b08161395a565b82525050565b6134c76134c28261395a565b613a52565b82525050565b60006134d982856132a7565b91506134e58284613276565b91506134f0826133b2565b91508190509392505050565b60006135078261343e565b915061351382846134b6565b60208201915081905092915050565b600060208201905061353760008301846131e6565b92915050565b600060808201905061355260008301876131e6565b61355f60208301866131e6565b61356c60408301856134a7565b818103606083015261357e8184613204565b905095945050505050565b600060208201905061359e60008301846131f5565b92915050565b600060208201905081810360008301526135be818461323d565b905092915050565b600060208201905081810360008301526135df81613326565b9050919050565b600060208201905081810360008301526135ff81613349565b9050919050565b6000602082019050818103600083015261361f8161336c565b9050919050565b6000602082019050818103600083015261363f8161338f565b9050919050565b6000602082019050818103600083015261365f816133d5565b9050919050565b6000602082019050818103600083015261367f816133f8565b9050919050565b6000602082019050818103600083015261369f8161341b565b9050919050565b600060208201905081810360008301526136bf81613461565b9050919050565b600060208201905081810360008301526136df81613484565b9050919050565b60006020820190506136fb60008301846134a7565b92915050565b600061370b61371c565b905061371782826139d8565b919050565b6000604051905090565b600067ffffffffffffffff82111561374157613740613ae9565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561376d5761376c613ae9565b5b61377682613b31565b9050602081019050919050565b600067ffffffffffffffff82111561379e5761379d613ae9565b5b6137a782613b31565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138178261395a565b91506138228361395a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561385757613856613a5c565b5b828201905092915050565b600061386d8261395a565b91506138788361395a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b1576138b0613a5c565b5b828202905092915050565b60006138c78261395a565b91506138d28361395a565b9250828210156138e5576138e4613a5c565b5b828203905092915050565b60006138fb8261393a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613991578082015181840152602081019050613976565b838111156139a0576000848401525b50505050565b600060028204905060018216806139be57607f821691505b602082108114156139d2576139d1613a8b565b5b50919050565b6139e182613b31565b810181811067ffffffffffffffff82111715613a00576139ff613ae9565b5b80604052505050565b6000613a148261395a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a4757613a46613a5c565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f554e4b4e4f574e3a206e6f7420616c6c6f7720746f206d696e74206e6f770000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f554e4b4e4f574e3a206f7574206f66206d617820737570706c79000000000000600082015250565b7f554e4b4e4f574e3a206f7574206f662063757272656e74207761766500000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f554e4b4e4f574e3a206e6f7420656e6f75676820657468657200000000000000600082015250565b7f554e4b4e4f574e3a206e6f74207065726d697373696f6e20746f20776869746560008201527f6c697374206d696e740000000000000000000000000000000000000000000000602082015250565b7f554e4b4e4f574e3a207175616e74697479206d75737420626520736d616c6c6560008201527f72207468656e207570706572207175616e74697479206c696d69740000000000602082015250565b7f554e4b4e4f574e3a20696e73756666696369656e742062616c616e6365000000600082015250565b7f554e4b4e4f574e3a207175616e74697479206d7573742062652062696767657260008201527f207468656e203100000000000000000000000000000000000000000000000000602082015250565b613da6816138f0565b8114613db157600080fd5b50565b613dbd81613902565b8114613dc857600080fd5b50565b613dd48161390e565b8114613ddf57600080fd5b50565b613deb8161395a565b8114613df657600080fd5b5056fea26469706673582212204db59c3eb84032f1de988ddc54db537836b1e5f1513d6157eab103513117b17964736f6c634300080700330000000000000000000000004541a442cf0c6e906414a3776e8eaa32a0acebc50000000000000000000000000000000000000000000000000000000000000bcd00000000000000000000000029c62f81038e16f892d9626cddcaa164007c944500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53424c313350394e4a6d6b5851476f694667353643567557786f4753783443734e735965563847774c3763392f00000000000000000000

Deployed Bytecode

0x6080604052600436106102465760003560e01c8063868ff4a211610139578063c6275255116100b6578063f2fde38b1161007a578063f2fde38b14610824578063f42176481461084d578063f5f55cd714610876578063f9c4ba48146108a1578063fc1a1c36146108ca578063ff7aa51f146108f557610246565b8063c62752551461072d578063c87b56dd14610756578063d5abeb0114610793578063e0df5b6f146107be578063e985e9c5146107e757610246565b80639b19251a116100fd5780639b19251a146106485780639edcc31014610685578063a22cb465146106b0578063a945bf80146106d9578063b88d4fde1461070457610246565b8063868ff4a2146105845780638ba4cc3c146105a05780638da5cb5b146105c957806395d89b41146105f4578063960bfe041461061f57610246565b80633ccfd60b116101c757806370a082311161018b57806370a08231146104b5578063715018a6146104f2578063717d57d314610509578063740f737c1461053257806374d6bc7a1461055b57610246565b80633ccfd60b146103e257806342842e0e146103f957806342cde4e8146104225780636352211e1461044d5780636c0360eb1461048a57610246565b806318160ddd1161020e57806318160ddd1461033057806323b872dd1461035b5780632c97c98f146103845780632db115441461039b57806331b6e479146103b757610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806312798d6a14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613116565b610920565b60405161027f9190613589565b60405180910390f35b34801561029457600080fd5b5061029d6109b2565b6040516102aa91906135a4565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906131b9565b610a44565b6040516102e79190613522565b60405180910390f35b3480156102fc57600080fd5b506103176004803603810190610312919061308d565b610ac0565b005b34801561032557600080fd5b5061032e610c67565b005b34801561033c57600080fd5b50610345610d0f565b60405161035291906136e6565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190612f77565b610d26565b005b34801561039057600080fd5b50610399610d36565b005b6103b560048036038101906103b091906131b9565b610dde565b005b3480156103c357600080fd5b506103cc610fe6565b6040516103d991906136e6565b60405180910390f35b3480156103ee57600080fd5b506103f7610fec565b005b34801561040557600080fd5b50610420600480360381019061041b9190612f77565b611116565b005b34801561042e57600080fd5b50610437611136565b60405161044491906136e6565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f91906131b9565b61113c565b6040516104819190613522565b60405180910390f35b34801561049657600080fd5b5061049f61114e565b6040516104ac91906135a4565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612f0a565b6111dc565b6040516104e991906136e6565b60405180910390f35b3480156104fe57600080fd5b50610507611295565b005b34801561051557600080fd5b50610530600480360381019061052b91906131b9565b61131d565b005b34801561053e57600080fd5b5061055960048036038101906105549190612f0a565b6113a3565b005b34801561056757600080fd5b50610582600480360381019061057d91906131b9565b611463565b005b61059e600480360381019061059991906131b9565b6114e9565b005b3480156105ac57600080fd5b506105c760048036038101906105c2919061308d565b611802565b005b3480156105d557600080fd5b506105de61193a565b6040516105eb9190613522565b60405180910390f35b34801561060057600080fd5b50610609611964565b60405161061691906135a4565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906131b9565b6119f6565b005b34801561065457600080fd5b5061066f600480360381019061066a9190612f0a565b611a7c565b60405161067c91906136e6565b60405180910390f35b34801561069157600080fd5b5061069a611a94565b6040516106a79190613589565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061304d565b611aa7565b005b3480156106e557600080fd5b506106ee611c1f565b6040516106fb91906136e6565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190612fca565b611c25565b005b34801561073957600080fd5b50610754600480360381019061074f91906131b9565b611c98565b005b34801561076257600080fd5b5061077d600480360381019061077891906131b9565b611d1e565b60405161078a91906135a4565b60405180910390f35b34801561079f57600080fd5b506107a8611dbe565b6040516107b591906136e6565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190613170565b611dc4565b005b3480156107f357600080fd5b5061080e60048036038101906108099190612f37565b611e5a565b60405161081b9190613589565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190612f0a565b611eee565b005b34801561085957600080fd5b50610874600480360381019061086f91906130cd565b611fe6565b005b34801561088257600080fd5b5061088b6120e4565b6040516108989190613522565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c391906130cd565b61210a565b005b3480156108d657600080fd5b506108df612208565b6040516108ec91906136e6565b60405180910390f35b34801561090157600080fd5b5061090a61220e565b6040516109179190613589565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ab5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546109c1906139a6565b80601f01602080910402602001604051908101604052809291908181526020018280546109ed906139a6565b8015610a3a5780601f10610a0f57610100808354040283529160200191610a3a565b820191906000526020600020905b815481529060010190602001808311610a1d57829003601f168201915b5050505050905090565b6000610a4f82612221565b610a85576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610acb82612280565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b33576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b5261234e565b73ffffffffffffffffffffffffffffffffffffffff1614610bb557610b7e81610b7961234e565b611e5a565b610bb4576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610c6f612356565b73ffffffffffffffffffffffffffffffffffffffff16610c8d61193a565b73ffffffffffffffffffffffffffffffffffffffff1614610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613646565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000610d1961235e565b6001546000540303905090565b610d31838383612363565b505050565b610d3e612356565b73ffffffffffffffffffffffffffffffffffffffff16610d5c61193a565b73ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613646565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff16610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e24906135c6565b60405180910390fd5b6001811015610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e68906136c6565b60405180910390fd5b601054811115601054604051602001610e8a91906134fc565b60405160208183030381529060405290610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed191906135a4565b60405180910390fd5b50600a5481610ee7610d0f565b610ef1919061380c565b1115610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990613606565b60405180910390fd5b600b5481610f3e610d0f565b610f48919061380c565b1115610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090613626565b60405180910390fd5b80600e54610f979190613862565b341015610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613666565b60405180910390fd5b610fe3338261270d565b50565b60105481565b610ff4612356565b73ffffffffffffffffffffffffffffffffffffffff1661101261193a565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90613646565b60405180910390fd5b600047116110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a2906136a6565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611113573d6000803e3d6000fd5b50565b61113183838360405180602001604052806000815250611c25565b505050565b600b5481565b600061114782612280565b9050919050565b6011805461115b906139a6565b80601f0160208091040260200160405190810160405280929190818152602001828054611187906139a6565b80156111d45780601f106111a9576101008083540402835291602001916111d4565b820191906000526020600020905b8154815290600101906020018083116111b757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611244576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b61129d612356565b73ffffffffffffffffffffffffffffffffffffffff166112bb61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613646565b60405180910390fd5b61131b600061272b565b565b611325612356565b73ffffffffffffffffffffffffffffffffffffffff1661134361193a565b73ffffffffffffffffffffffffffffffffffffffff1614611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090613646565b60405180910390fd5b80600d8190555050565b6113ab612356565b73ffffffffffffffffffffffffffffffffffffffff166113c961193a565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690613646565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61146b612356565b73ffffffffffffffffffffffffffffffffffffffff1661148961193a565b73ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d690613646565b60405180910390fd5b8060108190555050565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613686565b60405180910390fd5b600c60019054906101000a900460ff166115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906135c6565b60405180910390fd5b60018110156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f5906136c6565b60405180910390fd5b60105481111560105460405160200161161791906134fc565b60405160208183030381529060405290611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e91906135a4565b60405180910390fd5b50600a5481611674610d0f565b61167e919061380c565b11156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b690613606565b60405180910390fd5b600b54816116cb610d0f565b6116d5919061380c565b1115611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d90613626565b60405180910390fd5b80600d546117249190613862565b341015611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90613666565b60405180910390fd5b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117b291906138bc565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ff338261270d565b50565b61180a612356565b73ffffffffffffffffffffffffffffffffffffffff1661182861193a565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613646565b60405180910390fd5b600a548161188a610d0f565b611894919061380c565b11156118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90613606565b60405180910390fd5b600b54816118e1610d0f565b6118eb919061380c565b111561192c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192390613626565b60405180910390fd5b611936828261270d565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611973906139a6565b80601f016020809104026020016040519081016040528092919081815260200182805461199f906139a6565b80156119ec5780601f106119c1576101008083540402835291602001916119ec565b820191906000526020600020905b8154815290600101906020018083116119cf57829003601f168201915b5050505050905090565b6119fe612356565b73ffffffffffffffffffffffffffffffffffffffff16611a1c61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990613646565b60405180910390fd5b80600b8190555050565b600f6020528060005260406000206000915090505481565b600c60009054906101000a900460ff1681565b611aaf61234e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b14576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611b2161234e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bce61234e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c139190613589565b60405180910390a35050565b600e5481565b611c30848484612363565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611c9257611c5b848484846127f1565b611c91576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611ca0612356565b73ffffffffffffffffffffffffffffffffffffffff16611cbe61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90613646565b60405180910390fd5b80600e8190555050565b6060611d2982612221565b611d5f576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060118054611d6e906139a6565b90501415611d8b5760405180602001604052806000815250611db7565b6011611d9683612951565b604051602001611da79291906134cd565b6040516020818303038152906040525b9050919050565b600a5481565b611dcc612356565b73ffffffffffffffffffffffffffffffffffffffff16611dea61193a565b73ffffffffffffffffffffffffffffffffffffffff1614611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790613646565b60405180910390fd5b8060119080519060200190611e56929190612c80565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ef6612356565b73ffffffffffffffffffffffffffffffffffffffff16611f1461193a565b73ffffffffffffffffffffffffffffffffffffffff1614611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190613646565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd1906135e6565b60405180910390fd5b611fe38161272b565b50565b611fee612356565b73ffffffffffffffffffffffffffffffffffffffff1661200c61193a565b73ffffffffffffffffffffffffffffffffffffffff1614612062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205990613646565b60405180910390fd5b60005b81518110156120e0576001600f600084848151811061208757612086613aba565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806120d890613a09565b915050612065565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612112612356565b73ffffffffffffffffffffffffffffffffffffffff1661213061193a565b73ffffffffffffffffffffffffffffffffffffffff1614612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d90613646565b60405180910390fd5b60005b8151811015612204576000600f60008484815181106121ab576121aa613aba565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806121fc90613a09565b915050612189565b5050565b600d5481565b600c60019054906101000a900460ff1681565b60008161222c61235e565b1115801561223b575060005482105b8015612279575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000808290508061228f61235e565b11612317576000548110156123165760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612314575b600081141561230a5760046000836001900393508381526020019081526020016000205490506122df565b8092505050612349565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b600090565b600061236e82612280565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123d5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123f661234e565b73ffffffffffffffffffffffffffffffffffffffff16148061242557506124248561241f61234e565b611e5a565b5b8061246a575061243361234e565b73ffffffffffffffffffffffffffffffffffffffff1661245284610a44565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806124a3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561250a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61251785858560016129ab565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b612614866129b1565b1717600460008581526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008316141561269e57600060018401905060006004600083815260200190815260200160002054141561269c57600054811461269b578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461270685858560016129bb565b5050505050565b6127278282604051806020016040528060008152506129c1565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261281761234e565b8786866040518563ffffffff1660e01b8152600401612839949392919061353d565b602060405180830381600087803b15801561285357600080fd5b505af192505050801561288457506040513d601f19601f820116820180604052508101906128819190613143565b60015b6128fe573d80600081146128b4576040519150601f19603f3d011682016040523d82523d6000602084013e6128b9565b606091505b506000815114156128f6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561299757600183039250600a81066030018353600a81049050612977565b508181036020830392508083525050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a2e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612a69576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a7660008583866129ab565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612adb60018514612c76565b901b60a042901b612aeb866129b1565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612bef575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b9f60008784806001019550876127f1565b612bd5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612b30578260005414612bea57600080fd5b612c5a565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612bf0575b816000819055505050612c7060008583866129bb565b50505050565b6000819050919050565b828054612c8c906139a6565b90600052602060002090601f016020900481019282612cae5760008555612cf5565b82601f10612cc757805160ff1916838001178555612cf5565b82800160010185558215612cf5579182015b82811115612cf4578251825591602001919060010190612cd9565b5b509050612d029190612d06565b5090565b5b80821115612d1f576000816000905550600101612d07565b5090565b6000612d36612d3184613726565b613701565b90508083825260208201905082856020860282011115612d5957612d58613b1d565b5b60005b85811015612d895781612d6f8882612e17565b845260208401935060208301925050600181019050612d5c565b5050509392505050565b6000612da6612da184613752565b613701565b905082815260208101848484011115612dc257612dc1613b22565b5b612dcd848285613964565b509392505050565b6000612de8612de384613783565b613701565b905082815260208101848484011115612e0457612e03613b22565b5b612e0f848285613964565b509392505050565b600081359050612e2681613d9d565b92915050565b600082601f830112612e4157612e40613b18565b5b8135612e51848260208601612d23565b91505092915050565b600081359050612e6981613db4565b92915050565b600081359050612e7e81613dcb565b92915050565b600081519050612e9381613dcb565b92915050565b600082601f830112612eae57612ead613b18565b5b8135612ebe848260208601612d93565b91505092915050565b600082601f830112612edc57612edb613b18565b5b8135612eec848260208601612dd5565b91505092915050565b600081359050612f0481613de2565b92915050565b600060208284031215612f2057612f1f613b2c565b5b6000612f2e84828501612e17565b91505092915050565b60008060408385031215612f4e57612f4d613b2c565b5b6000612f5c85828601612e17565b9250506020612f6d85828601612e17565b9150509250929050565b600080600060608486031215612f9057612f8f613b2c565b5b6000612f9e86828701612e17565b9350506020612faf86828701612e17565b9250506040612fc086828701612ef5565b9150509250925092565b60008060008060808587031215612fe457612fe3613b2c565b5b6000612ff287828801612e17565b945050602061300387828801612e17565b935050604061301487828801612ef5565b925050606085013567ffffffffffffffff81111561303557613034613b27565b5b61304187828801612e99565b91505092959194509250565b6000806040838503121561306457613063613b2c565b5b600061307285828601612e17565b925050602061308385828601612e5a565b9150509250929050565b600080604083850312156130a4576130a3613b2c565b5b60006130b285828601612e17565b92505060206130c385828601612ef5565b9150509250929050565b6000602082840312156130e3576130e2613b2c565b5b600082013567ffffffffffffffff81111561310157613100613b27565b5b61310d84828501612e2c565b91505092915050565b60006020828403121561312c5761312b613b2c565b5b600061313a84828501612e6f565b91505092915050565b60006020828403121561315957613158613b2c565b5b600061316784828501612e84565b91505092915050565b60006020828403121561318657613185613b2c565b5b600082013567ffffffffffffffff8111156131a4576131a3613b27565b5b6131b084828501612ec7565b91505092915050565b6000602082840312156131cf576131ce613b2c565b5b60006131dd84828501612ef5565b91505092915050565b6131ef816138f0565b82525050565b6131fe81613902565b82525050565b600061320f826137c9565b61321981856137df565b9350613229818560208601613973565b61323281613b31565b840191505092915050565b6000613248826137d4565b61325281856137f0565b9350613262818560208601613973565b61326b81613b31565b840191505092915050565b6000613281826137d4565b61328b8185613801565b935061329b818560208601613973565b80840191505092915050565b600081546132b4816139a6565b6132be8186613801565b945060018216600081146132d957600181146132ea5761331d565b60ff1983168652818601935061331d565b6132f3856137b4565b60005b83811015613315578154818901526001820191506020810190506132f6565b838801955050505b50505092915050565b6000613333601e836137f0565b915061333e82613b42565b602082019050919050565b60006133566026836137f0565b915061336182613b6b565b604082019050919050565b6000613379601a836137f0565b915061338482613bba565b602082019050919050565b600061339c601c836137f0565b91506133a782613be3565b602082019050919050565b60006133bf600583613801565b91506133ca82613c0c565b600582019050919050565b60006133e26020836137f0565b91506133ed82613c35565b602082019050919050565b60006134056019836137f0565b915061341082613c5e565b602082019050919050565b60006134286029836137f0565b915061343382613c87565b604082019050919050565b600061344b603b83613801565b915061345682613cd6565b603b82019050919050565b600061346e601d836137f0565b915061347982613d25565b602082019050919050565b60006134916027836137f0565b915061349c82613d4e565b604082019050919050565b6134b08161395a565b82525050565b6134c76134c28261395a565b613a52565b82525050565b60006134d982856132a7565b91506134e58284613276565b91506134f0826133b2565b91508190509392505050565b60006135078261343e565b915061351382846134b6565b60208201915081905092915050565b600060208201905061353760008301846131e6565b92915050565b600060808201905061355260008301876131e6565b61355f60208301866131e6565b61356c60408301856134a7565b818103606083015261357e8184613204565b905095945050505050565b600060208201905061359e60008301846131f5565b92915050565b600060208201905081810360008301526135be818461323d565b905092915050565b600060208201905081810360008301526135df81613326565b9050919050565b600060208201905081810360008301526135ff81613349565b9050919050565b6000602082019050818103600083015261361f8161336c565b9050919050565b6000602082019050818103600083015261363f8161338f565b9050919050565b6000602082019050818103600083015261365f816133d5565b9050919050565b6000602082019050818103600083015261367f816133f8565b9050919050565b6000602082019050818103600083015261369f8161341b565b9050919050565b600060208201905081810360008301526136bf81613461565b9050919050565b600060208201905081810360008301526136df81613484565b9050919050565b60006020820190506136fb60008301846134a7565b92915050565b600061370b61371c565b905061371782826139d8565b919050565b6000604051905090565b600067ffffffffffffffff82111561374157613740613ae9565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561376d5761376c613ae9565b5b61377682613b31565b9050602081019050919050565b600067ffffffffffffffff82111561379e5761379d613ae9565b5b6137a782613b31565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138178261395a565b91506138228361395a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561385757613856613a5c565b5b828201905092915050565b600061386d8261395a565b91506138788361395a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b1576138b0613a5c565b5b828202905092915050565b60006138c78261395a565b91506138d28361395a565b9250828210156138e5576138e4613a5c565b5b828203905092915050565b60006138fb8261393a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613991578082015181840152602081019050613976565b838111156139a0576000848401525b50505050565b600060028204905060018216806139be57607f821691505b602082108114156139d2576139d1613a8b565b5b50919050565b6139e182613b31565b810181811067ffffffffffffffff82111715613a00576139ff613ae9565b5b80604052505050565b6000613a148261395a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a4757613a46613a5c565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f554e4b4e4f574e3a206e6f7420616c6c6f7720746f206d696e74206e6f770000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f554e4b4e4f574e3a206f7574206f66206d617820737570706c79000000000000600082015250565b7f554e4b4e4f574e3a206f7574206f662063757272656e74207761766500000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f554e4b4e4f574e3a206e6f7420656e6f75676820657468657200000000000000600082015250565b7f554e4b4e4f574e3a206e6f74207065726d697373696f6e20746f20776869746560008201527f6c697374206d696e740000000000000000000000000000000000000000000000602082015250565b7f554e4b4e4f574e3a207175616e74697479206d75737420626520736d616c6c6560008201527f72207468656e207570706572207175616e74697479206c696d69740000000000602082015250565b7f554e4b4e4f574e3a20696e73756666696369656e742062616c616e6365000000600082015250565b7f554e4b4e4f574e3a207175616e74697479206d7573742062652062696767657260008201527f207468656e203100000000000000000000000000000000000000000000000000602082015250565b613da6816138f0565b8114613db157600080fd5b50565b613dbd81613902565b8114613dc857600080fd5b50565b613dd48161390e565b8114613ddf57600080fd5b50565b613deb8161395a565b8114613df657600080fd5b5056fea26469706673582212204db59c3eb84032f1de988ddc54db537836b1e5f1513d6157eab103513117b17964736f6c63430008070033

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

0000000000000000000000004541a442cf0c6e906414a3776e8eaa32a0acebc50000000000000000000000000000000000000000000000000000000000000bcd00000000000000000000000029c62f81038e16f892d9626cddcaa164007c944500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53424c313350394e4a6d6b5851476f694667353643567557786f4753783443734e735965563847774c3763392f00000000000000000000

-----Decoded View---------------
Arg [0] : devMintAddress_ (address): 0x4541a442CF0c6E906414A3776E8EAa32A0AcEBC5
Arg [1] : devMintCount_ (uint256): 3021
Arg [2] : bossAddress_ (address): 0x29c62F81038e16f892d9626CDdCaa164007C9445
Arg [3] : baseURI_ (string): ipfs://QmSBL13P9NJmkXQGoiFg56CVuWxoGSx4CsNsYeV8GwL7c9/

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000004541a442cf0c6e906414a3776e8eaa32a0acebc5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000bcd
Arg [2] : 00000000000000000000000029c62f81038e16f892d9626cddcaa164007c9445
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [5] : 697066733a2f2f516d53424c313350394e4a6d6b5851476f6946673536435675
Arg [6] : 57786f4753783443734e735965563847774c3763392f00000000000000000000


Deployed Bytecode Sourcemap

41838:4935:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16496:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21509:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23586:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23046:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42913:101;;;;;;;;;;;;;:::i;:::-;;15550:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24472:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42795:110;;;;;;;;;;;;;:::i;:::-;;44312:696;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42186:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46584:186;;;;;;;;;;;;;:::i;:::-;;24713:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41949:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21298:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42228:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17175:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2606:103;;;;;;;;;;;;;:::i;:::-;;45862:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46446:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46280:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43447:857;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45122:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21678:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46150:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42131:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41982:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23862:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42096:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24969:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46012:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45572:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41918:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45443:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24241:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43022:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41885:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43233:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42060:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42017:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16496:615;16581:4;16896:10;16881:25;;:11;:25;;;;:102;;;;16973:10;16958:25;;:11;:25;;;;16881:102;:179;;;;17050:10;17035:25;;:11;:25;;;;16881:179;16861:199;;16496:615;;;:::o;21509:100::-;21563:13;21596:5;21589:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21509:100;:::o;23586:204::-;23654:7;23679:16;23687:7;23679;:16::i;:::-;23674:64;;23704:34;;;;;;;;;;;;;;23674:64;23758:15;:24;23774:7;23758:24;;;;;;;;;;;;;;;;;;;;;23751:31;;23586:204;;;:::o;23046:474::-;23119:13;23151:27;23170:7;23151:18;:27::i;:::-;23119:61;;23201:5;23195:11;;:2;:11;;;23191:48;;;23215:24;;;;;;;;;;;;;;23191:48;23279:5;23256:28;;:19;:17;:19::i;:::-;:28;;;23252:175;;23304:44;23321:5;23328:19;:17;:19::i;:::-;23304:16;:44::i;:::-;23299:128;;23376:35;;;;;;;;;;;;;;23299:128;23252:175;23466:2;23439:15;:24;23455:7;23439:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23504:7;23500:2;23484:28;;23493:5;23484:28;;;;;;;;;;;;23108:412;23046:474;;:::o;42913:101::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42991:15:::1;;;;;;;;;;;42990:16;42972:15;;:34;;;;;;;;;;;;;;;;;;42913:101::o:0;15550:315::-;15603:7;15831:15;:13;:15::i;:::-;15816:12;;15800:13;;:28;:46;15793:53;;15550:315;:::o;24472:170::-;24606:28;24616:4;24622:2;24626:7;24606:9;:28::i;:::-;24472:170;;;:::o;42795:110::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42879:18:::1;;;;;;;;;;;42878:19;42857:18;;:40;;;;;;;;;;;;;;;;;;42795:110::o:0;44312:696::-;44403:15;;;;;;;;;;;44394:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;44486:1;44474:8;:13;;44465:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44564:18;;44552:8;:30;;44671:18;;44591:99;;;;;;;;:::i;:::-;;;;;;;;;;;;;44543:149;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;44740:9;;44728:8;44712:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;44703:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44829:9;;44817:8;44801:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;44792:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44919:8;44905:11;;:22;;;;:::i;:::-;44892:9;:35;;44883:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44969:31;44979:10;44991:8;44969:9;:31::i;:::-;44312:696;:::o;42186:33::-;;;;:::o;46584:186::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46664:1:::1;46640:21;:25;46632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46718:11;;;;;;;;;;;46710:29;;:52;46740:21;46710:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46584:186::o:0;24713:185::-;24851:39;24868:4;24874:2;24878:7;24851:39;;;;;;;;;;;;:16;:39::i;:::-;24713:185;;;:::o;41949:24::-;;;;:::o;21298:144::-;21362:7;21405:27;21424:7;21405:18;:27::i;:::-;21382:52;;21298:144;;;:::o;42228:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17175:224::-;17239:7;17280:1;17263:19;;:5;:19;;;17259:60;;;17291:28;;;;;;;;;;;;;;17259:60;12514:13;17337:18;:25;17356:5;17337:25;;;;;;;;;;;;;;;;:54;17330:61;;17175:224;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;45862:142::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45979:17:::1;45962:14;:34;;;;45862:142:::0;:::o;46446:130::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46554:14:::1;46540:11;;:28;;;;;;;;;;;;;;;;;;46446:130:::0;:::o;46280:158::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46409:21:::1;46388:18;:42;;;;46280:158:::0;:::o;43447:857::-;43565:1;43541:9;:21;43551:10;43541:21;;;;;;;;;;;;;;;;:25;43532:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43633:18;;;;;;;;;;;43624:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43719:1;43707:8;:13;;43698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43797:18;;43785:8;:30;;43904:18;;43824:99;;;;;;;;:::i;:::-;;;;;;;;;;;;;43776:149;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;43973:9;;43961:8;43945:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;43936:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44062:9;;44050:8;44034:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;44025:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44155:8;44138:14;;:25;;;;:::i;:::-;44125:9;:38;;44116:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44253:1;44229:9;:21;44239:10;44229:21;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;44205:9;:21;44215:10;44205:21;;;;;;;;;;;;;;;:49;;;;44265:31;44275:10;44287:8;44265:9;:31::i;:::-;43447:857;:::o;45122:313::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45261:9:::1;;45249:8;45233:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;45224:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;45350:9;;45338:8;45322:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;45313:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;45404:23;45414:2;45418:8;45404:9;:23::i;:::-;45122:313:::0;;:::o;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;21678:104::-;21734:13;21767:7;21760:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21678:104;:::o;46150:122::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46252:12:::1;46240:9;:24;;;;46150:122:::0;:::o;42131:46::-;;;;;;;;;;;;;;;;;:::o;41982:27::-;;;;;;;;;;;;;:::o;23862:308::-;23973:19;:17;:19::i;:::-;23961:31;;:8;:31;;;23957:61;;;24001:17;;;;;;;;;;;;;;23957:61;24083:8;24031:18;:39;24050:19;:17;:19::i;:::-;24031:39;;;;;;;;;;;;;;;:49;24071:8;24031:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;24143:8;24107:55;;24122:19;:17;:19::i;:::-;24107:55;;;24153:8;24107:55;;;;;;:::i;:::-;;;;;;;;23862:308;;:::o;42096:26::-;;;;:::o;24969:396::-;25136:28;25146:4;25152:2;25156:7;25136:9;:28::i;:::-;25197:1;25179:2;:14;;;:19;25175:183;;25218:56;25249:4;25255:2;25259:7;25268:5;25218:30;:56::i;:::-;25213:145;;25302:40;;;;;;;;;;;;;;25213:145;25175:183;24969:396;;;;:::o;46012:130::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46120:14:::1;46106:11;:28;;;;46012:130:::0;:::o;45572:282::-;45645:13;45676:16;45684:7;45676;:16::i;:::-;45671:59;;45701:29;;;;;;;;;;;;;;45671:59;45775:1;45756:7;45750:21;;;;;:::i;:::-;;;:26;;:96;;;;;;;;;;;;;;;;;45803:7;45812:18;45822:7;45812:9;:18::i;:::-;45786:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45750:96;45743:103;;45572:282;;;:::o;41918:24::-;;;;:::o;45443:121::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45546:10:::1;45536:7;:20;;;;;;;;;;;;:::i;:::-;;45443:121:::0;:::o;24241:164::-;24338:4;24362:18;:25;24381:5;24362:25;;;;;;;;;;;;;;;:35;24388:8;24362:35;;;;;;;;;;;;;;;;;;;;;;;;;24355:42;;24241:164;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;43022:203::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43112:9:::1;43107:111;43132:12;:19;43128:1;:23;43107:111;;;43204:1;43175:9;:26;43185:12;43198:1;43185:15;;;;;;;;:::i;:::-;;;;;;;;43175:26;;;;;;;;;;;;;;;:30;;;;43154:3;;;;;:::i;:::-;;;;43107:111;;;;43022:203:::0;:::o;41885:26::-;;;;;;;;;;;;;:::o;43233:206::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43326:9:::1;43321:111;43346:12;:19;43342:1;:23;43321:111;;;43418:1;43389:9;:26;43399:12;43412:1;43399:15;;;;;;;;:::i;:::-;;;;;;;;43389:26;;;;;;;;;;;;;;;:30;;;;43368:3;;;;;:::i;:::-;;;;43321:111;;;;43233:206:::0;:::o;42060:29::-;;;;:::o;42017:30::-;;;;;;;;;;;;;:::o;25620:273::-;25677:4;25733:7;25714:15;:13;:15::i;:::-;:26;;:66;;;;;25767:13;;25757:7;:23;25714:66;:152;;;;;25865:1;13284:8;25818:17;:26;25836:7;25818:26;;;;;;;;;;;;:43;:48;25714:152;25694:172;;25620:273;;;:::o;18813:1129::-;18880:7;18900:12;18915:7;18900:22;;18983:4;18964:15;:13;:15::i;:::-;:23;18960:915;;19017:13;;19010:4;:20;19006:869;;;19055:14;19072:17;:23;19090:4;19072:23;;;;;;;;;;;;19055:40;;19188:1;13284:8;19161:6;:23;:28;19157:699;;;19680:113;19697:1;19687:6;:11;19680:113;;;19740:17;:25;19758:6;;;;;;;19740:25;;;;;;;;;;;;19731:34;;19680:113;;;19826:6;19819:13;;;;;;19157:699;19032:843;19006:869;18960:915;19903:31;;;;;;;;;;;;;;18813:1129;;;;:::o;39602:105::-;39662:7;39689:10;39682:17;;39602:105;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;15073:92::-;15129:7;15073:92;:::o;30859:2515::-;30974:27;31004;31023:7;31004:18;:27::i;:::-;30974:57;;31089:4;31048:45;;31064:19;31048:45;;;31044:86;;31102:28;;;;;;;;;;;;;;31044:86;31143:22;31192:4;31169:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;31213:43;31230:4;31236:19;:17;:19::i;:::-;31213:16;:43::i;:::-;31169:87;:147;;;;31297:19;:17;:19::i;:::-;31273:43;;:20;31285:7;31273:11;:20::i;:::-;:43;;;31169:147;31143:174;;31335:17;31330:66;;31361:35;;;;;;;;;;;;;;31330:66;31425:1;31411:16;;:2;:16;;;31407:52;;;31436:23;;;;;;;;;;;;;;31407:52;31472:43;31494:4;31500:2;31504:7;31513:1;31472:21;:43::i;:::-;31588:15;:24;31604:7;31588:24;;;;;;;;;;;;31581:31;;;;;;;;;;;31980:18;:24;31999:4;31980:24;;;;;;;;;;;;;;;;31978:26;;;;;;;;;;;;32049:18;:22;32068:2;32049:22;;;;;;;;;;;;;;;;32047:24;;;;;;;;;;;13566:8;13168:3;32430:15;:41;;32388:21;32406:2;32388:17;:21::i;:::-;:84;:128;32342:17;:26;32360:7;32342:26;;;;;;;;;;;:174;;;;32686:1;13566:8;32636:19;:46;:51;32632:626;;;32708:19;32740:1;32730:7;:11;32708:33;;32897:1;32863:17;:30;32881:11;32863:30;;;;;;;;;;;;:35;32859:384;;;33001:13;;32986:11;:28;32982:242;;33181:19;33148:17;:30;33166:11;33148:30;;;;;;;;;;;:52;;;;32982:242;32859:384;32689:569;32632:626;33305:7;33301:2;33286:27;;33295:4;33286:27;;;;;;;;;;;;33324:42;33345:4;33351:2;33355:7;33364:1;33324:20;:42::i;:::-;30963:2411;;30859:2515;;;:::o;25977:104::-;26046:27;26056:2;26060:8;26046:27;;;;;;;;;;;;:9;:27::i;:::-;25977:104;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;37071:716::-;37234:4;37280:2;37255:45;;;37301:19;:17;:19::i;:::-;37322:4;37328:7;37337:5;37255:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37251:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37555:1;37538:6;:13;:18;37534:235;;;37584:40;;;;;;;;;;;;;;37534:235;37727:6;37721:13;37712:6;37708:2;37704:15;37697:38;37251:529;37424:54;;;37414:64;;;:6;:64;;;;37407:71;;;37071:716;;;;;;:::o;39813:1959::-;39870:17;40291:3;40284:4;40278:11;40274:21;40267:28;;40382:3;40376:4;40369:17;40488:3;40945:5;41075:1;41070:3;41066:11;41059:18;;41212:2;41206:4;41202:13;41198:2;41194:22;41189:3;41181:36;41253:2;41247:4;41243:13;41235:21;;40836:682;41272:4;40836:682;;;41447:1;41442:3;41438:11;41431:18;;41498:2;41492:4;41488:13;41484:2;41480:22;41475:3;41467:36;41368:2;41362:4;41358:13;41350:21;;40836:682;;;40840:431;41569:3;41564;41560:13;41684:2;41679:3;41675:12;41668:19;;41747:6;41742:3;41735:19;39909:1856;;39813:1959;;;:::o;38435:159::-;;;;;:::o;22607:148::-;22671:14;22732:5;22722:15;;22607:148;;;:::o;39253:158::-;;;;;:::o;26454:2236::-;26577:20;26600:13;;26577:36;;26642:1;26628:16;;:2;:16;;;26624:48;;;26653:19;;;;;;;;;;;;;;26624:48;26699:1;26687:8;:13;26683:44;;;26709:18;;;;;;;;;;;;;;26683:44;26740:61;26770:1;26774:2;26778:12;26792:8;26740:21;:61::i;:::-;27344:1;12651:2;27315:1;:25;;27314:31;27302:8;:44;27276:18;:22;27295:2;27276:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;13431:3;27745:29;27772:1;27760:8;:13;27745:14;:29::i;:::-;:56;;13168:3;27682:15;:41;;27640:21;27658:2;27640:17;:21::i;:::-;:84;:162;27589:17;:31;27607:12;27589:31;;;;;;;;;;;:213;;;;27819:20;27842:12;27819:35;;27869:11;27898:8;27883:12;:23;27869:37;;27945:1;27927:2;:14;;;:19;27923:635;;27967:313;28023:12;28019:2;27998:38;;28015:1;27998:38;;;;;;;;;;;;28064:69;28103:1;28107:2;28111:14;;;;;;28127:5;28064:30;:69::i;:::-;28059:174;;28169:40;;;;;;;;;;;;;;28059:174;28275:3;28260:12;:18;27967:313;;28361:12;28344:13;;:29;28340:43;;28375:8;;;28340:43;27923:635;;;28424:119;28480:14;;;;;;28476:2;28455:40;;28472:1;28455:40;;;;;;;;;;;;28538:3;28523:12;:18;28424:119;;27923:635;28588:12;28572:13;:28;;;;27053:1559;;28622:60;28651:1;28655:2;28659:12;28673:8;28622:20;:60::i;:::-;26566:2124;26454:2236;;;:::o;22842:142::-;22900:14;22961:5;22951:15;;22842:142;;;:::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;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:118::-;8928:24;8946:5;8928:24;:::i;:::-;8923:3;8916:37;8841:118;;:::o;8965:109::-;9046:21;9061:5;9046:21;:::i;:::-;9041:3;9034:34;8965:109;;:::o;9080:360::-;9166:3;9194:38;9226:5;9194:38;:::i;:::-;9248:70;9311:6;9306:3;9248:70;:::i;:::-;9241:77;;9327:52;9372:6;9367:3;9360:4;9353:5;9349:16;9327:52;:::i;:::-;9404:29;9426:6;9404:29;:::i;:::-;9399:3;9395:39;9388:46;;9170:270;9080:360;;;;:::o;9446:364::-;9534:3;9562:39;9595:5;9562:39;:::i;:::-;9617:71;9681:6;9676:3;9617:71;:::i;:::-;9610:78;;9697:52;9742:6;9737:3;9730:4;9723:5;9719:16;9697:52;:::i;:::-;9774:29;9796:6;9774:29;:::i;:::-;9769:3;9765:39;9758:46;;9538:272;9446:364;;;;:::o;9816:377::-;9922:3;9950:39;9983:5;9950:39;:::i;:::-;10005:89;10087:6;10082:3;10005:89;:::i;:::-;9998:96;;10103:52;10148:6;10143:3;10136:4;10129:5;10125:16;10103:52;:::i;:::-;10180:6;10175:3;10171:16;10164:23;;9926:267;9816:377;;;;:::o;10223:845::-;10326:3;10363:5;10357:12;10392:36;10418:9;10392:36;:::i;:::-;10444:89;10526:6;10521:3;10444:89;:::i;:::-;10437:96;;10564:1;10553:9;10549:17;10580:1;10575:137;;;;10726:1;10721:341;;;;10542:520;;10575:137;10659:4;10655:9;10644;10640:25;10635:3;10628:38;10695:6;10690:3;10686:16;10679:23;;10575:137;;10721:341;10788:38;10820:5;10788:38;:::i;:::-;10848:1;10862:154;10876:6;10873:1;10870:13;10862:154;;;10950:7;10944:14;10940:1;10935:3;10931:11;10924:35;11000:1;10991:7;10987:15;10976:26;;10898:4;10895:1;10891:12;10886:17;;10862:154;;;11045:6;11040:3;11036:16;11029:23;;10728:334;;10542:520;;10330:738;;10223:845;;;;:::o;11074:366::-;11216:3;11237:67;11301:2;11296:3;11237:67;:::i;:::-;11230:74;;11313:93;11402:3;11313:93;:::i;:::-;11431:2;11426:3;11422:12;11415:19;;11074:366;;;:::o;11446:::-;11588:3;11609:67;11673:2;11668:3;11609:67;:::i;:::-;11602:74;;11685:93;11774:3;11685:93;:::i;:::-;11803:2;11798:3;11794:12;11787:19;;11446:366;;;:::o;11818:::-;11960:3;11981:67;12045:2;12040:3;11981:67;:::i;:::-;11974:74;;12057:93;12146:3;12057:93;:::i;:::-;12175:2;12170:3;12166:12;12159:19;;11818:366;;;:::o;12190:::-;12332:3;12353:67;12417:2;12412:3;12353:67;:::i;:::-;12346:74;;12429:93;12518:3;12429:93;:::i;:::-;12547:2;12542:3;12538:12;12531:19;;12190:366;;;:::o;12562:400::-;12722:3;12743:84;12825:1;12820:3;12743:84;:::i;:::-;12736:91;;12836:93;12925:3;12836:93;:::i;:::-;12954:1;12949:3;12945:11;12938:18;;12562:400;;;:::o;12968:366::-;13110:3;13131:67;13195:2;13190:3;13131:67;:::i;:::-;13124:74;;13207:93;13296:3;13207:93;:::i;:::-;13325:2;13320:3;13316:12;13309:19;;12968:366;;;:::o;13340:::-;13482:3;13503:67;13567:2;13562:3;13503:67;:::i;:::-;13496:74;;13579:93;13668:3;13579:93;:::i;:::-;13697:2;13692:3;13688:12;13681:19;;13340:366;;;:::o;13712:::-;13854:3;13875:67;13939:2;13934:3;13875:67;:::i;:::-;13868:74;;13951:93;14040:3;13951:93;:::i;:::-;14069:2;14064:3;14060:12;14053:19;;13712:366;;;:::o;14084:402::-;14244:3;14265:85;14347:2;14342:3;14265:85;:::i;:::-;14258:92;;14359:93;14448:3;14359:93;:::i;:::-;14477:2;14472:3;14468:12;14461:19;;14084:402;;;:::o;14492:366::-;14634:3;14655:67;14719:2;14714:3;14655:67;:::i;:::-;14648:74;;14731:93;14820:3;14731:93;:::i;:::-;14849:2;14844:3;14840:12;14833:19;;14492:366;;;:::o;14864:::-;15006:3;15027:67;15091:2;15086:3;15027:67;:::i;:::-;15020:74;;15103:93;15192:3;15103:93;:::i;:::-;15221:2;15216:3;15212:12;15205:19;;14864:366;;;:::o;15236:118::-;15323:24;15341:5;15323:24;:::i;:::-;15318:3;15311:37;15236:118;;:::o;15360:157::-;15465:45;15485:24;15503:5;15485:24;:::i;:::-;15465:45;:::i;:::-;15460:3;15453:58;15360:157;;:::o;15523:695::-;15801:3;15823:92;15911:3;15902:6;15823:92;:::i;:::-;15816:99;;15932:95;16023:3;16014:6;15932:95;:::i;:::-;15925:102;;16044:148;16188:3;16044:148;:::i;:::-;16037:155;;16209:3;16202:10;;15523:695;;;;;:::o;16224:522::-;16437:3;16459:148;16603:3;16459:148;:::i;:::-;16452:155;;16617:75;16688:3;16679:6;16617:75;:::i;:::-;16717:2;16712:3;16708:12;16701:19;;16737:3;16730:10;;16224:522;;;;:::o;16752:222::-;16845:4;16883:2;16872:9;16868:18;16860:26;;16896:71;16964:1;16953:9;16949:17;16940:6;16896:71;:::i;:::-;16752:222;;;;:::o;16980:640::-;17175:4;17213:3;17202:9;17198:19;17190:27;;17227:71;17295:1;17284:9;17280:17;17271:6;17227:71;:::i;:::-;17308:72;17376:2;17365:9;17361:18;17352:6;17308:72;:::i;:::-;17390;17458:2;17447:9;17443:18;17434:6;17390:72;:::i;:::-;17509:9;17503:4;17499:20;17494:2;17483:9;17479:18;17472:48;17537:76;17608:4;17599:6;17537:76;:::i;:::-;17529:84;;16980:640;;;;;;;:::o;17626:210::-;17713:4;17751:2;17740:9;17736:18;17728:26;;17764:65;17826:1;17815:9;17811:17;17802:6;17764:65;:::i;:::-;17626:210;;;;:::o;17842:313::-;17955:4;17993:2;17982:9;17978:18;17970:26;;18042:9;18036:4;18032:20;18028:1;18017:9;18013:17;18006:47;18070:78;18143:4;18134:6;18070:78;:::i;:::-;18062:86;;17842:313;;;;:::o;18161:419::-;18327:4;18365:2;18354:9;18350:18;18342:26;;18414:9;18408:4;18404:20;18400:1;18389:9;18385:17;18378:47;18442:131;18568:4;18442:131;:::i;:::-;18434:139;;18161:419;;;:::o;18586:::-;18752:4;18790:2;18779:9;18775:18;18767:26;;18839:9;18833:4;18829:20;18825:1;18814:9;18810:17;18803:47;18867:131;18993:4;18867:131;:::i;:::-;18859:139;;18586:419;;;:::o;19011:::-;19177:4;19215:2;19204:9;19200:18;19192:26;;19264:9;19258:4;19254:20;19250:1;19239:9;19235:17;19228:47;19292:131;19418:4;19292:131;:::i;:::-;19284:139;;19011:419;;;:::o;19436:::-;19602:4;19640:2;19629:9;19625:18;19617:26;;19689:9;19683:4;19679:20;19675:1;19664:9;19660:17;19653:47;19717:131;19843:4;19717:131;:::i;:::-;19709:139;;19436:419;;;:::o;19861:::-;20027:4;20065:2;20054:9;20050:18;20042:26;;20114:9;20108:4;20104:20;20100:1;20089:9;20085:17;20078:47;20142:131;20268:4;20142:131;:::i;:::-;20134:139;;19861:419;;;:::o;20286:::-;20452:4;20490:2;20479:9;20475:18;20467:26;;20539:9;20533:4;20529:20;20525:1;20514:9;20510:17;20503:47;20567:131;20693:4;20567:131;:::i;:::-;20559:139;;20286:419;;;:::o;20711:::-;20877:4;20915:2;20904:9;20900:18;20892:26;;20964:9;20958:4;20954:20;20950:1;20939:9;20935:17;20928:47;20992:131;21118:4;20992:131;:::i;:::-;20984:139;;20711:419;;;:::o;21136:::-;21302:4;21340:2;21329:9;21325:18;21317:26;;21389:9;21383:4;21379:20;21375:1;21364:9;21360:17;21353:47;21417:131;21543:4;21417:131;:::i;:::-;21409:139;;21136:419;;;:::o;21561:::-;21727:4;21765:2;21754:9;21750:18;21742:26;;21814:9;21808:4;21804:20;21800:1;21789:9;21785:17;21778:47;21842:131;21968:4;21842:131;:::i;:::-;21834:139;;21561:419;;;:::o;21986:222::-;22079:4;22117:2;22106:9;22102:18;22094:26;;22130:71;22198:1;22187:9;22183:17;22174:6;22130:71;:::i;:::-;21986:222;;;;:::o;22214:129::-;22248:6;22275:20;;:::i;:::-;22265:30;;22304:33;22332:4;22324:6;22304:33;:::i;:::-;22214:129;;;:::o;22349:75::-;22382:6;22415:2;22409:9;22399:19;;22349:75;:::o;22430:311::-;22507:4;22597:18;22589:6;22586:30;22583:56;;;22619:18;;:::i;:::-;22583:56;22669:4;22661:6;22657:17;22649:25;;22729:4;22723;22719:15;22711:23;;22430:311;;;:::o;22747:307::-;22808:4;22898:18;22890:6;22887:30;22884:56;;;22920:18;;:::i;:::-;22884:56;22958:29;22980:6;22958:29;:::i;:::-;22950:37;;23042:4;23036;23032:15;23024:23;;22747:307;;;:::o;23060:308::-;23122:4;23212:18;23204:6;23201:30;23198:56;;;23234:18;;:::i;:::-;23198:56;23272:29;23294:6;23272:29;:::i;:::-;23264:37;;23356:4;23350;23346:15;23338:23;;23060:308;;;:::o;23374:141::-;23423:4;23446:3;23438:11;;23469:3;23466:1;23459:14;23503:4;23500:1;23490:18;23482:26;;23374:141;;;:::o;23521:98::-;23572:6;23606:5;23600:12;23590:22;;23521:98;;;:::o;23625:99::-;23677:6;23711:5;23705:12;23695:22;;23625:99;;;:::o;23730:168::-;23813:11;23847:6;23842:3;23835:19;23887:4;23882:3;23878:14;23863:29;;23730:168;;;;:::o;23904:169::-;23988:11;24022:6;24017:3;24010:19;24062:4;24057:3;24053:14;24038:29;;23904:169;;;;:::o;24079:148::-;24181:11;24218:3;24203:18;;24079:148;;;;:::o;24233:305::-;24273:3;24292:20;24310:1;24292:20;:::i;:::-;24287:25;;24326:20;24344:1;24326:20;:::i;:::-;24321:25;;24480:1;24412:66;24408:74;24405:1;24402:81;24399:107;;;24486:18;;:::i;:::-;24399:107;24530:1;24527;24523:9;24516:16;;24233:305;;;;:::o;24544:348::-;24584:7;24607:20;24625:1;24607:20;:::i;:::-;24602:25;;24641:20;24659:1;24641:20;:::i;:::-;24636:25;;24829:1;24761:66;24757:74;24754:1;24751:81;24746:1;24739:9;24732:17;24728:105;24725:131;;;24836:18;;:::i;:::-;24725:131;24884:1;24881;24877:9;24866:20;;24544:348;;;;:::o;24898:191::-;24938:4;24958:20;24976:1;24958:20;:::i;:::-;24953:25;;24992:20;25010:1;24992:20;:::i;:::-;24987:25;;25031:1;25028;25025:8;25022:34;;;25036:18;;:::i;:::-;25022:34;25081:1;25078;25074:9;25066:17;;24898:191;;;;:::o;25095:96::-;25132:7;25161:24;25179:5;25161:24;:::i;:::-;25150:35;;25095:96;;;:::o;25197:90::-;25231:7;25274:5;25267:13;25260:21;25249:32;;25197:90;;;:::o;25293:149::-;25329:7;25369:66;25362:5;25358:78;25347:89;;25293:149;;;:::o;25448:126::-;25485:7;25525:42;25518:5;25514:54;25503:65;;25448:126;;;:::o;25580:77::-;25617:7;25646:5;25635:16;;25580:77;;;:::o;25663:154::-;25747:6;25742:3;25737;25724:30;25809:1;25800:6;25795:3;25791:16;25784:27;25663:154;;;:::o;25823:307::-;25891:1;25901:113;25915:6;25912:1;25909:13;25901:113;;;26000:1;25995:3;25991:11;25985:18;25981:1;25976:3;25972:11;25965:39;25937:2;25934:1;25930:10;25925:15;;25901:113;;;26032:6;26029:1;26026:13;26023:101;;;26112:1;26103:6;26098:3;26094:16;26087:27;26023:101;25872:258;25823:307;;;:::o;26136:320::-;26180:6;26217:1;26211:4;26207:12;26197:22;;26264:1;26258:4;26254:12;26285:18;26275:81;;26341:4;26333:6;26329:17;26319:27;;26275:81;26403:2;26395:6;26392:14;26372:18;26369:38;26366:84;;;26422:18;;:::i;:::-;26366:84;26187:269;26136:320;;;:::o;26462:281::-;26545:27;26567:4;26545:27;:::i;:::-;26537:6;26533:40;26675:6;26663:10;26660:22;26639:18;26627:10;26624:34;26621:62;26618:88;;;26686:18;;:::i;:::-;26618:88;26726:10;26722:2;26715:22;26505:238;26462:281;;:::o;26749:233::-;26788:3;26811:24;26829:5;26811:24;:::i;:::-;26802:33;;26857:66;26850:5;26847:77;26844:103;;;26927:18;;:::i;:::-;26844:103;26974:1;26967:5;26963:13;26956:20;;26749:233;;;:::o;26988:79::-;27027:7;27056:5;27045:16;;26988:79;;;:::o;27073:180::-;27121:77;27118:1;27111:88;27218:4;27215:1;27208:15;27242:4;27239:1;27232:15;27259:180;27307:77;27304:1;27297:88;27404:4;27401:1;27394:15;27428:4;27425:1;27418:15;27445:180;27493:77;27490:1;27483:88;27590:4;27587:1;27580:15;27614:4;27611:1;27604:15;27631:180;27679:77;27676:1;27669:88;27776:4;27773:1;27766:15;27800:4;27797:1;27790:15;27817:117;27926:1;27923;27916:12;27940:117;28049:1;28046;28039:12;28063:117;28172:1;28169;28162:12;28186:117;28295:1;28292;28285:12;28309:117;28418:1;28415;28408:12;28432:102;28473:6;28524:2;28520:7;28515:2;28508:5;28504:14;28500:28;28490:38;;28432:102;;;:::o;28540:180::-;28680:32;28676:1;28668:6;28664:14;28657:56;28540:180;:::o;28726:225::-;28866:34;28862:1;28854:6;28850:14;28843:58;28935:8;28930:2;28922:6;28918:15;28911:33;28726:225;:::o;28957:176::-;29097:28;29093:1;29085:6;29081:14;29074:52;28957:176;:::o;29139:178::-;29279:30;29275:1;29267:6;29263:14;29256:54;29139:178;:::o;29323:155::-;29463:7;29459:1;29451:6;29447:14;29440:31;29323:155;:::o;29484:182::-;29624:34;29620:1;29612:6;29608:14;29601:58;29484:182;:::o;29672:175::-;29812:27;29808:1;29800:6;29796:14;29789:51;29672:175;:::o;29853:228::-;29993:34;29989:1;29981:6;29977:14;29970:58;30062:11;30057:2;30049:6;30045:15;30038:36;29853:228;:::o;30087:246::-;30227:34;30223:1;30215:6;30211:14;30204:58;30296:29;30291:2;30283:6;30279:15;30272:54;30087:246;:::o;30339:179::-;30479:31;30475:1;30467:6;30463:14;30456:55;30339:179;:::o;30524:226::-;30664:34;30660:1;30652:6;30648:14;30641:58;30733:9;30728:2;30720:6;30716:15;30709:34;30524:226;:::o;30756:122::-;30829:24;30847:5;30829:24;:::i;:::-;30822:5;30819:35;30809:63;;30868:1;30865;30858:12;30809:63;30756:122;:::o;30884:116::-;30954:21;30969:5;30954:21;:::i;:::-;30947:5;30944:32;30934:60;;30990:1;30987;30980:12;30934:60;30884:116;:::o;31006:120::-;31078:23;31095:5;31078:23;:::i;:::-;31071:5;31068:34;31058:62;;31116:1;31113;31106:12;31058:62;31006:120;:::o;31132:122::-;31205:24;31223:5;31205:24;:::i;:::-;31198:5;31195:35;31185:63;;31244:1;31241;31234:12;31185:63;31132:122;:::o

Swarm Source

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