ETH Price: $3,344.28 (-0.84%)

Token

The Last Pepe ($LASTPEPE)
 

Overview

Max Total Supply

6,969 $LASTPEPE

Holders

1,387

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
$mokes.eth
Balance
15 $LASTPEPE
0xab7362beb21453cf3f343cc8362e9b4cf245f83c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

In a world ravaged by nuclear catastrophe, Pepe stands as the last survivor.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LastPepe

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-11
*/

/**

In a world ravaged by nuclear catastrophe, Pepe stands as the last survivor. 
Alone in a desolate wasteland where the remnants of civilization lie in ruin, he navigates the ashen landscape, 
searching for signs of life or a glimmer of hope. Surrounded by the echoes of a once-thriving world, 
Pepe's journey is a testament to the enduring spirit of resilience. Fueled by whatever alcohol he can find, 
he embarks on a journey of survival, with hallucinogenic mushrooms as his companions. 
Yet, the wealth he possesses means nothing in this bleak reality, for there is no one to share it with. 
It's a tale of solitude and survival in a world where all is lifeless and still, a narrative of The Last Pepe.

*/

pragma solidity ^0.8.0;
abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

    function _nonReentrantAfter() private {

        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 result) {
        unchecked {

            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1);

            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;
            uint256 inverse = (3 * denominator) ^ 2;

            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256
            result = prod0 * inverse;
            return result;
        }
    }

    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator,
        Rounding rounding
    ) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 result = 1 << (log2(a) >> 1);

        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10**64) {
                value /= 10**64;
                result += 64;
            }
            if (value >= 10**32) {
                value /= 10**32;
                result += 32;
            }
            if (value >= 10**16) {
                value /= 10**16;
                result += 16;
            }
            if (value >= 10**8) {
                value /= 10**8;
                result += 8;
            }
            if (value >= 10**4) {
                value /= 10**4;
                result += 4;
            }
            if (value >= 10**2) {
                value /= 10**2;
                result += 2;
            }
            if (value >= 10**1) {
                result += 1;
            }
        }
        return result;
    }

    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);
        }
    }

    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);
        }
    }
}

pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    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] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    error MintERC2309QuantityExceedsLimit();

    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Stores the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
        // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}.
        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external payable;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function approve(address to, uint256 tokenId) external payable;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

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

pragma solidity ^0.8.4;

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

