ETH Price: $3,260.99 (+0.41%)
Gas: 2 Gwei

Token

Big Ass Goblins NFT (BASGNFT)
 

Overview

Max Total Supply

8 BASGNFT

Holders

4

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 BASGNFT
0x96d5e9ede455b5f871e0c3c483286435dc135370
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:
Bigassgoblin

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-09
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @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))) : '';
    }

    /**
     * @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: contracts/bigassgoblin.sol



pragma solidity >=0.8.0 <0.9.0;





contract Bigassgoblin is ERC721A, Ownable, ReentrancyGuard {
  using Strings for uint256;

  string public _baseTokenURI;
  string public hiddenMetadataUri;
  
  uint256 public cost;
  uint256 public price = 0.0015 ether;
  uint256 public maxSupply = 1111;
  uint256 public maxPerWallet  = 10;
  uint256 public totalFree = 222;
  uint256 public maxMintAmountPerTx = 5;
  uint256 public maxPerFree = 2;
  uint256 public maxPerFreeWallet = 2;

  bool public paused = true;
  bool public revealed;

  constructor(
    string memory _hiddenMetadataUri
  ) ERC721A("Big Ass Goblins NFT", "BASGNFT") {
    _safeMint(msg.sender, 1);
    setHiddenMetadataUri(_hiddenMetadataUri);
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, 'Invalid mint amount!');
    require(totalSupply() + _mintAmount <= maxSupply, 'Max supply exceeded!');
    _;
  }

  modifier mintPriceCompliance(uint256 _mintAmount) {
    require(msg.value >= cost * _mintAmount, 'Insufficient funds!');
    _;
  }
  

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    cost = price;
    if(totalSupply() + _mintAmount < totalFree + 1) {
      cost = 0;
      require(_mintAmount <= maxPerFree && cost == 0, "Too many Free mints!");
      require(numberMinted(msg.sender) + _mintAmount <= maxPerFreeWallet,"Free mint limit has been reached!");
    }
    require(numberMinted(msg.sender) + _mintAmount <= maxPerWallet,"Too many per wallet!");
    _safeMint(_msgSender(), _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _safeMint(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner) public view returns (uint256[] memory) {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        
    return ownedTokenIds;
  }

  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

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

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }  

  function setCost(uint256 _cost) public onlyOwner {
    price = _cost;
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setMaxPerFree(uint256 _maxPerFree) public onlyOwner {
    maxPerFree = _maxPerFree;
  }

  function setMaxPerWallet(uint256 _maxPerWallet) public onlyOwner {
    maxPerWallet = _maxPerWallet;
  }

  function setTotalFree(uint256 _totalFree) public onlyOwner {
    totalFree = _totalFree;
  }

  function setMaxPerFreeWallet(uint256 _maxPerFreeWallet) public onlyOwner {
    maxPerFreeWallet = _maxPerFreeWallet;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }  

  function withdraw() public onlyOwner nonReentrant {
    (bool os, ) = payable(owner()).call{value: address(this).balance}('');
    require(os);
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

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

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

  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
      require(_exists(_tokenId), "URI does not exist!");

      if (revealed) {
          return string(abi.encodePacked(_baseURI(), _tokenId.toString(), ".json"));
      } else {
          return hiddenMetadataUri;
      }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","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":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerFreeWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerFree","type":"uint256"}],"name":"setMaxPerFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerFreeWallet","type":"uint256"}],"name":"setMaxPerFreeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalFree","type":"uint256"}],"name":"setTotalFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526605543df729c000600d55610457600e55600a600f5560de6010556005601155600260125560026013556001601460006101000a81548160ff0219169083151502179055503480156200005657600080fd5b5060405162004cc638038062004cc683398181016040528101906200007c91906200094d565b6040518060400160405280601381526020017f4269672041737320476f626c696e73204e4654000000000000000000000000008152506040518060400160405280600781526020017f424153474e465400000000000000000000000000000000000000000000000000815250816002908051906020019062000100929190620007d6565b50806003908051906020019062000119929190620007d6565b506200012a6200018560201b60201c565b600081905550505062000152620001466200018e60201b60201c565b6200019660201b60201c565b60016009819055506200016d3360016200025c60201b60201c565b6200017e816200028260201b60201c565b5062000cfc565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200027e8282604051806020016040528060008152506200032d60201b60201c565b5050565b620002926200018e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002b86200061260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000a7c565b60405180910390fd5b80600b908051906020019062000329929190620007d6565b5050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200039b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415620003d7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620003ec60008583866200063c60201b60201c565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e162000459600185146200064260201b60201c565b901b60a042901b62000471866200064c60201b60201c565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b1462000582575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200052e60008784806001019550876200065660201b60201c565b62000565576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210620004b75782600054146200057c57600080fd5b620005ee565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821062000583575b8160008190555050506200060c6000858386620007c860201b60201c565b50505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b50505050565b6000819050919050565b6000819050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000684620007ce60201b60201c565b8786866040518563ffffffff1660e01b8152600401620006a8949392919062000a28565b602060405180830381600087803b158015620006c357600080fd5b505af1925050508015620006f757506040513d601f19601f82011682018060405250810190620006f491906200091b565b60015b62000775573d80600081146200072a576040519150601f19603f3d011682016040523d82523d6000602084013e6200072f565b606091505b506000815114156200076d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600033905090565b828054620007e49062000bca565b90600052602060002090601f01602090048101928262000808576000855562000854565b82601f106200082357805160ff191683800117855562000854565b8280016001018555821562000854579182015b828111156200085357825182559160200191906001019062000836565b5b50905062000863919062000867565b5090565b5b808211156200088257600081600090555060010162000868565b5090565b60006200089d620008978462000ac7565b62000a9e565b905082815260208101848484011115620008bc57620008bb62000c99565b5b620008c984828562000b94565b509392505050565b600081519050620008e28162000ce2565b92915050565b600082601f8301126200090057620008ff62000c94565b5b81516200091284826020860162000886565b91505092915050565b60006020828403121562000934576200093362000ca3565b5b60006200094484828501620008d1565b91505092915050565b60006020828403121562000966576200096562000ca3565b5b600082015167ffffffffffffffff81111562000987576200098662000c9e565b5b6200099584828501620008e8565b91505092915050565b620009a98162000b2a565b82525050565b6000620009bc8262000afd565b620009c8818562000b08565b9350620009da81856020860162000b94565b620009e58162000ca8565b840191505092915050565b6000620009ff60208362000b19565b915062000a0c8262000cb9565b602082019050919050565b62000a228162000b8a565b82525050565b600060808201905062000a3f60008301876200099e565b62000a4e60208301866200099e565b62000a5d604083018562000a17565b818103606083015262000a718184620009af565b905095945050505050565b6000602082019050818103600083015262000a9781620009f0565b9050919050565b600062000aaa62000abd565b905062000ab8828262000c00565b919050565b6000604051905090565b600067ffffffffffffffff82111562000ae55762000ae462000c65565b5b62000af08262000ca8565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000b378262000b6a565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000bb457808201518184015260208101905062000b97565b8381111562000bc4576000848401525b50505050565b6000600282049050600182168062000be357607f821691505b6020821081141562000bfa5762000bf962000c36565b5b50919050565b62000c0b8262000ca8565b810181811067ffffffffffffffff8211171562000c2d5762000c2c62000c65565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000ced8162000b3e565b811462000cf957600080fd5b50565b613fba8062000d0c6000396000f3fe6080604052600436106102675760003560e01c8063715018a611610144578063c7c39ffc116100b6578063e0a808531161007a578063e0a80853146108fd578063e268e4d314610926578063e945971c1461094f578063e985e9c514610978578063efbd73f4146109b5578063f2fde38b146109de57610267565b8063c7c39ffc14610802578063c87b56dd1461082d578063cfc86f7b1461086a578063d5abeb0114610895578063dc33e681146108c057610267565b8063a0712d6811610108578063a0712d6814610715578063a09fa94114610731578063a22cb4651461075c578063a45ba8e714610785578063b071401b146107b0578063b88d4fde146107d957610267565b8063715018a6146106525780638da5cb5b1461066957806394354fd01461069457806395d89b41146106bf578063a035b1fe146106ea57610267565b8063438b6300116101dd57806355f804b3116101a157806355f804b314610532578063563aaf111461055b5780635c975abb146105845780635e85d3a3146105af5780636352211e146105d857806370a082311461061557610267565b8063438b63001461044d57806344a0d68a1461048a578063453c2310146104b35780634fdd43cb146104de578063518302271461050757610267565b806316c38b3c1161022f57806316c38b3c1461036557806318160ddd1461038e57806323b872dd146103b9578063333e44e6146103e25780633ccfd60b1461040d57806342842e0e1461042457610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806313faede61461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061318b565b610a07565b6040516102a091906136ae565b60405180910390f35b3480156102b557600080fd5b506102be610a99565b6040516102cb91906136c9565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061327b565b610b2b565b6040516103089190613625565b60405180910390f35b34801561031d57600080fd5b506103386004803603810190610333919061311e565b610ba7565b005b34801561034657600080fd5b5061034f610d4e565b60405161035c919061382b565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061315e565b610d54565b005b34801561039a57600080fd5b506103a3610ded565b6040516103b0919061382b565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613008565b610e04565b005b3480156103ee57600080fd5b506103f7610e14565b604051610404919061382b565b60405180910390f35b34801561041957600080fd5b50610422610e1a565b005b34801561043057600080fd5b5061044b60048036038101906104469190613008565b610f6c565b005b34801561045957600080fd5b50610474600480360381019061046f9190612f9b565b610f8c565b604051610481919061368c565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac919061327b565b610ff2565b005b3480156104bf57600080fd5b506104c8611078565b6040516104d5919061382b565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190613232565b61107e565b005b34801561051357600080fd5b5061051c611114565b60405161052991906136ae565b60405180910390f35b34801561053e57600080fd5b50610559600480360381019061055491906131e5565b611127565b005b34801561056757600080fd5b50610582600480360381019061057d919061327b565b6111b9565b005b34801561059057600080fd5b5061059961123f565b6040516105a691906136ae565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d1919061327b565b611252565b005b3480156105e457600080fd5b506105ff60048036038101906105fa919061327b565b6112d8565b60405161060c9190613625565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190612f9b565b6112ea565b604051610649919061382b565b60405180910390f35b34801561065e57600080fd5b506106676113a3565b005b34801561067557600080fd5b5061067e61142b565b60405161068b9190613625565b60405180910390f35b3480156106a057600080fd5b506106a9611455565b6040516106b6919061382b565b60405180910390f35b3480156106cb57600080fd5b506106d461145b565b6040516106e191906136c9565b60405180910390f35b3480156106f657600080fd5b506106ff6114ed565b60405161070c919061382b565b60405180910390f35b61072f600480360381019061072a919061327b565b6114f3565b005b34801561073d57600080fd5b50610746611740565b604051610753919061382b565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e91906130de565b611746565b005b34801561079157600080fd5b5061079a6118be565b6040516107a791906136c9565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d2919061327b565b61194c565b005b3480156107e557600080fd5b5061080060048036038101906107fb919061305b565b6119d2565b005b34801561080e57600080fd5b50610817611a45565b604051610824919061382b565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f919061327b565b611a4b565b60405161086191906136c9565b60405180910390f35b34801561087657600080fd5b5061087f611b75565b60405161088c91906136c9565b60405180910390f35b3480156108a157600080fd5b506108aa611c03565b6040516108b7919061382b565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e29190612f9b565b611c09565b6040516108f4919061382b565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f919061315e565b611c1b565b005b34801561093257600080fd5b5061094d6004803603810190610948919061327b565b611cb4565b005b34801561095b57600080fd5b506109766004803603810190610971919061327b565b611d3a565b005b34801561098457600080fd5b5061099f600480360381019061099a9190612fc8565b611dc0565b6040516109ac91906136ae565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d791906132a8565b611e54565b005b3480156109ea57600080fd5b50610a056004803603810190610a009190612f9b565b611f88565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a925750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610aa890613b1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad490613b1f565b8015610b215780601f10610af657610100808354040283529160200191610b21565b820191906000526020600020905b815481529060010190602001808311610b0457829003601f168201915b5050505050905090565b6000610b3682612080565b610b6c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bb2826120df565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c396121ad565b73ffffffffffffffffffffffffffffffffffffffff1614610c9c57610c6581610c606121ad565b611dc0565b610c9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600c5481565b610d5c6121b5565b73ffffffffffffffffffffffffffffffffffffffff16610d7a61142b565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc79061374b565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000610df76121bd565b6001546000540303905090565b610e0f8383836121c6565b505050565b60105481565b610e226121b5565b73ffffffffffffffffffffffffffffffffffffffff16610e4061142b565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d9061374b565b60405180910390fd5b60026009541415610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed3906137cb565b60405180910390fd5b60026009819055506000610eee61142b565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f1190613610565b60006040518083038185875af1925050503d8060008114610f4e576040519150601f19603f3d011682016040523d82523d6000602084013e610f53565b606091505b5050905080610f6157600080fd5b506001600981905550565b610f87838383604051806020016040528060008152506119d2565b505050565b60606000610f99836112ea565b905060008167ffffffffffffffff811115610fb757610fb6613cb8565b5b604051908082528060200260200182016040528015610fe55781602001602082028036833780820191505090505b5090508092505050919050565b610ffa6121b5565b73ffffffffffffffffffffffffffffffffffffffff1661101861142b565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110659061374b565b60405180910390fd5b80600d8190555050565b600f5481565b6110866121b5565b73ffffffffffffffffffffffffffffffffffffffff166110a461142b565b73ffffffffffffffffffffffffffffffffffffffff16146110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f19061374b565b60405180910390fd5b80600b9080519060200190611110929190612cd3565b5050565b601460019054906101000a900460ff1681565b61112f6121b5565b73ffffffffffffffffffffffffffffffffffffffff1661114d61142b565b73ffffffffffffffffffffffffffffffffffffffff16146111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a9061374b565b60405180910390fd5b8181600a91906111b4929190612d59565b505050565b6111c16121b5565b73ffffffffffffffffffffffffffffffffffffffff166111df61142b565b73ffffffffffffffffffffffffffffffffffffffff1614611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c9061374b565b60405180910390fd5b8060108190555050565b601460009054906101000a900460ff1681565b61125a6121b5565b73ffffffffffffffffffffffffffffffffffffffff1661127861142b565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c59061374b565b60405180910390fd5b8060138190555050565b60006112e3826120df565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611352576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6113ab6121b5565b73ffffffffffffffffffffffffffffffffffffffff166113c961142b565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114169061374b565b60405180910390fd5b6114296000612570565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606003805461146a90613b1f565b80601f016020809104026020016040519081016040528092919081815260200182805461149690613b1f565b80156114e35780601f106114b8576101008083540402835291602001916114e3565b820191906000526020600020905b8154815290600101906020018083116114c657829003601f168201915b5050505050905090565b600d5481565b8060008111801561150657506011548111155b611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c9061370b565b60405180910390fd5b600e5481611551610ded565b61155b9190613954565b111561159c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611593906137ab565b60405180910390fd5b8180600c546115ab91906139db565b3410156115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e49061380b565b60405180910390fd5b600d54600c8190555060016010546116059190613954565b8361160e610ded565b6116189190613954565b10156116d2576000600c81905550601254831115801561163a57506000600c54145b611679576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116709061376b565b60405180910390fd5b6013548361168633611c09565b6116909190613954565b11156116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c89061378b565b60405180910390fd5b5b600f54836116df33611c09565b6116e99190613954565b111561172a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117219061372b565b60405180910390fd5b61173b6117356121b5565b84612636565b505050565b60135481565b61174e6121ad565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006117c06121ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661186d6121ad565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118b291906136ae565b60405180910390a35050565b600b80546118cb90613b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546118f790613b1f565b80156119445780601f1061191957610100808354040283529160200191611944565b820191906000526020600020905b81548152906001019060200180831161192757829003601f168201915b505050505081565b6119546121b5565b73ffffffffffffffffffffffffffffffffffffffff1661197261142b565b73ffffffffffffffffffffffffffffffffffffffff16146119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bf9061374b565b60405180910390fd5b8060118190555050565b6119dd8484846121c6565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611a3f57611a0884848484612654565b611a3e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60125481565b6060611a5682612080565b611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906137eb565b60405180910390fd5b601460019054906101000a900460ff1615611ae257611ab26127b4565b611abb83612846565b604051602001611acc9291906135e1565b6040516020818303038152906040529050611b70565b600b8054611aef90613b1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1b90613b1f565b8015611b685780601f10611b3d57610100808354040283529160200191611b68565b820191906000526020600020905b815481529060010190602001808311611b4b57829003601f168201915b505050505090505b919050565b600a8054611b8290613b1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611bae90613b1f565b8015611bfb5780601f10611bd057610100808354040283529160200191611bfb565b820191906000526020600020905b815481529060010190602001808311611bde57829003601f168201915b505050505081565b600e5481565b6000611c14826129a7565b9050919050565b611c236121b5565b73ffffffffffffffffffffffffffffffffffffffff16611c4161142b565b73ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e9061374b565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b611cbc6121b5565b73ffffffffffffffffffffffffffffffffffffffff16611cda61142b565b73ffffffffffffffffffffffffffffffffffffffff1614611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d279061374b565b60405180910390fd5b80600f8190555050565b611d426121b5565b73ffffffffffffffffffffffffffffffffffffffff16611d6061142b565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad9061374b565b60405180910390fd5b8060128190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611e6757506011548111155b611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d9061370b565b60405180910390fd5b600e5481611eb2610ded565b611ebc9190613954565b1115611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef4906137ab565b60405180910390fd5b611f056121b5565b73ffffffffffffffffffffffffffffffffffffffff16611f2361142b565b73ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f709061374b565b60405180910390fd5b611f838284612636565b505050565b611f906121b5565b73ffffffffffffffffffffffffffffffffffffffff16611fae61142b565b73ffffffffffffffffffffffffffffffffffffffff1614612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb9061374b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b906136eb565b60405180910390fd5b61207d81612570565b50565b60008161208b6121bd565b1115801561209a575060005482105b80156120d8575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806120ee6121bd565b11612176576000548110156121755760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612173575b600081141561216957600460008360019003935083815260200190815260200160002054905061213e565b80925050506121a8565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b60006001905090565b60006121d1826120df565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612238576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166122596121ad565b73ffffffffffffffffffffffffffffffffffffffff1614806122885750612287856122826121ad565b611dc0565b5b806122cd57506122966121ad565b73ffffffffffffffffffffffffffffffffffffffff166122b584610b2b565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612306576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561236d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a85858560016129fe565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61247786612a04565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831614156125015760006001840190506000600460008381526020019081526020016000205414156124ff5760005481146124fe578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125698585856001612a0e565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612650828260405180602001604052806000815250612a14565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261267a6121ad565b8786866040518563ffffffff1660e01b815260040161269c9493929190613640565b602060405180830381600087803b1580156126b657600080fd5b505af19250505080156126e757506040513d601f19601f820116820180604052508101906126e491906131b8565b60015b612761573d8060008114612717576040519150601f19603f3d011682016040523d82523d6000602084013e61271c565b606091505b50600081511415612759576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546127c390613b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546127ef90613b1f565b801561283c5780601f106128115761010080835404028352916020019161283c565b820191906000526020600020905b81548152906001019060200180831161281f57829003601f168201915b5050505050905090565b6060600082141561288e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129a2565b600082905060005b600082146128c05780806128a990613b82565b915050600a826128b991906139aa565b9150612896565b60008167ffffffffffffffff8111156128dc576128db613cb8565b5b6040519080825280601f01601f19166020018201604052801561290e5781602001600182028036833780820191505090505b5090505b6000851461299b576001826129279190613a35565b9150600a856129369190613bcb565b60306129429190613954565b60f81b81838151811061295857612957613c89565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561299491906139aa565b9450612912565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a81576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612abc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ac960008583866129fe565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612b2e60018514612cc9565b901b60a042901b612b3e86612a04565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612c42575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bf26000878480600101955087612654565b612c28576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612b83578260005414612c3d57600080fd5b612cad565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612c43575b816000819055505050612cc36000858386612a0e565b50505050565b6000819050919050565b828054612cdf90613b1f565b90600052602060002090601f016020900481019282612d015760008555612d48565b82601f10612d1a57805160ff1916838001178555612d48565b82800160010185558215612d48579182015b82811115612d47578251825591602001919060010190612d2c565b5b509050612d559190612ddf565b5090565b828054612d6590613b1f565b90600052602060002090601f016020900481019282612d875760008555612dce565b82601f10612da057803560ff1916838001178555612dce565b82800160010185558215612dce579182015b82811115612dcd578235825591602001919060010190612db2565b5b509050612ddb9190612ddf565b5090565b5b80821115612df8576000816000905550600101612de0565b5090565b6000612e0f612e0a8461386b565b613846565b905082815260208101848484011115612e2b57612e2a613cf6565b5b612e36848285613add565b509392505050565b6000612e51612e4c8461389c565b613846565b905082815260208101848484011115612e6d57612e6c613cf6565b5b612e78848285613add565b509392505050565b600081359050612e8f81613f28565b92915050565b600081359050612ea481613f3f565b92915050565b600081359050612eb981613f56565b92915050565b600081519050612ece81613f56565b92915050565b600082601f830112612ee957612ee8613cec565b5b8135612ef9848260208601612dfc565b91505092915050565b60008083601f840112612f1857612f17613cec565b5b8235905067ffffffffffffffff811115612f3557612f34613ce7565b5b602083019150836001820283011115612f5157612f50613cf1565b5b9250929050565b600082601f830112612f6d57612f6c613cec565b5b8135612f7d848260208601612e3e565b91505092915050565b600081359050612f9581613f6d565b92915050565b600060208284031215612fb157612fb0613d00565b5b6000612fbf84828501612e80565b91505092915050565b60008060408385031215612fdf57612fde613d00565b5b6000612fed85828601612e80565b9250506020612ffe85828601612e80565b9150509250929050565b60008060006060848603121561302157613020613d00565b5b600061302f86828701612e80565b935050602061304086828701612e80565b925050604061305186828701612f86565b9150509250925092565b6000806000806080858703121561307557613074613d00565b5b600061308387828801612e80565b945050602061309487828801612e80565b93505060406130a587828801612f86565b925050606085013567ffffffffffffffff8111156130c6576130c5613cfb565b5b6130d287828801612ed4565b91505092959194509250565b600080604083850312156130f5576130f4613d00565b5b600061310385828601612e80565b925050602061311485828601612e95565b9150509250929050565b6000806040838503121561313557613134613d00565b5b600061314385828601612e80565b925050602061315485828601612f86565b9150509250929050565b60006020828403121561317457613173613d00565b5b600061318284828501612e95565b91505092915050565b6000602082840312156131a1576131a0613d00565b5b60006131af84828501612eaa565b91505092915050565b6000602082840312156131ce576131cd613d00565b5b60006131dc84828501612ebf565b91505092915050565b600080602083850312156131fc576131fb613d00565b5b600083013567ffffffffffffffff81111561321a57613219613cfb565b5b61322685828601612f02565b92509250509250929050565b60006020828403121561324857613247613d00565b5b600082013567ffffffffffffffff81111561326657613265613cfb565b5b61327284828501612f58565b91505092915050565b60006020828403121561329157613290613d00565b5b600061329f84828501612f86565b91505092915050565b600080604083850312156132bf576132be613d00565b5b60006132cd85828601612f86565b92505060206132de85828601612e80565b9150509250929050565b60006132f483836135c3565b60208301905092915050565b61330981613a69565b82525050565b600061331a826138dd565b613324818561390b565b935061332f836138cd565b8060005b8381101561336057815161334788826132e8565b9750613352836138fe565b925050600181019050613333565b5085935050505092915050565b61337681613a7b565b82525050565b6000613387826138e8565b613391818561391c565b93506133a1818560208601613aec565b6133aa81613d05565b840191505092915050565b60006133c0826138f3565b6133ca8185613938565b93506133da818560208601613aec565b6133e381613d05565b840191505092915050565b60006133f9826138f3565b6134038185613949565b9350613413818560208601613aec565b80840191505092915050565b600061342c602683613938565b915061343782613d16565b604082019050919050565b600061344f601483613938565b915061345a82613d65565b602082019050919050565b6000613472601483613938565b915061347d82613d8e565b602082019050919050565b6000613495600583613949565b91506134a082613db7565b600582019050919050565b60006134b8602083613938565b91506134c382613de0565b602082019050919050565b60006134db601483613938565b91506134e682613e09565b602082019050919050565b60006134fe602183613938565b915061350982613e32565b604082019050919050565b600061352160008361392d565b915061352c82613e81565b600082019050919050565b6000613544601483613938565b915061354f82613e84565b602082019050919050565b6000613567601f83613938565b915061357282613ead565b602082019050919050565b600061358a601383613938565b915061359582613ed6565b602082019050919050565b60006135ad601383613938565b91506135b882613eff565b602082019050919050565b6135cc81613ad3565b82525050565b6135db81613ad3565b82525050565b60006135ed82856133ee565b91506135f982846133ee565b915061360482613488565b91508190509392505050565b600061361b82613514565b9150819050919050565b600060208201905061363a6000830184613300565b92915050565b60006080820190506136556000830187613300565b6136626020830186613300565b61366f60408301856135d2565b8181036060830152613681818461337c565b905095945050505050565b600060208201905081810360008301526136a6818461330f565b905092915050565b60006020820190506136c3600083018461336d565b92915050565b600060208201905081810360008301526136e381846133b5565b905092915050565b600060208201905081810360008301526137048161341f565b9050919050565b6000602082019050818103600083015261372481613442565b9050919050565b6000602082019050818103600083015261374481613465565b9050919050565b60006020820190508181036000830152613764816134ab565b9050919050565b60006020820190508181036000830152613784816134ce565b9050919050565b600060208201905081810360008301526137a4816134f1565b9050919050565b600060208201905081810360008301526137c481613537565b9050919050565b600060208201905081810360008301526137e48161355a565b9050919050565b600060208201905081810360008301526138048161357d565b9050919050565b60006020820190508181036000830152613824816135a0565b9050919050565b600060208201905061384060008301846135d2565b92915050565b6000613850613861565b905061385c8282613b51565b919050565b6000604051905090565b600067ffffffffffffffff82111561388657613885613cb8565b5b61388f82613d05565b9050602081019050919050565b600067ffffffffffffffff8211156138b7576138b6613cb8565b5b6138c082613d05565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061395f82613ad3565b915061396a83613ad3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561399f5761399e613bfc565b5b828201905092915050565b60006139b582613ad3565b91506139c083613ad3565b9250826139d0576139cf613c2b565b5b828204905092915050565b60006139e682613ad3565b91506139f183613ad3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a2a57613a29613bfc565b5b828202905092915050565b6000613a4082613ad3565b9150613a4b83613ad3565b925082821015613a5e57613a5d613bfc565b5b828203905092915050565b6000613a7482613ab3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b0a578082015181840152602081019050613aef565b83811115613b19576000848401525b50505050565b60006002820490506001821680613b3757607f821691505b60208210811415613b4b57613b4a613c5a565b5b50919050565b613b5a82613d05565b810181811067ffffffffffffffff82111715613b7957613b78613cb8565b5b80604052505050565b6000613b8d82613ad3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc057613bbf613bfc565b5b600182019050919050565b6000613bd682613ad3565b9150613be183613ad3565b925082613bf157613bf0613c2b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f546f6f206d616e79207065722077616c6c657421000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6f206d616e792046726565206d696e747321000000000000000000000000600082015250565b7f46726565206d696e74206c696d697420686173206265656e207265616368656460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f55524920646f6573206e6f742065786973742100000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613f3181613a69565b8114613f3c57600080fd5b50565b613f4881613a7b565b8114613f5357600080fd5b50565b613f5f81613a87565b8114613f6a57600080fd5b50565b613f7681613ad3565b8114613f8157600080fd5b5056fea2646970667358221220186f7a280c9fd1b7487850ede709a89de71d8577da60295322fb1f2627e21aef64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6562453878746453354c35796461503464646966637476536e5367424873703351763772737574557a48476a2f00000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c8063715018a611610144578063c7c39ffc116100b6578063e0a808531161007a578063e0a80853146108fd578063e268e4d314610926578063e945971c1461094f578063e985e9c514610978578063efbd73f4146109b5578063f2fde38b146109de57610267565b8063c7c39ffc14610802578063c87b56dd1461082d578063cfc86f7b1461086a578063d5abeb0114610895578063dc33e681146108c057610267565b8063a0712d6811610108578063a0712d6814610715578063a09fa94114610731578063a22cb4651461075c578063a45ba8e714610785578063b071401b146107b0578063b88d4fde146107d957610267565b8063715018a6146106525780638da5cb5b1461066957806394354fd01461069457806395d89b41146106bf578063a035b1fe146106ea57610267565b8063438b6300116101dd57806355f804b3116101a157806355f804b314610532578063563aaf111461055b5780635c975abb146105845780635e85d3a3146105af5780636352211e146105d857806370a082311461061557610267565b8063438b63001461044d57806344a0d68a1461048a578063453c2310146104b35780634fdd43cb146104de578063518302271461050757610267565b806316c38b3c1161022f57806316c38b3c1461036557806318160ddd1461038e57806323b872dd146103b9578063333e44e6146103e25780633ccfd60b1461040d57806342842e0e1461042457610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806313faede61461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061318b565b610a07565b6040516102a091906136ae565b60405180910390f35b3480156102b557600080fd5b506102be610a99565b6040516102cb91906136c9565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061327b565b610b2b565b6040516103089190613625565b60405180910390f35b34801561031d57600080fd5b506103386004803603810190610333919061311e565b610ba7565b005b34801561034657600080fd5b5061034f610d4e565b60405161035c919061382b565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061315e565b610d54565b005b34801561039a57600080fd5b506103a3610ded565b6040516103b0919061382b565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613008565b610e04565b005b3480156103ee57600080fd5b506103f7610e14565b604051610404919061382b565b60405180910390f35b34801561041957600080fd5b50610422610e1a565b005b34801561043057600080fd5b5061044b60048036038101906104469190613008565b610f6c565b005b34801561045957600080fd5b50610474600480360381019061046f9190612f9b565b610f8c565b604051610481919061368c565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac919061327b565b610ff2565b005b3480156104bf57600080fd5b506104c8611078565b6040516104d5919061382b565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190613232565b61107e565b005b34801561051357600080fd5b5061051c611114565b60405161052991906136ae565b60405180910390f35b34801561053e57600080fd5b50610559600480360381019061055491906131e5565b611127565b005b34801561056757600080fd5b50610582600480360381019061057d919061327b565b6111b9565b005b34801561059057600080fd5b5061059961123f565b6040516105a691906136ae565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d1919061327b565b611252565b005b3480156105e457600080fd5b506105ff60048036038101906105fa919061327b565b6112d8565b60405161060c9190613625565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190612f9b565b6112ea565b604051610649919061382b565b60405180910390f35b34801561065e57600080fd5b506106676113a3565b005b34801561067557600080fd5b5061067e61142b565b60405161068b9190613625565b60405180910390f35b3480156106a057600080fd5b506106a9611455565b6040516106b6919061382b565b60405180910390f35b3480156106cb57600080fd5b506106d461145b565b6040516106e191906136c9565b60405180910390f35b3480156106f657600080fd5b506106ff6114ed565b60405161070c919061382b565b60405180910390f35b61072f600480360381019061072a919061327b565b6114f3565b005b34801561073d57600080fd5b50610746611740565b604051610753919061382b565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e91906130de565b611746565b005b34801561079157600080fd5b5061079a6118be565b6040516107a791906136c9565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d2919061327b565b61194c565b005b3480156107e557600080fd5b5061080060048036038101906107fb919061305b565b6119d2565b005b34801561080e57600080fd5b50610817611a45565b604051610824919061382b565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f919061327b565b611a4b565b60405161086191906136c9565b60405180910390f35b34801561087657600080fd5b5061087f611b75565b60405161088c91906136c9565b60405180910390f35b3480156108a157600080fd5b506108aa611c03565b6040516108b7919061382b565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e29190612f9b565b611c09565b6040516108f4919061382b565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f919061315e565b611c1b565b005b34801561093257600080fd5b5061094d6004803603810190610948919061327b565b611cb4565b005b34801561095b57600080fd5b506109766004803603810190610971919061327b565b611d3a565b005b34801561098457600080fd5b5061099f600480360381019061099a9190612fc8565b611dc0565b6040516109ac91906136ae565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d791906132a8565b611e54565b005b3480156109ea57600080fd5b50610a056004803603810190610a009190612f9b565b611f88565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a925750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610aa890613b1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad490613b1f565b8015610b215780601f10610af657610100808354040283529160200191610b21565b820191906000526020600020905b815481529060010190602001808311610b0457829003601f168201915b5050505050905090565b6000610b3682612080565b610b6c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bb2826120df565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c396121ad565b73ffffffffffffffffffffffffffffffffffffffff1614610c9c57610c6581610c606121ad565b611dc0565b610c9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600c5481565b610d5c6121b5565b73ffffffffffffffffffffffffffffffffffffffff16610d7a61142b565b73ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc79061374b565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000610df76121bd565b6001546000540303905090565b610e0f8383836121c6565b505050565b60105481565b610e226121b5565b73ffffffffffffffffffffffffffffffffffffffff16610e4061142b565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d9061374b565b60405180910390fd5b60026009541415610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed3906137cb565b60405180910390fd5b60026009819055506000610eee61142b565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f1190613610565b60006040518083038185875af1925050503d8060008114610f4e576040519150601f19603f3d011682016040523d82523d6000602084013e610f53565b606091505b5050905080610f6157600080fd5b506001600981905550565b610f87838383604051806020016040528060008152506119d2565b505050565b60606000610f99836112ea565b905060008167ffffffffffffffff811115610fb757610fb6613cb8565b5b604051908082528060200260200182016040528015610fe55781602001602082028036833780820191505090505b5090508092505050919050565b610ffa6121b5565b73ffffffffffffffffffffffffffffffffffffffff1661101861142b565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110659061374b565b60405180910390fd5b80600d8190555050565b600f5481565b6110866121b5565b73ffffffffffffffffffffffffffffffffffffffff166110a461142b565b73ffffffffffffffffffffffffffffffffffffffff16146110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f19061374b565b60405180910390fd5b80600b9080519060200190611110929190612cd3565b5050565b601460019054906101000a900460ff1681565b61112f6121b5565b73ffffffffffffffffffffffffffffffffffffffff1661114d61142b565b73ffffffffffffffffffffffffffffffffffffffff16146111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a9061374b565b60405180910390fd5b8181600a91906111b4929190612d59565b505050565b6111c16121b5565b73ffffffffffffffffffffffffffffffffffffffff166111df61142b565b73ffffffffffffffffffffffffffffffffffffffff1614611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c9061374b565b60405180910390fd5b8060108190555050565b601460009054906101000a900460ff1681565b61125a6121b5565b73ffffffffffffffffffffffffffffffffffffffff1661127861142b565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c59061374b565b60405180910390fd5b8060138190555050565b60006112e3826120df565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611352576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6113ab6121b5565b73ffffffffffffffffffffffffffffffffffffffff166113c961142b565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114169061374b565b60405180910390fd5b6114296000612570565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606003805461146a90613b1f565b80601f016020809104026020016040519081016040528092919081815260200182805461149690613b1f565b80156114e35780601f106114b8576101008083540402835291602001916114e3565b820191906000526020600020905b8154815290600101906020018083116114c657829003601f168201915b5050505050905090565b600d5481565b8060008111801561150657506011548111155b611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c9061370b565b60405180910390fd5b600e5481611551610ded565b61155b9190613954565b111561159c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611593906137ab565b60405180910390fd5b8180600c546115ab91906139db565b3410156115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e49061380b565b60405180910390fd5b600d54600c8190555060016010546116059190613954565b8361160e610ded565b6116189190613954565b10156116d2576000600c81905550601254831115801561163a57506000600c54145b611679576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116709061376b565b60405180910390fd5b6013548361168633611c09565b6116909190613954565b11156116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c89061378b565b60405180910390fd5b5b600f54836116df33611c09565b6116e99190613954565b111561172a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117219061372b565b60405180910390fd5b61173b6117356121b5565b84612636565b505050565b60135481565b61174e6121ad565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117b3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006117c06121ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661186d6121ad565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118b291906136ae565b60405180910390a35050565b600b80546118cb90613b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546118f790613b1f565b80156119445780601f1061191957610100808354040283529160200191611944565b820191906000526020600020905b81548152906001019060200180831161192757829003601f168201915b505050505081565b6119546121b5565b73ffffffffffffffffffffffffffffffffffffffff1661197261142b565b73ffffffffffffffffffffffffffffffffffffffff16146119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bf9061374b565b60405180910390fd5b8060118190555050565b6119dd8484846121c6565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611a3f57611a0884848484612654565b611a3e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60125481565b6060611a5682612080565b611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906137eb565b60405180910390fd5b601460019054906101000a900460ff1615611ae257611ab26127b4565b611abb83612846565b604051602001611acc9291906135e1565b6040516020818303038152906040529050611b70565b600b8054611aef90613b1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1b90613b1f565b8015611b685780601f10611b3d57610100808354040283529160200191611b68565b820191906000526020600020905b815481529060010190602001808311611b4b57829003601f168201915b505050505090505b919050565b600a8054611b8290613b1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611bae90613b1f565b8015611bfb5780601f10611bd057610100808354040283529160200191611bfb565b820191906000526020600020905b815481529060010190602001808311611bde57829003601f168201915b505050505081565b600e5481565b6000611c14826129a7565b9050919050565b611c236121b5565b73ffffffffffffffffffffffffffffffffffffffff16611c4161142b565b73ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e9061374b565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b611cbc6121b5565b73ffffffffffffffffffffffffffffffffffffffff16611cda61142b565b73ffffffffffffffffffffffffffffffffffffffff1614611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d279061374b565b60405180910390fd5b80600f8190555050565b611d426121b5565b73ffffffffffffffffffffffffffffffffffffffff16611d6061142b565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad9061374b565b60405180910390fd5b8060128190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611e6757506011548111155b611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d9061370b565b60405180910390fd5b600e5481611eb2610ded565b611ebc9190613954565b1115611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef4906137ab565b60405180910390fd5b611f056121b5565b73ffffffffffffffffffffffffffffffffffffffff16611f2361142b565b73ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f709061374b565b60405180910390fd5b611f838284612636565b505050565b611f906121b5565b73ffffffffffffffffffffffffffffffffffffffff16611fae61142b565b73ffffffffffffffffffffffffffffffffffffffff1614612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb9061374b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b906136eb565b60405180910390fd5b61207d81612570565b50565b60008161208b6121bd565b1115801561209a575060005482105b80156120d8575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806120ee6121bd565b11612176576000548110156121755760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612173575b600081141561216957600460008360019003935083815260200190815260200160002054905061213e565b80925050506121a8565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b60006001905090565b60006121d1826120df565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612238576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166122596121ad565b73ffffffffffffffffffffffffffffffffffffffff1614806122885750612287856122826121ad565b611dc0565b5b806122cd57506122966121ad565b73ffffffffffffffffffffffffffffffffffffffff166122b584610b2b565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612306576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561236d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a85858560016129fe565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61247786612a04565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831614156125015760006001840190506000600460008381526020019081526020016000205414156124ff5760005481146124fe578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125698585856001612a0e565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612650828260405180602001604052806000815250612a14565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261267a6121ad565b8786866040518563ffffffff1660e01b815260040161269c9493929190613640565b602060405180830381600087803b1580156126b657600080fd5b505af19250505080156126e757506040513d601f19601f820116820180604052508101906126e491906131b8565b60015b612761573d8060008114612717576040519150601f19603f3d011682016040523d82523d6000602084013e61271c565b606091505b50600081511415612759576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546127c390613b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546127ef90613b1f565b801561283c5780601f106128115761010080835404028352916020019161283c565b820191906000526020600020905b81548152906001019060200180831161281f57829003601f168201915b5050505050905090565b6060600082141561288e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129a2565b600082905060005b600082146128c05780806128a990613b82565b915050600a826128b991906139aa565b9150612896565b60008167ffffffffffffffff8111156128dc576128db613cb8565b5b6040519080825280601f01601f19166020018201604052801561290e5781602001600182028036833780820191505090505b5090505b6000851461299b576001826129279190613a35565b9150600a856129369190613bcb565b60306129429190613954565b60f81b81838151811061295857612957613c89565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561299491906139aa565b9450612912565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a81576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612abc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ac960008583866129fe565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612b2e60018514612cc9565b901b60a042901b612b3e86612a04565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612c42575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bf26000878480600101955087612654565b612c28576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612b83578260005414612c3d57600080fd5b612cad565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612c43575b816000819055505050612cc36000858386612a0e565b50505050565b6000819050919050565b828054612cdf90613b1f565b90600052602060002090601f016020900481019282612d015760008555612d48565b82601f10612d1a57805160ff1916838001178555612d48565b82800160010185558215612d48579182015b82811115612d47578251825591602001919060010190612d2c565b5b509050612d559190612ddf565b5090565b828054612d6590613b1f565b90600052602060002090601f016020900481019282612d875760008555612dce565b82601f10612da057803560ff1916838001178555612dce565b82800160010185558215612dce579182015b82811115612dcd578235825591602001919060010190612db2565b5b509050612ddb9190612ddf565b5090565b5b80821115612df8576000816000905550600101612de0565b5090565b6000612e0f612e0a8461386b565b613846565b905082815260208101848484011115612e2b57612e2a613cf6565b5b612e36848285613add565b509392505050565b6000612e51612e4c8461389c565b613846565b905082815260208101848484011115612e6d57612e6c613cf6565b5b612e78848285613add565b509392505050565b600081359050612e8f81613f28565b92915050565b600081359050612ea481613f3f565b92915050565b600081359050612eb981613f56565b92915050565b600081519050612ece81613f56565b92915050565b600082601f830112612ee957612ee8613cec565b5b8135612ef9848260208601612dfc565b91505092915050565b60008083601f840112612f1857612f17613cec565b5b8235905067ffffffffffffffff811115612f3557612f34613ce7565b5b602083019150836001820283011115612f5157612f50613cf1565b5b9250929050565b600082601f830112612f6d57612f6c613cec565b5b8135612f7d848260208601612e3e565b91505092915050565b600081359050612f9581613f6d565b92915050565b600060208284031215612fb157612fb0613d00565b5b6000612fbf84828501612e80565b91505092915050565b60008060408385031215612fdf57612fde613d00565b5b6000612fed85828601612e80565b9250506020612ffe85828601612e80565b9150509250929050565b60008060006060848603121561302157613020613d00565b5b600061302f86828701612e80565b935050602061304086828701612e80565b925050604061305186828701612f86565b9150509250925092565b6000806000806080858703121561307557613074613d00565b5b600061308387828801612e80565b945050602061309487828801612e80565b93505060406130a587828801612f86565b925050606085013567ffffffffffffffff8111156130c6576130c5613cfb565b5b6130d287828801612ed4565b91505092959194509250565b600080604083850312156130f5576130f4613d00565b5b600061310385828601612e80565b925050602061311485828601612e95565b9150509250929050565b6000806040838503121561313557613134613d00565b5b600061314385828601612e80565b925050602061315485828601612f86565b9150509250929050565b60006020828403121561317457613173613d00565b5b600061318284828501612e95565b91505092915050565b6000602082840312156131a1576131a0613d00565b5b60006131af84828501612eaa565b91505092915050565b6000602082840312156131ce576131cd613d00565b5b60006131dc84828501612ebf565b91505092915050565b600080602083850312156131fc576131fb613d00565b5b600083013567ffffffffffffffff81111561321a57613219613cfb565b5b61322685828601612f02565b92509250509250929050565b60006020828403121561324857613247613d00565b5b600082013567ffffffffffffffff81111561326657613265613cfb565b5b61327284828501612f58565b91505092915050565b60006020828403121561329157613290613d00565b5b600061329f84828501612f86565b91505092915050565b600080604083850312156132bf576132be613d00565b5b60006132cd85828601612f86565b92505060206132de85828601612e80565b9150509250929050565b60006132f483836135c3565b60208301905092915050565b61330981613a69565b82525050565b600061331a826138dd565b613324818561390b565b935061332f836138cd565b8060005b8381101561336057815161334788826132e8565b9750613352836138fe565b925050600181019050613333565b5085935050505092915050565b61337681613a7b565b82525050565b6000613387826138e8565b613391818561391c565b93506133a1818560208601613aec565b6133aa81613d05565b840191505092915050565b60006133c0826138f3565b6133ca8185613938565b93506133da818560208601613aec565b6133e381613d05565b840191505092915050565b60006133f9826138f3565b6134038185613949565b9350613413818560208601613aec565b80840191505092915050565b600061342c602683613938565b915061343782613d16565b604082019050919050565b600061344f601483613938565b915061345a82613d65565b602082019050919050565b6000613472601483613938565b915061347d82613d8e565b602082019050919050565b6000613495600583613949565b91506134a082613db7565b600582019050919050565b60006134b8602083613938565b91506134c382613de0565b602082019050919050565b60006134db601483613938565b91506134e682613e09565b602082019050919050565b60006134fe602183613938565b915061350982613e32565b604082019050919050565b600061352160008361392d565b915061352c82613e81565b600082019050919050565b6000613544601483613938565b915061354f82613e84565b602082019050919050565b6000613567601f83613938565b915061357282613ead565b602082019050919050565b600061358a601383613938565b915061359582613ed6565b602082019050919050565b60006135ad601383613938565b91506135b882613eff565b602082019050919050565b6135cc81613ad3565b82525050565b6135db81613ad3565b82525050565b60006135ed82856133ee565b91506135f982846133ee565b915061360482613488565b91508190509392505050565b600061361b82613514565b9150819050919050565b600060208201905061363a6000830184613300565b92915050565b60006080820190506136556000830187613300565b6136626020830186613300565b61366f60408301856135d2565b8181036060830152613681818461337c565b905095945050505050565b600060208201905081810360008301526136a6818461330f565b905092915050565b60006020820190506136c3600083018461336d565b92915050565b600060208201905081810360008301526136e381846133b5565b905092915050565b600060208201905081810360008301526137048161341f565b9050919050565b6000602082019050818103600083015261372481613442565b9050919050565b6000602082019050818103600083015261374481613465565b9050919050565b60006020820190508181036000830152613764816134ab565b9050919050565b60006020820190508181036000830152613784816134ce565b9050919050565b600060208201905081810360008301526137a4816134f1565b9050919050565b600060208201905081810360008301526137c481613537565b9050919050565b600060208201905081810360008301526137e48161355a565b9050919050565b600060208201905081810360008301526138048161357d565b9050919050565b60006020820190508181036000830152613824816135a0565b9050919050565b600060208201905061384060008301846135d2565b92915050565b6000613850613861565b905061385c8282613b51565b919050565b6000604051905090565b600067ffffffffffffffff82111561388657613885613cb8565b5b61388f82613d05565b9050602081019050919050565b600067ffffffffffffffff8211156138b7576138b6613cb8565b5b6138c082613d05565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061395f82613ad3565b915061396a83613ad3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561399f5761399e613bfc565b5b828201905092915050565b60006139b582613ad3565b91506139c083613ad3565b9250826139d0576139cf613c2b565b5b828204905092915050565b60006139e682613ad3565b91506139f183613ad3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a2a57613a29613bfc565b5b828202905092915050565b6000613a4082613ad3565b9150613a4b83613ad3565b925082821015613a5e57613a5d613bfc565b5b828203905092915050565b6000613a7482613ab3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b0a578082015181840152602081019050613aef565b83811115613b19576000848401525b50505050565b60006002820490506001821680613b3757607f821691505b60208210811415613b4b57613b4a613c5a565b5b50919050565b613b5a82613d05565b810181811067ffffffffffffffff82111715613b7957613b78613cb8565b5b80604052505050565b6000613b8d82613ad3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bc057613bbf613bfc565b5b600182019050919050565b6000613bd682613ad3565b9150613be183613ad3565b925082613bf157613bf0613c2b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f546f6f206d616e79207065722077616c6c657421000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6f206d616e792046726565206d696e747321000000000000000000000000600082015250565b7f46726565206d696e74206c696d697420686173206265656e207265616368656460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f55524920646f6573206e6f742065786973742100000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613f3181613a69565b8114613f3c57600080fd5b50565b613f4881613a7b565b8114613f5357600080fd5b50565b613f5f81613a87565b8114613f6a57600080fd5b50565b613f7681613ad3565b8114613f8157600080fd5b5056fea2646970667358221220186f7a280c9fd1b7487850ede709a89de71d8577da60295322fb1f2627e21aef64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6562453878746453354c35796461503464646966637476536e5367424873703351763772737574557a48476a2f00000000000000000000

-----Decoded View---------------
Arg [0] : _hiddenMetadataUri (string): ipfs://QmebE8xtdS5L5ydaP4ddifctvSnSgBHsp3Qv7rsutUzHGj/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d6562453878746453354c35796461503464646966637476
Arg [3] : 536e5367424873703351763772737574557a48476a2f00000000000000000000


Deployed Bytecode Sourcemap

46772:3936:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21412:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26425:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28493:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27953:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46940:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49030:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20466:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29379:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47078:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49865:150;;;;;;;;;;;;;:::i;:::-;;29620:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48569:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49115:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47040:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50021:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47261:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50159:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49499:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47231:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49599:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26214:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22091:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7522:103;;;;;;;;;;;;;:::i;:::-;;6871:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47113:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26594:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46964:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47857:543;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47189:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28769:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46900:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49727:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29876:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47155:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50379:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46868:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47004:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48917:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49196:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49387:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49283:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29148:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48408:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7780:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21412:615;21497:4;21812:10;21797:25;;:11;:25;;;;:102;;;;21889:10;21874:25;;:11;:25;;;;21797:102;:179;;;;21966:10;21951:25;;:11;:25;;;;21797:179;21777:199;;21412:615;;;:::o;26425:100::-;26479:13;26512:5;26505:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26425:100;:::o;28493:204::-;28561:7;28586:16;28594:7;28586;:16::i;:::-;28581:64;;28611:34;;;;;;;;;;;;;;28581:64;28665:15;:24;28681:7;28665:24;;;;;;;;;;;;;;;;;;;;;28658:31;;28493:204;;;:::o;27953:474::-;28026:13;28058:27;28077:7;28058:18;:27::i;:::-;28026:61;;28108:5;28102:11;;:2;:11;;;28098:48;;;28122:24;;;;;;;;;;;;;;28098:48;28186:5;28163:28;;:19;:17;:19::i;:::-;:28;;;28159:175;;28211:44;28228:5;28235:19;:17;:19::i;:::-;28211:16;:44::i;:::-;28206:128;;28283:35;;;;;;;;;;;;;;28206:128;28159:175;28373:2;28346:15;:24;28362:7;28346:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28411:7;28407:2;28391:28;;28400:5;28391:28;;;;;;;;;;;;28015:412;27953:474;;:::o;46940:19::-;;;;:::o;49030:77::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49095:6:::1;49086;;:15;;;;;;;;;;;;;;;;;;49030:77:::0;:::o;20466:315::-;20519:7;20747:15;:13;:15::i;:::-;20732:12;;20716:13;;:28;:46;20709:53;;20466:315;:::o;29379:170::-;29513:28;29523:4;29529:2;29533:7;29513:9;:28::i;:::-;29379:170;;;:::o;47078:30::-;;;;:::o;49865:150::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3969:1:::1;4567:7;;:19;;4559:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3969:1;4700:7;:18;;;;49923:7:::2;49944;:5;:7::i;:::-;49936:21;;49965;49936:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49922:69;;;50006:2;49998:11;;;::::0;::::2;;49915:100;3925:1:::1;4879:7;:22;;;;49865:150::o:0;29620:185::-;29758:39;29775:4;29781:2;29785:7;29758:39;;;;;;;;;;;;:16;:39::i;:::-;29620:185;;;:::o;48569:241::-;48629:16;48654:23;48680:17;48690:6;48680:9;:17::i;:::-;48654:43;;48704:30;48751:15;48737:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48704:63;;48791:13;48784:20;;;;48569:241;;;:::o;49115:75::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49179:5:::1;49171;:13;;;;49115:75:::0;:::o;47040:33::-;;;;:::o;50021:132::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50129:18:::1;50109:17;:38;;;;;;;;;;;;:::i;:::-;;50021:132:::0;:::o;47261:20::-;;;;;;;;;;;;;:::o;50159:98::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50244:7:::1;;50228:13;:23;;;;;;;:::i;:::-;;50159:98:::0;;:::o;49499:94::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49577:10:::1;49565:9;:22;;;;49499:94:::0;:::o;47231:25::-;;;;;;;;;;;;;:::o;49599:122::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49698:17:::1;49679:16;:36;;;;49599:122:::0;:::o;26214:144::-;26278:7;26321:27;26340:7;26321:18;:27::i;:::-;26298:52;;26214:144;;;:::o;22091:224::-;22155:7;22196:1;22179:19;;:5;:19;;;22175:60;;;22207:28;;;;;;;;;;;;;;22175:60;17430:13;22253:18;:25;22272:5;22253:25;;;;;;;;;;;;;;;;:54;22246:61;;22091:224;;;:::o;7522:103::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7587:30:::1;7614:1;7587:18;:30::i;:::-;7522:103::o:0;6871:87::-;6917:7;6944:6;;;;;;;;;;;6937:13;;6871:87;:::o;47113:37::-;;;;:::o;26594:104::-;26650:13;26683:7;26676:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26594:104;:::o;46964:35::-;;;;:::o;47857:543::-;47922:11;47550:1;47536:11;:15;:52;;;;;47570:18;;47555:11;:33;;47536:52;47528:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47659:9;;47644:11;47628:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;47620:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47955:11:::1;47798;47791:4;;:18;;;;:::i;:::-;47778:9;:31;;47770:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47982:5:::2;;47975:4;:12;;;;48039:1;48027:9;;:13;;;;:::i;:::-;48013:11;47997:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:43;47994:265;;;48058:1;48051:4;:8;;;;48091:10;;48076:11;:25;;:38;;;;;48113:1;48105:4;;:9;48076:38;48068:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48198:16;;48183:11;48156:24;48169:10;48156:12;:24::i;:::-;:38;;;;:::i;:::-;:58;;48148:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;47994:265;48315:12;;48300:11;48273:24;48286:10;48273:12;:24::i;:::-;:38;;;;:::i;:::-;:54;;48265:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;48358:36;48368:12;:10;:12::i;:::-;48382:11;48358:9;:36::i;:::-;47700:1:::1;47857:543:::0;;:::o;47189:35::-;;;;:::o;28769:308::-;28880:19;:17;:19::i;:::-;28868:31;;:8;:31;;;28864:61;;;28908:17;;;;;;;;;;;;;;28864:61;28990:8;28938:18;:39;28957:19;:17;:19::i;:::-;28938:39;;;;;;;;;;;;;;;:49;28978:8;28938:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;29050:8;29014:55;;29029:19;:17;:19::i;:::-;29014:55;;;29060:8;29014:55;;;;;;:::i;:::-;;;;;;;;28769:308;;:::o;46900:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49727:130::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49832:19:::1;49811:18;:40;;;;49727:130:::0;:::o;29876:396::-;30043:28;30053:4;30059:2;30063:7;30043:9;:28::i;:::-;30104:1;30086:2;:14;;;:19;30082:183;;30125:56;30156:4;30162:2;30166:7;30175:5;30125:30;:56::i;:::-;30120:145;;30209:40;;;;;;;;;;;;;;30120:145;30082:183;29876:396;;;;:::o;47155:29::-;;;;:::o;50379:326::-;50453:13;50485:17;50493:8;50485:7;:17::i;:::-;50477:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;50541:8;;;;;;;;;;;50537:163;;;50595:10;:8;:10::i;:::-;50607:19;:8;:17;:19::i;:::-;50578:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50564:73;;;;50537:163;50673:17;50666:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50379:326;;;;:::o;46868:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47004:31::-;;;;:::o;48917:107::-;48975:7;48998:20;49012:5;48998:13;:20::i;:::-;48991:27;;48917:107;;;:::o;49196:81::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49265:6:::1;49254:8;;:17;;;;;;;;;;;;;;;;;;49196:81:::0;:::o;49387:106::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49474:13:::1;49459:12;:28;;;;49387:106:::0;:::o;49283:98::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49364:11:::1;49351:10;:24;;;;49283:98:::0;:::o;29148:164::-;29245:4;29269:18;:25;29288:5;29269:25;;;;;;;;;;;;;;;:35;29295:8;29269:35;;;;;;;;;;;;;;;;;;;;;;;;;29262:42;;29148:164;;;;:::o;48408:155::-;48494:11;47550:1;47536:11;:15;:52;;;;;47570:18;;47555:11;:33;;47536:52;47528:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47659:9;;47644:11;47628:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;47620:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7102:12:::1;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48524:33:::2;48534:9;48545:11;48524:9;:33::i;:::-;48408:155:::0;;;:::o;7780:201::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7889:1:::1;7869:22;;:8;:22;;;;7861:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7945:28;7964:8;7945:18;:28::i;:::-;7780:201:::0;:::o;30527:273::-;30584:4;30640:7;30621:15;:13;:15::i;:::-;:26;;:66;;;;;30674:13;;30664:7;:23;30621:66;:152;;;;;30772:1;18200:8;30725:17;:26;30743:7;30725:26;;;;;;;;;;;;:43;:48;30621:152;30601:172;;30527:273;;;:::o;23729:1129::-;23796:7;23816:12;23831:7;23816:22;;23899:4;23880:15;:13;:15::i;:::-;:23;23876:915;;23933:13;;23926:4;:20;23922:869;;;23971:14;23988:17;:23;24006:4;23988:23;;;;;;;;;;;;23971:40;;24104:1;18200:8;24077:6;:23;:28;24073:699;;;24596:113;24613:1;24603:6;:11;24596:113;;;24656:17;:25;24674:6;;;;;;;24656:25;;;;;;;;;;;;24647:34;;24596:113;;;24742:6;24735:13;;;;;;24073:699;23948:843;23922:869;23876:915;24819:31;;;;;;;;;;;;;;23729:1129;;;;:::o;44509:105::-;44569:7;44596:10;44589:17;;44509:105;:::o;5595:98::-;5648:7;5675:10;5668:17;;5595:98;:::o;48816:95::-;48881:7;48904:1;48897:8;;48816:95;:::o;35766:2515::-;35881:27;35911;35930:7;35911:18;:27::i;:::-;35881:57;;35996:4;35955:45;;35971:19;35955:45;;;35951:86;;36009:28;;;;;;;;;;;;;;35951:86;36050:22;36099:4;36076:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;36120:43;36137:4;36143:19;:17;:19::i;:::-;36120:16;:43::i;:::-;36076:87;:147;;;;36204:19;:17;:19::i;:::-;36180:43;;:20;36192:7;36180:11;:20::i;:::-;:43;;;36076:147;36050:174;;36242:17;36237:66;;36268:35;;;;;;;;;;;;;;36237:66;36332:1;36318:16;;:2;:16;;;36314:52;;;36343:23;;;;;;;;;;;;;;36314:52;36379:43;36401:4;36407:2;36411:7;36420:1;36379:21;:43::i;:::-;36495:15;:24;36511:7;36495:24;;;;;;;;;;;;36488:31;;;;;;;;;;;36887:18;:24;36906:4;36887:24;;;;;;;;;;;;;;;;36885:26;;;;;;;;;;;;36956:18;:22;36975:2;36956:22;;;;;;;;;;;;;;;;36954:24;;;;;;;;;;;18482:8;18084:3;37337:15;:41;;37295:21;37313:2;37295:17;:21::i;:::-;:84;:128;37249:17;:26;37267:7;37249:26;;;;;;;;;;;:174;;;;37593:1;18482:8;37543:19;:46;:51;37539:626;;;37615:19;37647:1;37637:7;:11;37615:33;;37804:1;37770:17;:30;37788:11;37770:30;;;;;;;;;;;;:35;37766:384;;;37908:13;;37893:11;:28;37889:242;;38088:19;38055:17;:30;38073:11;38055:30;;;;;;;;;;;:52;;;;37889:242;37766:384;37596:569;37539:626;38212:7;38208:2;38193:27;;38202:4;38193:27;;;;;;;;;;;;38231:42;38252:4;38258:2;38262:7;38271:1;38231:20;:42::i;:::-;35870:2411;;35766:2515;;;:::o;8141:191::-;8215:16;8234:6;;;;;;;;;;;8215:25;;8260:8;8251:6;;:17;;;;;;;;;;;;;;;;;;8315:8;8284:40;;8305:8;8284:40;;;;;;;;;;;;8204:128;8141:191;:::o;30884:104::-;30953:27;30963:2;30967:8;30953:27;;;;;;;;;;;;:9;:27::i;:::-;30884:104;;:::o;41978:716::-;42141:4;42187:2;42162:45;;;42208:19;:17;:19::i;:::-;42229:4;42235:7;42244:5;42162:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42158:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42462:1;42445:6;:13;:18;42441:235;;;42491:40;;;;;;;;;;;;;;42441:235;42634:6;42628:13;42619:6;42615:2;42611:15;42604:38;42158:529;42331:54;;;42321:64;;;:6;:64;;;;42314:71;;;41978:716;;;;;;:::o;50263:110::-;50323:13;50354;50347:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50263:110;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;22397:176::-;22458:7;17430:13;17567:2;22486:18;:25;22505:5;22486:25;;;;;;;;;;;;;;;;:49;;22485:80;22478:87;;22397:176;;;:::o;43342:159::-;;;;;:::o;27514:148::-;27578:14;27639:5;27629:15;;27514:148;;;:::o;44160:158::-;;;;;:::o;31361:2236::-;31484:20;31507:13;;31484:36;;31549:1;31535:16;;:2;:16;;;31531:48;;;31560:19;;;;;;;;;;;;;;31531:48;31606:1;31594:8;:13;31590:44;;;31616:18;;;;;;;;;;;;;;31590:44;31647:61;31677:1;31681:2;31685:12;31699:8;31647:21;:61::i;:::-;32251:1;17567:2;32222:1;:25;;32221:31;32209:8;:44;32183:18;:22;32202:2;32183:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;18347:3;32652:29;32679:1;32667:8;:13;32652:14;:29::i;:::-;:56;;18084:3;32589:15;:41;;32547:21;32565:2;32547:17;:21::i;:::-;:84;:162;32496:17;:31;32514:12;32496:31;;;;;;;;;;;:213;;;;32726:20;32749:12;32726:35;;32776:11;32805:8;32790:12;:23;32776:37;;32852:1;32834:2;:14;;;:19;32830:635;;32874:313;32930:12;32926:2;32905:38;;32922:1;32905:38;;;;;;;;;;;;32971:69;33010:1;33014:2;33018:14;;;;;;33034:5;32971:30;:69::i;:::-;32966:174;;33076:40;;;;;;;;;;;;;;32966:174;33182:3;33167:12;:18;32874:313;;33268:12;33251:13;;:29;33247:43;;33282:8;;;33247:43;32830:635;;;33331:119;33387:14;;;;;;33383:2;33362:40;;33379:1;33362:40;;;;;;;;;;;;33445:3;33430:12;:18;33331:119;;32830:635;33495:12;33479:13;:28;;;;31960:1559;;33529:60;33558:1;33562:2;33566:12;33580:8;33529:20;:60::i;:::-;31473:2124;31361:2236;;;:::o;27749:142::-;27807:14;27868:5;27858:15;;27749:142;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:553::-;1844:8;1854:6;1904:3;1897:4;1889:6;1885:17;1881:27;1871:122;;1912:79;;:::i;:::-;1871:122;2025:6;2012:20;2002:30;;2055:18;2047:6;2044:30;2041:117;;;2077:79;;:::i;:::-;2041:117;2191:4;2183:6;2179:17;2167:29;;2245:3;2237:4;2229:6;2225:17;2215:8;2211:32;2208:41;2205:128;;;2252:79;;:::i;:::-;2205:128;1786:553;;;;;:::o;2359:340::-;2415:5;2464:3;2457:4;2449:6;2445:17;2441:27;2431:122;;2472:79;;:::i;:::-;2431:122;2589:6;2576:20;2614:79;2689:3;2681:6;2674:4;2666:6;2662:17;2614:79;:::i;:::-;2605:88;;2421:278;2359:340;;;;:::o;2705:139::-;2751:5;2789:6;2776:20;2767:29;;2805:33;2832:5;2805:33;:::i;:::-;2705:139;;;;:::o;2850:329::-;2909:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:119;;;2964:79;;:::i;:::-;2926:119;3084:1;3109:53;3154:7;3145:6;3134:9;3130:22;3109:53;:::i;:::-;3099:63;;3055:117;2850:329;;;;:::o;3185:474::-;3253:6;3261;3310:2;3298:9;3289:7;3285:23;3281:32;3278:119;;;3316:79;;:::i;:::-;3278:119;3436:1;3461:53;3506:7;3497:6;3486:9;3482:22;3461:53;:::i;:::-;3451:63;;3407:117;3563:2;3589:53;3634:7;3625:6;3614:9;3610:22;3589:53;:::i;:::-;3579:63;;3534:118;3185:474;;;;;:::o;3665:619::-;3742:6;3750;3758;3807:2;3795:9;3786:7;3782:23;3778:32;3775:119;;;3813:79;;:::i;:::-;3775:119;3933:1;3958:53;4003:7;3994:6;3983:9;3979:22;3958:53;:::i;:::-;3948:63;;3904:117;4060:2;4086:53;4131:7;4122:6;4111:9;4107:22;4086:53;:::i;:::-;4076:63;;4031:118;4188:2;4214:53;4259:7;4250:6;4239:9;4235:22;4214:53;:::i;:::-;4204:63;;4159:118;3665:619;;;;;:::o;4290:943::-;4385:6;4393;4401;4409;4458:3;4446:9;4437:7;4433:23;4429:33;4426:120;;;4465:79;;:::i;:::-;4426:120;4585:1;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;:::i;:::-;4600:63;;4556:117;4712:2;4738:53;4783:7;4774:6;4763:9;4759:22;4738:53;:::i;:::-;4728:63;;4683:118;4840:2;4866:53;4911:7;4902:6;4891:9;4887:22;4866:53;:::i;:::-;4856:63;;4811:118;4996:2;4985:9;4981:18;4968:32;5027:18;5019:6;5016:30;5013:117;;;5049:79;;:::i;:::-;5013:117;5154:62;5208:7;5199:6;5188:9;5184:22;5154:62;:::i;:::-;5144:72;;4939:287;4290:943;;;;;;;:::o;5239:468::-;5304:6;5312;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5614:2;5640:50;5682:7;5673:6;5662:9;5658:22;5640:50;:::i;:::-;5630:60;;5585:115;5239:468;;;;;:::o;5713:474::-;5781:6;5789;5838:2;5826:9;5817:7;5813:23;5809:32;5806:119;;;5844:79;;:::i;:::-;5806:119;5964:1;5989:53;6034:7;6025:6;6014:9;6010:22;5989:53;:::i;:::-;5979:63;;5935:117;6091:2;6117:53;6162:7;6153:6;6142:9;6138:22;6117:53;:::i;:::-;6107:63;;6062:118;5713:474;;;;;:::o;6193:323::-;6249:6;6298:2;6286:9;6277:7;6273:23;6269:32;6266:119;;;6304:79;;:::i;:::-;6266:119;6424:1;6449:50;6491:7;6482:6;6471:9;6467:22;6449:50;:::i;:::-;6439:60;;6395:114;6193:323;;;;:::o;6522:327::-;6580:6;6629:2;6617:9;6608:7;6604:23;6600:32;6597:119;;;6635:79;;:::i;:::-;6597:119;6755:1;6780:52;6824:7;6815:6;6804:9;6800:22;6780:52;:::i;:::-;6770:62;;6726:116;6522:327;;;;:::o;6855:349::-;6924:6;6973:2;6961:9;6952:7;6948:23;6944:32;6941:119;;;6979:79;;:::i;:::-;6941:119;7099:1;7124:63;7179:7;7170:6;7159:9;7155:22;7124:63;:::i;:::-;7114:73;;7070:127;6855:349;;;;:::o;7210:529::-;7281:6;7289;7338:2;7326:9;7317:7;7313:23;7309:32;7306:119;;;7344:79;;:::i;:::-;7306:119;7492:1;7481:9;7477:17;7464:31;7522:18;7514:6;7511:30;7508:117;;;7544:79;;:::i;:::-;7508:117;7657:65;7714:7;7705:6;7694:9;7690:22;7657:65;:::i;:::-;7639:83;;;;7435:297;7210:529;;;;;:::o;7745:509::-;7814:6;7863:2;7851:9;7842:7;7838:23;7834:32;7831:119;;;7869:79;;:::i;:::-;7831:119;8017:1;8006:9;8002:17;7989:31;8047:18;8039:6;8036:30;8033:117;;;8069:79;;:::i;:::-;8033:117;8174:63;8229:7;8220:6;8209:9;8205:22;8174:63;:::i;:::-;8164:73;;7960:287;7745:509;;;;:::o;8260:329::-;8319:6;8368:2;8356:9;8347:7;8343:23;8339:32;8336:119;;;8374:79;;:::i;:::-;8336:119;8494:1;8519:53;8564:7;8555:6;8544:9;8540:22;8519:53;:::i;:::-;8509:63;;8465:117;8260:329;;;;:::o;8595:474::-;8663:6;8671;8720:2;8708:9;8699:7;8695:23;8691:32;8688:119;;;8726:79;;:::i;:::-;8688:119;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;8973:2;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8944:118;8595:474;;;;;:::o;9075:179::-;9144:10;9165:46;9207:3;9199:6;9165:46;:::i;:::-;9243:4;9238:3;9234:14;9220:28;;9075:179;;;;:::o;9260:118::-;9347:24;9365:5;9347:24;:::i;:::-;9342:3;9335:37;9260:118;;:::o;9414:732::-;9533:3;9562:54;9610:5;9562:54;:::i;:::-;9632:86;9711:6;9706:3;9632:86;:::i;:::-;9625:93;;9742:56;9792:5;9742:56;:::i;:::-;9821:7;9852:1;9837:284;9862:6;9859:1;9856:13;9837:284;;;9938:6;9932:13;9965:63;10024:3;10009:13;9965:63;:::i;:::-;9958:70;;10051:60;10104:6;10051:60;:::i;:::-;10041:70;;9897:224;9884:1;9881;9877:9;9872:14;;9837:284;;;9841:14;10137:3;10130:10;;9538:608;;;9414:732;;;;:::o;10152:109::-;10233:21;10248:5;10233:21;:::i;:::-;10228:3;10221:34;10152:109;;:::o;10267:360::-;10353:3;10381:38;10413:5;10381:38;:::i;:::-;10435:70;10498:6;10493:3;10435:70;:::i;:::-;10428:77;;10514:52;10559:6;10554:3;10547:4;10540:5;10536:16;10514:52;:::i;:::-;10591:29;10613:6;10591:29;:::i;:::-;10586:3;10582:39;10575:46;;10357:270;10267:360;;;;:::o;10633:364::-;10721:3;10749:39;10782:5;10749:39;:::i;:::-;10804:71;10868:6;10863:3;10804:71;:::i;:::-;10797:78;;10884:52;10929:6;10924:3;10917:4;10910:5;10906:16;10884:52;:::i;:::-;10961:29;10983:6;10961:29;:::i;:::-;10956:3;10952:39;10945:46;;10725:272;10633:364;;;;:::o;11003:377::-;11109:3;11137:39;11170:5;11137:39;:::i;:::-;11192:89;11274:6;11269:3;11192:89;:::i;:::-;11185:96;;11290:52;11335:6;11330:3;11323:4;11316:5;11312:16;11290:52;:::i;:::-;11367:6;11362:3;11358:16;11351:23;;11113:267;11003:377;;;;:::o;11386:366::-;11528:3;11549:67;11613:2;11608:3;11549:67;:::i;:::-;11542:74;;11625:93;11714:3;11625:93;:::i;:::-;11743:2;11738:3;11734:12;11727:19;;11386:366;;;:::o;11758:::-;11900:3;11921:67;11985:2;11980:3;11921:67;:::i;:::-;11914:74;;11997:93;12086:3;11997:93;:::i;:::-;12115:2;12110:3;12106:12;12099:19;;11758:366;;;:::o;12130:::-;12272:3;12293:67;12357:2;12352:3;12293:67;:::i;:::-;12286:74;;12369:93;12458:3;12369:93;:::i;:::-;12487:2;12482:3;12478:12;12471:19;;12130:366;;;:::o;12502:400::-;12662:3;12683:84;12765:1;12760:3;12683:84;:::i;:::-;12676:91;;12776:93;12865:3;12776:93;:::i;:::-;12894:1;12889:3;12885:11;12878:18;;12502:400;;;:::o;12908:366::-;13050:3;13071:67;13135:2;13130:3;13071:67;:::i;:::-;13064:74;;13147:93;13236:3;13147:93;:::i;:::-;13265:2;13260:3;13256:12;13249:19;;12908:366;;;:::o;13280:::-;13422:3;13443:67;13507:2;13502:3;13443:67;:::i;:::-;13436:74;;13519:93;13608:3;13519:93;:::i;:::-;13637:2;13632:3;13628:12;13621:19;;13280:366;;;:::o;13652:::-;13794:3;13815:67;13879:2;13874:3;13815:67;:::i;:::-;13808:74;;13891:93;13980:3;13891:93;:::i;:::-;14009:2;14004:3;14000:12;13993:19;;13652:366;;;:::o;14024:398::-;14183:3;14204:83;14285:1;14280:3;14204:83;:::i;:::-;14197:90;;14296:93;14385:3;14296:93;:::i;:::-;14414:1;14409:3;14405:11;14398:18;;14024:398;;;:::o;14428:366::-;14570:3;14591:67;14655:2;14650:3;14591:67;:::i;:::-;14584:74;;14667:93;14756:3;14667:93;:::i;:::-;14785:2;14780:3;14776:12;14769:19;;14428:366;;;:::o;14800:::-;14942:3;14963:67;15027:2;15022:3;14963:67;:::i;:::-;14956:74;;15039:93;15128:3;15039:93;:::i;:::-;15157:2;15152:3;15148:12;15141:19;;14800:366;;;:::o;15172:::-;15314:3;15335:67;15399:2;15394:3;15335:67;:::i;:::-;15328:74;;15411:93;15500:3;15411:93;:::i;:::-;15529:2;15524:3;15520:12;15513:19;;15172:366;;;:::o;15544:::-;15686:3;15707:67;15771:2;15766:3;15707:67;:::i;:::-;15700:74;;15783:93;15872:3;15783:93;:::i;:::-;15901:2;15896:3;15892:12;15885:19;;15544:366;;;:::o;15916:108::-;15993:24;16011:5;15993:24;:::i;:::-;15988:3;15981:37;15916:108;;:::o;16030:118::-;16117:24;16135:5;16117:24;:::i;:::-;16112:3;16105:37;16030:118;;:::o;16154:701::-;16435:3;16457:95;16548:3;16539:6;16457:95;:::i;:::-;16450:102;;16569:95;16660:3;16651:6;16569:95;:::i;:::-;16562:102;;16681:148;16825:3;16681:148;:::i;:::-;16674:155;;16846:3;16839:10;;16154:701;;;;;:::o;16861:379::-;17045:3;17067:147;17210:3;17067:147;:::i;:::-;17060:154;;17231:3;17224:10;;16861:379;;;:::o;17246:222::-;17339:4;17377:2;17366:9;17362:18;17354:26;;17390:71;17458:1;17447:9;17443:17;17434:6;17390:71;:::i;:::-;17246:222;;;;:::o;17474:640::-;17669:4;17707:3;17696:9;17692:19;17684:27;;17721:71;17789:1;17778:9;17774:17;17765:6;17721:71;:::i;:::-;17802:72;17870:2;17859:9;17855:18;17846:6;17802:72;:::i;:::-;17884;17952:2;17941:9;17937:18;17928:6;17884:72;:::i;:::-;18003:9;17997:4;17993:20;17988:2;17977:9;17973:18;17966:48;18031:76;18102:4;18093:6;18031:76;:::i;:::-;18023:84;;17474:640;;;;;;;:::o;18120:373::-;18263:4;18301:2;18290:9;18286:18;18278:26;;18350:9;18344:4;18340:20;18336:1;18325:9;18321:17;18314:47;18378:108;18481:4;18472:6;18378:108;:::i;:::-;18370:116;;18120:373;;;;:::o;18499:210::-;18586:4;18624:2;18613:9;18609:18;18601:26;;18637:65;18699:1;18688:9;18684:17;18675:6;18637:65;:::i;:::-;18499:210;;;;:::o;18715:313::-;18828:4;18866:2;18855:9;18851:18;18843:26;;18915:9;18909:4;18905:20;18901:1;18890:9;18886:17;18879:47;18943:78;19016:4;19007:6;18943:78;:::i;:::-;18935:86;;18715:313;;;;:::o;19034:419::-;19200:4;19238:2;19227:9;19223:18;19215:26;;19287:9;19281:4;19277:20;19273:1;19262:9;19258:17;19251:47;19315:131;19441:4;19315:131;:::i;:::-;19307:139;;19034:419;;;:::o;19459:::-;19625:4;19663:2;19652:9;19648:18;19640:26;;19712:9;19706:4;19702:20;19698:1;19687:9;19683:17;19676:47;19740:131;19866:4;19740:131;:::i;:::-;19732:139;;19459:419;;;:::o;19884:::-;20050:4;20088:2;20077:9;20073:18;20065:26;;20137:9;20131:4;20127:20;20123:1;20112:9;20108:17;20101:47;20165:131;20291:4;20165:131;:::i;:::-;20157:139;;19884:419;;;:::o;20309:::-;20475:4;20513:2;20502:9;20498:18;20490:26;;20562:9;20556:4;20552:20;20548:1;20537:9;20533:17;20526:47;20590:131;20716:4;20590:131;:::i;:::-;20582:139;;20309:419;;;:::o;20734:::-;20900:4;20938:2;20927:9;20923:18;20915:26;;20987:9;20981:4;20977:20;20973:1;20962:9;20958:17;20951:47;21015:131;21141:4;21015:131;:::i;:::-;21007:139;;20734:419;;;:::o;21159:::-;21325:4;21363:2;21352:9;21348:18;21340:26;;21412:9;21406:4;21402:20;21398:1;21387:9;21383:17;21376:47;21440:131;21566:4;21440:131;:::i;:::-;21432:139;;21159:419;;;:::o;21584:::-;21750:4;21788:2;21777:9;21773:18;21765:26;;21837:9;21831:4;21827:20;21823:1;21812:9;21808:17;21801:47;21865:131;21991:4;21865:131;:::i;:::-;21857:139;;21584:419;;;:::o;22009:::-;22175:4;22213:2;22202:9;22198:18;22190:26;;22262:9;22256:4;22252:20;22248:1;22237:9;22233:17;22226:47;22290:131;22416:4;22290:131;:::i;:::-;22282:139;;22009:419;;;:::o;22434:::-;22600:4;22638:2;22627:9;22623:18;22615:26;;22687:9;22681:4;22677:20;22673:1;22662:9;22658:17;22651:47;22715:131;22841:4;22715:131;:::i;:::-;22707:139;;22434:419;;;:::o;22859:::-;23025:4;23063:2;23052:9;23048:18;23040:26;;23112:9;23106:4;23102:20;23098:1;23087:9;23083:17;23076:47;23140:131;23266:4;23140:131;:::i;:::-;23132:139;;22859:419;;;:::o;23284:222::-;23377:4;23415:2;23404:9;23400:18;23392:26;;23428:71;23496:1;23485:9;23481:17;23472:6;23428:71;:::i;:::-;23284:222;;;;:::o;23512:129::-;23546:6;23573:20;;:::i;:::-;23563:30;;23602:33;23630:4;23622:6;23602:33;:::i;:::-;23512:129;;;:::o;23647:75::-;23680:6;23713:2;23707:9;23697:19;;23647:75;:::o;23728:307::-;23789:4;23879:18;23871:6;23868:30;23865:56;;;23901:18;;:::i;:::-;23865:56;23939:29;23961:6;23939:29;:::i;:::-;23931:37;;24023:4;24017;24013:15;24005:23;;23728:307;;;:::o;24041:308::-;24103:4;24193:18;24185:6;24182:30;24179:56;;;24215:18;;:::i;:::-;24179:56;24253:29;24275:6;24253:29;:::i;:::-;24245:37;;24337:4;24331;24327:15;24319:23;;24041:308;;;:::o;24355:132::-;24422:4;24445:3;24437:11;;24475:4;24470:3;24466:14;24458:22;;24355:132;;;:::o;24493:114::-;24560:6;24594:5;24588:12;24578:22;;24493:114;;;:::o;24613:98::-;24664:6;24698:5;24692:12;24682:22;;24613:98;;;:::o;24717:99::-;24769:6;24803:5;24797:12;24787:22;;24717:99;;;:::o;24822:113::-;24892:4;24924;24919:3;24915:14;24907:22;;24822:113;;;:::o;24941:184::-;25040:11;25074:6;25069:3;25062:19;25114:4;25109:3;25105:14;25090:29;;24941:184;;;;:::o;25131:168::-;25214:11;25248:6;25243:3;25236:19;25288:4;25283:3;25279:14;25264:29;;25131:168;;;;:::o;25305:147::-;25406:11;25443:3;25428:18;;25305:147;;;;:::o;25458:169::-;25542:11;25576:6;25571:3;25564:19;25616:4;25611:3;25607:14;25592:29;;25458:169;;;;:::o;25633:148::-;25735:11;25772:3;25757:18;;25633:148;;;;:::o;25787:305::-;25827:3;25846:20;25864:1;25846:20;:::i;:::-;25841:25;;25880:20;25898:1;25880:20;:::i;:::-;25875:25;;26034:1;25966:66;25962:74;25959:1;25956:81;25953:107;;;26040:18;;:::i;:::-;25953:107;26084:1;26081;26077:9;26070:16;;25787:305;;;;:::o;26098:185::-;26138:1;26155:20;26173:1;26155:20;:::i;:::-;26150:25;;26189:20;26207:1;26189:20;:::i;:::-;26184:25;;26228:1;26218:35;;26233:18;;:::i;:::-;26218:35;26275:1;26272;26268:9;26263:14;;26098:185;;;;:::o;26289:348::-;26329:7;26352:20;26370:1;26352:20;:::i;:::-;26347:25;;26386:20;26404:1;26386:20;:::i;:::-;26381:25;;26574:1;26506:66;26502:74;26499:1;26496:81;26491:1;26484:9;26477:17;26473:105;26470:131;;;26581:18;;:::i;:::-;26470:131;26629:1;26626;26622:9;26611:20;;26289:348;;;;:::o;26643:191::-;26683:4;26703:20;26721:1;26703:20;:::i;:::-;26698:25;;26737:20;26755:1;26737:20;:::i;:::-;26732:25;;26776:1;26773;26770:8;26767:34;;;26781:18;;:::i;:::-;26767:34;26826:1;26823;26819:9;26811:17;;26643:191;;;;:::o;26840:96::-;26877:7;26906:24;26924:5;26906:24;:::i;:::-;26895:35;;26840:96;;;:::o;26942:90::-;26976:7;27019:5;27012:13;27005:21;26994:32;;26942:90;;;:::o;27038:149::-;27074:7;27114:66;27107:5;27103:78;27092:89;;27038:149;;;:::o;27193:126::-;27230:7;27270:42;27263:5;27259:54;27248:65;;27193:126;;;:::o;27325:77::-;27362:7;27391:5;27380:16;;27325:77;;;:::o;27408:154::-;27492:6;27487:3;27482;27469:30;27554:1;27545:6;27540:3;27536:16;27529:27;27408:154;;;:::o;27568:307::-;27636:1;27646:113;27660:6;27657:1;27654:13;27646:113;;;27745:1;27740:3;27736:11;27730:18;27726:1;27721:3;27717:11;27710:39;27682:2;27679:1;27675:10;27670:15;;27646:113;;;27777:6;27774:1;27771:13;27768:101;;;27857:1;27848:6;27843:3;27839:16;27832:27;27768:101;27617:258;27568:307;;;:::o;27881:320::-;27925:6;27962:1;27956:4;27952:12;27942:22;;28009:1;28003:4;27999:12;28030:18;28020:81;;28086:4;28078:6;28074:17;28064:27;;28020:81;28148:2;28140:6;28137:14;28117:18;28114:38;28111:84;;;28167:18;;:::i;:::-;28111:84;27932:269;27881:320;;;:::o;28207:281::-;28290:27;28312:4;28290:27;:::i;:::-;28282:6;28278:40;28420:6;28408:10;28405:22;28384:18;28372:10;28369:34;28366:62;28363:88;;;28431:18;;:::i;:::-;28363:88;28471:10;28467:2;28460:22;28250:238;28207:281;;:::o;28494:233::-;28533:3;28556:24;28574:5;28556:24;:::i;:::-;28547:33;;28602:66;28595:5;28592:77;28589:103;;;28672:18;;:::i;:::-;28589:103;28719:1;28712:5;28708:13;28701:20;;28494:233;;;:::o;28733:176::-;28765:1;28782:20;28800:1;28782:20;:::i;:::-;28777:25;;28816:20;28834:1;28816:20;:::i;:::-;28811:25;;28855:1;28845:35;;28860:18;;:::i;:::-;28845:35;28901:1;28898;28894:9;28889:14;;28733:176;;;;:::o;28915:180::-;28963:77;28960:1;28953:88;29060:4;29057:1;29050:15;29084:4;29081:1;29074:15;29101:180;29149:77;29146:1;29139:88;29246:4;29243:1;29236:15;29270:4;29267:1;29260:15;29287:180;29335:77;29332:1;29325:88;29432:4;29429:1;29422:15;29456:4;29453:1;29446:15;29473:180;29521:77;29518:1;29511:88;29618:4;29615:1;29608:15;29642:4;29639:1;29632:15;29659:180;29707:77;29704:1;29697:88;29804:4;29801:1;29794:15;29828:4;29825:1;29818:15;29845:117;29954:1;29951;29944:12;29968:117;30077:1;30074;30067:12;30091:117;30200:1;30197;30190:12;30214:117;30323:1;30320;30313:12;30337:117;30446:1;30443;30436:12;30460:117;30569:1;30566;30559:12;30583:102;30624:6;30675:2;30671:7;30666:2;30659:5;30655:14;30651:28;30641:38;;30583:102;;;:::o;30691:225::-;30831:34;30827:1;30819:6;30815:14;30808:58;30900:8;30895:2;30887:6;30883:15;30876:33;30691:225;:::o;30922:170::-;31062:22;31058:1;31050:6;31046:14;31039:46;30922:170;:::o;31098:::-;31238:22;31234:1;31226:6;31222:14;31215:46;31098:170;:::o;31274:155::-;31414:7;31410:1;31402:6;31398:14;31391:31;31274:155;:::o;31435:182::-;31575:34;31571:1;31563:6;31559:14;31552:58;31435:182;:::o;31623:170::-;31763:22;31759:1;31751:6;31747:14;31740:46;31623:170;:::o;31799:220::-;31939:34;31935:1;31927:6;31923:14;31916:58;32008:3;32003:2;31995:6;31991:15;31984:28;31799:220;:::o;32025:114::-;;:::o;32145:170::-;32285:22;32281:1;32273:6;32269:14;32262:46;32145:170;:::o;32321:181::-;32461:33;32457:1;32449:6;32445:14;32438:57;32321:181;:::o;32508:169::-;32648:21;32644:1;32636:6;32632:14;32625:45;32508:169;:::o;32683:::-;32823:21;32819:1;32811:6;32807:14;32800:45;32683:169;:::o;32858:122::-;32931:24;32949:5;32931:24;:::i;:::-;32924:5;32921:35;32911:63;;32970:1;32967;32960:12;32911:63;32858:122;:::o;32986:116::-;33056:21;33071:5;33056:21;:::i;:::-;33049:5;33046:32;33036:60;;33092:1;33089;33082:12;33036:60;32986:116;:::o;33108:120::-;33180:23;33197:5;33180:23;:::i;:::-;33173:5;33170:34;33160:62;;33218:1;33215;33208:12;33160:62;33108:120;:::o;33234:122::-;33307:24;33325:5;33307:24;:::i;:::-;33300:5;33297:35;33287:63;;33346:1;33343;33336:12;33287:63;33234:122;:::o

Swarm Source

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