ETH Price: $2,289.61 (-2.31%)
Gas: 2.71 Gwei

Token

Pixel Bepes (Bepe)
 

Overview

Max Total Supply

307 Bepe

Holders

69

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
nessie4.eth
Balance
3 Bepe
0xd12bf4f3d95126c03f4366fb1e9a69949118401e
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PixelBepes

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-02
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.15;
// ⠀⠀⠀⠀⢀⣤⡀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⣿⠉⢻⠟⢹⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⢀⣿⡄⠀⠀⣼⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣄⣠⣤⣄⠀⠀⠀⠀
// ⠀⠀⣰⡿⠋⠀⣀⣀⠈⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇⠘⠋⠀⣿⠇⠀⠀⠀
// ⠀⣠⡟⠀⢀⣾⠟⠻⠿⠿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⡀⠀⠀⣾⠋⢀⣀⠈⠻⢶⣄⠀⠀
// ⢠⣿⠁⣰⡿⠁⠀⣀⣤⣶⣶⡶⢶⣤⣄⡀⢀⣠⠴⠚⠉⠉⠉⠉⠉⠙⢶⡄⠛⠒⠛⠙⢳⣦⡀⠹⣆⠀
// ⢸⡇⢠⣿⣠⣴⣿⡟⢉⣠⠤⠶⠶⠾⠯⣿⣿⣧⣀⣤⣶⣾⣿⡿⠿⠛⠋⢙⣛⡛⠳⣄⡀⠙⣷⡀⢹⡆
// ⢸⠀⢸⣿⣿⣿⣿⠞⠉⠀⠀⠀⠀⣀⣤⣤⠬⠉⠛⠻⠿⠟⠉⢀⣠⢞⣭⣤⣤⣍⠙⠺⢷⡀⢸⡇⠀⣿
// ⢸⠀⢸⣿⣿⡟⠀⠀⠀⢀⣠⠞⣫⢗⣫⢽⣶⣤⣀⠉⠛⣶⠖⠛⠀⣾⡷⣾⠋⣻⡆⠀⠀⡇⣼⠇⠀⣿
// ⢸⠀⠀⣿⣿⡇⢠⡤⠔⣋⡤⠞⠁⢸⣷⣾⣯⣹⣿⡆⢀⣏⠀⠈⠈⣿⣷⣼⣿⠿⠷⣴⡞⠀⣿⠀⠀⣿
// ⢸⠀⠀⢿⣿⡇⠀⠀⠘⠻⠤⣀⡀⠸⣿⣯⣿⣿⡿⠷⠚⠉⠛⠛⠛⠛⠉⠉⠀⣠⡾⠛⣦⢸⡏⠀⠀⣿
// ⢸⠀⠀⢸⣿⡇⠀⣠⠶⠶⠶⠶⠿⣿⣭⣭⣁⣀⣠⣤⣤⣤⣤⣤⣤⡶⠶⠛⠋⢁⣀⣴⠟⣽⠇⠀⠀⣿
// ⢸⠀⠀⢸⣿⡇⢾⣅⠀⠀⠶⠶⢦⣤⣤⣀⣉⣉⣉⣉⣁⣡⣤⣤⣴⡶⠶⠶⠚⠉⢉⡿⣠⠟⠀⠀⣰⡟
// ⢸⡀⠀⠀⢿⣇⠀⠈⠛⠳⠶⠤⠤⢤⣀⣉⣉⣉⣉⣉⣉⣁⣀⣠⣤⡤⠤⠤⠶⠞⢻⡟⠃⠀⠀⣰⠟⠀
// ⢸⣧⠀⠀⠘⣿⣦⣄⡀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠁⠀⠀⠀⠀⠀⣠⣤⣶⣿⣧⣀⣴⠟⠃⠀⠀
// ⠀⢻⣆⠀⠀⠈⢻⣿⣿⣷⣶⣤⣄⣀⣀⣀⣠⣤⣶⣶⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣟⡉⠀⠀⠀⠀⠀
// ⠀⠀⢻⣦⡄⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀
// ⠀⢀⣿⣿⣿⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡧⠀⠀⠀

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 {
        address addr;
        uint64 startTimestamp;
        bool burned;
        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);
}

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 from token ID to approved address.
    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;

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

    // =============================================================
    //                          CONSTRUCTOR
    // =============================================================

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

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

    /**
     * @dev Returns the next token ID to be minted.
     */
    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.selector);
        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) {
        // The interface IDs are constants representing the first 4 bytes
        // of the XOR of all function selectors in the interface.
        // See: [ERC165](https://eips.ethereum.org/EIPS/eip-165)
        // (e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`)
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

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

    /**
     * @dev Returns the token collection name.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) _revert(URIQueryForNonexistentToken.selector);

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

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _ownershipIsInitialized(uint256 index) internal view virtual returns (bool) {
        return _packedOwnerships[index] != 0;
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256 packed) {
        if (_startTokenId() <= tokenId) {
            packed = _packedOwnerships[tokenId];
            // If the data at the starting slot does not exist, start the scan.
            if (packed == 0) {
                if (tokenId >= _currentIndex) _revert(OwnerQueryForNonexistentToken.selector);
                // Invariant:
                // There will always be an initialized ownership slot
                // (i.e. `ownership.addr != address(0) && ownership.burned == false`)
                // before an unintialized ownership slot
                // (i.e. `ownership.addr == address(0) && ownership.burned == false`)
                // Hence, `tokenId` will not underflow.
                //
                // We can directly compare the packed value.
                // If the address is zero, packed will be zero.
                for (;;) {
                    unchecked {
                        packed = _packedOwnerships[--tokenId];
                    }
                    if (packed == 0) continue;
                    if (packed & _BITMASK_BURNED == 0) return packed;
                    // Otherwise, the token is burned, and we must revert.
                    // This handles the case of batch burned tokens, where only the burned bit
                    // of the starting slot is set, and remaining slots are left uninitialized.
                    _revert(OwnerQueryForNonexistentToken.selector);
                }
            }
            // Otherwise, the data exists and we can skip the scan.
            // This is possible because we have already achieved the target condition.
            // This saves 2143 gas on transfers of initialized tokens.
            // If the token is not burned, return `packed`. Otherwise, revert.
            if (packed & _BITMASK_BURNED == 0) return packed;
        }
        _revert(OwnerQueryForNonexistentToken.selector);
    }

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

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

    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 {
        _approve(to, tokenId, true);
    }

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

        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 result) {
        if (_startTokenId() <= tokenId) {
            if (tokenId < _currentIndex) {
                uint256 packed;
                while ((packed = _packedOwnerships[tokenId]) == 0) --tokenId;
                result = packed & _BITMASK_BURNED == 0;
            }
        }
    }

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

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

        // Mask `from` to the lower 160 bits, in case the upper bits somehow aren't clean.
        from = address(uint160(uint256(uint160(from)) & _BITMASK_ADDRESS));

        if (address(uint160(prevOwnershipPacked)) != from) _revert(TransferFromIncorrectOwner.selector);

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

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

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

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

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

        // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean.
        uint256 toMasked = uint256(uint160(to)) & _BITMASK_ADDRESS;
        assembly {
            // 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.
                from, // `from`.
                toMasked, // `to`.
                tokenId // `tokenId`.
            )
        }
        if (toMasked == 0) _revert(TransferToZeroAddress.selector);
    }

    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.selector);
            }
    }

    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.selector);
            }
            assembly {
                revert(add(32, reason), mload(reason))
            }
        }
    }

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

        // Overflows are incredibly unrealistic.
        // `balance` and `numberMinted` have a maximum limit of 2**64.
        // `tokenId` has a maximum limit of 2**256.
        unchecked {
            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean.
            uint256 toMasked = uint256(uint160(to)) & _BITMASK_ADDRESS;

            if (toMasked == 0) _revert(MintToZeroAddress.selector);

            uint256 end = startTokenId + quantity;
            uint256 tokenId = startTokenId;

            do {
                assembly {
                    // 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`.
                        tokenId // `tokenId`.
                    )
                }
                // The `!=` check ensures that large values of `quantity`
                // that overflows uint256 will make the loop run out of gas.
            } while (++tokenId != end);

            _currentIndex = end;
        }
    }

    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.selector);
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) _revert(bytes4(0));
            }
        }
    }

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

    function _approve(address to, uint256 tokenId) internal virtual {
        _approve(to, tokenId, false);
    }

    function _approve(
        address to,
        uint256 tokenId,
        bool approvalCheck
    ) internal virtual {
        address owner = ownerOf(tokenId);

        if (approvalCheck && _msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                _revert(ApprovalCallerNotOwnerNorApproved.selector);
            }

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

    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.selector);
        }

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256.
        unchecked {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << _BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

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

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

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

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

    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), but
            // we allocate 0xa0 bytes to keep the free memory pointer 32-byte word aligned.
            // We will need 1 word for the trailing zeros padding, 1 word for the length,
            // and 3 words for a maximum of 78 digits. Total: 5 * 0x20 = 0xa0.
            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)
        }
    }

    function _revert(bytes4 errorSelector) internal pure {
        assembly {
            mstore(0x00, errorSelector)
            revert(0x00, 0x04)
        }
    }
}

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

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

contract PixelBepes is ERC721A, Ownable {
    uint internal constant totalPossible = 3125;
    string internal URI = "ipfs://QmcUX1zSwBQPYq3DafpMHCiM7cpS3BaKKYLryb8DqonbyH/";
    string internal baseExt = ".json";

    mapping(address => bool) mintTracker;

    constructor() ERC721A("Pixel Bepes", "Bepe") {
        _mint(msg.sender, 100);
    }

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

    function mint() external {
        require(mintTracker[msg.sender] == false, "Already claimed mint");
        require(totalSupply() + 1 <= totalPossible, "SOLD OUT");

        mintTracker[msg.sender] = true;
        for (uint256 i = 0; i < 3;) {
            if(totalSupply() + 1 <= totalPossible) {
                _mint(msg.sender, 1);
            }
            unchecked {
                i++;
            }
        }
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        return string(abi.encodePacked(URI, _toString(tokenId), baseExt));
    }

    function setURIExtension(string calldata _baseExt) external onlyOwner {
        baseExt = _baseExt;
    }

    function setURI(string calldata _URI) external onlyOwner {
        URI = _URI;
    }
 }

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"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":"_URI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseExt","type":"string"}],"name":"setURIExtension","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"}]

608060405260405180606001604052806036815260200162002bc960369139600990816200002e9190620006a8565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a9081620000759190620006a8565b503480156200008357600080fd5b506040518060400160405280600b81526020017f506978656c2042657065730000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42657065000000000000000000000000000000000000000000000000000000008152508160029081620001019190620006a8565b508060039081620001139190620006a8565b50620001246200016560201b60201c565b60008190555050506200014c620001406200016e60201b60201c565b6200017660201b60201c565b6200015f3360646200023c60201b60201c565b6200078f565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000805490506000820362000264576200026363b562e8dd60e01b620003b060201b60201c565b5b6200029c836200027e6000866000620003ba60201b60201c565b6200028f85620003ea60201b60201c565b17620003fa60201b60201c565b6004600083815260200190815260200160002081905550600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff16169050600081036200035d576200035c632e07630060e01b620003b060201b60201c565b5b6000838301905060008390505b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a48181600101915081036200036a5781600081905550505050505050565b8060005260046000fd5b60008060e883901c905060e8620003d98686846200042560201b60201c565b62ffffff16901b9150509392505050565b60006001821460e11b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b60009392505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b057607f821691505b602082108103620004c657620004c562000468565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004f1565b6200053c8683620004f1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000589620005836200057d8462000554565b6200055e565b62000554565b9050919050565b6000819050919050565b620005a58362000568565b620005bd620005b48262000590565b848454620004fe565b825550505050565b600090565b620005d4620005c5565b620005e18184846200059a565b505050565b5b818110156200060957620005fd600082620005ca565b600181019050620005e7565b5050565b601f82111562000658576200062281620004cc565b6200062d84620004e1565b810160208510156200063d578190505b620006556200064c85620004e1565b830182620005e6565b50505b505050565b600082821c905092915050565b60006200067d600019846008026200065d565b1980831691505092915050565b60006200069883836200066a565b9150826002028217905092915050565b620006b3826200042e565b67ffffffffffffffff811115620006cf57620006ce62000439565b5b620006db825462000497565b620006e88282856200060d565b600060209050601f8311600181146200072057600084156200070b578287015190505b6200071785826200068a565b86555062000787565b601f1984166200073086620004cc565b60005b828110156200075a5784890151825560018201915060208501945060208101905062000733565b868310156200077a578489015162000776601f8916826200066a565b8355505b6001600288020188555050505b505050505050565b61242a806200079f6000396000f3fe60806040526004361061011f5760003560e01c806370a08231116100a0578063a22cb46511610064578063a22cb46514610398578063b88d4fde146103c1578063c87b56dd146103dd578063e985e9c51461041a578063f2fde38b146104575761011f565b806370a08231146102c5578063715018a6146103025780638da5cb5b14610319578063907097511461034457806395d89b411461036d5761011f565b80631249c58b116100e75780631249c58b1461020e57806318160ddd1461022557806323b872dd1461025057806342842e0e1461026c5780636352211e146102885761011f565b806301ffc9a71461012457806302fe53051461016157806306fdde031461018a578063081812fc146101b5578063095ea7b3146101f2575b600080fd5b34801561013057600080fd5b5061014b600480360381019061014691906116dd565b610480565b6040516101589190611725565b60405180910390f35b34801561016d57600080fd5b50610188600480360381019061018391906117a5565b610512565b005b34801561019657600080fd5b5061019f610530565b6040516101ac9190611882565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d791906118da565b6105c2565b6040516101e99190611948565b60405180910390f35b61020c6004803603810190610207919061198f565b610620565b005b34801561021a57600080fd5b50610223610630565b005b34801561023157600080fd5b5061023a6107b7565b60405161024791906119de565b60405180910390f35b61026a600480360381019061026591906119f9565b6107ce565b005b610286600480360381019061028191906119f9565b610a75565b005b34801561029457600080fd5b506102af60048036038101906102aa91906118da565b610a95565b6040516102bc9190611948565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190611a4c565b610aa7565b6040516102f991906119de565b60405180910390f35b34801561030e57600080fd5b50610317610b3e565b005b34801561032557600080fd5b5061032e610b52565b60405161033b9190611948565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906117a5565b610b7c565b005b34801561037957600080fd5b50610382610b9a565b60405161038f9190611882565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190611aa5565b610c2c565b005b6103db60048036038101906103d69190611c15565b610d37565b005b3480156103e957600080fd5b5061040460048036038101906103ff91906118da565b610d89565b6040516104119190611882565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190611c98565b610dc0565b60405161044e9190611725565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190611a4c565b610e54565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104db57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061050b5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b61051a610ed7565b81816009918261052b929190611eef565b505050565b60606002805461053f90611d12565b80601f016020809104026020016040519081016040528092919081815260200182805461056b90611d12565b80156105b85780601f1061058d576101008083540402835291602001916105b8565b820191906000526020600020905b81548152906001019060200180831161059b57829003601f168201915b5050505050905090565b60006105cd82610f55565b6105e2576105e163cf4700e460e01b610fce565b5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61062c82826001610fd8565b5050565b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146106c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ba9061200b565b60405180910390fd5b610c3560016106d06107b7565b6106da919061205a565b111561071b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610712906120da565b60405180910390fd5b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b60038110156107b457610c35600161078c6107b7565b610796919061205a565b116107a7576107a6336001611107565b5b8080600101915050610776565b50565b60006107c1611250565b6001546000540303905090565b60006107d982611259565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461084e5761084d63a114810060e01b610fce565b5b60008061085a84611345565b91509150610870818761086b61136c565b611374565b61089b576108858661088061136c565b610dc0565b61089a576108996359c896be60e01b610fce565b5b5b80156108a657600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610974856109508888876113b8565b7c0200000000000000000000000000000000000000000000000000000000176113e0565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036109fa57600060018501905060006004600083815260200190815260200160002054036109f85760005481146109f7578360046000838152602001908152602001600020819055505b5b505b600073ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460008103610a6c57610a6b63ea553b3460e01b610fce565b5b50505050505050565b610a9083838360405180602001604052806000815250610d37565b505050565b6000610aa082611259565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aed57610aec638f4eb60460e01b610fce565b5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610b46610ed7565b610b50600061140b565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b84610ed7565b8181600a9182610b95929190611eef565b505050565b606060038054610ba990611d12565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590611d12565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b5050505050905090565b8060076000610c3961136c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ce661136c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d2b9190611725565b60405180910390a35050565b610d428484846107ce565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610d8357610d6d848484846114d1565b610d8257610d8163d1a57ed660e01b610fce565b5b5b50505050565b60606009610d9683611600565b600a604051602001610daa939291906121b9565b6040516020818303038152906040529050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e5c610ed7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec29061225c565b60405180910390fd5b610ed48161140b565b50565b610edf611650565b73ffffffffffffffffffffffffffffffffffffffff16610efd610b52565b73ffffffffffffffffffffffffffffffffffffffff1614610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906122c8565b60405180910390fd5b565b600081610f60611250565b11610fc957600054821015610fc85760005b6000600460008581526020019081526020016000205491508103610fa15782610f9a906122e8565b9250610f72565b60007c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b8060005260046000fd5b6000610fe383610a95565b905081801561102557508073ffffffffffffffffffffffffffffffffffffffff1661100c61136c565b73ffffffffffffffffffffffffffffffffffffffff1614155b156110515761103b8161103661136c565b610dc0565b6110505761104f63cfb3b94260e01b610fce565b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b600080549050600082036111265761112563b562e8dd60e01b610fce565b5b6111468361113760008660006113b8565b61114085611658565b176113e0565b6004600083815260200190815260200160002081905550600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff16169050600081036111fe576111fd632e07630060e01b610fce565b5b6000838301905060008390505b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a481816001019150810361120b5781600081905550505050505050565b60006001905090565b600081611264611250565b1161132f5760046000838152602001908152602001600020549050600081036113065760005482106112a1576112a063df2d9b4260e01b610fce565b5b5b600460008360019003935083815260200190815260200160002054905060008103156113015760007c0100000000000000000000000000000000000000000000000000000000821603156113405761130063df2d9b4260e01b610fce565b5b6112a2565b60007c010000000000000000000000000000000000000000000000000000000082160315611340575b61133f63df2d9b4260e01b610fce565b5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b60008060e883901c905060e86113cf868684611668565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026114f761136c565b8786866040518563ffffffff1660e01b81526004016115199493929190612366565b6020604051808303816000875af192505050801561155557506040513d601f19601f8201168201806040525081019061155291906123c7565b60015b6115ad573d8060008114611585576040519150601f19603f3d011682016040523d82523d6000602084013e61158a565b606091505b5060008151036115a5576115a463d1a57ed660e01b610fce565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060a060405101806040526020810391506000825281835b60011561163b57600184039350600a81066030018453600a8104905080611619575b50828103602084039350808452505050919050565b600033905090565b60006001821460e11b9050919050565b60009392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6116ba81611685565b81146116c557600080fd5b50565b6000813590506116d7816116b1565b92915050565b6000602082840312156116f3576116f261167b565b5b6000611701848285016116c8565b91505092915050565b60008115159050919050565b61171f8161170a565b82525050565b600060208201905061173a6000830184611716565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261176557611764611740565b5b8235905067ffffffffffffffff81111561178257611781611745565b5b60208301915083600182028301111561179e5761179d61174a565b5b9250929050565b600080602083850312156117bc576117bb61167b565b5b600083013567ffffffffffffffff8111156117da576117d9611680565b5b6117e68582860161174f565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561182c578082015181840152602081019050611811565b60008484015250505050565b6000601f19601f8301169050919050565b6000611854826117f2565b61185e81856117fd565b935061186e81856020860161180e565b61187781611838565b840191505092915050565b6000602082019050818103600083015261189c8184611849565b905092915050565b6000819050919050565b6118b7816118a4565b81146118c257600080fd5b50565b6000813590506118d4816118ae565b92915050565b6000602082840312156118f0576118ef61167b565b5b60006118fe848285016118c5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061193282611907565b9050919050565b61194281611927565b82525050565b600060208201905061195d6000830184611939565b92915050565b61196c81611927565b811461197757600080fd5b50565b60008135905061198981611963565b92915050565b600080604083850312156119a6576119a561167b565b5b60006119b48582860161197a565b92505060206119c5858286016118c5565b9150509250929050565b6119d8816118a4565b82525050565b60006020820190506119f360008301846119cf565b92915050565b600080600060608486031215611a1257611a1161167b565b5b6000611a208682870161197a565b9350506020611a318682870161197a565b9250506040611a42868287016118c5565b9150509250925092565b600060208284031215611a6257611a6161167b565b5b6000611a708482850161197a565b91505092915050565b611a828161170a565b8114611a8d57600080fd5b50565b600081359050611a9f81611a79565b92915050565b60008060408385031215611abc57611abb61167b565b5b6000611aca8582860161197a565b9250506020611adb85828601611a90565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b2282611838565b810181811067ffffffffffffffff82111715611b4157611b40611aea565b5b80604052505050565b6000611b54611671565b9050611b608282611b19565b919050565b600067ffffffffffffffff821115611b8057611b7f611aea565b5b611b8982611838565b9050602081019050919050565b82818337600083830152505050565b6000611bb8611bb384611b65565b611b4a565b905082815260208101848484011115611bd457611bd3611ae5565b5b611bdf848285611b96565b509392505050565b600082601f830112611bfc57611bfb611740565b5b8135611c0c848260208601611ba5565b91505092915050565b60008060008060808587031215611c2f57611c2e61167b565b5b6000611c3d8782880161197a565b9450506020611c4e8782880161197a565b9350506040611c5f878288016118c5565b925050606085013567ffffffffffffffff811115611c8057611c7f611680565b5b611c8c87828801611be7565b91505092959194509250565b60008060408385031215611caf57611cae61167b565b5b6000611cbd8582860161197a565b9250506020611cce8582860161197a565b9150509250929050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d2a57607f821691505b602082108103611d3d57611d3c611ce3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611da57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d68565b611daf8683611d68565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611dec611de7611de2846118a4565b611dc7565b6118a4565b9050919050565b6000819050919050565b611e0683611dd1565b611e1a611e1282611df3565b848454611d75565b825550505050565b600090565b611e2f611e22565b611e3a818484611dfd565b505050565b5b81811015611e5e57611e53600082611e27565b600181019050611e40565b5050565b601f821115611ea357611e7481611d43565b611e7d84611d58565b81016020851015611e8c578190505b611ea0611e9885611d58565b830182611e3f565b50505b505050565b600082821c905092915050565b6000611ec660001984600802611ea8565b1980831691505092915050565b6000611edf8383611eb5565b9150826002028217905092915050565b611ef98383611cd8565b67ffffffffffffffff811115611f1257611f11611aea565b5b611f1c8254611d12565b611f27828285611e62565b6000601f831160018114611f565760008415611f44578287013590505b611f4e8582611ed3565b865550611fb6565b601f198416611f6486611d43565b60005b82811015611f8c57848901358255600182019150602085019450602081019050611f67565b86831015611fa95784890135611fa5601f891682611eb5565b8355505b6001600288020188555050505b50505050505050565b7f416c726561647920636c61696d6564206d696e74000000000000000000000000600082015250565b6000611ff56014836117fd565b915061200082611fbf565b602082019050919050565b6000602082019050818103600083015261202481611fe8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612065826118a4565b9150612070836118a4565b92508282019050808211156120885761208761202b565b5b92915050565b7f534f4c44204f5554000000000000000000000000000000000000000000000000600082015250565b60006120c46008836117fd565b91506120cf8261208e565b602082019050919050565b600060208201905081810360008301526120f3816120b7565b9050919050565b600081905092915050565b6000815461211281611d12565b61211c81866120fa565b94506001821660008114612137576001811461214c5761217f565b60ff198316865281151582028601935061217f565b61215585611d43565b60005b8381101561217757815481890152600182019150602081019050612158565b838801955050505b50505092915050565b6000612193826117f2565b61219d81856120fa565b93506121ad81856020860161180e565b80840191505092915050565b60006121c58286612105565b91506121d18285612188565b91506121dd8284612105565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006122466026836117fd565b9150612251826121ea565b604082019050919050565b6000602082019050818103600083015261227581612239565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122b26020836117fd565b91506122bd8261227c565b602082019050919050565b600060208201905081810360008301526122e1816122a5565b9050919050565b60006122f3826118a4565b9150600082036123065761230561202b565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b600061233882612311565b612342818561231c565b935061235281856020860161180e565b61235b81611838565b840191505092915050565b600060808201905061237b6000830187611939565b6123886020830186611939565b61239560408301856119cf565b81810360608301526123a7818461232d565b905095945050505050565b6000815190506123c1816116b1565b92915050565b6000602082840312156123dd576123dc61167b565b5b60006123eb848285016123b2565b9150509291505056fea264697066735822122063b5697ed8dd89e70c08556ce5c0b926a3d6b240737ced24f1b97b7e3ee4bae064736f6c63430008120033697066733a2f2f516d635558317a5377425150597133446166704d4843694d376370533342614b4b594c7279623844716f6e6279482f

Deployed Bytecode

0x60806040526004361061011f5760003560e01c806370a08231116100a0578063a22cb46511610064578063a22cb46514610398578063b88d4fde146103c1578063c87b56dd146103dd578063e985e9c51461041a578063f2fde38b146104575761011f565b806370a08231146102c5578063715018a6146103025780638da5cb5b14610319578063907097511461034457806395d89b411461036d5761011f565b80631249c58b116100e75780631249c58b1461020e57806318160ddd1461022557806323b872dd1461025057806342842e0e1461026c5780636352211e146102885761011f565b806301ffc9a71461012457806302fe53051461016157806306fdde031461018a578063081812fc146101b5578063095ea7b3146101f2575b600080fd5b34801561013057600080fd5b5061014b600480360381019061014691906116dd565b610480565b6040516101589190611725565b60405180910390f35b34801561016d57600080fd5b50610188600480360381019061018391906117a5565b610512565b005b34801561019657600080fd5b5061019f610530565b6040516101ac9190611882565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d791906118da565b6105c2565b6040516101e99190611948565b60405180910390f35b61020c6004803603810190610207919061198f565b610620565b005b34801561021a57600080fd5b50610223610630565b005b34801561023157600080fd5b5061023a6107b7565b60405161024791906119de565b60405180910390f35b61026a600480360381019061026591906119f9565b6107ce565b005b610286600480360381019061028191906119f9565b610a75565b005b34801561029457600080fd5b506102af60048036038101906102aa91906118da565b610a95565b6040516102bc9190611948565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190611a4c565b610aa7565b6040516102f991906119de565b60405180910390f35b34801561030e57600080fd5b50610317610b3e565b005b34801561032557600080fd5b5061032e610b52565b60405161033b9190611948565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906117a5565b610b7c565b005b34801561037957600080fd5b50610382610b9a565b60405161038f9190611882565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190611aa5565b610c2c565b005b6103db60048036038101906103d69190611c15565b610d37565b005b3480156103e957600080fd5b5061040460048036038101906103ff91906118da565b610d89565b6040516104119190611882565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190611c98565b610dc0565b60405161044e9190611725565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190611a4c565b610e54565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104db57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061050b5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b61051a610ed7565b81816009918261052b929190611eef565b505050565b60606002805461053f90611d12565b80601f016020809104026020016040519081016040528092919081815260200182805461056b90611d12565b80156105b85780601f1061058d576101008083540402835291602001916105b8565b820191906000526020600020905b81548152906001019060200180831161059b57829003601f168201915b5050505050905090565b60006105cd82610f55565b6105e2576105e163cf4700e460e01b610fce565b5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61062c82826001610fd8565b5050565b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146106c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ba9061200b565b60405180910390fd5b610c3560016106d06107b7565b6106da919061205a565b111561071b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610712906120da565b60405180910390fd5b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b60038110156107b457610c35600161078c6107b7565b610796919061205a565b116107a7576107a6336001611107565b5b8080600101915050610776565b50565b60006107c1611250565b6001546000540303905090565b60006107d982611259565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461084e5761084d63a114810060e01b610fce565b5b60008061085a84611345565b91509150610870818761086b61136c565b611374565b61089b576108858661088061136c565b610dc0565b61089a576108996359c896be60e01b610fce565b5b5b80156108a657600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610974856109508888876113b8565b7c0200000000000000000000000000000000000000000000000000000000176113e0565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036109fa57600060018501905060006004600083815260200190815260200160002054036109f85760005481146109f7578360046000838152602001908152602001600020819055505b5b505b600073ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460008103610a6c57610a6b63ea553b3460e01b610fce565b5b50505050505050565b610a9083838360405180602001604052806000815250610d37565b505050565b6000610aa082611259565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aed57610aec638f4eb60460e01b610fce565b5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610b46610ed7565b610b50600061140b565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b84610ed7565b8181600a9182610b95929190611eef565b505050565b606060038054610ba990611d12565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590611d12565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b5050505050905090565b8060076000610c3961136c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ce661136c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d2b9190611725565b60405180910390a35050565b610d428484846107ce565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610d8357610d6d848484846114d1565b610d8257610d8163d1a57ed660e01b610fce565b5b5b50505050565b60606009610d9683611600565b600a604051602001610daa939291906121b9565b6040516020818303038152906040529050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e5c610ed7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec29061225c565b60405180910390fd5b610ed48161140b565b50565b610edf611650565b73ffffffffffffffffffffffffffffffffffffffff16610efd610b52565b73ffffffffffffffffffffffffffffffffffffffff1614610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906122c8565b60405180910390fd5b565b600081610f60611250565b11610fc957600054821015610fc85760005b6000600460008581526020019081526020016000205491508103610fa15782610f9a906122e8565b9250610f72565b60007c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b8060005260046000fd5b6000610fe383610a95565b905081801561102557508073ffffffffffffffffffffffffffffffffffffffff1661100c61136c565b73ffffffffffffffffffffffffffffffffffffffff1614155b156110515761103b8161103661136c565b610dc0565b6110505761104f63cfb3b94260e01b610fce565b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b600080549050600082036111265761112563b562e8dd60e01b610fce565b5b6111468361113760008660006113b8565b61114085611658565b176113e0565b6004600083815260200190815260200160002081905550600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff16169050600081036111fe576111fd632e07630060e01b610fce565b5b6000838301905060008390505b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a481816001019150810361120b5781600081905550505050505050565b60006001905090565b600081611264611250565b1161132f5760046000838152602001908152602001600020549050600081036113065760005482106112a1576112a063df2d9b4260e01b610fce565b5b5b600460008360019003935083815260200190815260200160002054905060008103156113015760007c0100000000000000000000000000000000000000000000000000000000821603156113405761130063df2d9b4260e01b610fce565b5b6112a2565b60007c010000000000000000000000000000000000000000000000000000000082160315611340575b61133f63df2d9b4260e01b610fce565b5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b60008060e883901c905060e86113cf868684611668565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026114f761136c565b8786866040518563ffffffff1660e01b81526004016115199493929190612366565b6020604051808303816000875af192505050801561155557506040513d601f19601f8201168201806040525081019061155291906123c7565b60015b6115ad573d8060008114611585576040519150601f19603f3d011682016040523d82523d6000602084013e61158a565b606091505b5060008151036115a5576115a463d1a57ed660e01b610fce565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060a060405101806040526020810391506000825281835b60011561163b57600184039350600a81066030018453600a8104905080611619575b50828103602084039350808452505050919050565b600033905090565b60006001821460e11b9050919050565b60009392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6116ba81611685565b81146116c557600080fd5b50565b6000813590506116d7816116b1565b92915050565b6000602082840312156116f3576116f261167b565b5b6000611701848285016116c8565b91505092915050565b60008115159050919050565b61171f8161170a565b82525050565b600060208201905061173a6000830184611716565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261176557611764611740565b5b8235905067ffffffffffffffff81111561178257611781611745565b5b60208301915083600182028301111561179e5761179d61174a565b5b9250929050565b600080602083850312156117bc576117bb61167b565b5b600083013567ffffffffffffffff8111156117da576117d9611680565b5b6117e68582860161174f565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561182c578082015181840152602081019050611811565b60008484015250505050565b6000601f19601f8301169050919050565b6000611854826117f2565b61185e81856117fd565b935061186e81856020860161180e565b61187781611838565b840191505092915050565b6000602082019050818103600083015261189c8184611849565b905092915050565b6000819050919050565b6118b7816118a4565b81146118c257600080fd5b50565b6000813590506118d4816118ae565b92915050565b6000602082840312156118f0576118ef61167b565b5b60006118fe848285016118c5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061193282611907565b9050919050565b61194281611927565b82525050565b600060208201905061195d6000830184611939565b92915050565b61196c81611927565b811461197757600080fd5b50565b60008135905061198981611963565b92915050565b600080604083850312156119a6576119a561167b565b5b60006119b48582860161197a565b92505060206119c5858286016118c5565b9150509250929050565b6119d8816118a4565b82525050565b60006020820190506119f360008301846119cf565b92915050565b600080600060608486031215611a1257611a1161167b565b5b6000611a208682870161197a565b9350506020611a318682870161197a565b9250506040611a42868287016118c5565b9150509250925092565b600060208284031215611a6257611a6161167b565b5b6000611a708482850161197a565b91505092915050565b611a828161170a565b8114611a8d57600080fd5b50565b600081359050611a9f81611a79565b92915050565b60008060408385031215611abc57611abb61167b565b5b6000611aca8582860161197a565b9250506020611adb85828601611a90565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b2282611838565b810181811067ffffffffffffffff82111715611b4157611b40611aea565b5b80604052505050565b6000611b54611671565b9050611b608282611b19565b919050565b600067ffffffffffffffff821115611b8057611b7f611aea565b5b611b8982611838565b9050602081019050919050565b82818337600083830152505050565b6000611bb8611bb384611b65565b611b4a565b905082815260208101848484011115611bd457611bd3611ae5565b5b611bdf848285611b96565b509392505050565b600082601f830112611bfc57611bfb611740565b5b8135611c0c848260208601611ba5565b91505092915050565b60008060008060808587031215611c2f57611c2e61167b565b5b6000611c3d8782880161197a565b9450506020611c4e8782880161197a565b9350506040611c5f878288016118c5565b925050606085013567ffffffffffffffff811115611c8057611c7f611680565b5b611c8c87828801611be7565b91505092959194509250565b60008060408385031215611caf57611cae61167b565b5b6000611cbd8582860161197a565b9250506020611cce8582860161197a565b9150509250929050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d2a57607f821691505b602082108103611d3d57611d3c611ce3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611da57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611d68565b611daf8683611d68565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611dec611de7611de2846118a4565b611dc7565b6118a4565b9050919050565b6000819050919050565b611e0683611dd1565b611e1a611e1282611df3565b848454611d75565b825550505050565b600090565b611e2f611e22565b611e3a818484611dfd565b505050565b5b81811015611e5e57611e53600082611e27565b600181019050611e40565b5050565b601f821115611ea357611e7481611d43565b611e7d84611d58565b81016020851015611e8c578190505b611ea0611e9885611d58565b830182611e3f565b50505b505050565b600082821c905092915050565b6000611ec660001984600802611ea8565b1980831691505092915050565b6000611edf8383611eb5565b9150826002028217905092915050565b611ef98383611cd8565b67ffffffffffffffff811115611f1257611f11611aea565b5b611f1c8254611d12565b611f27828285611e62565b6000601f831160018114611f565760008415611f44578287013590505b611f4e8582611ed3565b865550611fb6565b601f198416611f6486611d43565b60005b82811015611f8c57848901358255600182019150602085019450602081019050611f67565b86831015611fa95784890135611fa5601f891682611eb5565b8355505b6001600288020188555050505b50505050505050565b7f416c726561647920636c61696d6564206d696e74000000000000000000000000600082015250565b6000611ff56014836117fd565b915061200082611fbf565b602082019050919050565b6000602082019050818103600083015261202481611fe8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612065826118a4565b9150612070836118a4565b92508282019050808211156120885761208761202b565b5b92915050565b7f534f4c44204f5554000000000000000000000000000000000000000000000000600082015250565b60006120c46008836117fd565b91506120cf8261208e565b602082019050919050565b600060208201905081810360008301526120f3816120b7565b9050919050565b600081905092915050565b6000815461211281611d12565b61211c81866120fa565b94506001821660008114612137576001811461214c5761217f565b60ff198316865281151582028601935061217f565b61215585611d43565b60005b8381101561217757815481890152600182019150602081019050612158565b838801955050505b50505092915050565b6000612193826117f2565b61219d81856120fa565b93506121ad81856020860161180e565b80840191505092915050565b60006121c58286612105565b91506121d18285612188565b91506121dd8284612105565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006122466026836117fd565b9150612251826121ea565b604082019050919050565b6000602082019050818103600083015261227581612239565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122b26020836117fd565b91506122bd8261227c565b602082019050919050565b600060208201905081810360008301526122e1816122a5565b9050919050565b60006122f3826118a4565b9150600082036123065761230561202b565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b600061233882612311565b612342818561231c565b935061235281856020860161180e565b61235b81611838565b840191505092915050565b600060808201905061237b6000830187611939565b6123886020830186611939565b61239560408301856119cf565b81810360608301526123a7818461232d565b905095945050505050565b6000815190506123c1816116b1565b92915050565b6000602082840312156123dd576123dc61167b565b5b60006123eb848285016123b2565b9150509291505056fea264697066735822122063b5697ed8dd89e70c08556ce5c0b926a3d6b240737ced24f1b97b7e3ee4bae064736f6c63430008120033

Deployed Bytecode Sourcemap

33792:1303:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10027:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35005:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10929:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15923:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15791:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34264:438;;;;;;;;;;;;;:::i;:::-;;8103:323;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18108:3412;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21528:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11752:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8848:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33274:103;;;;;;;;;;;;;:::i;:::-;;33039:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34890:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11105:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16158:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21729:416;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34710:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16400:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33385:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10027:639;10112:4;10451:10;10436:25;;:11;:25;;;;:102;;;;10528:10;10513:25;;:11;:25;;;;10436:102;:179;;;;10605:10;10590:25;;:11;:25;;;;10436:179;10416:199;;10027:639;;;:::o;35005:86::-;32998:13;:11;:13::i;:::-;35079:4:::1;;35073:3;:10;;;;;;;:::i;:::-;;35005:86:::0;;:::o;10929:100::-;10983:13;11016:5;11009:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10929:100;:::o;15923:227::-;15999:7;16024:16;16032:7;16024;:16::i;:::-;16019:73;;16042:50;16050:41;;;16042:7;:50::i;:::-;16019:73;16112:15;:24;16128:7;16112:24;;;;;;;;;;;:30;;;;;;;;;;;;16105:37;;15923:227;;;:::o;15791:124::-;15880:27;15889:2;15893:7;15902:4;15880:8;:27::i;:::-;15791:124;;:::o;34264:438::-;34335:5;34308:32;;:11;:23;34320:10;34308:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;34300:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33878:4;34400:1;34384:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:34;;34376:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34470:4;34444:11;:23;34456:10;34444:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;34490:9;34485:210;34509:1;34505;:5;34485:210;;;33878:4;34547:1;34531:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:34;34528:94;;34586:20;34592:10;34604:1;34586:5;:20::i;:::-;34528:94;34665:3;;;;;;;34485:210;;;;34264:438::o;8103:323::-;8164:7;8392:15;:13;:15::i;:::-;8377:12;;8361:13;;:28;:46;8354:53;;8103:323;:::o;18108:3412::-;18250:27;18280;18299:7;18280:18;:27::i;:::-;18250:57;;6532:14;18451:4;18435:22;;:41;18412:66;;18536:4;18495:45;;18511:19;18495:45;;;18491:95;;18542:44;18550:35;;;18542:7;:44::i;:::-;18491:95;18600:27;18629:23;18656:35;18683:7;18656:26;:35::i;:::-;18599:92;;;;18791:68;18816:15;18833:4;18839:19;:17;:19::i;:::-;18791:24;:68::i;:::-;18786:189;;18879:43;18896:4;18902:19;:17;:19::i;:::-;18879:16;:43::i;:::-;18874:101;;18924:51;18932:42;;;18924:7;:51::i;:::-;18874:101;18786:189;19068:15;19065:160;;;19208:1;19187:19;19180:30;19065:160;19605:18;:24;19624:4;19605:24;;;;;;;;;;;;;;;;19603:26;;;;;;;;;;;;19674:18;:22;19693:2;19674:22;;;;;;;;;;;;;;;;19672:24;;;;;;;;;;;19996:146;20033:2;20082:45;20097:4;20103:2;20107:19;20082:14;:45::i;:::-;6130:8;20054:73;19996:18;:146::i;:::-;19967:17;:26;19985:7;19967:26;;;;;;;;;;;:175;;;;20313:1;6130:8;20262:19;:47;:52;20258:627;;20335:19;20367:1;20357:7;:11;20335:33;;20524:1;20490:17;:30;20508:11;20490:30;;;;;;;;;;;;:35;20486:384;;20628:13;;20613:11;:28;20609:242;;20808:19;20775:17;:30;20793:11;20775:30;;;;;;;;;;;:52;;;;20609:242;20486:384;20316:569;20258:627;20998:16;6532:14;21033:2;21017:20;;:39;20998:58;;21397:7;21361:8;21327:4;21269:25;21214:1;21157;21134:299;21470:1;21458:8;:13;21454:58;;21473:39;21481:30;;;21473:7;:39::i;:::-;21454:58;18239:3281;;;;18108:3412;;;:::o;21528:193::-;21674:39;21691:4;21697:2;21701:7;21674:39;;;;;;;;;;;;:16;:39::i;:::-;21528:193;;;:::o;11752:152::-;11824:7;11867:27;11886:7;11867:18;:27::i;:::-;11844:52;;11752:152;;;:::o;8848:242::-;8920:7;8961:1;8944:19;;:5;:19;;;8940:69;;8965:44;8973:35;;;8965:7;:44::i;:::-;8940:69;5074:13;9027:18;:25;9046:5;9027:25;;;;;;;;;;;;;;;;:55;9020:62;;8848:242;;;:::o;33274:103::-;32998:13;:11;:13::i;:::-;33339:30:::1;33366:1;33339:18;:30::i;:::-;33274:103::o:0;33039:87::-;33085:7;33112:6;;;;;;;;;;;33105:13;;33039:87;:::o;34890:107::-;32998:13;:11;:13::i;:::-;34981:8:::1;;34971:7;:18;;;;;;;:::i;:::-;;34890:107:::0;;:::o;11105:104::-;11161:13;11194:7;11187:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11105:104;:::o;16158:234::-;16305:8;16253:18;:39;16272:19;:17;:19::i;:::-;16253:39;;;;;;;;;;;;;;;:49;16293:8;16253:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;16365:8;16329:55;;16344:19;:17;:19::i;:::-;16329:55;;;16375:8;16329:55;;;;;;:::i;:::-;;;;;;;;16158:234;;:::o;21729:416::-;21904:31;21917:4;21923:2;21927:7;21904:12;:31::i;:::-;21968:1;21950:2;:14;;;:19;21946:192;;21989:56;22020:4;22026:2;22030:7;22039:5;21989:30;:56::i;:::-;21984:154;;22066:56;22074:47;;;22066:7;:56::i;:::-;21984:154;21946:192;21729:416;;;;:::o;34710:172::-;34783:13;34840:3;34845:18;34855:7;34845:9;:18::i;:::-;34865:7;34823:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34809:65;;34710:172;;;:::o;16400:164::-;16497:4;16521:18;:25;16540:5;16521:25;;;;;;;;;;;;;;;:35;16547:8;16521:35;;;;;;;;;;;;;;;;;;;;;;;;;16514:42;;16400:164;;;;:::o;33385:201::-;32998:13;:11;:13::i;:::-;33494:1:::1;33474:22;;:8;:22;;::::0;33466:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33550:28;33569:8;33550:18;:28::i;:::-;33385:201:::0;:::o;33134:132::-;33209:12;:10;:12::i;:::-;33198:23;;:7;:5;:7::i;:::-;:23;;;33190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33134:132::o;16572:368::-;16637:11;16684:7;16665:15;:13;:15::i;:::-;:26;16661:272;;16722:13;;16712:7;:23;16708:214;;;16756:14;16789:60;16837:1;16806:17;:26;16824:7;16806:26;;;;;;;;;;;;16797:35;;;16796:42;16789:60;;16840:9;;;;:::i;:::-;;;16789:60;;;16905:1;5850:8;16877:6;:24;:29;16868:38;;16737:185;16708:214;16661:272;16572:368;;;:::o;32416:165::-;32517:13;32511:4;32504:27;32558:4;32552;32545:18;25975:474;26104:13;26120:16;26128:7;26120;:16::i;:::-;26104:32;;26153:13;:45;;;;;26193:5;26170:28;;:19;:17;:19::i;:::-;:28;;;;26153:45;26149:201;;;26218:44;26235:5;26242:19;:17;:19::i;:::-;26218:16;:44::i;:::-;26213:137;;26283:51;26291:42;;;26283:7;:51::i;:::-;26213:137;26149:201;26395:2;26362:15;:24;26378:7;26362:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;26433:7;26429:2;26413:28;;26422:5;26413:28;;;;;;;;;;;;26093:356;25975:474;;;:::o;22852:2160::-;22925:20;22948:13;;22925:36;;22988:1;22976:8;:13;22972:53;;22991:34;22999:25;;;22991:7;:34::i;:::-;22972:53;23498:139;23535:2;23589:33;23612:1;23616:2;23620:1;23589:14;:33::i;:::-;23556:30;23577:8;23556:20;:30::i;:::-;:66;23498:18;:139::i;:::-;23464:17;:31;23482:12;23464:31;;;;;;;;;;;:173;;;;23924:1;5212:2;23894:1;:26;;23893:32;23881:8;:45;23855:18;:22;23874:2;23855:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;24037:16;6532:14;24072:2;24056:20;;:39;24037:58;;24128:1;24116:8;:13;24112:54;;24131:35;24139:26;;;24131:7;:35::i;:::-;24112:54;24183:11;24212:8;24197:12;:23;24183:37;;24235:15;24253:12;24235:30;;24282:676;24701:7;24657:8;24612:1;24546:25;24483:1;24418;24387:358;24953:3;24940:9;;;;;;:16;24282:676;;24990:3;24974:13;:19;;;;23213:1792;;;22914:2098;22852:2160;;:::o;34155:101::-;34220:7;34247:1;34240:8;;34155:101;:::o;12607:2012::-;12674:14;12724:7;12705:15;:13;:15::i;:::-;:26;12701:1853;;12757:17;:26;12775:7;12757:26;;;;;;;;;;;;12748:35;;12893:1;12883:6;:11;12879:1292;;12930:13;;12919:7;:24;12915:77;;12945:47;12953:38;;;12945:7;:47::i;:::-;12915:77;13549:607;13627:17;:28;13645:9;;;;;;;13627:28;;;;;;;;;;;;13618:37;;13715:1;13705:6;:11;13701:25;13718:8;13701:25;13781:1;5850:8;13753:6;:24;:29;13749:48;13784:13;13749:48;14089:47;14097:38;;;14089:7;:47::i;:::-;13549:607;;;12879:1292;14526:1;5850:8;14498:6;:24;:29;14494:48;14529:13;14494:48;12701:1853;14564:47;14572:38;;;14564:7;:47::i;:::-;12607:2012;;;;:::o;17615:485::-;17717:27;17746:23;17787:38;17828:15;:24;17844:7;17828:24;;;;;;;;;;;17787:65;;18005:18;17982:41;;18062:19;18056:26;18037:45;;17967:126;17615:485;;;:::o;30550:105::-;30610:7;30637:10;30630:17;;30550:105;:::o;16948:659::-;17097:11;17262:16;17255:5;17251:28;17242:37;;17422:16;17411:9;17407:32;17394:45;;17572:15;17561:9;17558:30;17550:5;17539:9;17536:20;17533:56;17523:66;;16948:659;;;;;:::o;30231:311::-;30366:7;30386:16;6254:3;30412:19;:41;;30386:68;;6254:3;30480:31;30491:4;30497:2;30501:9;30480:10;:31::i;:::-;30472:40;;:62;;30465:69;;;30231:311;;;;;:::o;15001:450::-;15081:14;15249:16;15242:5;15238:28;15229:37;;15426:5;15412:11;15387:23;15383:41;15380:52;15373:5;15370:63;15360:73;;15001:450;;;;:::o;33594:191::-;33668:16;33687:6;;;;;;;;;;;33668:25;;33713:8;33704:6;;:17;;;;;;;;;;;;;;;;;;33768:8;33737:40;;33758:8;33737:40;;;;;;;;;;;;33657:128;33594:191;:::o;22153:691::-;22316:4;22362:2;22337:45;;;22383:19;:17;:19::i;:::-;22404:4;22410:7;22419:5;22337:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22333:504;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22637:1;22620:6;:13;:18;22616:115;;22659:56;22667:47;;;22659:7;:56::i;:::-;22616:115;22803:6;22797:13;22788:6;22784:2;22780:15;22773:38;22333:504;22506:54;;;22496:64;;;:6;:64;;;;22489:71;;;22153:691;;;;;;:::o;30663:1745::-;30728:17;31162:4;31155;31149:11;31145:22;31254:1;31248:4;31241:15;31329:4;31326:1;31322:12;31315:19;;31411:1;31406:3;31399:14;31515:3;31754:5;31736:428;31762:1;31736:428;;;31802:1;31797:3;31793:11;31786:18;;31973:2;31967:4;31963:13;31959:2;31955:22;31950:3;31942:36;32067:2;32061:4;32057:13;32049:21;;32134:4;31736:428;32124:25;31736:428;31740:21;32203:3;32198;32194:13;32318:4;32313:3;32309:14;32302:21;;32383:6;32378:3;32371:19;30767:1634;;;30663:1745;;;:::o;32621:98::-;32674:7;32701:10;32694:17;;32621:98;:::o;15459:324::-;15529:14;15762:1;15752:8;15749:15;15723:24;15719:46;15709:56;;15459:324;;;:::o;30076:147::-;30213:6;30076:147;;;;;:::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:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:117::-;1627:1;1624;1617:12;1641:117;1750:1;1747;1740:12;1764:117;1873:1;1870;1863:12;1901:553;1959:8;1969:6;2019:3;2012:4;2004:6;2000:17;1996:27;1986:122;;2027:79;;:::i;:::-;1986:122;2140:6;2127:20;2117:30;;2170:18;2162:6;2159:30;2156:117;;;2192:79;;:::i;:::-;2156:117;2306:4;2298:6;2294:17;2282:29;;2360:3;2352:4;2344:6;2340:17;2330:8;2326:32;2323:41;2320:128;;;2367:79;;:::i;:::-;2320:128;1901:553;;;;;:::o;2460:529::-;2531:6;2539;2588:2;2576:9;2567:7;2563:23;2559:32;2556:119;;;2594:79;;:::i;:::-;2556:119;2742:1;2731:9;2727:17;2714:31;2772:18;2764:6;2761:30;2758:117;;;2794:79;;:::i;:::-;2758:117;2907:65;2964:7;2955:6;2944:9;2940:22;2907:65;:::i;:::-;2889:83;;;;2685:297;2460:529;;;;;:::o;2995:99::-;3047:6;3081:5;3075:12;3065:22;;2995:99;;;:::o;3100:169::-;3184:11;3218:6;3213:3;3206:19;3258:4;3253:3;3249:14;3234:29;;3100:169;;;;:::o;3275:246::-;3356:1;3366:113;3380:6;3377:1;3374:13;3366:113;;;3465:1;3460:3;3456:11;3450:18;3446:1;3441:3;3437:11;3430:39;3402:2;3399:1;3395:10;3390:15;;3366:113;;;3513:1;3504:6;3499:3;3495:16;3488:27;3337:184;3275:246;;;:::o;3527:102::-;3568:6;3619:2;3615:7;3610:2;3603:5;3599:14;3595:28;3585:38;;3527:102;;;:::o;3635:377::-;3723:3;3751:39;3784:5;3751:39;:::i;:::-;3806:71;3870:6;3865:3;3806:71;:::i;:::-;3799:78;;3886:65;3944:6;3939:3;3932:4;3925:5;3921:16;3886:65;:::i;:::-;3976:29;3998:6;3976:29;:::i;:::-;3971:3;3967:39;3960:46;;3727:285;3635:377;;;;:::o;4018:313::-;4131:4;4169:2;4158:9;4154:18;4146:26;;4218:9;4212:4;4208:20;4204:1;4193:9;4189:17;4182:47;4246:78;4319:4;4310:6;4246:78;:::i;:::-;4238:86;;4018:313;;;;:::o;4337:77::-;4374:7;4403:5;4392:16;;4337:77;;;:::o;4420:122::-;4493:24;4511:5;4493:24;:::i;:::-;4486:5;4483:35;4473:63;;4532:1;4529;4522:12;4473:63;4420:122;:::o;4548:139::-;4594:5;4632:6;4619:20;4610:29;;4648:33;4675:5;4648:33;:::i;:::-;4548:139;;;;:::o;4693:329::-;4752:6;4801:2;4789:9;4780:7;4776:23;4772:32;4769:119;;;4807:79;;:::i;:::-;4769:119;4927:1;4952:53;4997:7;4988:6;4977:9;4973:22;4952:53;:::i;:::-;4942:63;;4898:117;4693:329;;;;:::o;5028:126::-;5065:7;5105:42;5098:5;5094:54;5083:65;;5028:126;;;:::o;5160:96::-;5197:7;5226:24;5244:5;5226:24;:::i;:::-;5215:35;;5160:96;;;:::o;5262:118::-;5349:24;5367:5;5349:24;:::i;:::-;5344:3;5337:37;5262:118;;:::o;5386:222::-;5479:4;5517:2;5506:9;5502:18;5494:26;;5530:71;5598:1;5587:9;5583:17;5574:6;5530:71;:::i;:::-;5386:222;;;;:::o;5614:122::-;5687:24;5705:5;5687:24;:::i;:::-;5680:5;5677:35;5667:63;;5726:1;5723;5716:12;5667:63;5614:122;:::o;5742:139::-;5788:5;5826:6;5813:20;5804:29;;5842:33;5869:5;5842:33;:::i;:::-;5742:139;;;;:::o;5887:474::-;5955:6;5963;6012:2;6000:9;5991:7;5987:23;5983:32;5980:119;;;6018:79;;:::i;:::-;5980:119;6138:1;6163:53;6208:7;6199:6;6188:9;6184:22;6163:53;:::i;:::-;6153:63;;6109:117;6265:2;6291:53;6336:7;6327:6;6316:9;6312:22;6291:53;:::i;:::-;6281:63;;6236:118;5887:474;;;;;:::o;6367:118::-;6454:24;6472:5;6454:24;:::i;:::-;6449:3;6442:37;6367:118;;:::o;6491:222::-;6584:4;6622:2;6611:9;6607:18;6599:26;;6635:71;6703:1;6692:9;6688:17;6679:6;6635:71;:::i;:::-;6491:222;;;;:::o;6719:619::-;6796:6;6804;6812;6861:2;6849:9;6840:7;6836:23;6832:32;6829:119;;;6867:79;;:::i;:::-;6829:119;6987:1;7012:53;7057:7;7048:6;7037:9;7033:22;7012:53;:::i;:::-;7002:63;;6958:117;7114:2;7140:53;7185:7;7176:6;7165:9;7161:22;7140:53;:::i;:::-;7130:63;;7085:118;7242:2;7268:53;7313:7;7304:6;7293:9;7289:22;7268:53;:::i;:::-;7258:63;;7213:118;6719:619;;;;;:::o;7344:329::-;7403:6;7452:2;7440:9;7431:7;7427:23;7423:32;7420:119;;;7458:79;;:::i;:::-;7420:119;7578:1;7603:53;7648:7;7639:6;7628:9;7624:22;7603:53;:::i;:::-;7593:63;;7549:117;7344:329;;;;:::o;7679:116::-;7749:21;7764:5;7749:21;:::i;:::-;7742:5;7739:32;7729:60;;7785:1;7782;7775:12;7729:60;7679:116;:::o;7801:133::-;7844:5;7882:6;7869:20;7860:29;;7898:30;7922:5;7898:30;:::i;:::-;7801:133;;;;:::o;7940:468::-;8005:6;8013;8062:2;8050:9;8041:7;8037:23;8033:32;8030:119;;;8068:79;;:::i;:::-;8030:119;8188:1;8213:53;8258:7;8249:6;8238:9;8234:22;8213:53;:::i;:::-;8203:63;;8159:117;8315:2;8341:50;8383:7;8374:6;8363:9;8359:22;8341:50;:::i;:::-;8331:60;;8286:115;7940:468;;;;;:::o;8414:117::-;8523:1;8520;8513:12;8537:180;8585:77;8582:1;8575:88;8682:4;8679:1;8672:15;8706:4;8703:1;8696:15;8723:281;8806:27;8828:4;8806:27;:::i;:::-;8798:6;8794:40;8936:6;8924:10;8921:22;8900:18;8888:10;8885:34;8882:62;8879:88;;;8947:18;;:::i;:::-;8879:88;8987:10;8983:2;8976:22;8766:238;8723:281;;:::o;9010:129::-;9044:6;9071:20;;:::i;:::-;9061:30;;9100:33;9128:4;9120:6;9100:33;:::i;:::-;9010:129;;;:::o;9145:307::-;9206:4;9296:18;9288:6;9285:30;9282:56;;;9318:18;;:::i;:::-;9282:56;9356:29;9378:6;9356:29;:::i;:::-;9348:37;;9440:4;9434;9430:15;9422:23;;9145:307;;;:::o;9458:146::-;9555:6;9550:3;9545;9532:30;9596:1;9587:6;9582:3;9578:16;9571:27;9458:146;;;:::o;9610:423::-;9687:5;9712:65;9728:48;9769:6;9728:48;:::i;:::-;9712:65;:::i;:::-;9703:74;;9800:6;9793:5;9786:21;9838:4;9831:5;9827:16;9876:3;9867:6;9862:3;9858:16;9855:25;9852:112;;;9883:79;;:::i;:::-;9852:112;9973:54;10020:6;10015:3;10010;9973:54;:::i;:::-;9693:340;9610:423;;;;;:::o;10052:338::-;10107:5;10156:3;10149:4;10141:6;10137:17;10133:27;10123:122;;10164:79;;:::i;:::-;10123:122;10281:6;10268:20;10306:78;10380:3;10372:6;10365:4;10357:6;10353:17;10306:78;:::i;:::-;10297:87;;10113:277;10052:338;;;;:::o;10396:943::-;10491:6;10499;10507;10515;10564:3;10552:9;10543:7;10539:23;10535:33;10532:120;;;10571:79;;:::i;:::-;10532:120;10691:1;10716:53;10761:7;10752:6;10741:9;10737:22;10716:53;:::i;:::-;10706:63;;10662:117;10818:2;10844:53;10889:7;10880:6;10869:9;10865:22;10844:53;:::i;:::-;10834:63;;10789:118;10946:2;10972:53;11017:7;11008:6;10997:9;10993:22;10972:53;:::i;:::-;10962:63;;10917:118;11102:2;11091:9;11087:18;11074:32;11133:18;11125:6;11122:30;11119:117;;;11155:79;;:::i;:::-;11119:117;11260:62;11314:7;11305:6;11294:9;11290:22;11260:62;:::i;:::-;11250:72;;11045:287;10396:943;;;;;;;:::o;11345:474::-;11413:6;11421;11470:2;11458:9;11449:7;11445:23;11441:32;11438:119;;;11476:79;;:::i;:::-;11438:119;11596:1;11621:53;11666:7;11657:6;11646:9;11642:22;11621:53;:::i;:::-;11611:63;;11567:117;11723:2;11749:53;11794:7;11785:6;11774:9;11770:22;11749:53;:::i;:::-;11739:63;;11694:118;11345:474;;;;;:::o;11825:97::-;11884:6;11912:3;11902:13;;11825:97;;;;:::o;11928:180::-;11976:77;11973:1;11966:88;12073:4;12070:1;12063:15;12097:4;12094:1;12087:15;12114:320;12158:6;12195:1;12189:4;12185:12;12175:22;;12242:1;12236:4;12232:12;12263:18;12253:81;;12319:4;12311:6;12307:17;12297:27;;12253:81;12381:2;12373:6;12370:14;12350:18;12347:38;12344:84;;12400:18;;:::i;:::-;12344:84;12165:269;12114:320;;;:::o;12440:141::-;12489:4;12512:3;12504:11;;12535:3;12532:1;12525:14;12569:4;12566:1;12556:18;12548:26;;12440:141;;;:::o;12587:93::-;12624:6;12671:2;12666;12659:5;12655:14;12651:23;12641:33;;12587:93;;;:::o;12686:107::-;12730:8;12780:5;12774:4;12770:16;12749:37;;12686:107;;;;:::o;12799:393::-;12868:6;12918:1;12906:10;12902:18;12941:97;12971:66;12960:9;12941:97;:::i;:::-;13059:39;13089:8;13078:9;13059:39;:::i;:::-;13047:51;;13131:4;13127:9;13120:5;13116:21;13107:30;;13180:4;13170:8;13166:19;13159:5;13156:30;13146:40;;12875:317;;12799:393;;;;;:::o;13198:60::-;13226:3;13247:5;13240:12;;13198:60;;;:::o;13264:142::-;13314:9;13347:53;13365:34;13374:24;13392:5;13374:24;:::i;:::-;13365:34;:::i;:::-;13347:53;:::i;:::-;13334:66;;13264:142;;;:::o;13412:75::-;13455:3;13476:5;13469:12;;13412:75;;;:::o;13493:269::-;13603:39;13634:7;13603:39;:::i;:::-;13664:91;13713:41;13737:16;13713:41;:::i;:::-;13705:6;13698:4;13692:11;13664:91;:::i;:::-;13658:4;13651:105;13569:193;13493:269;;;:::o;13768:73::-;13813:3;13768:73;:::o;13847:189::-;13924:32;;:::i;:::-;13965:65;14023:6;14015;14009:4;13965:65;:::i;:::-;13900:136;13847:189;;:::o;14042:186::-;14102:120;14119:3;14112:5;14109:14;14102:120;;;14173:39;14210:1;14203:5;14173:39;:::i;:::-;14146:1;14139:5;14135:13;14126:22;;14102:120;;;14042:186;;:::o;14234:543::-;14335:2;14330:3;14327:11;14324:446;;;14369:38;14401:5;14369:38;:::i;:::-;14453:29;14471:10;14453:29;:::i;:::-;14443:8;14439:44;14636:2;14624:10;14621:18;14618:49;;;14657:8;14642:23;;14618:49;14680:80;14736:22;14754:3;14736:22;:::i;:::-;14726:8;14722:37;14709:11;14680:80;:::i;:::-;14339:431;;14324:446;14234:543;;;:::o;14783:117::-;14837:8;14887:5;14881:4;14877:16;14856:37;;14783:117;;;;:::o;14906:169::-;14950:6;14983:51;15031:1;15027:6;15019:5;15016:1;15012:13;14983:51;:::i;:::-;14979:56;15064:4;15058;15054:15;15044:25;;14957:118;14906:169;;;;:::o;15080:295::-;15156:4;15302:29;15327:3;15321:4;15302:29;:::i;:::-;15294:37;;15364:3;15361:1;15357:11;15351:4;15348:21;15340:29;;15080:295;;;;:::o;15380:1403::-;15504:44;15544:3;15539;15504:44;:::i;:::-;15613:18;15605:6;15602:30;15599:56;;;15635:18;;:::i;:::-;15599:56;15679:38;15711:4;15705:11;15679:38;:::i;:::-;15764:67;15824:6;15816;15810:4;15764:67;:::i;:::-;15858:1;15887:2;15879:6;15876:14;15904:1;15899:632;;;;16575:1;16592:6;16589:84;;;16648:9;16643:3;16639:19;16626:33;16617:42;;16589:84;16699:67;16759:6;16752:5;16699:67;:::i;:::-;16693:4;16686:81;16548:229;15869:908;;15899:632;15951:4;15947:9;15939:6;15935:22;15985:37;16017:4;15985:37;:::i;:::-;16044:1;16058:215;16072:7;16069:1;16066:14;16058:215;;;16158:9;16153:3;16149:19;16136:33;16128:6;16121:49;16209:1;16201:6;16197:14;16187:24;;16256:2;16245:9;16241:18;16228:31;;16095:4;16092:1;16088:12;16083:17;;16058:215;;;16301:6;16292:7;16289:19;16286:186;;;16366:9;16361:3;16357:19;16344:33;16409:48;16451:4;16443:6;16439:17;16428:9;16409:48;:::i;:::-;16401:6;16394:64;16309:163;16286:186;16518:1;16514;16506:6;16502:14;16498:22;16492:4;16485:36;15906:625;;;15869:908;;15479:1304;;;15380:1403;;;:::o;16789:170::-;16929:22;16925:1;16917:6;16913:14;16906:46;16789:170;:::o;16965:366::-;17107:3;17128:67;17192:2;17187:3;17128:67;:::i;:::-;17121:74;;17204:93;17293:3;17204:93;:::i;:::-;17322:2;17317:3;17313:12;17306:19;;16965:366;;;:::o;17337:419::-;17503:4;17541:2;17530:9;17526:18;17518:26;;17590:9;17584:4;17580:20;17576:1;17565:9;17561:17;17554:47;17618:131;17744:4;17618:131;:::i;:::-;17610:139;;17337:419;;;:::o;17762:180::-;17810:77;17807:1;17800:88;17907:4;17904:1;17897:15;17931:4;17928:1;17921:15;17948:191;17988:3;18007:20;18025:1;18007:20;:::i;:::-;18002:25;;18041:20;18059:1;18041:20;:::i;:::-;18036:25;;18084:1;18081;18077:9;18070:16;;18105:3;18102:1;18099:10;18096:36;;;18112:18;;:::i;:::-;18096:36;17948:191;;;;:::o;18145:158::-;18285:10;18281:1;18273:6;18269:14;18262:34;18145:158;:::o;18309:365::-;18451:3;18472:66;18536:1;18531:3;18472:66;:::i;:::-;18465:73;;18547:93;18636:3;18547:93;:::i;:::-;18665:2;18660:3;18656:12;18649:19;;18309:365;;;:::o;18680:419::-;18846:4;18884:2;18873:9;18869:18;18861:26;;18933:9;18927:4;18923:20;18919:1;18908:9;18904:17;18897:47;18961:131;19087:4;18961:131;:::i;:::-;18953:139;;18680:419;;;:::o;19105:148::-;19207:11;19244:3;19229:18;;19105:148;;;;:::o;19283:874::-;19386:3;19423:5;19417:12;19452:36;19478:9;19452:36;:::i;:::-;19504:89;19586:6;19581:3;19504:89;:::i;:::-;19497:96;;19624:1;19613:9;19609:17;19640:1;19635:166;;;;19815:1;19810:341;;;;19602:549;;19635:166;19719:4;19715:9;19704;19700:25;19695:3;19688:38;19781:6;19774:14;19767:22;19759:6;19755:35;19750:3;19746:45;19739:52;;19635:166;;19810:341;19877:38;19909:5;19877:38;:::i;:::-;19937:1;19951:154;19965:6;19962:1;19959:13;19951:154;;;20039:7;20033:14;20029:1;20024:3;20020:11;20013:35;20089:1;20080:7;20076:15;20065:26;;19987:4;19984:1;19980:12;19975:17;;19951:154;;;20134:6;20129:3;20125:16;20118:23;;19817:334;;19602:549;;19390:767;;19283:874;;;;:::o;20163:390::-;20269:3;20297:39;20330:5;20297:39;:::i;:::-;20352:89;20434:6;20429:3;20352:89;:::i;:::-;20345:96;;20450:65;20508:6;20503:3;20496:4;20489:5;20485:16;20450:65;:::i;:::-;20540:6;20535:3;20531:16;20524:23;;20273:280;20163:390;;;;:::o;20559:583::-;20781:3;20803:92;20891:3;20882:6;20803:92;:::i;:::-;20796:99;;20912:95;21003:3;20994:6;20912:95;:::i;:::-;20905:102;;21024:92;21112:3;21103:6;21024:92;:::i;:::-;21017:99;;21133:3;21126:10;;20559:583;;;;;;:::o;21148:225::-;21288:34;21284:1;21276:6;21272:14;21265:58;21357:8;21352:2;21344:6;21340:15;21333:33;21148:225;:::o;21379:366::-;21521:3;21542:67;21606:2;21601:3;21542:67;:::i;:::-;21535:74;;21618:93;21707:3;21618:93;:::i;:::-;21736:2;21731:3;21727:12;21720:19;;21379:366;;;:::o;21751:419::-;21917:4;21955:2;21944:9;21940:18;21932:26;;22004:9;21998:4;21994:20;21990:1;21979:9;21975:17;21968:47;22032:131;22158:4;22032:131;:::i;:::-;22024:139;;21751:419;;;:::o;22176:182::-;22316:34;22312:1;22304:6;22300:14;22293:58;22176:182;:::o;22364:366::-;22506:3;22527:67;22591:2;22586:3;22527:67;:::i;:::-;22520:74;;22603:93;22692:3;22603:93;:::i;:::-;22721:2;22716:3;22712:12;22705:19;;22364:366;;;:::o;22736:419::-;22902:4;22940:2;22929:9;22925:18;22917:26;;22989:9;22983:4;22979:20;22975:1;22964:9;22960:17;22953:47;23017:131;23143:4;23017:131;:::i;:::-;23009:139;;22736:419;;;:::o;23161:171::-;23200:3;23223:24;23241:5;23223:24;:::i;:::-;23214:33;;23269:4;23262:5;23259:15;23256:41;;23277:18;;:::i;:::-;23256:41;23324:1;23317:5;23313:13;23306:20;;23161:171;;;:::o;23338:98::-;23389:6;23423:5;23417:12;23407:22;;23338:98;;;:::o;23442:168::-;23525:11;23559:6;23554:3;23547:19;23599:4;23594:3;23590:14;23575:29;;23442:168;;;;:::o;23616:373::-;23702:3;23730:38;23762:5;23730:38;:::i;:::-;23784:70;23847:6;23842:3;23784:70;:::i;:::-;23777:77;;23863:65;23921:6;23916:3;23909:4;23902:5;23898:16;23863:65;:::i;:::-;23953:29;23975:6;23953:29;:::i;:::-;23948:3;23944:39;23937:46;;23706:283;23616:373;;;;:::o;23995:640::-;24190:4;24228:3;24217:9;24213:19;24205:27;;24242:71;24310:1;24299:9;24295:17;24286:6;24242:71;:::i;:::-;24323:72;24391:2;24380:9;24376:18;24367:6;24323:72;:::i;:::-;24405;24473:2;24462:9;24458:18;24449:6;24405:72;:::i;:::-;24524:9;24518:4;24514:20;24509:2;24498:9;24494:18;24487:48;24552:76;24623:4;24614:6;24552:76;:::i;:::-;24544:84;;23995:640;;;;;;;:::o;24641:141::-;24697:5;24728:6;24722:13;24713:22;;24744:32;24770:5;24744:32;:::i;:::-;24641:141;;;;:::o;24788:349::-;24857:6;24906:2;24894:9;24885:7;24881:23;24877:32;24874:119;;;24912:79;;:::i;:::-;24874:119;25032:1;25057:63;25112:7;25103:6;25092:9;25088:22;25057:63;:::i;:::-;25047:73;;25003:127;24788:349;;;;:::o

Swarm Source

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