contract ERC721A is IERC721A {
    // Bypass for a `--via-ir` bug (https://github.com/chiru-labs/ERC721A/pull/364).
    struct TokenApprovalRef {
        address value;
    }

    // Mask of an entry in packed address data.
    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

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

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

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

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

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

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

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

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

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

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

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

    // The `Transfer` event signature is given by:
    // `keccak256(bytes("Transfer(address,address,uint256)"))`.
    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;
    mapping(address => uint256) private _packedAddressData;
    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

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

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view virtual returns (uint256) {
        // Counter underflow is impossible as `_currentIndex` does not decrement,
        // and it is initialized to `_startTokenId()`.
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {

        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

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

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

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

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

    /**
     * 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) {

                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

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

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

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

    function approve(address to, uint256 tokenId) public payable virtual override {
        address owner = ownerOf(tokenId);

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

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

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned.
    }

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

    /**
     * @dev Returns the storage slot and value for the approved address of `tokenId`.
     */
    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];
        // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId].value`.
        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

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

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.
            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

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

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

    /**
     * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public payable virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

 
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

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

    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

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

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            assembly {
                // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean.
                toMasked := and(to, _BITMASK_ADDRESS)
                // Emit the `Transfer` event.
                log4(
                    0, // Start of data (0, since no data).
                    0, // End of data (0, since no data).
                    _TRANSFER_EVENT_SIGNATURE, // Signature.
                    0, // `address(0)`.
                    toMasked, // `to`.
                    startTokenId // `tokenId`.
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {
                    // Emit the `Transfer` event. Similar to above.
                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

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

    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

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

        // Overflows are unrealistic due to the above check for `quantity` to be below the limit.
        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

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

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

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

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

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

    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

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

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

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

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

        unchecked {

            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

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

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

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

    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        // Cast `extraData` with assembly to avoid redundant masking.
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

    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 virtual returns (string memory str) {
        assembly {
            let m := add(mload(0x40), 0xa0)
            // Update the free memory pointer to allocate.
            mstore(0x40, m)
            // Assign the `str` to the end.
            str := sub(m, 0x20)
            // Zeroize the slot after the string.
            mstore(str, 0)

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

            // We write the string from rightmost digit to leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // prettier-ignore
            for { let temp := value } 1 {} {
                str := sub(str, 1)
                // Write the character to the pointer.
                // The ASCII index of the '0' character is 48.
                mstore8(str, add(48, mod(temp, 10)))
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
                // prettier-ignore
                if iszero(temp) { break }
            }

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

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;
contract LastPepe  is ERC721A, Ownable, ReentrancyGuard {
	using Strings for uint256;

	uint256 public maxSupply = 6969;
    uint256 public maxFreeSupply = 6969;

    uint256 public cost = 0.0009 ether;
    uint256 public notPayableAmount = 5;
    uint256 public maxPerWallet = 100;

    bool public isRevealed = true;
	bool public pause = false;

    string private baseURL = "";
    string public hiddenMetadataUrl = "REVEALED";

    mapping(address => uint256) public userBalance;

	constructor(
        string memory _baseMetadataUrl
	)
	ERC721A("The Last Pepe", "$LASTPEPE") {
        setBaseUri(_baseMetadataUrl);
    }

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

    function setBaseUri(string memory _baseURL) public onlyOwner {
	    baseURL = _baseURL;
	}

    function mint(uint256 mintAmount) external payable {
		require(!pause, "The Last Pepe sale is on pause");
        if(userBalance[msg.sender] >= notPayableAmount) require(msg.value >= cost * mintAmount, "Insufficient eth funds");
        else{
            if(totalSupply() + mintAmount <= maxFreeSupply){
                if(mintAmount > (notPayableAmount - userBalance[msg.sender])) require(msg.value >= cost * (mintAmount - (notPayableAmount - userBalance[msg.sender])), "Insufficient funds");
            }
            else require(msg.value >= cost * mintAmount, "Insufficient eth funds");
        }
        require(_totalMinted() + mintAmount <= maxSupply,"Exceeds max supply");
        require(userBalance[msg.sender] + mintAmount <= maxPerWallet, "Exceeds max Pepe per wallet");
        _safeMint(msg.sender, mintAmount);
        userBalance[msg.sender] = userBalance[msg.sender] + mintAmount;
	}

    function airdrop(address to, uint256 mintAmount) external onlyOwner {
		require(
			_totalMinted() + mintAmount <= maxSupply,
			"Exceeds max supply"
		);
		_safeMint(to, mintAmount);
        
	}

    function sethiddenMetadataUrl(string memory _hiddenMetadataUrl) public onlyOwner {
	    hiddenMetadataUrl = _hiddenMetadataUrl;
	}

    function reveal(bool _state) external onlyOwner {
	    isRevealed = _state;
	}

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

	function setMaxSupply(uint256 newMaxSupply) external onlyOwner {
		maxSupply = newMaxSupply;
	}

    function setMaxFreeSupply(uint256 newMaxFreeSupply) external onlyOwner {
		maxFreeSupply = newMaxFreeSupply;
	}

	function tokenURI(uint256 tokenId)
		public
		view
		override
		returns (string memory)
	{
        require(_exists(tokenId), "That Pepe token doesn't exist");
        if(isRevealed == false) {
            return hiddenMetadataUrl;
        }
        else return bytes(_baseURI()).length > 0 
            ? string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json"))
            : "";
	}

	function setCost(uint256 _newCost) public onlyOwner{
		cost = _newCost;
	}

	function setPause(bool _state) public onlyOwner{
		pause = _state;
	}

    function setNotPayableAmount(uint256 _newAmt) public onlyOwner{
        require(_newAmt < maxPerWallet, "Arggggg! Its Not possible");
        notPayableAmount = _newAmt;
    }

    function setMaxPerWallet(uint256 _newAmt) public  onlyOwner{
        require(_newAmt > notPayableAmount, "Argggg! Its Not possible");
        maxPerWallet = _newAmt;
    }

	function withdraw() external onlyOwner {
		(bool success, ) = payable(owner()).call{
            value: address(this).balance
        }("");
        require(success);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseMetadataUrl","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","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":"hiddenMetadataUrl","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":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeSupply","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notPayableAmount","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":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","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":"_baseURL","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxFreeSupply","type":"uint256"}],"name":"setMaxFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmt","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmt","type":"uint256"}],"name":"setNotPayableAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUrl","type":"string"}],"name":"sethiddenMetadataUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052611b39600a55611b39600b556603328b944c4000600c556005600d556064600e556001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff02191690831515021790555060405180602001604052805f81525060109081620000789190620005ed565b506040518060400160405280600881526020017f52455645414c454400000000000000000000000000000000000000000000000081525060119081620000bf9190620005ed565b50348015620000cc575f80fd5b5060405162003e3138038062003e318339818101604052810190620000f2919062000829565b6040518060400160405280600d81526020017f546865204c6173742050657065000000000000000000000000000000000000008152506040518060400160405280600981526020017f244c41535450455045000000000000000000000000000000000000000000000081525081600290816200016f9190620005ed565b508060039081620001819190620005ed565b5062000192620001d960201b60201c565b5f819055505050620001b9620001ad620001e160201b60201c565b620001e860201b60201c565b6001600981905550620001d281620002ab60201b60201c565b50620008f6565b5f6001905090565b5f33905090565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002bb620002d060201b60201c565b8060109081620002cc9190620005ed565b5050565b620002e0620001e160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003066200036160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200035f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035690620008d6565b60405180910390fd5b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200040557607f821691505b6020821081036200041b576200041a620003c0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000442565b6200048b868362000442565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004d5620004cf620004c984620004a3565b620004ac565b620004a3565b9050919050565b5f819050919050565b620004f083620004b5565b62000508620004ff82620004dc565b8484546200044e565b825550505050565b5f90565b6200051e62000510565b6200052b818484620004e5565b505050565b5b818110156200055257620005465f8262000514565b60018101905062000531565b5050565b601f821115620005a1576200056b8162000421565b620005768462000433565b8101602085101562000586578190505b6200059e620005958562000433565b83018262000530565b50505b505050565b5f82821c905092915050565b5f620005c35f1984600802620005a6565b1980831691505092915050565b5f620005dd8383620005b2565b9150826002028217905092915050565b620005f88262000389565b67ffffffffffffffff81111562000614576200061362000393565b5b620006208254620003ed565b6200062d82828562000556565b5f60209050601f83116001811462000663575f84156200064e578287015190505b6200065a8582620005d0565b865550620006c9565b601f198416620006738662000421565b5f5b828110156200069c5784890151825560018201915060208501945060208101905062000675565b86831015620006bc5784890151620006b8601f891682620005b2565b8355505b6001600288020188555050505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b6200070582620006ea565b810181811067ffffffffffffffff8211171562000727576200072662000393565b5b80604052505050565b5f6200073b620006d1565b9050620007498282620006fa565b919050565b5f67ffffffffffffffff8211156200076b576200076a62000393565b5b6200077682620006ea565b9050602081019050919050565b5f5b83811015620007a257808201518184015260208101905062000785565b5f8484015250505050565b5f620007c3620007bd846200074e565b62000730565b905082815260208101848484011115620007e257620007e1620006e6565b5b620007ef84828562000783565b509392505050565b5f82601f8301126200080e576200080d620006e2565b5b815162000820848260208601620007ad565b91505092915050565b5f60208284031215620008415762000840620006da565b5b5f82015167ffffffffffffffff811115620008615762000860620006de565b5b6200086f84828501620007f7565b91505092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620008be60208362000878565b9150620008cb8262000888565b602082019050919050565b5f6020820190508181035f830152620008ef81620008b0565b9050919050565b61352d80620009045f395ff3fe608060405260043610610224575f3560e01c806370a0823111610122578063a22cb465116100aa578063cb2b1c5e1161006e578063cb2b1c5e1461077e578063d5abeb01146107a6578063e268e4d3146107d0578063e985e9c5146107f8578063f2fde38b1461083457610224565b8063a22cb465146106ac578063abfc4efa146106d4578063b88d4fde146106fe578063bedb86fb1461071a578063c87b56dd1461074257610224565b80638da5cb5b116100f15780638da5cb5b146105ec578063940cd05b1461061657806395d89b411461063e578063a0712d6814610668578063a0bcfc7f1461068457610224565b806370a0823114610548578063715018a6146105845780638456cb591461059a5780638ba4cc3c146105c457610224565b80633ccfd60b116101b05780634751333411610174578063475133341461046857806354214f69146104925780635b28fd91146104bc5780636352211e146104e45780636f8b44b01461052057610224565b80633ccfd60b146103bc5780633d6d652a146103d257806342842e0e146103fa57806344a0d68a14610416578063453c23101461043e57610224565b8063095ea7b3116101f7578063095ea7b31461030657806313faede6146103225780631638fef01461034c57806318160ddd1461037657806323b872dd146103a057610224565b80630103c92b1461022857806301ffc9a71461026457806306fdde03146102a0578063081812fc146102ca575b5f80fd5b348015610233575f80fd5b5061024e60048036038101906102499190612503565b61085c565b60405161025b9190612546565b60405180910390f35b34801561026f575f80fd5b5061028a600480360381019061028591906125b4565b610871565b60405161029791906125f9565b60405180910390f35b3480156102ab575f80fd5b506102b4610902565b6040516102c1919061269c565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb91906126e6565b610992565b6040516102fd9190612720565b60405180910390f35b610320600480360381019061031b9190612739565b610a0c565b005b34801561032d575f80fd5b50610336610b4b565b6040516103439190612546565b60405180910390f35b348015610357575f80fd5b50610360610b51565b60405161036d919061269c565b60405180910390f35b348015610381575f80fd5b5061038a610bdd565b6040516103979190612546565b60405180910390f35b6103ba60048036038101906103b59190612777565b610bf2565b005b3480156103c7575f80fd5b506103d0610f00565b005b3480156103dd575f80fd5b506103f860048036038101906103f391906126e6565b610f83565b005b610414600480360381019061040f9190612777565b610fd9565b005b348015610421575f80fd5b5061043c600480360381019061043791906126e6565b610ff8565b005b348015610449575f80fd5b5061045261100a565b60405161045f9190612546565b60405180910390f35b348015610473575f80fd5b5061047c611010565b6040516104899190612546565b60405180910390f35b34801561049d575f80fd5b506104a6611016565b6040516104b391906125f9565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd91906126e6565b611028565b005b3480156104ef575f80fd5b5061050a600480360381019061050591906126e6565b61103a565b6040516105179190612720565b60405180910390f35b34801561052b575f80fd5b50610546600480360381019061054191906126e6565b61104b565b005b348015610553575f80fd5b5061056e60048036038101906105699190612503565b61105d565b60405161057b9190612546565b60405180910390f35b34801561058f575f80fd5b50610598611112565b005b3480156105a5575f80fd5b506105ae611125565b6040516105bb91906125f9565b60405180910390f35b3480156105cf575f80fd5b506105ea60048036038101906105e59190612739565b611138565b005b3480156105f7575f80fd5b506106006111a5565b60405161060d9190612720565b60405180910390f35b348015610621575f80fd5b5061063c600480360381019061063791906127f1565b6111cd565b005b348015610649575f80fd5b506106526111f1565b60405161065f919061269c565b60405180910390f35b610682600480360381019061067d91906126e6565b611281565b005b34801561068f575f80fd5b506106aa60048036038101906106a59190612948565b611651565b005b3480156106b7575f80fd5b506106d260048036038101906106cd919061298f565b61166c565b005b3480156106df575f80fd5b506106e8611772565b6040516106f59190612546565b60405180910390f35b61071860048036038101906107139190612a6b565b611778565b005b348015610725575f80fd5b50610740600480360381019061073b91906127f1565b6117ea565b005b34801561074d575f80fd5b50610768600480360381019061076391906126e6565b61180f565b604051610775919061269c565b60405180910390f35b348015610789575f80fd5b506107a4600480360381019061079f9190612948565b61195f565b005b3480156107b1575f80fd5b506107ba61197a565b6040516107c79190612546565b60405180910390f35b3480156107db575f80fd5b506107f660048036038101906107f191906126e6565b611980565b005b348015610803575f80fd5b5061081e60048036038101906108199190612aeb565b6119d6565b60405161082b91906125f9565b60405180910390f35b34801561083f575f80fd5b5061085a60048036038101906108559190612503565b611a64565b005b6012602052805f5260405f205f915090505481565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108cb57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108fb5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461091190612b56565b80601f016020809104026020016040519081016040528092919081815260200182805461093d90612b56565b80156109885780601f1061095f57610100808354040283529160200191610988565b820191905f5260205f20905b81548152906001019060200180831161096b57829003601f168201915b5050505050905090565b5f61099c82611ae6565b6109d2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610a168261103a565b90508073ffffffffffffffffffffffffffffffffffffffff16610a37611b40565b73ffffffffffffffffffffffffffffffffffffffff1614610a9a57610a6381610a5e611b40565b6119d6565b610a99576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260065f8481526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600c5481565b60118054610b5e90612b56565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a90612b56565b8015610bd55780601f10610bac57610100808354040283529160200191610bd5565b820191905f5260205f20905b815481529060010190602001808311610bb857829003601f168201915b505050505081565b5f610be6611b47565b6001545f540303905090565b5f610bfc82611b4f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c63576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610c6e84611c12565b91509150610c848187610c7f611b40565b611c35565b610cd057610c9986610c94611b40565b6119d6565b610ccf576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d35576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d428686866001611c78565b8015610d4c575f82555b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550610e1485610df0888887611c7e565b7c020000000000000000000000000000000000000000000000000000000017611ca5565b60045f8681526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603610e90575f6001850190505f60045f8381526020019081526020015f205403610e8e575f548114610e8d578360045f8381526020019081526020015f20819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ef88686866001611ccf565b505050505050565b610f08611cd5565b5f610f116111a5565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f3490612bb3565b5f6040518083038185875af1925050503d805f8114610f6e576040519150601f19603f3d011682016040523d82523d5f602084013e610f73565b606091505b5050905080610f80575f80fd5b50565b610f8b611cd5565b600e548110610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690612c11565b60405180910390fd5b80600d8190555050565b610ff383838360405180602001604052805f815250611778565b505050565b611000611cd5565b80600c8190555050565b600e5481565b600b5481565b600f5f9054906101000a900460ff1681565b611030611cd5565b80600b8190555050565b5f61104482611b4f565b9050919050565b611053611cd5565b80600a8190555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b61111a611cd5565b6111235f611d53565b565b600f60019054906101000a900460ff1681565b611140611cd5565b600a548161114c611e16565b6111569190612c5c565b1115611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e90612cd9565b60405180910390fd5b6111a18282611e27565b5050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111d5611cd5565b80600f5f6101000a81548160ff02191690831515021790555050565b60606003805461120090612b56565b80601f016020809104026020016040519081016040528092919081815260200182805461122c90612b56565b80156112775780601f1061124e57610100808354040283529160200191611277565b820191905f5260205f20905b81548152906001019060200180831161125a57829003601f168201915b5050505050905090565b600f60019054906101000a900460ff16156112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890612d41565b60405180910390fd5b600d5460125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061136c5780600c546113259190612d5f565b341015611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90612dea565b60405180910390fd5b6114d6565b600b5481611378610bdd565b6113829190612c5c565b116114845760125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d546113d29190612e08565b81111561147f5760125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d546114249190612e08565b8161142f9190612e08565b600c5461143c9190612d5f565b34101561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590612e85565b60405180910390fd5b5b6114d5565b80600c546114929190612d5f565b3410156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90612dea565b60405180910390fd5b5b5b600a54816114e2611e16565b6114ec9190612c5c565b111561152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152490612cd9565b60405180910390fd5b600e548160125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115799190612c5c565b11156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b190612eed565b60405180910390fd5b6115c43382611e27565b8060125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461160d9190612c5c565b60125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b611659611cd5565b806010908161166891906130a8565b5050565b8060075f611678611b40565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611721611b40565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176691906125f9565b60405180910390a35050565b600d5481565b611783848484610bf2565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146117e4576117ad84848484611e44565b6117e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6117f2611cd5565b80600f60016101000a81548160ff02191690831515021790555050565b606061181a82611ae6565b611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906131c1565b60405180910390fd5b5f1515600f5f9054906101000a900460ff16151503611902576011805461187f90612b56565b80601f01602080910402602001604051908101604052809291908181526020018280546118ab90612b56565b80156118f65780601f106118cd576101008083540402835291602001916118f6565b820191905f5260205f20905b8154815290600101906020018083116118d957829003601f168201915b5050505050905061195a565b5f61190b611f8f565b51116119255760405180602001604052805f815250611957565b61192d611f8f565b6119368361201f565b604051602001611947929190613263565b6040516020818303038152906040525b90505b919050565b611967611cd5565b806011908161197691906130a8565b5050565b600a5481565b611988611cd5565b600d5481116119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c3906132db565b60405180910390fd5b80600e8190555050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611a6c611cd5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613369565b60405180910390fd5b611ae381611d53565b50565b5f81611af0611b47565b11158015611afe57505f5482105b8015611b3957505f7c010000000000000000000000000000000000000000000000000000000060045f8581526020019081526020015f205416145b9050919050565b5f33905090565b5f6001905090565b5f8082905080611b5d611b47565b11611bdb575f54811015611bda575f60045f8381526020019081526020015f205490505f7c0100000000000000000000000000000000000000000000000000000000821603611bd8575b5f8103611bce5760045f836001900393508381526020019081526020015f20549050611ba7565b8092505050611c0d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f805f60065f8581526020019081526020015f2090508092508254915050915091565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e8611c948686846120e9565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b611cdd6120f1565b73ffffffffffffffffffffffffffffffffffffffff16611cfb6111a5565b73ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906133d1565b60405180910390fd5b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f611e1f611b47565b5f5403905090565b611e40828260405180602001604052805f8152506120f8565b5050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e69611b40565b8786866040518563ffffffff1660e01b8152600401611e8b9493929190613441565b6020604051808303815f875af1925050508015611ec657506040513d601f19601f82011682018060405250810190611ec3919061349f565b60015b611f3c573d805f8114611ef4576040519150601f19603f3d011682016040523d82523d5f602084013e611ef9565b606091505b505f815103611f34576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060108054611f9e90612b56565b80601f0160208091040260200160405190810160405280929190818152602001828054611fca90612b56565b80156120155780601f10611fec57610100808354040283529160200191612015565b820191905f5260205f20905b815481529060010190602001808311611ff857829003601f168201915b5050505050905090565b60605f600161202d8461218f565b0190505f8167ffffffffffffffff81111561204b5761204a612824565b5b6040519080825280601f01601f19166020018201604052801561207d5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156120de578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120d3576120d26134ca565b5b0494505f850361208a575b819350505050919050565b5f9392505050565b5f33905090565b61210283836122e0565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1461218a575f805490505f83820390505b61213e5f868380600101945086611e44565b612174576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061212c57815f5414612187575f80fd5b50505b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106121eb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816121e1576121e06134ca565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612228576d04ee2d6d415b85acef8100000000838161221e5761221d6134ca565b5b0492506020810190505b662386f26fc10000831061225757662386f26fc10000838161224d5761224c6134ca565b5b0492506010810190505b6305f5e1008310612280576305f5e1008381612276576122756134ca565b5b0492506008810190505b61271083106122a557612710838161229b5761229a6134ca565b5b0492506004810190505b606483106122c857606483816122be576122bd6134ca565b5b0492506002810190505b600a83106122d7576001810190505b80915050919050565b5f805490505f820361231e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61232a5f848385611c78565b600160406001901b17820260055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555061239c8361238d5f865f611c7e565b61239685612489565b17611ca5565b60045f8381526020019081526020015f20819055505f80838301905073ffffffffffffffffffffffffffffffffffffffff8516915082825f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600183015b8181146124365780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a46001810190506123fd565b505f8203612470576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f8190555050506124845f848385611ccf565b505050565b5f6001821460e11b9050919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124d2826124a9565b9050919050565b6124e2816124c8565b81146124ec575f80fd5b50565b5f813590506124fd816124d9565b92915050565b5f60208284031215612518576125176124a1565b5b5f612525848285016124ef565b91505092915050565b5f819050919050565b6125408161252e565b82525050565b5f6020820190506125595f830184612537565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125938161255f565b811461259d575f80fd5b50565b5f813590506125ae8161258a565b92915050565b5f602082840312156125c9576125c86124a1565b5b5f6125d6848285016125a0565b91505092915050565b5f8115159050919050565b6125f3816125df565b82525050565b5f60208201905061260c5f8301846125ea565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561264957808201518184015260208101905061262e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61266e82612612565b612678818561261c565b935061268881856020860161262c565b61269181612654565b840191505092915050565b5f6020820190508181035f8301526126b48184612664565b905092915050565b6126c58161252e565b81146126cf575f80fd5b50565b5f813590506126e0816126bc565b92915050565b5f602082840312156126fb576126fa6124a1565b5b5f612708848285016126d2565b91505092915050565b61271a816124c8565b82525050565b5f6020820190506127335f830184612711565b92915050565b5f806040838503121561274f5761274e6124a1565b5b5f61275c858286016124ef565b925050602061276d858286016126d2565b9150509250929050565b5f805f6060848603121561278e5761278d6124a1565b5b5f61279b868287016124ef565b93505060206127ac868287016124ef565b92505060406127bd868287016126d2565b9150509250925092565b6127d0816125df565b81146127da575f80fd5b50565b5f813590506127eb816127c7565b92915050565b5f60208284031215612806576128056124a1565b5b5f612813848285016127dd565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61285a82612654565b810181811067ffffffffffffffff8211171561287957612878612824565b5b80604052505050565b5f61288b612498565b90506128978282612851565b919050565b5f67ffffffffffffffff8211156128b6576128b5612824565b5b6128bf82612654565b9050602081019050919050565b828183375f83830152505050565b5f6128ec6128e78461289c565b612882565b90508281526020810184848401111561290857612907612820565b5b6129138482856128cc565b509392505050565b5f82601f83011261292f5761292e61281c565b5b813561293f8482602086016128da565b91505092915050565b5f6020828403121561295d5761295c6124a1565b5b5f82013567ffffffffffffffff81111561297a576129796124a5565b5b6129868482850161291b565b91505092915050565b5f80604083850312156129a5576129a46124a1565b5b5f6129b2858286016124ef565b92505060206129c3858286016127dd565b9150509250929050565b5f67ffffffffffffffff8211156129e7576129e6612824565b5b6129f082612654565b9050602081019050919050565b5f612a0f612a0a846129cd565b612882565b905082815260208101848484011115612a2b57612a2a612820565b5b612a368482856128cc565b509392505050565b5f82601f830112612a5257612a5161281c565b5b8135612a628482602086016129fd565b91505092915050565b5f805f8060808587031215612a8357612a826124a1565b5b5f612a90878288016124ef565b9450506020612aa1878288016124ef565b9350506040612ab2878288016126d2565b925050606085013567ffffffffffffffff811115612ad357612ad26124a5565b5b612adf87828801612a3e565b91505092959194509250565b5f8060408385031215612b0157612b006124a1565b5b5f612b0e858286016124ef565b9250506020612b1f858286016124ef565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b6d57607f821691505b602082108103612b8057612b7f612b29565b5b50919050565b5f81905092915050565b50565b5f612b9e5f83612b86565b9150612ba982612b90565b5f82019050919050565b5f612bbd82612b93565b9150819050919050565b7f417267676767672120497473204e6f7420706f737369626c65000000000000005f82015250565b5f612bfb60198361261c565b9150612c0682612bc7565b602082019050919050565b5f6020820190508181035f830152612c2881612bef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c668261252e565b9150612c718361252e565b9250828201905080821115612c8957612c88612c2f565b5b92915050565b7f45786365656473206d617820737570706c7900000000000000000000000000005f82015250565b5f612cc360128361261c565b9150612cce82612c8f565b602082019050919050565b5f6020820190508181035f830152612cf081612cb7565b9050919050565b7f546865204c61737420506570652073616c65206973206f6e20706175736500005f82015250565b5f612d2b601e8361261c565b9150612d3682612cf7565b602082019050919050565b5f6020820190508181035f830152612d5881612d1f565b9050919050565b5f612d698261252e565b9150612d748361252e565b9250828202612d828161252e565b91508282048414831517612d9957612d98612c2f565b5b5092915050565b7f496e73756666696369656e74206574682066756e6473000000000000000000005f82015250565b5f612dd460168361261c565b9150612ddf82612da0565b602082019050919050565b5f6020820190508181035f830152612e0181612dc8565b9050919050565b5f612e128261252e565b9150612e1d8361252e565b9250828203905081811115612e3557612e34612c2f565b5b92915050565b7f496e73756666696369656e742066756e647300000000000000000000000000005f82015250565b5f612e6f60128361261c565b9150612e7a82612e3b565b602082019050919050565b5f6020820190508181035f830152612e9c81612e63565b9050919050565b7f45786365656473206d61782050657065207065722077616c6c657400000000005f82015250565b5f612ed7601b8361261c565b9150612ee282612ea3565b602082019050919050565b5f6020820190508181035f830152612f0481612ecb565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612f677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f2c565b612f718683612f2c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612fac612fa7612fa28461252e565b612f89565b61252e565b9050919050565b5f819050919050565b612fc583612f92565b612fd9612fd182612fb3565b848454612f38565b825550505050565b5f90565b612fed612fe1565b612ff8818484612fbc565b505050565b5b8181101561301b576130105f82612fe5565b600181019050612ffe565b5050565b601f8211156130605761303181612f0b565b61303a84612f1d565b81016020851015613049578190505b61305d61305585612f1d565b830182612ffd565b50505b505050565b5f82821c905092915050565b5f6130805f1984600802613065565b1980831691505092915050565b5f6130988383613071565b9150826002028217905092915050565b6130b182612612565b67ffffffffffffffff8111156130ca576130c9612824565b5b6130d48254612b56565b6130df82828561301f565b5f60209050601f831160018114613110575f84156130fe578287015190505b613108858261308d565b86555061316f565b601f19841661311e86612f0b565b5f5b8281101561314557848901518255600182019150602085019450602081019050613120565b86831015613162578489015161315e601f891682613071565b8355505b6001600288020188555050505b505050505050565b7f54686174205065706520746f6b656e20646f65736e27742065786973740000005f82015250565b5f6131ab601d8361261c565b91506131b682613177565b602082019050919050565b5f6020820190508181035f8301526131d88161319f565b9050919050565b5f81905092915050565b5f6131f382612612565b6131fd81856131df565b935061320d81856020860161262c565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f61324d6005836131df565b915061325882613219565b600582019050919050565b5f61326e82856131e9565b915061327a82846131e9565b915061328582613241565b91508190509392505050565b7f4172676767672120497473204e6f7420706f737369626c6500000000000000005f82015250565b5f6132c560188361261c565b91506132d082613291565b602082019050919050565b5f6020820190508181035f8301526132f2816132b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61335360268361261c565b915061335e826132f9565b604082019050919050565b5f6020820190508181035f83015261338081613347565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6133bb60208361261c565b91506133c682613387565b602082019050919050565b5f6020820190508181035f8301526133e8816133af565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f613413826133ef565b61341d81856133f9565b935061342d81856020860161262c565b61343681612654565b840191505092915050565b5f6080820190506134545f830187612711565b6134616020830186612711565b61346e6040830185612537565b81810360608301526134808184613409565b905095945050505050565b5f815190506134998161258a565b92915050565b5f602082840312156134b4576134b36124a1565b5b5f6134c18482850161348b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea264697066735822122040d2eb479b4d36a32f7021dc6f6c80cd65e0ab5c3012c6fbbd0df25b68b81a8364736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656964366d356f6d76763670346d3632626772366e616832367a6f6b636f6a353733646c646c67347975766962376a336a77653578342f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610224575f3560e01c806370a0823111610122578063a22cb465116100aa578063cb2b1c5e1161006e578063cb2b1c5e1461077e578063d5abeb01146107a6578063e268e4d3146107d0578063e985e9c5146107f8578063f2fde38b1461083457610224565b8063a22cb465146106ac578063abfc4efa146106d4578063b88d4fde146106fe578063bedb86fb1461071a578063c87b56dd1461074257610224565b80638da5cb5b116100f15780638da5cb5b146105ec578063940cd05b1461061657806395d89b411461063e578063a0712d6814610668578063a0bcfc7f1461068457610224565b806370a0823114610548578063715018a6146105845780638456cb591461059a5780638ba4cc3c146105c457610224565b80633ccfd60b116101b05780634751333411610174578063475133341461046857806354214f69146104925780635b28fd91146104bc5780636352211e146104e45780636f8b44b01461052057610224565b80633ccfd60b146103bc5780633d6d652a146103d257806342842e0e146103fa57806344a0d68a14610416578063453c23101461043e57610224565b8063095ea7b3116101f7578063095ea7b31461030657806313faede6146103225780631638fef01461034c57806318160ddd1461037657806323b872dd146103a057610224565b80630103c92b1461022857806301ffc9a71461026457806306fdde03146102a0578063081812fc146102ca575b5f80fd5b348015610233575f80fd5b5061024e60048036038101906102499190612503565b61085c565b60405161025b9190612546565b60405180910390f35b34801561026f575f80fd5b5061028a600480360381019061028591906125b4565b610871565b60405161029791906125f9565b60405180910390f35b3480156102ab575f80fd5b506102b4610902565b6040516102c1919061269c565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb91906126e6565b610992565b6040516102fd9190612720565b60405180910390f35b610320600480360381019061031b9190612739565b610a0c565b005b34801561032d575f80fd5b50610336610b4b565b6040516103439190612546565b60405180910390f35b348015610357575f80fd5b50610360610b51565b60405161036d919061269c565b60405180910390f35b348015610381575f80fd5b5061038a610bdd565b6040516103979190612546565b60405180910390f35b6103ba60048036038101906103b59190612777565b610bf2565b005b3480156103c7575f80fd5b506103d0610f00565b005b3480156103dd575f80fd5b506103f860048036038101906103f391906126e6565b610f83565b005b610414600480360381019061040f9190612777565b610fd9565b005b348015610421575f80fd5b5061043c600480360381019061043791906126e6565b610ff8565b005b348015610449575f80fd5b5061045261100a565b60405161045f9190612546565b60405180910390f35b348015610473575f80fd5b5061047c611010565b6040516104899190612546565b60405180910390f35b34801561049d575f80fd5b506104a6611016565b6040516104b391906125f9565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd91906126e6565b611028565b005b3480156104ef575f80fd5b5061050a600480360381019061050591906126e6565b61103a565b6040516105179190612720565b60405180910390f35b34801561052b575f80fd5b50610546600480360381019061054191906126e6565b61104b565b005b348015610553575f80fd5b5061056e60048036038101906105699190612503565b61105d565b60405161057b9190612546565b60405180910390f35b34801561058f575f80fd5b50610598611112565b005b3480156105a5575f80fd5b506105ae611125565b6040516105bb91906125f9565b60405180910390f35b3480156105cf575f80fd5b506105ea60048036038101906105e59190612739565b611138565b005b3480156105f7575f80fd5b506106006111a5565b60405161060d9190612720565b60405180910390f35b348015610621575f80fd5b5061063c600480360381019061063791906127f1565b6111cd565b005b348015610649575f80fd5b506106526111f1565b60405161065f919061269c565b60405180910390f35b610682600480360381019061067d91906126e6565b611281565b005b34801561068f575f80fd5b506106aa60048036038101906106a59190612948565b611651565b005b3480156106b7575f80fd5b506106d260048036038101906106cd919061298f565b61166c565b005b3480156106df575f80fd5b506106e8611772565b6040516106f59190612546565b60405180910390f35b61071860048036038101906107139190612a6b565b611778565b005b348015610725575f80fd5b50610740600480360381019061073b91906127f1565b6117ea565b005b34801561074d575f80fd5b50610768600480360381019061076391906126e6565b61180f565b604051610775919061269c565b60405180910390f35b348015610789575f80fd5b506107a4600480360381019061079f9190612948565b61195f565b005b3480156107b1575f80fd5b506107ba61197a565b6040516107c79190612546565b60405180910390f35b3480156107db575f80fd5b506107f660048036038101906107f191906126e6565b611980565b005b348015610803575f80fd5b5061081e60048036038101906108199190612aeb565b6119d6565b60405161082b91906125f9565b60405180910390f35b34801561083f575f80fd5b5061085a60048036038101906108559190612503565b611a64565b005b6012602052805f5260405f205f915090505481565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108cb57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108fb5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461091190612b56565b80601f016020809104026020016040519081016040528092919081815260200182805461093d90612b56565b80156109885780601f1061095f57610100808354040283529160200191610988565b820191905f5260205f20905b81548152906001019060200180831161096b57829003601f168201915b5050505050905090565b5f61099c82611ae6565b6109d2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610a168261103a565b90508073ffffffffffffffffffffffffffffffffffffffff16610a37611b40565b73ffffffffffffffffffffffffffffffffffffffff1614610a9a57610a6381610a5e611b40565b6119d6565b610a99576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260065f8481526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600c5481565b60118054610b5e90612b56565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a90612b56565b8015610bd55780601f10610bac57610100808354040283529160200191610bd5565b820191905f5260205f20905b815481529060010190602001808311610bb857829003601f168201915b505050505081565b5f610be6611b47565b6001545f540303905090565b5f610bfc82611b4f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c63576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610c6e84611c12565b91509150610c848187610c7f611b40565b611c35565b610cd057610c9986610c94611b40565b6119d6565b610ccf576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d35576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d428686866001611c78565b8015610d4c575f82555b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550610e1485610df0888887611c7e565b7c020000000000000000000000000000000000000000000000000000000017611ca5565b60045f8681526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603610e90575f6001850190505f60045f8381526020019081526020015f205403610e8e575f548114610e8d578360045f8381526020019081526020015f20819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ef88686866001611ccf565b505050505050565b610f08611cd5565b5f610f116111a5565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f3490612bb3565b5f6040518083038185875af1925050503d805f8114610f6e576040519150601f19603f3d011682016040523d82523d5f602084013e610f73565b606091505b5050905080610f80575f80fd5b50565b610f8b611cd5565b600e548110610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690612c11565b60405180910390fd5b80600d8190555050565b610ff383838360405180602001604052805f815250611778565b505050565b611000611cd5565b80600c8190555050565b600e5481565b600b5481565b600f5f9054906101000a900460ff1681565b611030611cd5565b80600b8190555050565b5f61104482611b4f565b9050919050565b611053611cd5565b80600a8190555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b61111a611cd5565b6111235f611d53565b565b600f60019054906101000a900460ff1681565b611140611cd5565b600a548161114c611e16565b6111569190612c5c565b1115611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e90612cd9565b60405180910390fd5b6111a18282611e27565b5050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111d5611cd5565b80600f5f6101000a81548160ff02191690831515021790555050565b60606003805461120090612b56565b80601f016020809104026020016040519081016040528092919081815260200182805461122c90612b56565b80156112775780601f1061124e57610100808354040283529160200191611277565b820191905f5260205f20905b81548152906001019060200180831161125a57829003601f168201915b5050505050905090565b600f60019054906101000a900460ff16156112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890612d41565b60405180910390fd5b600d5460125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061136c5780600c546113259190612d5f565b341015611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90612dea565b60405180910390fd5b6114d6565b600b5481611378610bdd565b6113829190612c5c565b116114845760125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d546113d29190612e08565b81111561147f5760125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600d546114249190612e08565b8161142f9190612e08565b600c5461143c9190612d5f565b34101561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590612e85565b60405180910390fd5b5b6114d5565b80600c546114929190612d5f565b3410156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90612dea565b60405180910390fd5b5b5b600a54816114e2611e16565b6114ec9190612c5c565b111561152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152490612cd9565b60405180910390fd5b600e548160125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115799190612c5c565b11156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b190612eed565b60405180910390fd5b6115c43382611e27565b8060125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461160d9190612c5c565b60125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b611659611cd5565b806010908161166891906130a8565b5050565b8060075f611678611b40565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611721611b40565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176691906125f9565b60405180910390a35050565b600d5481565b611783848484610bf2565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146117e4576117ad84848484611e44565b6117e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6117f2611cd5565b80600f60016101000a81548160ff02191690831515021790555050565b606061181a82611ae6565b611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906131c1565b60405180910390fd5b5f1515600f5f9054906101000a900460ff16151503611902576011805461187f90612b56565b80601f01602080910402602001604051908101604052809291908181526020018280546118ab90612b56565b80156118f65780601f106118cd576101008083540402835291602001916118f6565b820191905f5260205f20905b8154815290600101906020018083116118d957829003601f168201915b5050505050905061195a565b5f61190b611f8f565b51116119255760405180602001604052805f815250611957565b61192d611f8f565b6119368361201f565b604051602001611947929190613263565b6040516020818303038152906040525b90505b919050565b611967611cd5565b806011908161197691906130a8565b5050565b600a5481565b611988611cd5565b600d5481116119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c3906132db565b60405180910390fd5b80600e8190555050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611a6c611cd5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613369565b60405180910390fd5b611ae381611d53565b50565b5f81611af0611b47565b11158015611afe57505f5482105b8015611b3957505f7c010000000000000000000000000000000000000000000000000000000060045f8581526020019081526020015f205416145b9050919050565b5f33905090565b5f6001905090565b5f8082905080611b5d611b47565b11611bdb575f54811015611bda575f60045f8381526020019081526020015f205490505f7c0100000000000000000000000000000000000000000000000000000000821603611bd8575b5f8103611bce5760045f836001900393508381526020019081526020015f20549050611ba7565b8092505050611c0d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f805f60065f8581526020019081526020015f2090508092508254915050915091565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e8611c948686846120e9565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b611cdd6120f1565b73ffffffffffffffffffffffffffffffffffffffff16611cfb6111a5565b73ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906133d1565b60405180910390fd5b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f611e1f611b47565b5f5403905090565b611e40828260405180602001604052805f8152506120f8565b5050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e69611b40565b8786866040518563ffffffff1660e01b8152600401611e8b9493929190613441565b6020604051808303815f875af1925050508015611ec657506040513d601f19601f82011682018060405250810190611ec3919061349f565b60015b611f3c573d805f8114611ef4576040519150601f19603f3d011682016040523d82523d5f602084013e611ef9565b606091505b505f815103611f34576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060108054611f9e90612b56565b80601f0160208091040260200160405190810160405280929190818152602001828054611fca90612b56565b80156120155780601f10611fec57610100808354040283529160200191612015565b820191905f5260205f20905b815481529060010190602001808311611ff857829003601f168201915b5050505050905090565b60605f600161202d8461218f565b0190505f8167ffffffffffffffff81111561204b5761204a612824565b5b6040519080825280601f01601f19166020018201604052801561207d5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156120de578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120d3576120d26134ca565b5b0494505f850361208a575b819350505050919050565b5f9392505050565b5f33905090565b61210283836122e0565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1461218a575f805490505f83820390505b61213e5f868380600101945086611e44565b612174576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061212c57815f5414612187575f80fd5b50505b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106121eb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816121e1576121e06134ca565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612228576d04ee2d6d415b85acef8100000000838161221e5761221d6134ca565b5b0492506020810190505b662386f26fc10000831061225757662386f26fc10000838161224d5761224c6134ca565b5b0492506010810190505b6305f5e1008310612280576305f5e1008381612276576122756134ca565b5b0492506008810190505b61271083106122a557612710838161229b5761229a6134ca565b5b0492506004810190505b606483106122c857606483816122be576122bd6134ca565b5b0492506002810190505b600a83106122d7576001810190505b80915050919050565b5f805490505f820361231e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61232a5f848385611c78565b600160406001901b17820260055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555061239c8361238d5f865f611c7e565b61239685612489565b17611ca5565b60045f8381526020019081526020015f20819055505f80838301905073ffffffffffffffffffffffffffffffffffffffff8516915082825f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600183015b8181146124365780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a46001810190506123fd565b505f8203612470576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f8190555050506124845f848385611ccf565b505050565b5f6001821460e11b9050919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124d2826124a9565b9050919050565b6124e2816124c8565b81146124ec575f80fd5b50565b5f813590506124fd816124d9565b92915050565b5f60208284031215612518576125176124a1565b5b5f612525848285016124ef565b91505092915050565b5f819050919050565b6125408161252e565b82525050565b5f6020820190506125595f830184612537565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125938161255f565b811461259d575f80fd5b50565b5f813590506125ae8161258a565b92915050565b5f602082840312156125c9576125c86124a1565b5b5f6125d6848285016125a0565b91505092915050565b5f8115159050919050565b6125f3816125df565b82525050565b5f60208201905061260c5f8301846125ea565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561264957808201518184015260208101905061262e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61266e82612612565b612678818561261c565b935061268881856020860161262c565b61269181612654565b840191505092915050565b5f6020820190508181035f8301526126b48184612664565b905092915050565b6126c58161252e565b81146126cf575f80fd5b50565b5f813590506126e0816126bc565b92915050565b5f602082840312156126fb576126fa6124a1565b5b5f612708848285016126d2565b91505092915050565b61271a816124c8565b82525050565b5f6020820190506127335f830184612711565b92915050565b5f806040838503121561274f5761274e6124a1565b5b5f61275c858286016124ef565b925050602061276d858286016126d2565b9150509250929050565b5f805f6060848603121561278e5761278d6124a1565b5b5f61279b868287016124ef565b93505060206127ac868287016124ef565b92505060406127bd868287016126d2565b9150509250925092565b6127d0816125df565b81146127da575f80fd5b50565b5f813590506127eb816127c7565b92915050565b5f60208284031215612806576128056124a1565b5b5f612813848285016127dd565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61285a82612654565b810181811067ffffffffffffffff8211171561287957612878612824565b5b80604052505050565b5f61288b612498565b90506128978282612851565b919050565b5f67ffffffffffffffff8211156128b6576128b5612824565b5b6128bf82612654565b9050602081019050919050565b828183375f83830152505050565b5f6128ec6128e78461289c565b612882565b90508281526020810184848401111561290857612907612820565b5b6129138482856128cc565b509392505050565b5f82601f83011261292f5761292e61281c565b5b813561293f8482602086016128da565b91505092915050565b5f6020828403121561295d5761295c6124a1565b5b5f82013567ffffffffffffffff81111561297a576129796124a5565b5b6129868482850161291b565b91505092915050565b5f80604083850312156129a5576129a46124a1565b5b5f6129b2858286016124ef565b92505060206129c3858286016127dd565b9150509250929050565b5f67ffffffffffffffff8211156129e7576129e6612824565b5b6129f082612654565b9050602081019050919050565b5f612a0f612a0a846129cd565b612882565b905082815260208101848484011115612a2b57612a2a612820565b5b612a368482856128cc565b509392505050565b5f82601f830112612a5257612a5161281c565b5b8135612a628482602086016129fd565b91505092915050565b5f805f8060808587031215612a8357612a826124a1565b5b5f612a90878288016124ef565b9450506020612aa1878288016124ef565b9350506040612ab2878288016126d2565b925050606085013567ffffffffffffffff811115612ad357612ad26124a5565b5b612adf87828801612a3e565b91505092959194509250565b5f8060408385031215612b0157612b006124a1565b5b5f612b0e858286016124ef565b9250506020612b1f858286016124ef565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b6d57607f821691505b602082108103612b8057612b7f612b29565b5b50919050565b5f81905092915050565b50565b5f612b9e5f83612b86565b9150612ba982612b90565b5f82019050919050565b5f612bbd82612b93565b9150819050919050565b7f417267676767672120497473204e6f7420706f737369626c65000000000000005f82015250565b5f612bfb60198361261c565b9150612c0682612bc7565b602082019050919050565b5f6020820190508181035f830152612c2881612bef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c668261252e565b9150612c718361252e565b9250828201905080821115612c8957612c88612c2f565b5b92915050565b7f45786365656473206d617820737570706c7900000000000000000000000000005f82015250565b5f612cc360128361261c565b9150612cce82612c8f565b602082019050919050565b5f6020820190508181035f830152612cf081612cb7565b9050919050565b7f546865204c61737420506570652073616c65206973206f6e20706175736500005f82015250565b5f612d2b601e8361261c565b9150612d3682612cf7565b602082019050919050565b5f6020820190508181035f830152612d5881612d1f565b9050919050565b5f612d698261252e565b9150612d748361252e565b9250828202612d828161252e565b91508282048414831517612d9957612d98612c2f565b5b5092915050565b7f496e73756666696369656e74206574682066756e6473000000000000000000005f82015250565b5f612dd460168361261c565b9150612ddf82612da0565b602082019050919050565b5f6020820190508181035f830152612e0181612dc8565b9050919050565b5f612e128261252e565b9150612e1d8361252e565b9250828203905081811115612e3557612e34612c2f565b5b92915050565b7f496e73756666696369656e742066756e647300000000000000000000000000005f82015250565b5f612e6f60128361261c565b9150612e7a82612e3b565b602082019050919050565b5f6020820190508181035f830152612e9c81612e63565b9050919050565b7f45786365656473206d61782050657065207065722077616c6c657400000000005f82015250565b5f612ed7601b8361261c565b9150612ee282612ea3565b602082019050919050565b5f6020820190508181035f830152612f0481612ecb565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612f677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f2c565b612f718683612f2c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612fac612fa7612fa28461252e565b612f89565b61252e565b9050919050565b5f819050919050565b612fc583612f92565b612fd9612fd182612fb3565b848454612f38565b825550505050565b5f90565b612fed612fe1565b612ff8818484612fbc565b505050565b5b8181101561301b576130105f82612fe5565b600181019050612ffe565b5050565b601f8211156130605761303181612f0b565b61303a84612f1d565b81016020851015613049578190505b61305d61305585612f1d565b830182612ffd565b50505b505050565b5f82821c905092915050565b5f6130805f1984600802613065565b1980831691505092915050565b5f6130988383613071565b9150826002028217905092915050565b6130b182612612565b67ffffffffffffffff8111156130ca576130c9612824565b5b6130d48254612b56565b6130df82828561301f565b5f60209050601f831160018114613110575f84156130fe578287015190505b613108858261308d565b86555061316f565b601f19841661311e86612f0b565b5f5b8281101561314557848901518255600182019150602085019450602081019050613120565b86831015613162578489015161315e601f891682613071565b8355505b6001600288020188555050505b505050505050565b7f54686174205065706520746f6b656e20646f65736e27742065786973740000005f82015250565b5f6131ab601d8361261c565b91506131b682613177565b602082019050919050565b5f6020820190508181035f8301526131d88161319f565b9050919050565b5f81905092915050565b5f6131f382612612565b6131fd81856131df565b935061320d81856020860161262c565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f61324d6005836131df565b915061325882613219565b600582019050919050565b5f61326e82856131e9565b915061327a82846131e9565b915061328582613241565b91508190509392505050565b7f4172676767672120497473204e6f7420706f737369626c6500000000000000005f82015250565b5f6132c560188361261c565b91506132d082613291565b602082019050919050565b5f6020820190508181035f8301526132f2816132b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61335360268361261c565b915061335e826132f9565b604082019050919050565b5f6020820190508181035f83015261338081613347565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6133bb60208361261c565b91506133c682613387565b602082019050919050565b5f6020820190508181035f8301526133e8816133af565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f613413826133ef565b61341d81856133f9565b935061342d81856020860161262c565b61343681612654565b840191505092915050565b5f6080820190506134545f830187612711565b6134616020830186612711565b61346e6040830185612537565b81810360608301526134808184613409565b905095945050505050565b5f815190506134998161258a565b92915050565b5f602082840312156134b4576134b36124a1565b5b5f6134c18482850161348b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea264697066735822122040d2eb479b4d36a32f7021dc6f6c80cd65e0ab5c3012c6fbbd0df25b68b81a8364736f6c63430008140033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656964366d356f6d76763670346d3632626772366e616832367a6f6b636f6a353733646c646c67347975766962376a336a77653578342f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseMetadataUrl (string): ipfs://bafybeid6m5omvv6p4m62bgr6nah26zokcoj573dldlg4yuvib7j3jwe5x4/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [2] : 697066733a2f2f6261667962656964366d356f6d76763670346d363262677236
Arg [3] : 6e616832367a6f6b636f6a353733646c646c67347975766962376a336a776535
Arg [4] : 78342f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

40236:3645:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40688:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20584:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20946:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25086:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24670:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40409:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40635:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18669:323;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27382:2337;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43704:174;;;;;;;;;;;;;:::i;:::-;;43339:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29815:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43179:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40492:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40365:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40534:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42652:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21594:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42547:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19414:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2337:103;;;;;;;;;;;;;:::i;:::-;;40567:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42010:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2102:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42360:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21054:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41088:914;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40988:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25312:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40450:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30016:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43260:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42770:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42220:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40327:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43525:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25554:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2448:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40688:46;;;;;;;;;;;;;;;;;:::o;20584:354::-;20669:4;20723:10;20708:25;;:11;:25;;;;:102;;;;20800:10;20785:25;;:11;:25;;;;20708:102;:179;;;;20877:10;20862:25;;:11;:25;;;;20708:179;20688:199;;20584:354;;;:::o;20946:100::-;21000:13;21033:5;21026:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20946:100;:::o;25086:218::-;25162:7;25187:16;25195:7;25187;:16::i;:::-;25182:64;;25212:34;;;;;;;;;;;;;;25182:64;25266:15;:24;25282:7;25266:24;;;;;;;;;;;:30;;;;;;;;;;;;25259:37;;25086:218;;;:::o;24670:408::-;24759:13;24775:16;24783:7;24775;:16::i;:::-;24759:32;;24831:5;24808:28;;:19;:17;:19::i;:::-;:28;;;24804:175;;24856:44;24873:5;24880:19;:17;:19::i;:::-;24856:16;:44::i;:::-;24851:128;;24928:35;;;;;;;;;;;;;;24851:128;24804:175;25024:2;24991:15;:24;25007:7;24991:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;25062:7;25058:2;25042:28;;25051:5;25042:28;;;;;;;;;;;;24748:330;24670:408;;:::o;40409:34::-;;;;:::o;40635:44::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18669:323::-;18730:7;18958:15;:13;:15::i;:::-;18943:12;;18927:13;;:28;:46;18920:53;;18669:323;:::o;27382:2337::-;27524:27;27554;27573:7;27554:18;:27::i;:::-;27524:57;;27639:4;27598:45;;27614:19;27598:45;;;27594:86;;27652:28;;;;;;;;;;;;;;27594:86;27694:27;27723:23;27750:35;27777:7;27750:26;:35::i;:::-;27693:92;;;;27885:68;27910:15;27927:4;27933:19;:17;:19::i;:::-;27885:24;:68::i;:::-;27880:180;;27973:43;27990:4;27996:19;:17;:19::i;:::-;27973:16;:43::i;:::-;27968:92;;28025:35;;;;;;;;;;;;;;27968:92;27880:180;28091:1;28077:16;;:2;:16;;;28073:52;;28102:23;;;;;;;;;;;;;;28073:52;28138:43;28160:4;28166:2;28170:7;28179:1;28138:21;:43::i;:::-;28274:15;28271:160;;;28414:1;28393:19;28386:30;28271:160;28551:18;:24;28570:4;28551:24;;;;;;;;;;;;;;;;28549:26;;;;;;;;;;;;28620:18;:22;28639:2;28620:22;;;;;;;;;;;;;;;;28618:24;;;;;;;;;;;28714:146;28751:2;28800:45;28815:4;28821:2;28825:19;28800:14;:45::i;:::-;17062:8;28772:73;28714:18;:146::i;:::-;28685:17;:26;28703:7;28685:26;;;;;;;;;;;:175;;;;29031:1;17062:8;28980:19;:47;:52;28976:627;;29053:19;29085:1;29075:7;:11;29053:33;;29242:1;29208:17;:30;29226:11;29208:30;;;;;;;;;;;;:35;29204:384;;29346:13;;29331:11;:28;29327:242;;29526:19;29493:17;:30;29511:11;29493:30;;;;;;;;;;;:52;;;;29327:242;29204:384;29034:569;28976:627;29650:7;29646:2;29631:27;;29640:4;29631:27;;;;;;;;;;;;29669:42;29690:4;29696:2;29700:7;29709:1;29669:20;:42::i;:::-;27513:2206;;;27382:2337;;;:::o;43704:174::-;2061:13;:11;:13::i;:::-;43749:12:::1;43775:7;:5;:7::i;:::-;43767:21;;43810;43767:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43748:98;;;43865:7;43857:16;;;::::0;::::1;;43743:135;43704:174::o:0;43339:178::-;2061:13;:11;:13::i;:::-;43430:12:::1;;43420:7;:22;43412:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43502:7;43483:16;:26;;;;43339:178:::0;:::o;29815:193::-;29961:39;29978:4;29984:2;29988:7;29961:39;;;;;;;;;;;;:16;:39::i;:::-;29815:193;;;:::o;43179:76::-;2061:13;:11;:13::i;:::-;43242:8:::1;43235:4;:15;;;;43179:76:::0;:::o;40492:33::-;;;;:::o;40365:35::-;;;;:::o;40534:29::-;;;;;;;;;;;;;:::o;42652:113::-;2061:13;:11;:13::i;:::-;42744:16:::1;42728:13;:32;;;;42652:113:::0;:::o;21594:152::-;21666:7;21709:27;21728:7;21709:18;:27::i;:::-;21686:52;;21594:152;;;:::o;42547:97::-;2061:13;:11;:13::i;:::-;42627:12:::1;42615:9;:24;;;;42547:97:::0;:::o;19414:233::-;19486:7;19527:1;19510:19;;:5;:19;;;19506:60;;19538:28;;;;;;;;;;;;;;19506:60;16006:13;19584:18;:25;19603:5;19584:25;;;;;;;;;;;;;;;;:55;19577:62;;19414:233;;;:::o;2337:103::-;2061:13;:11;:13::i;:::-;2402:30:::1;2429:1;2402:18;:30::i;:::-;2337:103::o:0;40567:25::-;;;;;;;;;;;;;:::o;42010:202::-;2061:13;:11;:13::i;:::-;42127:9:::1;;42113:10;42096:14;:12;:14::i;:::-;:27;;;;:::i;:::-;:40;;42083:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;42172:25;42182:2;42186:10;42172:9;:25::i;:::-;42010:202:::0;;:::o;2102:87::-;2148:7;2175:6;;;;;;;;;;;2168:13;;2102:87;:::o;42360:80::-;2061:13;:11;:13::i;:::-;42429:6:::1;42416:10;;:19;;;;;;;;;;;;;;;;;;42360:80:::0;:::o;21054:104::-;21110:13;21143:7;21136:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21054:104;:::o;41088:914::-;41153:5;;;;;;;;;;;41152:6;41144:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;41234:16;;41207:11;:23;41219:10;41207:23;;;;;;;;;;;;;;;;:43;41204:493;;41280:10;41273:4;;:17;;;;:::i;:::-;41260:9;:30;;41252:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41204:493;;;41380:13;;41366:10;41350:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:43;41347:338;;41449:11;:23;41461:10;41449:23;;;;;;;;;;;;;;;;41430:16;;:42;;;;:::i;:::-;41416:10;:57;41413:172;;;41537:11;:23;41549:10;41537:23;;;;;;;;;;;;;;;;41518:16;;:42;;;;:::i;:::-;41504:10;:57;;;;:::i;:::-;41496:4;;:66;;;;:::i;:::-;41483:9;:79;;41475:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;41413:172;41347:338;;;41648:10;41641:4;;:17;;;;:::i;:::-;41628:9;:30;;41620:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41347:338;41204:493;41746:9;;41732:10;41715:14;:12;:14::i;:::-;:27;;;;:::i;:::-;:40;;41707:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41836:12;;41822:10;41796:11;:23;41808:10;41796:23;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:52;;41788:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;41891:33;41901:10;41913;41891:9;:33::i;:::-;41987:10;41961:11;:23;41973:10;41961:23;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;41935:11;:23;41947:10;41935:23;;;;;;;;;;;;;;;:62;;;;41088:914;:::o;40988:92::-;2061:13;:11;:13::i;:::-;41067:8:::1;41057:7;:18;;;;;;:::i;:::-;;40988:92:::0;:::o;25312:234::-;25459:8;25407:18;:39;25426:19;:17;:19::i;:::-;25407:39;;;;;;;;;;;;;;;:49;25447:8;25407:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;25519:8;25483:55;;25498:19;:17;:19::i;:::-;25483:55;;;25529:8;25483:55;;;;;;:::i;:::-;;;;;;;;25312:234;;:::o;40450:35::-;;;;:::o;30016:407::-;30191:31;30204:4;30210:2;30214:7;30191:12;:31::i;:::-;30255:1;30237:2;:14;;;:19;30233:183;;30276:56;30307:4;30313:2;30317:7;30326:5;30276:30;:56::i;:::-;30271:145;;30360:40;;;;;;;;;;;;;;30271:145;30233:183;30016:407;;;;:::o;43260:71::-;2061:13;:11;:13::i;:::-;43320:6:::1;43312:5;;:14;;;;;;;;;;;;;;;;;;43260:71:::0;:::o;42770:404::-;42847:13;42883:16;42891:7;42883;:16::i;:::-;42875:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42961:5;42947:19;;:10;;;;;;;;;;;:19;;;42944:225;;42990:17;42983:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42944:225;43068:1;43047:10;:8;:10::i;:::-;43041:24;:28;:128;;;;;;;;;;;;;;;;;43110:10;:8;:10::i;:::-;43122:18;:7;:16;:18::i;:::-;43093:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43041:128;43034:135;;42770:404;;;;:::o;42220:132::-;2061:13;:11;:13::i;:::-;42329:18:::1;42309:17;:38;;;;;;:::i;:::-;;42220:132:::0;:::o;40327:31::-;;;;:::o;43525:174::-;2061:13;:11;:13::i;:::-;43613:16:::1;;43603:7;:26;43595:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43684:7;43669:12;:22;;;;43525:174:::0;:::o;25554:164::-;25651:4;25675:18;:25;25694:5;25675:25;;;;;;;;;;;;;;;:35;25701:8;25675:35;;;;;;;;;;;;;;;;;;;;;;;;;25668:42;;25554:164;;;;:::o;2448:201::-;2061:13;:11;:13::i;:::-;2557:1:::1;2537:22;;:8;:22;;::::0;2529:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2613:28;2632:8;2613:18;:28::i;:::-;2448:201:::0;:::o;25726:282::-;25791:4;25847:7;25828:15;:13;:15::i;:::-;:26;;:66;;;;;25881:13;;25871:7;:23;25828:66;:153;;;;;25980:1;16782:8;25932:17;:26;25950:7;25932:26;;;;;;;;;;;;:44;:49;25828:153;25808:173;;25726:282;;;:::o;38571:105::-;38631:7;38658:10;38651:17;;38571:105;:::o;42445:97::-;42510:7;42534:1;42527:8;;42445:97;:::o;22568:670::-;22635:7;22655:12;22670:7;22655:22;;22738:4;22719:15;:13;:15::i;:::-;:23;22715:456;;22772:13;;22765:4;:20;22761:410;;;22810:14;22827:17;:23;22845:4;22827:23;;;;;;;;;;;;22810:40;;22944:1;16782:8;22916:6;:24;:29;22912:240;;22976:113;22993:1;22983:6;:11;22976:113;;23036:17;:25;23054:6;;;;;;;23036:25;;;;;;;;;;;;23027:34;;22976:113;;;23122:6;23115:13;;;;;;22912:240;22787:384;22761:410;22715:456;23199:31;;;;;;;;;;;;;;22568:670;;;;:::o;26889:485::-;26991:27;27020:23;27061:38;27102:15;:24;27118:7;27102:24;;;;;;;;;;;27061:65;;27279:18;27256:41;;27336:19;27330:26;27311:45;;27241:126;26889:485;;;:::o;26117:659::-;26266:11;26431:16;26424:5;26420:28;26411:37;;26591:16;26580:9;26576:32;26563:45;;26741:15;26730:9;26727:30;26719:5;26708:9;26705:20;26702:56;26692:66;;26117:659;;;;;:::o;30431:159::-;;;;;:::o;38252:311::-;38387:7;38407:16;17186:3;38433:19;:41;;38407:68;;17186:3;38501:31;38512:4;38518:2;38522:9;38501:10;:31::i;:::-;38493:40;;:62;;38486:69;;;38252:311;;;;;:::o;23786:450::-;23866:14;24034:16;24027:5;24023:28;24014:37;;24211:5;24197:11;24172:23;24168:41;24165:52;24158:5;24155:63;24145:73;;23786:450;;;;:::o;30601:158::-;;;;;:::o;2197:132::-;2272:12;:10;:12::i;:::-;2261:23;;:7;:5;:7::i;:::-;:23;;;2253:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2197:132::o;2657:191::-;2731:16;2750:6;;;;;;;;;;;2731:25;;2776:8;2767:6;;:17;;;;;;;;;;;;;;;;;;2831:8;2800:40;;2821:8;2800:40;;;;;;;;;;;;2720:128;2657:191;:::o;19000:296::-;19055:7;19262:15;:13;:15::i;:::-;19246:13;;:31;19239:38;;19000:296;:::o;35024:112::-;35101:27;35111:2;35115:8;35101:27;;;;;;;;;;;;:9;:27::i;:::-;35024:112;;:::o;30767:716::-;30930:4;30976:2;30951:45;;;30997:19;:17;:19::i;:::-;31018:4;31024:7;31033:5;30951:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30947:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31251:1;31234:6;:13;:18;31230:235;;31280:40;;;;;;;;;;;;;;31230:235;31423:6;31417:13;31408:6;31404:2;31400:15;31393:38;30947:529;31120:54;;;31110:64;;;:6;:64;;;;31103:71;;;30767:716;;;;;;:::o;40889:91::-;40941:13;40968:7;40961:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40889:91;:::o;11097:716::-;11153:13;11204:14;11241:1;11221:17;11232:5;11221:10;:17::i;:::-;:21;11204:38;;11257:20;11291:6;11280:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11257:41;;11313:11;11442:6;11438:2;11434:15;11426:6;11422:28;11415:35;;11479:288;11486:4;11479:288;;;11511:5;;;;;;;;11653:8;11648:2;11641:5;11637:14;11632:30;11627:3;11619:44;11709:2;11700:11;;;;;;:::i;:::-;;;;;11743:1;11734:5;:10;11479:288;11730:21;11479:288;11788:6;11781:13;;;;;11097:716;;;:::o;38097:147::-;38234:6;38097:147;;;;;:::o;1548:98::-;1601:7;1628:10;1621:17;;1548:98;:::o;34327:689::-;34458:19;34464:2;34468:8;34458:5;:19::i;:::-;34537:1;34519:2;:14;;;:19;34515:483;;34559:11;34573:13;;34559:27;;34605:13;34627:8;34621:3;:14;34605:30;;34654:233;34685:62;34724:1;34728:2;34732:7;;;;;;34741:5;34685:30;:62::i;:::-;34680:167;;34783:40;;;;;;;;;;;;;;34680:167;34882:3;34874:5;:11;34654:233;;34969:3;34952:13;;:20;34948:34;;34974:8;;;34948:34;34540:458;;34515:483;34327:689;;;:::o;8685:922::-;8738:7;8758:14;8775:1;8758:18;;8825:6;8816:5;:15;8812:102;;8861:6;8852:15;;;;;;:::i;:::-;;;;;8896:2;8886:12;;;;8812:102;8941:6;8932:5;:15;8928:102;;8977:6;8968:15;;;;;;:::i;:::-;;;;;9012:2;9002:12;;;;8928:102;9057:6;9048:5;:15;9044:102;;9093:6;9084:15;;;;;;:::i;:::-;;;;;9128:2;9118:12;;;;9044:102;9173:5;9164;:14;9160:99;;9208:5;9199:14;;;;;;:::i;:::-;;;;;9242:1;9232:11;;;;9160:99;9286:5;9277;:14;9273:99;;9321:5;9312:14;;;;;;:::i;:::-;;;;;9355:1;9345:11;;;;9273:99;9399:5;9390;:14;9386:99;;9434:5;9425:14;;;;;;:::i;:::-;;;;;9468:1;9458:11;;;;9386:99;9512:5;9503;:14;9499:66;;9548:1;9538:11;;;;9499:66;9593:6;9586:13;;;8685:922;;;:::o;31491:1770::-;31564:20;31587:13;;31564:36;;31627:1;31615:8;:13;31611:44;;31637:18;;;;;;;;;;;;;;31611:44;31668:61;31698:1;31702:2;31706:12;31720:8;31668:21;:61::i;:::-;31838:1;16144:2;31808:1;:26;;31807:32;31795:8;:45;31769:18;:22;31788:2;31769:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;31891:139;31928:2;31982:33;32005:1;32009:2;32013:1;31982:14;:33::i;:::-;31949:30;31970:8;31949:20;:30::i;:::-;:66;31891:18;:139::i;:::-;31857:17;:31;31875:12;31857:31;;;;;;;;;;;:173;;;;32047:16;32078:11;32107:8;32092:12;:23;32078:37;;32278:16;32274:2;32270:25;32258:37;;32650:12;32610:8;32569:1;32507:25;32448:1;32387;32360:335;32775:1;32761:12;32757:20;32715:346;32816:3;32807:7;32804:16;32715:346;;33034:7;33024:8;33021:1;32994:25;32991:1;32988;32983:59;32869:1;32860:7;32856:15;32845:26;;32715:346;;;32719:77;33106:1;33094:8;:13;33090:45;;33116:19;;;;;;;;;;;;;;33090:45;33168:3;33152:13;:19;;;;31742:1441;;33193:60;33222:1;33226:2;33230:12;33244:8;33193:20;:60::i;:::-;31553:1708;31491:1770;;:::o;24338:324::-;24408:14;24641:1;24631:8;24628:15;24602:24;24598:46;24588:56;;24338:324;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:149::-;1647:7;1687:66;1680:5;1676:78;1665:89;;1611:149;;;:::o;1766:120::-;1838:23;1855:5;1838:23;:::i;:::-;1831:5;1828:34;1818:62;;1876:1;1873;1866:12;1818:62;1766:120;:::o;1892:137::-;1937:5;1975:6;1962:20;1953:29;;1991:32;2017:5;1991:32;:::i;:::-;1892:137;;;;:::o;2035:327::-;2093:6;2142:2;2130:9;2121:7;2117:23;2113:32;2110:119;;;2148:79;;:::i;:::-;2110:119;2268:1;2293:52;2337:7;2328:6;2317:9;2313:22;2293:52;:::i;:::-;2283:62;;2239:116;2035:327;;;;:::o;2368:90::-;2402:7;2445:5;2438:13;2431:21;2420:32;;2368:90;;;:::o;2464:109::-;2545:21;2560:5;2545:21;:::i;:::-;2540:3;2533:34;2464:109;;:::o;2579:210::-;2666:4;2704:2;2693:9;2689:18;2681:26;;2717:65;2779:1;2768:9;2764:17;2755:6;2717:65;:::i;:::-;2579:210;;;;:::o;2795:99::-;2847:6;2881:5;2875:12;2865:22;;2795:99;;;:::o;2900:169::-;2984:11;3018:6;3013:3;3006:19;3058:4;3053:3;3049:14;3034:29;;2900:169;;;;:::o;3075:246::-;3156:1;3166:113;3180:6;3177:1;3174:13;3166:113;;;3265:1;3260:3;3256:11;3250:18;3246:1;3241:3;3237:11;3230:39;3202:2;3199:1;3195:10;3190:15;;3166:113;;;3313:1;3304:6;3299:3;3295:16;3288:27;3137:184;3075:246;;;:::o;3327:102::-;3368:6;3419:2;3415:7;3410:2;3403:5;3399:14;3395:28;3385:38;;3327:102;;;:::o;3435:377::-;3523:3;3551:39;3584:5;3551:39;:::i;:::-;3606:71;3670:6;3665:3;3606:71;:::i;:::-;3599:78;;3686:65;3744:6;3739:3;3732:4;3725:5;3721:16;3686:65;:::i;:::-;3776:29;3798:6;3776:29;:::i;:::-;3771:3;3767:39;3760:46;;3527:285;3435:377;;;;:::o;3818:313::-;3931:4;3969:2;3958:9;3954:18;3946:26;;4018:9;4012:4;4008:20;4004:1;3993:9;3989:17;3982:47;4046:78;4119:4;4110:6;4046:78;:::i;:::-;4038:86;;3818:313;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:329::-;4469:6;4518:2;4506:9;4497:7;4493:23;4489:32;4486:119;;;4524:79;;:::i;:::-;4486:119;4644:1;4669:53;4714:7;4705:6;4694:9;4690:22;4669:53;:::i;:::-;4659:63;;4615:117;4410:329;;;;:::o;4745:118::-;4832:24;4850:5;4832:24;:::i;:::-;4827:3;4820:37;4745:118;;:::o;4869:222::-;4962:4;5000:2;4989:9;4985:18;4977:26;;5013:71;5081:1;5070:9;5066:17;5057:6;5013:71;:::i;:::-;4869:222;;;;:::o;5097:474::-;5165:6;5173;5222:2;5210:9;5201:7;5197:23;5193:32;5190:119;;;5228:79;;:::i;:::-;5190:119;5348:1;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5319:117;5475:2;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5446:118;5097:474;;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:116::-;6272:21;6287:5;6272:21;:::i;:::-;6265:5;6262:32;6252:60;;6308:1;6305;6298:12;6252:60;6202:116;:::o;6324:133::-;6367:5;6405:6;6392:20;6383:29;;6421:30;6445:5;6421:30;:::i;:::-;6324:133;;;;:::o;6463:323::-;6519:6;6568:2;6556:9;6547:7;6543:23;6539:32;6536:119;;;6574:79;;:::i;:::-;6536:119;6694:1;6719:50;6761:7;6752:6;6741:9;6737:22;6719:50;:::i;:::-;6709:60;;6665:114;6463:323;;;;:::o;6792:117::-;6901:1;6898;6891:12;6915:117;7024:1;7021;7014:12;7038:180;7086:77;7083:1;7076:88;7183:4;7180:1;7173:15;7207:4;7204:1;7197:15;7224:281;7307:27;7329:4;7307:27;:::i;:::-;7299:6;7295:40;7437:6;7425:10;7422:22;7401:18;7389:10;7386:34;7383:62;7380:88;;;7448:18;;:::i;:::-;7380:88;7488:10;7484:2;7477:22;7267:238;7224:281;;:::o;7511:129::-;7545:6;7572:20;;:::i;:::-;7562:30;;7601:33;7629:4;7621:6;7601:33;:::i;:::-;7511:129;;;:::o;7646:308::-;7708:4;7798:18;7790:6;7787:30;7784:56;;;7820:18;;:::i;:::-;7784:56;7858:29;7880:6;7858:29;:::i;:::-;7850:37;;7942:4;7936;7932:15;7924:23;;7646:308;;;:::o;7960:146::-;8057:6;8052:3;8047;8034:30;8098:1;8089:6;8084:3;8080:16;8073:27;7960:146;;;:::o;8112:425::-;8190:5;8215:66;8231:49;8273:6;8231:49;:::i;:::-;8215:66;:::i;:::-;8206:75;;8304:6;8297:5;8290:21;8342:4;8335:5;8331:16;8380:3;8371:6;8366:3;8362:16;8359:25;8356:112;;;8387:79;;:::i;:::-;8356:112;8477:54;8524:6;8519:3;8514;8477:54;:::i;:::-;8196:341;8112:425;;;;;:::o;8557:340::-;8613:5;8662:3;8655:4;8647:6;8643:17;8639:27;8629:122;;8670:79;;:::i;:::-;8629:122;8787:6;8774:20;8812:79;8887:3;8879:6;8872:4;8864:6;8860:17;8812:79;:::i;:::-;8803:88;;8619:278;8557:340;;;;:::o;8903:509::-;8972:6;9021:2;9009:9;9000:7;8996:23;8992:32;8989:119;;;9027:79;;:::i;:::-;8989:119;9175:1;9164:9;9160:17;9147:31;9205:18;9197:6;9194:30;9191:117;;;9227:79;;:::i;:::-;9191:117;9332:63;9387:7;9378:6;9367:9;9363:22;9332:63;:::i;:::-;9322:73;;9118:287;8903:509;;;;:::o;9418:468::-;9483:6;9491;9540:2;9528:9;9519:7;9515:23;9511:32;9508:119;;;9546:79;;:::i;:::-;9508:119;9666:1;9691:53;9736:7;9727:6;9716:9;9712:22;9691:53;:::i;:::-;9681:63;;9637:117;9793:2;9819:50;9861:7;9852:6;9841:9;9837:22;9819:50;:::i;:::-;9809:60;;9764:115;9418:468;;;;;:::o;9892:307::-;9953:4;10043:18;10035:6;10032:30;10029:56;;;10065:18;;:::i;:::-;10029:56;10103:29;10125:6;10103:29;:::i;:::-;10095:37;;10187:4;10181;10177:15;10169:23;;9892:307;;;:::o;10205:423::-;10282:5;10307:65;10323:48;10364:6;10323:48;:::i;:::-;10307:65;:::i;:::-;10298:74;;10395:6;10388:5;10381:21;10433:4;10426:5;10422:16;10471:3;10462:6;10457:3;10453:16;10450:25;10447:112;;;10478:79;;:::i;:::-;10447:112;10568:54;10615:6;10610:3;10605;10568:54;:::i;:::-;10288:340;10205:423;;;;;:::o;10647:338::-;10702:5;10751:3;10744:4;10736:6;10732:17;10728:27;10718:122;;10759:79;;:::i;:::-;10718:122;10876:6;10863:20;10901:78;10975:3;10967:6;10960:4;10952:6;10948:17;10901:78;:::i;:::-;10892:87;;10708:277;10647:338;;;;:::o;10991:943::-;11086:6;11094;11102;11110;11159:3;11147:9;11138:7;11134:23;11130:33;11127:120;;;11166:79;;:::i;:::-;11127:120;11286:1;11311:53;11356:7;11347:6;11336:9;11332:22;11311:53;:::i;:::-;11301:63;;11257:117;11413:2;11439:53;11484:7;11475:6;11464:9;11460:22;11439:53;:::i;:::-;11429:63;;11384:118;11541:2;11567:53;11612:7;11603:6;11592:9;11588:22;11567:53;:::i;:::-;11557:63;;11512:118;11697:2;11686:9;11682:18;11669:32;11728:18;11720:6;11717:30;11714:117;;;11750:79;;:::i;:::-;11714:117;11855:62;11909:7;11900:6;11889:9;11885:22;11855:62;:::i;:::-;11845:72;;11640:287;10991:943;;;;;;;:::o;11940:474::-;12008:6;12016;12065:2;12053:9;12044:7;12040:23;12036:32;12033:119;;;12071:79;;:::i;:::-;12033:119;12191:1;12216:53;12261:7;12252:6;12241:9;12237:22;12216:53;:::i;:::-;12206:63;;12162:117;12318:2;12344:53;12389:7;12380:6;12369:9;12365:22;12344:53;:::i;:::-;12334:63;;12289:118;11940:474;;;;;:::o;12420:180::-;12468:77;12465:1;12458:88;12565:4;12562:1;12555:15;12589:4;12586:1;12579:15;12606:320;12650:6;12687:1;12681:4;12677:12;12667:22;;12734:1;12728:4;12724:12;12755:18;12745:81;;12811:4;12803:6;12799:17;12789:27;;12745:81;12873:2;12865:6;12862:14;12842:18;12839:38;12836:84;;12892:18;;:::i;:::-;12836:84;12657:269;12606:320;;;:::o;12932:147::-;13033:11;13070:3;13055:18;;12932:147;;;;:::o;13085:114::-;;:::o;13205:398::-;13364:3;13385:83;13466:1;13461:3;13385:83;:::i;:::-;13378:90;;13477:93;13566:3;13477:93;:::i;:::-;13595:1;13590:3;13586:11;13579:18;;13205:398;;;:::o;13609:379::-;13793:3;13815:147;13958:3;13815:147;:::i;:::-;13808:154;;13979:3;13972:10;;13609:379;;;:::o;13994:175::-;14134:27;14130:1;14122:6;14118:14;14111:51;13994:175;:::o;14175:366::-;14317:3;14338:67;14402:2;14397:3;14338:67;:::i;:::-;14331:74;;14414:93;14503:3;14414:93;:::i;:::-;14532:2;14527:3;14523:12;14516:19;;14175:366;;;:::o;14547:419::-;14713:4;14751:2;14740:9;14736:18;14728:26;;14800:9;14794:4;14790:20;14786:1;14775:9;14771:17;14764:47;14828:131;14954:4;14828:131;:::i;:::-;14820:139;;14547:419;;;:::o;14972:180::-;15020:77;15017:1;15010:88;15117:4;15114:1;15107:15;15141:4;15138:1;15131:15;15158:191;15198:3;15217:20;15235:1;15217:20;:::i;:::-;15212:25;;15251:20;15269:1;15251:20;:::i;:::-;15246:25;;15294:1;15291;15287:9;15280:16;;15315:3;15312:1;15309:10;15306:36;;;15322:18;;:::i;:::-;15306:36;15158:191;;;;:::o;15355:168::-;15495:20;15491:1;15483:6;15479:14;15472:44;15355:168;:::o;15529:366::-;15671:3;15692:67;15756:2;15751:3;15692:67;:::i;:::-;15685:74;;15768:93;15857:3;15768:93;:::i;:::-;15886:2;15881:3;15877:12;15870:19;;15529:366;;;:::o;15901:419::-;16067:4;16105:2;16094:9;16090:18;16082:26;;16154:9;16148:4;16144:20;16140:1;16129:9;16125:17;16118:47;16182:131;16308:4;16182:131;:::i;:::-;16174:139;;15901:419;;;:::o;16326:180::-;16466:32;16462:1;16454:6;16450:14;16443:56;16326:180;:::o;16512:366::-;16654:3;16675:67;16739:2;16734:3;16675:67;:::i;:::-;16668:74;;16751:93;16840:3;16751:93;:::i;:::-;16869:2;16864:3;16860:12;16853:19;;16512:366;;;:::o;16884:419::-;17050:4;17088:2;17077:9;17073:18;17065:26;;17137:9;17131:4;17127:20;17123:1;17112:9;17108:17;17101:47;17165:131;17291:4;17165:131;:::i;:::-;17157:139;;16884:419;;;:::o;17309:410::-;17349:7;17372:20;17390:1;17372:20;:::i;:::-;17367:25;;17406:20;17424:1;17406:20;:::i;:::-;17401:25;;17461:1;17458;17454:9;17483:30;17501:11;17483:30;:::i;:::-;17472:41;;17662:1;17653:7;17649:15;17646:1;17643:22;17623:1;17616:9;17596:83;17573:139;;17692:18;;:::i;:::-;17573:139;17357:362;17309:410;;;;:::o;17725:172::-;17865:24;17861:1;17853:6;17849:14;17842:48;17725:172;:::o;17903:366::-;18045:3;18066:67;18130:2;18125:3;18066:67;:::i;:::-;18059:74;;18142:93;18231:3;18142:93;:::i;:::-;18260:2;18255:3;18251:12;18244:19;;17903:366;;;:::o;18275:419::-;18441:4;18479:2;18468:9;18464:18;18456:26;;18528:9;18522:4;18518:20;18514:1;18503:9;18499:17;18492:47;18556:131;18682:4;18556:131;:::i;:::-;18548:139;;18275:419;;;:::o;18700:194::-;18740:4;18760:20;18778:1;18760:20;:::i;:::-;18755:25;;18794:20;18812:1;18794:20;:::i;:::-;18789:25;;18838:1;18835;18831:9;18823:17;;18862:1;18856:4;18853:11;18850:37;;;18867:18;;:::i;:::-;18850:37;18700:194;;;;:::o;18900:168::-;19040:20;19036:1;19028:6;19024:14;19017:44;18900:168;:::o;19074:366::-;19216:3;19237:67;19301:2;19296:3;19237:67;:::i;:::-;19230:74;;19313:93;19402:3;19313:93;:::i;:::-;19431:2;19426:3;19422:12;19415:19;;19074:366;;;:::o;19446:419::-;19612:4;19650:2;19639:9;19635:18;19627:26;;19699:9;19693:4;19689:20;19685:1;19674:9;19670:17;19663:47;19727:131;19853:4;19727:131;:::i;:::-;19719:139;;19446:419;;;:::o;19871:177::-;20011:29;20007:1;19999:6;19995:14;19988:53;19871:177;:::o;20054:366::-;20196:3;20217:67;20281:2;20276:3;20217:67;:::i;:::-;20210:74;;20293:93;20382:3;20293:93;:::i;:::-;20411:2;20406:3;20402:12;20395:19;;20054:366;;;:::o;20426:419::-;20592:4;20630:2;20619:9;20615:18;20607:26;;20679:9;20673:4;20669:20;20665:1;20654:9;20650:17;20643:47;20707:131;20833:4;20707:131;:::i;:::-;20699:139;;20426:419;;;:::o;20851:141::-;20900:4;20923:3;20915:11;;20946:3;20943:1;20936:14;20980:4;20977:1;20967:18;20959:26;;20851:141;;;:::o;20998:93::-;21035:6;21082:2;21077;21070:5;21066:14;21062:23;21052:33;;20998:93;;;:::o;21097:107::-;21141:8;21191:5;21185:4;21181:16;21160:37;;21097:107;;;;:::o;21210:393::-;21279:6;21329:1;21317:10;21313:18;21352:97;21382:66;21371:9;21352:97;:::i;:::-;21470:39;21500:8;21489:9;21470:39;:::i;:::-;21458:51;;21542:4;21538:9;21531:5;21527:21;21518:30;;21591:4;21581:8;21577:19;21570:5;21567:30;21557:40;;21286:317;;21210:393;;;;;:::o;21609:60::-;21637:3;21658:5;21651:12;;21609:60;;;:::o;21675:142::-;21725:9;21758:53;21776:34;21785:24;21803:5;21785:24;:::i;:::-;21776:34;:::i;:::-;21758:53;:::i;:::-;21745:66;;21675:142;;;:::o;21823:75::-;21866:3;21887:5;21880:12;;21823:75;;;:::o;21904:269::-;22014:39;22045:7;22014:39;:::i;:::-;22075:91;22124:41;22148:16;22124:41;:::i;:::-;22116:6;22109:4;22103:11;22075:91;:::i;:::-;22069:4;22062:105;21980:193;21904:269;;;:::o;22179:73::-;22224:3;22179:73;:::o;22258:189::-;22335:32;;:::i;:::-;22376:65;22434:6;22426;22420:4;22376:65;:::i;:::-;22311:136;22258:189;;:::o;22453:186::-;22513:120;22530:3;22523:5;22520:14;22513:120;;;22584:39;22621:1;22614:5;22584:39;:::i;:::-;22557:1;22550:5;22546:13;22537:22;;22513:120;;;22453:186;;:::o;22645:543::-;22746:2;22741:3;22738:11;22735:446;;;22780:38;22812:5;22780:38;:::i;:::-;22864:29;22882:10;22864:29;:::i;:::-;22854:8;22850:44;23047:2;23035:10;23032:18;23029:49;;;23068:8;23053:23;;23029:49;23091:80;23147:22;23165:3;23147:22;:::i;:::-;23137:8;23133:37;23120:11;23091:80;:::i;:::-;22750:431;;22735:446;22645:543;;;:::o;23194:117::-;23248:8;23298:5;23292:4;23288:16;23267:37;;23194:117;;;;:::o;23317:169::-;23361:6;23394:51;23442:1;23438:6;23430:5;23427:1;23423:13;23394:51;:::i;:::-;23390:56;23475:4;23469;23465:15;23455:25;;23368:118;23317:169;;;;:::o;23491:295::-;23567:4;23713:29;23738:3;23732:4;23713:29;:::i;:::-;23705:37;;23775:3;23772:1;23768:11;23762:4;23759:21;23751:29;;23491:295;;;;:::o;23791:1395::-;23908:37;23941:3;23908:37;:::i;:::-;24010:18;24002:6;23999:30;23996:56;;;24032:18;;:::i;:::-;23996:56;24076:38;24108:4;24102:11;24076:38;:::i;:::-;24161:67;24221:6;24213;24207:4;24161:67;:::i;:::-;24255:1;24279:4;24266:17;;24311:2;24303:6;24300:14;24328:1;24323:618;;;;24985:1;25002:6;24999:77;;;25051:9;25046:3;25042:19;25036:26;25027:35;;24999:77;25102:67;25162:6;25155:5;25102:67;:::i;:::-;25096:4;25089:81;24958:222;24293:887;;24323:618;24375:4;24371:9;24363:6;24359:22;24409:37;24441:4;24409:37;:::i;:::-;24468:1;24482:208;24496:7;24493:1;24490:14;24482:208;;;24575:9;24570:3;24566:19;24560:26;24552:6;24545:42;24626:1;24618:6;24614:14;24604:24;;24673:2;24662:9;24658:18;24645:31;;24519:4;24516:1;24512:12;24507:17;;24482:208;;;24718:6;24709:7;24706:19;24703:179;;;24776:9;24771:3;24767:19;24761:26;24819:48;24861:4;24853:6;24849:17;24838:9;24819:48;:::i;:::-;24811:6;24804:64;24726:156;24703:179;24928:1;24924;24916:6;24912:14;24908:22;24902:4;24895:36;24330:611;;;24293:887;;23883:1303;;;23791:1395;;:::o;25192:179::-;25332:31;25328:1;25320:6;25316:14;25309:55;25192:179;:::o;25377:366::-;25519:3;25540:67;25604:2;25599:3;25540:67;:::i;:::-;25533:74;;25616:93;25705:3;25616:93;:::i;:::-;25734:2;25729:3;25725:12;25718:19;;25377:366;;;:::o;25749:419::-;25915:4;25953:2;25942:9;25938:18;25930:26;;26002:9;25996:4;25992:20;25988:1;25977:9;25973:17;25966:47;26030:131;26156:4;26030:131;:::i;:::-;26022:139;;25749:419;;;:::o;26174:148::-;26276:11;26313:3;26298:18;;26174:148;;;;:::o;26328:390::-;26434:3;26462:39;26495:5;26462:39;:::i;:::-;26517:89;26599:6;26594:3;26517:89;:::i;:::-;26510:96;;26615:65;26673:6;26668:3;26661:4;26654:5;26650:16;26615:65;:::i;:::-;26705:6;26700:3;26696:16;26689:23;;26438:280;26328:390;;;;:::o;26724:155::-;26864:7;26860:1;26852:6;26848:14;26841:31;26724:155;:::o;26885:400::-;27045:3;27066:84;27148:1;27143:3;27066:84;:::i;:::-;27059:91;;27159:93;27248:3;27159:93;:::i;:::-;27277:1;27272:3;27268:11;27261:18;;26885:400;;;:::o;27291:701::-;27572:3;27594:95;27685:3;27676:6;27594:95;:::i;:::-;27587:102;;27706:95;27797:3;27788:6;27706:95;:::i;:::-;27699:102;;27818:148;27962:3;27818:148;:::i;:::-;27811:155;;27983:3;27976:10;;27291:701;;;;;:::o;27998:174::-;28138:26;28134:1;28126:6;28122:14;28115:50;27998:174;:::o;28178:366::-;28320:3;28341:67;28405:2;28400:3;28341:67;:::i;:::-;28334:74;;28417:93;28506:3;28417:93;:::i;:::-;28535:2;28530:3;28526:12;28519:19;;28178:366;;;:::o;28550:419::-;28716:4;28754:2;28743:9;28739:18;28731:26;;28803:9;28797:4;28793:20;28789:1;28778:9;28774:17;28767:47;28831:131;28957:4;28831:131;:::i;:::-;28823:139;;28550:419;;;:::o;28975:225::-;29115:34;29111:1;29103:6;29099:14;29092:58;29184:8;29179:2;29171:6;29167:15;29160:33;28975:225;:::o;29206:366::-;29348:3;29369:67;29433:2;29428:3;29369:67;:::i;:::-;29362:74;;29445:93;29534:3;29445:93;:::i;:::-;29563:2;29558:3;29554:12;29547:19;;29206:366;;;:::o;29578:419::-;29744:4;29782:2;29771:9;29767:18;29759:26;;29831:9;29825:4;29821:20;29817:1;29806:9;29802:17;29795:47;29859:131;29985:4;29859:131;:::i;:::-;29851:139;;29578:419;;;:::o;30003:182::-;30143:34;30139:1;30131:6;30127:14;30120:58;30003:182;:::o;30191:366::-;30333:3;30354:67;30418:2;30413:3;30354:67;:::i;:::-;30347:74;;30430:93;30519:3;30430:93;:::i;:::-;30548:2;30543:3;30539:12;30532:19;;30191:366;;;:::o;30563:419::-;30729:4;30767:2;30756:9;30752:18;30744:26;;30816:9;30810:4;30806:20;30802:1;30791:9;30787:17;30780:47;30844:131;30970:4;30844:131;:::i;:::-;30836:139;;30563:419;;;:::o;30988:98::-;31039:6;31073:5;31067:12;31057:22;;30988:98;;;:::o;31092:168::-;31175:11;31209:6;31204:3;31197:19;31249:4;31244:3;31240:14;31225:29;;31092:168;;;;:::o;31266:373::-;31352:3;31380:38;31412:5;31380:38;:::i;:::-;31434:70;31497:6;31492:3;31434:70;:::i;:::-;31427:77;;31513:65;31571:6;31566:3;31559:4;31552:5;31548:16;31513:65;:::i;:::-;31603:29;31625:6;31603:29;:::i;:::-;31598:3;31594:39;31587:46;;31356:283;31266:373;;;;:::o;31645:640::-;31840:4;31878:3;31867:9;31863:19;31855:27;;31892:71;31960:1;31949:9;31945:17;31936:6;31892:71;:::i;:::-;31973:72;32041:2;32030:9;32026:18;32017:6;31973:72;:::i;:::-;32055;32123:2;32112:9;32108:18;32099:6;32055:72;:::i;:::-;32174:9;32168:4;32164:20;32159:2;32148:9;32144:18;32137:48;32202:76;32273:4;32264:6;32202:76;:::i;:::-;32194:84;;31645:640;;;;;;;:::o;32291:141::-;32347:5;32378:6;32372:13;32363:22;;32394:32;32420:5;32394:32;:::i;:::-;32291:141;;;;:::o;32438:349::-;32507:6;32556:2;32544:9;32535:7;32531:23;32527:32;32524:119;;;32562:79;;:::i;:::-;32524:119;32682:1;32707:63;32762:7;32753:6;32742:9;32738:22;32707:63;:::i;:::-;32697:73;;32653:127;32438:349;;;;:::o;32793:180::-;32841:77;32838:1;32831:88;32938:4;32935:1;32928:15;32962:4;32959:1;32952:15

Swarm Source

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