ETH Price: $3,326.36 (-1.02%)

Token

Bad Guys by RPF (BGRPF)
 

Overview

Max Total Supply

1,221 BGRPF

Holders

713

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
0 BGRPF
0x7b04c601bb790be0c633dcdb3b4d92bc2733f677
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:
Bad_Guys_by_RPF

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-31
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.7;


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// IERC721.SOL
//IERC721

interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// IERC721Enumerable.sol

interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// IERC721Reciver.sol
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error UnableDetermineTokenOwner();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
 */
contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal _currentIndex;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

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

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        if (index >= totalSupply()) revert TokenIndexOutOfBounds();
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256 a)
    {
        if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        // Execution should never reach this point.
        assert(false);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken();

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert UnableDetermineTokenOwner();
    }

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

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length != 0
                ? string(abi.encodePacked(baseURI, tokenId.toString(), ""))
                : "";
    }

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

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

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender()))
            revert ApprovalCallerNotOwnerNorApproved();

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        override
        returns (address)
    {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        if (operator == _msgSender()) revert ApproveToCaller();

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        if (!_checkOnERC721Received(from, to, tokenId, _data))
            revert TransferToNonERC721ReceiverImplementer();
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < _currentIndex;
    }

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

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

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

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (
                    safe &&
                    !_checkOnERC721Received(address(0), to, updatedIndex, _data)
                ) {
                    revert TransferToNonERC721ReceiverImplementer();
                }

                updatedIndex++;
            }

            _currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

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

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        // _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, prevOwnership.addr);

        // 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 {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership
                        .startTimestamp;
                }
            }
        }

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

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0)
                    revert TransferToNonERC721ReceiverImplementer();
                else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf)
        internal
        pure
        returns (bytes32)
    {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b)
        private
        pure
        returns (bytes32 value)
    {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

contract Bad_Guys_by_RPF is ERC721A, Ownable {
    // variables
    using Strings for uint256;

    constructor(
        bytes32 finalRootHash,
        string memory _NotRevealedUri
    ) ERC721A("Bad Guys by RPF", "BGRPF") {
        rootHash = finalRootHash;
        setNotRevealedURI(_NotRevealedUri);
    }

    uint256 public maxsupply = 1221;
    uint256 public reserve = 100;

    bool public isPaused = true;
    string public _baseURI1;
    bytes32 private rootHash;
    // revealed uri variables
    
    bool public revealed = false;
    string public notRevealedUri;


    function flipPauseMinting() public onlyOwner {
        isPaused = !isPaused;
    }

    function setRootHash(bytes32 _updatedRootHash) public onlyOwner {
        rootHash = _updatedRootHash;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        _baseURI1 = _newBaseURI;
    }

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

    function setReserve(uint256 _reserve) public onlyOwner {
        require(_reserve <= maxsupply, "the quantity exceeds");
        reserve = _reserve;
    }
        
    // set reaveal uri just in case

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    // setting reaveal only time can possible
    //only owner
    function reveal() public onlyOwner {
        revealed = !revealed;
    }

    function mintReservedTokens(uint256 quantity) public onlyOwner {
        require(quantity <= reserve, "All reserve tokens have bene minted");
        reserve -= quantity;
        _safeMint(msg.sender, quantity);
    }

    function WhiteListMint(bytes32[] calldata _merkleProof, uint256 chosenAmount)
        public
    {
        require(_numberMinted(msg.sender)<1, "Already Claimed");
        require(isPaused == false, "turn on minting");
        require(
            chosenAmount > 0,
            "Number Of Tokens Can Not Be Less Than Or Equal To 0"
        );
        require(
            totalSupply() + chosenAmount <= maxsupply - reserve,
            "all tokens have been minted"
        );
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(_merkleProof, rootHash, leaf),
            "Invalid Proof"
        );
        _safeMint(msg.sender, chosenAmount);
    }

    // setting up the reaveal functionality

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (revealed == false) {
            return notRevealedUri;
        }

        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(
                    abi.encodePacked(
                        currentBaseURI,
                        tokenId.toString(),
                        ".json"
                    )
                )
                : "";
    }

   function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"finalRootHash","type":"bytes32"},{"internalType":"string","name":"_NotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintedQueryForZeroAddress","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableDetermineTokenOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"WhiteListMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_baseURI1","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPauseMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxsupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReservedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":[],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserve","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_updatedRootHash","type":"bytes32"}],"name":"setRootHash","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526104c560085560646009556001600a60006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055503480156200005257600080fd5b506040516200459038038062004590833981810160405281019062000078919062000440565b6040518060400160405280600f81526020017f42616420477579732062792052504600000000000000000000000000000000008152506040518060400160405280600581526020017f42475250460000000000000000000000000000000000000000000000000000008152508160019080519060200190620000fc929190620002fb565b50806002908051906020019062000115929190620002fb565b505050620001386200012c6200015860201b60201c565b6200016060201b60201c565b81600c8190555062000150816200022660201b60201c565b5050620006d1565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002366200015860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025c620002d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ac90620004cd565b60405180910390fd5b80600e9080519060200190620002cd929190620002fb565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000309906200059f565b90600052602060002090601f0160209004810192826200032d576000855562000379565b82601f106200034857805160ff191683800117855562000379565b8280016001018555821562000379579182015b82811115620003785782518255916020019190600101906200035b565b5b5090506200038891906200038c565b5090565b5b80821115620003a75760008160009055506001016200038d565b5090565b6000620003c2620003bc8462000518565b620004ef565b905082815260208101848484011115620003e157620003e06200066e565b5b620003ee84828562000569565b509392505050565b6000815190506200040781620006b7565b92915050565b600082601f83011262000425576200042462000669565b5b815162000437848260208601620003ab565b91505092915050565b600080604083850312156200045a576200045962000678565b5b60006200046a85828601620003f6565b925050602083015167ffffffffffffffff8111156200048e576200048d62000673565b5b6200049c858286016200040d565b9150509250929050565b6000620004b56020836200054e565b9150620004c2826200068e565b602082019050919050565b60006020820190508181036000830152620004e881620004a6565b9050919050565b6000620004fb6200050e565b9050620005098282620005d5565b919050565b6000604051905090565b600067ffffffffffffffff8211156200053657620005356200063a565b5b62000541826200067d565b9050602081019050919050565b600082825260208201905092915050565b6000819050919050565b60005b83811015620005895780820151818401526020810190506200056c565b8381111562000599576000848401525b50505050565b60006002820490506001821680620005b857607f821691505b60208210811415620005cf57620005ce6200060b565b5b50919050565b620005e0826200067d565b810181811067ffffffffffffffff821117156200060257620006016200063a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620006c2816200055f565b8114620006ce57600080fd5b50565b613eaf80620006e16000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806355f804b31161011a578063a475b5dd116100ad578063cd3293de1161007c578063cd3293de1461058d578063e985e9c5146105ab578063f2c4ce1e146105db578063f2fde38b146105f7578063fb4a9be01461061357610206565b8063a475b5dd14610519578063b187bd2614610523578063b88d4fde14610541578063c87b56dd1461055d57610206565b80637d5cb4e5116100e95780637d5cb4e5146104a55780638da5cb5b146104c157806395d89b41146104df578063a22cb465146104fd57610206565b806355f804b31461041f5780636352211e1461043b57806370a082311461046b578063715018a61461049b57610206565b806323b872dd1161019d5780634256dbe31161016c5780634256dbe31461037b57806342842e0e146103975780634b6406d1146103b35780634f6ccce7146103d1578063518302271461040157610206565b806323b872dd146103095780632d7eae66146103255780632f745c59146103415780633ccfd60b1461037157610206565b80630917c4e1116101d95780630917c4e1146102a7578063095ea7b3146102b157806311e0f063146102cd57806318160ddd146102eb57610206565b806301ffc9a71461020b57806306fdde031461023b578063081812fc14610259578063081c8c4414610289575b600080fd5b6102256004803603810190610220919061318e565b61062f565b6040516102329190613577565b60405180910390f35b610243610779565b6040516102509190613592565b60405180910390f35b610273600480360381019061026e9190613231565b61080b565b6040516102809190613510565b60405180910390f35b610291610887565b60405161029e9190613592565b60405180910390f35b6102af610915565b005b6102cb60048036038101906102c691906130c1565b6109bd565b005b6102d5610ac8565b6040516102e29190613592565b60405180910390f35b6102f3610b56565b60405161030091906136f4565b60405180910390f35b610323600480360381019061031e9190612fab565b610b5f565b005b61033f600480360381019061033a9190613161565b610b6f565b005b61035b600480360381019061035691906130c1565b610bf5565b60405161036891906136f4565b60405180910390f35b610379610db6565b005b61039560048036038101906103909190613231565b610e81565b005b6103b160048036038101906103ac9190612fab565b610f4c565b005b6103bb610f6c565b6040516103c891906136f4565b60405180910390f35b6103eb60048036038101906103e69190613231565b610f72565b6040516103f891906136f4565b60405180910390f35b610409610fbc565b6040516104169190613577565b60405180910390f35b610439600480360381019061043491906131e8565b610fcf565b005b61045560048036038101906104509190613231565b611065565b6040516104629190613510565b60405180910390f35b61048560048036038101906104809190612f3e565b61107b565b60405161049291906136f4565b60405180910390f35b6104a361115b565b005b6104bf60048036038101906104ba9190613231565b6111e3565b005b6104c96112ca565b6040516104d69190613510565b60405180910390f35b6104e76112f4565b6040516104f49190613592565b60405180910390f35b61051760048036038101906105129190613081565b611386565b005b6105216114fe565b005b61052b6115a6565b6040516105389190613577565b60405180910390f35b61055b60048036038101906105569190612ffe565b6115b9565b005b61057760048036038101906105729190613231565b61160c565b6040516105849190613592565b60405180910390f35b610595611762565b6040516105a291906136f4565b60405180910390f35b6105c560048036038101906105c09190612f6b565b611768565b6040516105d29190613577565b60405180910390f35b6105f560048036038101906105f091906131e8565b6117fc565b005b610611600480360381019061060c9190612f3e565b611892565b005b61062d60048036038101906106289190613101565b61198a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061076257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610772575061077182611b9a565b5b9050919050565b60606001805461078890613954565b80601f01602080910402602001604051908101604052809291908181526020018280546107b490613954565b80156108015780601f106107d657610100808354040283529160200191610801565b820191906000526020600020905b8154815290600101906020018083116107e457829003601f168201915b5050505050905090565b600061081682611c04565b61084c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e805461089490613954565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090613954565b801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b505050505081565b61091d611c11565b73ffffffffffffffffffffffffffffffffffffffff1661093b6112ca565b73ffffffffffffffffffffffffffffffffffffffff1614610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890613614565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b60006109c882611065565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a30576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a4f611c11565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a815750610a7f81610a7a611c11565b611768565b155b15610ab8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ac3838383611c19565b505050565b600b8054610ad590613954565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0190613954565b8015610b4e5780601f10610b2357610100808354040283529160200191610b4e565b820191906000526020600020905b815481529060010190602001808311610b3157829003601f168201915b505050505081565b60008054905090565b610b6a838383611ccb565b505050565b610b77611c11565b73ffffffffffffffffffffffffffffffffffffffff16610b956112ca565b73ffffffffffffffffffffffffffffffffffffffff1614610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613614565b60405180910390fd5b80600c8190555050565b6000610c008361107b565b8210610c38576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c42610b56565b905060008060005b83811015610d9c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d3c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d8e5786841415610d85578195505050505050610db0565b83806001019450505b508080600101915050610c4a565b506000610dac57610dab613a55565b5b5050505b92915050565b610dbe611c11565b73ffffffffffffffffffffffffffffffffffffffff16610ddc6112ca565b73ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990613614565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e7d573d6000803e3d6000fd5b5050565b610e89611c11565b73ffffffffffffffffffffffffffffffffffffffff16610ea76112ca565b73ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490613614565b60405180910390fd5b600854811115610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f39906135f4565b60405180910390fd5b8060098190555050565b610f67838383604051806020016040528060008152506115b9565b505050565b60085481565b6000610f7c610b56565b8210610fb4576040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600d60009054906101000a900460ff1681565b610fd7611c11565b73ffffffffffffffffffffffffffffffffffffffff16610ff56112ca565b73ffffffffffffffffffffffffffffffffffffffff161461104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290613614565b60405180910390fd5b80600b9080519060200190611061929190612cad565b5050565b6000611070826121e3565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110e3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611163611c11565b73ffffffffffffffffffffffffffffffffffffffff166111816112ca565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90613614565b60405180910390fd5b6111e1600061236b565b565b6111eb611c11565b73ffffffffffffffffffffffffffffffffffffffff166112096112ca565b73ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613614565b60405180910390fd5b6009548111156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90613654565b60405180910390fd5b80600960008282546112b69190613860565b925050819055506112c73382612431565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461130390613954565b80601f016020809104026020016040519081016040528092919081815260200182805461132f90613954565b801561137c5780601f106113515761010080835404028352916020019161137c565b820191906000526020600020905b81548152906001019060200180831161135f57829003601f168201915b5050505050905090565b61138e611c11565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611400611c11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114ad611c11565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f29190613577565b60405180910390a35050565b611506611c11565b73ffffffffffffffffffffffffffffffffffffffff166115246112ca565b73ffffffffffffffffffffffffffffffffffffffff161461157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190613614565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b600a60009054906101000a900460ff1681565b6115c4848484611ccb565b6115d08484848461244f565b611606576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061161782611c04565b611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613634565b60405180910390fd5b60001515600d60009054906101000a900460ff161515141561170457600e805461167f90613954565b80601f01602080910402602001604051908101604052809291908181526020018280546116ab90613954565b80156116f85780601f106116cd576101008083540402835291602001916116f8565b820191906000526020600020905b8154815290600101906020018083116116db57829003601f168201915b5050505050905061175d565b600061170e6125dd565b9050600081511161172e5760405180602001604052806000815250611759565b806117388461266f565b6040516020016117499291906134e1565b6040516020818303038152906040525b9150505b919050565b60095481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611804611c11565b73ffffffffffffffffffffffffffffffffffffffff166118226112ca565b73ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90613614565b60405180910390fd5b80600e908051906020019061188e929190612cad565b5050565b61189a611c11565b73ffffffffffffffffffffffffffffffffffffffff166118b86112ca565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613614565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561197e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611975906135b4565b60405180910390fd5b6119878161236b565b50565b6001611995336127d0565b106119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90613674565b60405180910390fd5b60001515600a60009054906101000a900460ff16151514611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290613694565b60405180910390fd5b60008111611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a65906135d4565b60405180910390fd5b600954600854611a7e9190613860565b81611a87610b56565b611a9191906137d9565b1115611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac9906136b4565b60405180910390fd5b600033604051602001611ae591906134c6565b604051602081830303815290604052805190602001209050611b4b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c54836128b0565b611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b81906136d4565b60405180910390fd5b611b943383612431565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611cd6826121e3565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cfd611c11565b73ffffffffffffffffffffffffffffffffffffffff161480611d595750611d22611c11565b73ffffffffffffffffffffffffffffffffffffffff16611d418461080b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d755750611d748260000151611d6f611c11565b611768565b5b905080611dae576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611e17576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e7e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e8e6000848460000151611c19565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612173576120d281611c04565b156121725782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121dc85858560016128c7565b5050505050565b6121eb612d33565b6121f482611c04565b61222a576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008290505b60008110612333576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612324578092505050612366565b50808060019003915050612230565b506040517fe7c0edfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61244b8282604051806020016040528060008152506128cd565b5050565b60006124708473ffffffffffffffffffffffffffffffffffffffff166128df565b156125d0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612499611c11565b8786866040518563ffffffff1660e01b81526004016124bb949392919061352b565b602060405180830381600087803b1580156124d557600080fd5b505af192505050801561250657506040513d601f19601f8201168201806040525081019061250391906131bb565b60015b612580573d8060008114612536576040519150601f19603f3d011682016040523d82523d6000602084013e61253b565b606091505b50600081511415612578576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125d5565b600190505b949350505050565b6060600b80546125ec90613954565b80601f016020809104026020016040519081016040528092919081815260200182805461261890613954565b80156126655780601f1061263a57610100808354040283529160200191612665565b820191906000526020600020905b81548152906001019060200180831161264857829003601f168201915b5050505050905090565b606060008214156126b7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127cb565b600082905060005b600082146126e95780806126d2906139b7565b915050600a826126e2919061382f565b91506126bf565b60008167ffffffffffffffff81111561270557612704613b40565b5b6040519080825280601f01601f1916602001820160405280156127375781602001600182028036833780820191505090505b5090505b600085146127c4576001826127509190613860565b9150600a8561275f9190613a24565b603061276b91906137d9565b60f81b81838151811061278157612780613b11565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127bd919061382f565b945061273b565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612838576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6000826128bd8584612902565b1490509392505050565b50505050565b6128da8383836001612977565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008082905060005b845181101561296c57600085828151811061292957612928613b11565b5b6020026020010151905080831161294b576129448382612c96565b9250612958565b6129558184612c96565b92505b508080612964906139b7565b91505061290b565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612c7957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612c2d5750612c2b600088848861244f565b155b15612c64576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612bb2565b508060008190555050612c8f60008683876128c7565b5050505050565b600082600052816020526040600020905092915050565b828054612cb990613954565b90600052602060002090601f016020900481019282612cdb5760008555612d22565b82601f10612cf457805160ff1916838001178555612d22565b82800160010185558215612d22579182015b82811115612d21578251825591602001919060010190612d06565b5b509050612d2f9190612d6d565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612d86576000816000905550600101612d6e565b5090565b6000612d9d612d9884613734565b61370f565b905082815260208101848484011115612db957612db8613b7e565b5b612dc4848285613912565b509392505050565b6000612ddf612dda84613765565b61370f565b905082815260208101848484011115612dfb57612dfa613b7e565b5b612e06848285613912565b509392505050565b600081359050612e1d81613e06565b92915050565b60008083601f840112612e3957612e38613b74565b5b8235905067ffffffffffffffff811115612e5657612e55613b6f565b5b602083019150836020820283011115612e7257612e71613b79565b5b9250929050565b600081359050612e8881613e1d565b92915050565b600081359050612e9d81613e34565b92915050565b600081359050612eb281613e4b565b92915050565b600081519050612ec781613e4b565b92915050565b600082601f830112612ee257612ee1613b74565b5b8135612ef2848260208601612d8a565b91505092915050565b600082601f830112612f1057612f0f613b74565b5b8135612f20848260208601612dcc565b91505092915050565b600081359050612f3881613e62565b92915050565b600060208284031215612f5457612f53613b88565b5b6000612f6284828501612e0e565b91505092915050565b60008060408385031215612f8257612f81613b88565b5b6000612f9085828601612e0e565b9250506020612fa185828601612e0e565b9150509250929050565b600080600060608486031215612fc457612fc3613b88565b5b6000612fd286828701612e0e565b9350506020612fe386828701612e0e565b9250506040612ff486828701612f29565b9150509250925092565b6000806000806080858703121561301857613017613b88565b5b600061302687828801612e0e565b945050602061303787828801612e0e565b935050604061304887828801612f29565b925050606085013567ffffffffffffffff81111561306957613068613b83565b5b61307587828801612ecd565b91505092959194509250565b6000806040838503121561309857613097613b88565b5b60006130a685828601612e0e565b92505060206130b785828601612e79565b9150509250929050565b600080604083850312156130d8576130d7613b88565b5b60006130e685828601612e0e565b92505060206130f785828601612f29565b9150509250929050565b60008060006040848603121561311a57613119613b88565b5b600084013567ffffffffffffffff81111561313857613137613b83565b5b61314486828701612e23565b9350935050602061315786828701612f29565b9150509250925092565b60006020828403121561317757613176613b88565b5b600061318584828501612e8e565b91505092915050565b6000602082840312156131a4576131a3613b88565b5b60006131b284828501612ea3565b91505092915050565b6000602082840312156131d1576131d0613b88565b5b60006131df84828501612eb8565b91505092915050565b6000602082840312156131fe576131fd613b88565b5b600082013567ffffffffffffffff81111561321c5761321b613b83565b5b61322884828501612efb565b91505092915050565b60006020828403121561324757613246613b88565b5b600061325584828501612f29565b91505092915050565b61326781613894565b82525050565b61327e61327982613894565b613a00565b82525050565b61328d816138a6565b82525050565b600061329e82613796565b6132a881856137ac565b93506132b8818560208601613921565b6132c181613b8d565b840191505092915050565b60006132d7826137a1565b6132e181856137bd565b93506132f1818560208601613921565b6132fa81613b8d565b840191505092915050565b6000613310826137a1565b61331a81856137ce565b935061332a818560208601613921565b80840191505092915050565b60006133436026836137bd565b915061334e82613bab565b604082019050919050565b60006133666033836137bd565b915061337182613bfa565b604082019050919050565b60006133896014836137bd565b915061339482613c49565b602082019050919050565b60006133ac6005836137ce565b91506133b782613c72565b600582019050919050565b60006133cf6020836137bd565b91506133da82613c9b565b602082019050919050565b60006133f2602f836137bd565b91506133fd82613cc4565b604082019050919050565b60006134156023836137bd565b915061342082613d13565b604082019050919050565b6000613438600f836137bd565b915061344382613d62565b602082019050919050565b600061345b600f836137bd565b915061346682613d8b565b602082019050919050565b600061347e601b836137bd565b915061348982613db4565b602082019050919050565b60006134a1600d836137bd565b91506134ac82613ddd565b602082019050919050565b6134c081613908565b82525050565b60006134d2828461326d565b60148201915081905092915050565b60006134ed8285613305565b91506134f98284613305565b91506135048261339f565b91508190509392505050565b6000602082019050613525600083018461325e565b92915050565b6000608082019050613540600083018761325e565b61354d602083018661325e565b61355a60408301856134b7565b818103606083015261356c8184613293565b905095945050505050565b600060208201905061358c6000830184613284565b92915050565b600060208201905081810360008301526135ac81846132cc565b905092915050565b600060208201905081810360008301526135cd81613336565b9050919050565b600060208201905081810360008301526135ed81613359565b9050919050565b6000602082019050818103600083015261360d8161337c565b9050919050565b6000602082019050818103600083015261362d816133c2565b9050919050565b6000602082019050818103600083015261364d816133e5565b9050919050565b6000602082019050818103600083015261366d81613408565b9050919050565b6000602082019050818103600083015261368d8161342b565b9050919050565b600060208201905081810360008301526136ad8161344e565b9050919050565b600060208201905081810360008301526136cd81613471565b9050919050565b600060208201905081810360008301526136ed81613494565b9050919050565b600060208201905061370960008301846134b7565b92915050565b600061371961372a565b90506137258282613986565b919050565b6000604051905090565b600067ffffffffffffffff82111561374f5761374e613b40565b5b61375882613b8d565b9050602081019050919050565b600067ffffffffffffffff8211156137805761377f613b40565b5b61378982613b8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137e482613908565b91506137ef83613908565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561382457613823613a84565b5b828201905092915050565b600061383a82613908565b915061384583613908565b92508261385557613854613ab3565b5b828204905092915050565b600061386b82613908565b915061387683613908565b92508282101561388957613888613a84565b5b828203905092915050565b600061389f826138e8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561393f578082015181840152602081019050613924565b8381111561394e576000848401525b50505050565b6000600282049050600182168061396c57607f821691505b602082108114156139805761397f613ae2565b5b50919050565b61398f82613b8d565b810181811067ffffffffffffffff821117156139ae576139ad613b40565b5b80604052505050565b60006139c282613908565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139f5576139f4613a84565b5b600182019050919050565b6000613a0b82613a12565b9050919050565b6000613a1d82613b9e565b9050919050565b6000613a2f82613908565b9150613a3a83613908565b925082613a4a57613a49613ab3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e756d626572204f6620546f6b656e732043616e204e6f74204265204c65737360008201527f205468616e204f7220457175616c20546f203000000000000000000000000000602082015250565b7f746865207175616e746974792065786365656473000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f416c6c207265736572766520746f6b656e7320686176652062656e65206d696e60008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b7f416c726561647920436c61696d65640000000000000000000000000000000000600082015250565b7f7475726e206f6e206d696e74696e670000000000000000000000000000000000600082015250565b7f616c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b7f496e76616c69642050726f6f6600000000000000000000000000000000000000600082015250565b613e0f81613894565b8114613e1a57600080fd5b50565b613e26816138a6565b8114613e3157600080fd5b50565b613e3d816138b2565b8114613e4857600080fd5b50565b613e54816138bc565b8114613e5f57600080fd5b50565b613e6b81613908565b8114613e7657600080fd5b5056fea26469706673582212201c2ea583a28312a57bea09137637c85f661f321b028b9f21a9b1e6d7ab2af21364736f6c634300080700333b86af6a9a1650adef259a1338316fa8c13661ea9d0dcf08a69e97f958d200770000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e68747470733a2f2f776f662e6d7970696e6174612e636c6f75642f697066732f516d4e764c7254336a6f647038556738654851576f33527a6d4b5a356574715656327335794566456d6442656d47000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c806355f804b31161011a578063a475b5dd116100ad578063cd3293de1161007c578063cd3293de1461058d578063e985e9c5146105ab578063f2c4ce1e146105db578063f2fde38b146105f7578063fb4a9be01461061357610206565b8063a475b5dd14610519578063b187bd2614610523578063b88d4fde14610541578063c87b56dd1461055d57610206565b80637d5cb4e5116100e95780637d5cb4e5146104a55780638da5cb5b146104c157806395d89b41146104df578063a22cb465146104fd57610206565b806355f804b31461041f5780636352211e1461043b57806370a082311461046b578063715018a61461049b57610206565b806323b872dd1161019d5780634256dbe31161016c5780634256dbe31461037b57806342842e0e146103975780634b6406d1146103b35780634f6ccce7146103d1578063518302271461040157610206565b806323b872dd146103095780632d7eae66146103255780632f745c59146103415780633ccfd60b1461037157610206565b80630917c4e1116101d95780630917c4e1146102a7578063095ea7b3146102b157806311e0f063146102cd57806318160ddd146102eb57610206565b806301ffc9a71461020b57806306fdde031461023b578063081812fc14610259578063081c8c4414610289575b600080fd5b6102256004803603810190610220919061318e565b61062f565b6040516102329190613577565b60405180910390f35b610243610779565b6040516102509190613592565b60405180910390f35b610273600480360381019061026e9190613231565b61080b565b6040516102809190613510565b60405180910390f35b610291610887565b60405161029e9190613592565b60405180910390f35b6102af610915565b005b6102cb60048036038101906102c691906130c1565b6109bd565b005b6102d5610ac8565b6040516102e29190613592565b60405180910390f35b6102f3610b56565b60405161030091906136f4565b60405180910390f35b610323600480360381019061031e9190612fab565b610b5f565b005b61033f600480360381019061033a9190613161565b610b6f565b005b61035b600480360381019061035691906130c1565b610bf5565b60405161036891906136f4565b60405180910390f35b610379610db6565b005b61039560048036038101906103909190613231565b610e81565b005b6103b160048036038101906103ac9190612fab565b610f4c565b005b6103bb610f6c565b6040516103c891906136f4565b60405180910390f35b6103eb60048036038101906103e69190613231565b610f72565b6040516103f891906136f4565b60405180910390f35b610409610fbc565b6040516104169190613577565b60405180910390f35b610439600480360381019061043491906131e8565b610fcf565b005b61045560048036038101906104509190613231565b611065565b6040516104629190613510565b60405180910390f35b61048560048036038101906104809190612f3e565b61107b565b60405161049291906136f4565b60405180910390f35b6104a361115b565b005b6104bf60048036038101906104ba9190613231565b6111e3565b005b6104c96112ca565b6040516104d69190613510565b60405180910390f35b6104e76112f4565b6040516104f49190613592565b60405180910390f35b61051760048036038101906105129190613081565b611386565b005b6105216114fe565b005b61052b6115a6565b6040516105389190613577565b60405180910390f35b61055b60048036038101906105569190612ffe565b6115b9565b005b61057760048036038101906105729190613231565b61160c565b6040516105849190613592565b60405180910390f35b610595611762565b6040516105a291906136f4565b60405180910390f35b6105c560048036038101906105c09190612f6b565b611768565b6040516105d29190613577565b60405180910390f35b6105f560048036038101906105f091906131e8565b6117fc565b005b610611600480360381019061060c9190612f3e565b611892565b005b61062d60048036038101906106289190613101565b61198a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061076257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610772575061077182611b9a565b5b9050919050565b60606001805461078890613954565b80601f01602080910402602001604051908101604052809291908181526020018280546107b490613954565b80156108015780601f106107d657610100808354040283529160200191610801565b820191906000526020600020905b8154815290600101906020018083116107e457829003601f168201915b5050505050905090565b600061081682611c04565b61084c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e805461089490613954565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090613954565b801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b505050505081565b61091d611c11565b73ffffffffffffffffffffffffffffffffffffffff1661093b6112ca565b73ffffffffffffffffffffffffffffffffffffffff1614610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890613614565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b60006109c882611065565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a30576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a4f611c11565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a815750610a7f81610a7a611c11565b611768565b155b15610ab8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ac3838383611c19565b505050565b600b8054610ad590613954565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0190613954565b8015610b4e5780601f10610b2357610100808354040283529160200191610b4e565b820191906000526020600020905b815481529060010190602001808311610b3157829003601f168201915b505050505081565b60008054905090565b610b6a838383611ccb565b505050565b610b77611c11565b73ffffffffffffffffffffffffffffffffffffffff16610b956112ca565b73ffffffffffffffffffffffffffffffffffffffff1614610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613614565b60405180910390fd5b80600c8190555050565b6000610c008361107b565b8210610c38576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c42610b56565b905060008060005b83811015610d9c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d3c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d8e5786841415610d85578195505050505050610db0565b83806001019450505b508080600101915050610c4a565b506000610dac57610dab613a55565b5b5050505b92915050565b610dbe611c11565b73ffffffffffffffffffffffffffffffffffffffff16610ddc6112ca565b73ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990613614565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e7d573d6000803e3d6000fd5b5050565b610e89611c11565b73ffffffffffffffffffffffffffffffffffffffff16610ea76112ca565b73ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490613614565b60405180910390fd5b600854811115610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f39906135f4565b60405180910390fd5b8060098190555050565b610f67838383604051806020016040528060008152506115b9565b505050565b60085481565b6000610f7c610b56565b8210610fb4576040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b600d60009054906101000a900460ff1681565b610fd7611c11565b73ffffffffffffffffffffffffffffffffffffffff16610ff56112ca565b73ffffffffffffffffffffffffffffffffffffffff161461104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290613614565b60405180910390fd5b80600b9080519060200190611061929190612cad565b5050565b6000611070826121e3565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110e3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611163611c11565b73ffffffffffffffffffffffffffffffffffffffff166111816112ca565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90613614565b60405180910390fd5b6111e1600061236b565b565b6111eb611c11565b73ffffffffffffffffffffffffffffffffffffffff166112096112ca565b73ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613614565b60405180910390fd5b6009548111156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90613654565b60405180910390fd5b80600960008282546112b69190613860565b925050819055506112c73382612431565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461130390613954565b80601f016020809104026020016040519081016040528092919081815260200182805461132f90613954565b801561137c5780601f106113515761010080835404028352916020019161137c565b820191906000526020600020905b81548152906001019060200180831161135f57829003601f168201915b5050505050905090565b61138e611c11565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611400611c11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114ad611c11565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f29190613577565b60405180910390a35050565b611506611c11565b73ffffffffffffffffffffffffffffffffffffffff166115246112ca565b73ffffffffffffffffffffffffffffffffffffffff161461157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190613614565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b600a60009054906101000a900460ff1681565b6115c4848484611ccb565b6115d08484848461244f565b611606576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061161782611c04565b611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613634565b60405180910390fd5b60001515600d60009054906101000a900460ff161515141561170457600e805461167f90613954565b80601f01602080910402602001604051908101604052809291908181526020018280546116ab90613954565b80156116f85780601f106116cd576101008083540402835291602001916116f8565b820191906000526020600020905b8154815290600101906020018083116116db57829003601f168201915b5050505050905061175d565b600061170e6125dd565b9050600081511161172e5760405180602001604052806000815250611759565b806117388461266f565b6040516020016117499291906134e1565b6040516020818303038152906040525b9150505b919050565b60095481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611804611c11565b73ffffffffffffffffffffffffffffffffffffffff166118226112ca565b73ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90613614565b60405180910390fd5b80600e908051906020019061188e929190612cad565b5050565b61189a611c11565b73ffffffffffffffffffffffffffffffffffffffff166118b86112ca565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613614565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561197e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611975906135b4565b60405180910390fd5b6119878161236b565b50565b6001611995336127d0565b106119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90613674565b60405180910390fd5b60001515600a60009054906101000a900460ff16151514611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290613694565b60405180910390fd5b60008111611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a65906135d4565b60405180910390fd5b600954600854611a7e9190613860565b81611a87610b56565b611a9191906137d9565b1115611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac9906136b4565b60405180910390fd5b600033604051602001611ae591906134c6565b604051602081830303815290604052805190602001209050611b4b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c54836128b0565b611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b81906136d4565b60405180910390fd5b611b943383612431565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611cd6826121e3565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cfd611c11565b73ffffffffffffffffffffffffffffffffffffffff161480611d595750611d22611c11565b73ffffffffffffffffffffffffffffffffffffffff16611d418461080b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d755750611d748260000151611d6f611c11565b611768565b5b905080611dae576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611e17576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e7e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e8e6000848460000151611c19565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612173576120d281611c04565b156121725782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121dc85858560016128c7565b5050505050565b6121eb612d33565b6121f482611c04565b61222a576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008290505b60008110612333576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612324578092505050612366565b50808060019003915050612230565b506040517fe7c0edfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61244b8282604051806020016040528060008152506128cd565b5050565b60006124708473ffffffffffffffffffffffffffffffffffffffff166128df565b156125d0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612499611c11565b8786866040518563ffffffff1660e01b81526004016124bb949392919061352b565b602060405180830381600087803b1580156124d557600080fd5b505af192505050801561250657506040513d601f19601f8201168201806040525081019061250391906131bb565b60015b612580573d8060008114612536576040519150601f19603f3d011682016040523d82523d6000602084013e61253b565b606091505b50600081511415612578576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125d5565b600190505b949350505050565b6060600b80546125ec90613954565b80601f016020809104026020016040519081016040528092919081815260200182805461261890613954565b80156126655780601f1061263a57610100808354040283529160200191612665565b820191906000526020600020905b81548152906001019060200180831161264857829003601f168201915b5050505050905090565b606060008214156126b7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127cb565b600082905060005b600082146126e95780806126d2906139b7565b915050600a826126e2919061382f565b91506126bf565b60008167ffffffffffffffff81111561270557612704613b40565b5b6040519080825280601f01601f1916602001820160405280156127375781602001600182028036833780820191505090505b5090505b600085146127c4576001826127509190613860565b9150600a8561275f9190613a24565b603061276b91906137d9565b60f81b81838151811061278157612780613b11565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127bd919061382f565b945061273b565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612838576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6000826128bd8584612902565b1490509392505050565b50505050565b6128da8383836001612977565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008082905060005b845181101561296c57600085828151811061292957612928613b11565b5b6020026020010151905080831161294b576129448382612c96565b9250612958565b6129558184612c96565b92505b508080612964906139b7565b91505061290b565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612c7957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612c2d5750612c2b600088848861244f565b155b15612c64576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612bb2565b508060008190555050612c8f60008683876128c7565b5050505050565b600082600052816020526040600020905092915050565b828054612cb990613954565b90600052602060002090601f016020900481019282612cdb5760008555612d22565b82601f10612cf457805160ff1916838001178555612d22565b82800160010185558215612d22579182015b82811115612d21578251825591602001919060010190612d06565b5b509050612d2f9190612d6d565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612d86576000816000905550600101612d6e565b5090565b6000612d9d612d9884613734565b61370f565b905082815260208101848484011115612db957612db8613b7e565b5b612dc4848285613912565b509392505050565b6000612ddf612dda84613765565b61370f565b905082815260208101848484011115612dfb57612dfa613b7e565b5b612e06848285613912565b509392505050565b600081359050612e1d81613e06565b92915050565b60008083601f840112612e3957612e38613b74565b5b8235905067ffffffffffffffff811115612e5657612e55613b6f565b5b602083019150836020820283011115612e7257612e71613b79565b5b9250929050565b600081359050612e8881613e1d565b92915050565b600081359050612e9d81613e34565b92915050565b600081359050612eb281613e4b565b92915050565b600081519050612ec781613e4b565b92915050565b600082601f830112612ee257612ee1613b74565b5b8135612ef2848260208601612d8a565b91505092915050565b600082601f830112612f1057612f0f613b74565b5b8135612f20848260208601612dcc565b91505092915050565b600081359050612f3881613e62565b92915050565b600060208284031215612f5457612f53613b88565b5b6000612f6284828501612e0e565b91505092915050565b60008060408385031215612f8257612f81613b88565b5b6000612f9085828601612e0e565b9250506020612fa185828601612e0e565b9150509250929050565b600080600060608486031215612fc457612fc3613b88565b5b6000612fd286828701612e0e565b9350506020612fe386828701612e0e565b9250506040612ff486828701612f29565b9150509250925092565b6000806000806080858703121561301857613017613b88565b5b600061302687828801612e0e565b945050602061303787828801612e0e565b935050604061304887828801612f29565b925050606085013567ffffffffffffffff81111561306957613068613b83565b5b61307587828801612ecd565b91505092959194509250565b6000806040838503121561309857613097613b88565b5b60006130a685828601612e0e565b92505060206130b785828601612e79565b9150509250929050565b600080604083850312156130d8576130d7613b88565b5b60006130e685828601612e0e565b92505060206130f785828601612f29565b9150509250929050565b60008060006040848603121561311a57613119613b88565b5b600084013567ffffffffffffffff81111561313857613137613b83565b5b61314486828701612e23565b9350935050602061315786828701612f29565b9150509250925092565b60006020828403121561317757613176613b88565b5b600061318584828501612e8e565b91505092915050565b6000602082840312156131a4576131a3613b88565b5b60006131b284828501612ea3565b91505092915050565b6000602082840312156131d1576131d0613b88565b5b60006131df84828501612eb8565b91505092915050565b6000602082840312156131fe576131fd613b88565b5b600082013567ffffffffffffffff81111561321c5761321b613b83565b5b61322884828501612efb565b91505092915050565b60006020828403121561324757613246613b88565b5b600061325584828501612f29565b91505092915050565b61326781613894565b82525050565b61327e61327982613894565b613a00565b82525050565b61328d816138a6565b82525050565b600061329e82613796565b6132a881856137ac565b93506132b8818560208601613921565b6132c181613b8d565b840191505092915050565b60006132d7826137a1565b6132e181856137bd565b93506132f1818560208601613921565b6132fa81613b8d565b840191505092915050565b6000613310826137a1565b61331a81856137ce565b935061332a818560208601613921565b80840191505092915050565b60006133436026836137bd565b915061334e82613bab565b604082019050919050565b60006133666033836137bd565b915061337182613bfa565b604082019050919050565b60006133896014836137bd565b915061339482613c49565b602082019050919050565b60006133ac6005836137ce565b91506133b782613c72565b600582019050919050565b60006133cf6020836137bd565b91506133da82613c9b565b602082019050919050565b60006133f2602f836137bd565b91506133fd82613cc4565b604082019050919050565b60006134156023836137bd565b915061342082613d13565b604082019050919050565b6000613438600f836137bd565b915061344382613d62565b602082019050919050565b600061345b600f836137bd565b915061346682613d8b565b602082019050919050565b600061347e601b836137bd565b915061348982613db4565b602082019050919050565b60006134a1600d836137bd565b91506134ac82613ddd565b602082019050919050565b6134c081613908565b82525050565b60006134d2828461326d565b60148201915081905092915050565b60006134ed8285613305565b91506134f98284613305565b91506135048261339f565b91508190509392505050565b6000602082019050613525600083018461325e565b92915050565b6000608082019050613540600083018761325e565b61354d602083018661325e565b61355a60408301856134b7565b818103606083015261356c8184613293565b905095945050505050565b600060208201905061358c6000830184613284565b92915050565b600060208201905081810360008301526135ac81846132cc565b905092915050565b600060208201905081810360008301526135cd81613336565b9050919050565b600060208201905081810360008301526135ed81613359565b9050919050565b6000602082019050818103600083015261360d8161337c565b9050919050565b6000602082019050818103600083015261362d816133c2565b9050919050565b6000602082019050818103600083015261364d816133e5565b9050919050565b6000602082019050818103600083015261366d81613408565b9050919050565b6000602082019050818103600083015261368d8161342b565b9050919050565b600060208201905081810360008301526136ad8161344e565b9050919050565b600060208201905081810360008301526136cd81613471565b9050919050565b600060208201905081810360008301526136ed81613494565b9050919050565b600060208201905061370960008301846134b7565b92915050565b600061371961372a565b90506137258282613986565b919050565b6000604051905090565b600067ffffffffffffffff82111561374f5761374e613b40565b5b61375882613b8d565b9050602081019050919050565b600067ffffffffffffffff8211156137805761377f613b40565b5b61378982613b8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137e482613908565b91506137ef83613908565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561382457613823613a84565b5b828201905092915050565b600061383a82613908565b915061384583613908565b92508261385557613854613ab3565b5b828204905092915050565b600061386b82613908565b915061387683613908565b92508282101561388957613888613a84565b5b828203905092915050565b600061389f826138e8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561393f578082015181840152602081019050613924565b8381111561394e576000848401525b50505050565b6000600282049050600182168061396c57607f821691505b602082108114156139805761397f613ae2565b5b50919050565b61398f82613b8d565b810181811067ffffffffffffffff821117156139ae576139ad613b40565b5b80604052505050565b60006139c282613908565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139f5576139f4613a84565b5b600182019050919050565b6000613a0b82613a12565b9050919050565b6000613a1d82613b9e565b9050919050565b6000613a2f82613908565b9150613a3a83613908565b925082613a4a57613a49613ab3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e756d626572204f6620546f6b656e732043616e204e6f74204265204c65737360008201527f205468616e204f7220457175616c20546f203000000000000000000000000000602082015250565b7f746865207175616e746974792065786365656473000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f416c6c207265736572766520746f6b656e7320686176652062656e65206d696e60008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b7f416c726561647920436c61696d65640000000000000000000000000000000000600082015250565b7f7475726e206f6e206d696e74696e670000000000000000000000000000000000600082015250565b7f616c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b7f496e76616c69642050726f6f6600000000000000000000000000000000000000600082015250565b613e0f81613894565b8114613e1a57600080fd5b50565b613e26816138a6565b8114613e3157600080fd5b50565b613e3d816138b2565b8114613e4857600080fd5b50565b613e54816138bc565b8114613e5f57600080fd5b50565b613e6b81613908565b8114613e7657600080fd5b5056fea26469706673582212201c2ea583a28312a57bea09137637c85f661f321b028b9f21a9b1e6d7ab2af21364736f6c63430008070033

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

3b86af6a9a1650adef259a1338316fa8c13661ea9d0dcf08a69e97f958d200770000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004e68747470733a2f2f776f662e6d7970696e6174612e636c6f75642f697066732f516d4e764c7254336a6f647038556738654851576f33527a6d4b5a356574715656327335794566456d6442656d47000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : finalRootHash (bytes32): 0x3b86af6a9a1650adef259a1338316fa8c13661ea9d0dcf08a69e97f958d20077
Arg [1] : _NotRevealedUri (string): https://wof.mypinata.cloud/ipfs/QmNvLrT3jodp8Ug8eHQWo3RzmKZ5etqVV2s5yEfEmdBemG

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 3b86af6a9a1650adef259a1338316fa8c13661ea9d0dcf08a69e97f958d20077
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 000000000000000000000000000000000000000000000000000000000000004e
Arg [3] : 68747470733a2f2f776f662e6d7970696e6174612e636c6f75642f697066732f
Arg [4] : 516d4e764c7254336a6f647038556738654851576f33527a6d4b5a3565747156
Arg [5] : 56327335794566456d6442656d47000000000000000000000000000000000000


Deployed Bytecode Sourcemap

34805:3425:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17678:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19576:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21167:245;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35374:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35413:84;;;:::i;:::-;;20743:358;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35241:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15861:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22138:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35505:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16556:1050;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38087:140;;;:::i;:::-;;35855:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22379:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35132:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16039:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35339:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35623:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19385:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18164:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32061:103;;;:::i;:::-;;36348:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31410:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19745:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21484:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36266:74;;;:::i;:::-;;35207:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22635:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37361:719;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35170:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21857:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36067:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32319:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36577:729;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17678:422;17825:4;17882:25;17867:40;;;:11;:40;;;;:105;;;;17939:33;17924:48;;;:11;:48;;;;17867:105;:172;;;;18004:35;17989:50;;;:11;:50;;;;17867:172;:225;;;;18056:36;18080:11;18056:23;:36::i;:::-;17867:225;17847:245;;17678:422;;;:::o;19576:100::-;19630:13;19663:5;19656:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19576:100;:::o;21167:245::-;21271:7;21301:16;21309:7;21301;:16::i;:::-;21296:64;;21326:34;;;;;;;;;;;;;;21296:64;21380:15;:24;21396:7;21380:24;;;;;;;;;;;;;;;;;;;;;21373:31;;21167:245;;;:::o;35374:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35413:84::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35481:8:::1;;;;;;;;;;;35480:9;35469:8;;:20;;;;;;;;;;;;;;;;;;35413:84::o:0;20743:358::-;20816:13;20832:24;20848:7;20832:15;:24::i;:::-;20816:40;;20877:5;20871:11;;:2;:11;;;20867:48;;;20891:24;;;;;;;;;;;;;;20867:48;20948:5;20932:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;20958:37;20975:5;20982:12;:10;:12::i;:::-;20958:16;:37::i;:::-;20957:38;20932:63;20928:124;;;21017:35;;;;;;;;;;;;;;20928:124;21065:28;21074:2;21078:7;21087:5;21065:8;:28::i;:::-;20805:296;20743:358;;:::o;35241:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15861:101::-;15914:7;15941:13;;15934:20;;15861:101;:::o;22138:170::-;22272:28;22282:4;22288:2;22292:7;22272:9;:28::i;:::-;22138:170;;;:::o;35505:110::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35591:16:::1;35580:8;:27;;;;35505:110:::0;:::o;16556:1050::-;16681:9;16721:16;16731:5;16721:9;:16::i;:::-;16712:5;:25;16708:61;;16746:23;;;;;;;;;;;;;;16708:61;16780:22;16805:13;:11;:13::i;:::-;16780:38;;16829:19;16859:25;17048:9;17043:466;17063:14;17059:1;:18;17043:466;;;17103:31;17137:11;:14;17149:1;17137:14;;;;;;;;;;;17103:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17200:1;17174:28;;:9;:14;;;:28;;;17170:111;;17247:9;:14;;;17227:34;;17170:111;17324:5;17303:26;;:17;:26;;;17299:195;;;17373:5;17358:11;:20;17354:85;;;17414:1;17407:8;;;;;;;;;17354:85;17461:13;;;;;;;17299:195;17084:425;17079:3;;;;;;;17043:466;;;;17592:5;17585:13;;;;:::i;:::-;;16697:909;;;16556:1050;;;;;:::o;38087:140::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38135:12:::1;38150:21;38135:36;;38190:10;38182:28;;:37;38211:7;38182:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38124:103;38087:140::o:0;35855:157::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35941:9:::1;;35929:8;:21;;35921:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35996:8;35986:7;:18;;;;35855:157:::0;:::o;22379:185::-;22517:39;22534:4;22540:2;22544:7;22517:39;;;;;;;;;;;;:16;:39::i;:::-;22379:185;;;:::o;35132:31::-;;;;:::o;16039:217::-;16142:7;16180:13;:11;:13::i;:::-;16171:5;:22;16167:58;;16202:23;;;;;;;;;;;;;;16167:58;16243:5;16236:12;;16039:217;;;:::o;35339:28::-;;;;;;;;;;;;;:::o;35623:106::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35710:11:::1;35698:9;:23;;;;;;;;;;;;:::i;:::-;;35623:106:::0;:::o;19385:124::-;19449:7;19476:20;19488:7;19476:11;:20::i;:::-;:25;;;19469:32;;19385:124;;;:::o;18164:206::-;18228:7;18269:1;18252:19;;:5;:19;;;18248:60;;;18280:28;;;;;;;;;;;;;;18248:60;18334:12;:19;18347:5;18334:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;18326:36;;18319:43;;18164:206;;;:::o;32061:103::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32126:30:::1;32153:1;32126:18;:30::i;:::-;32061:103::o:0;36348:221::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36442:7:::1;;36430:8;:19;;36422:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36511:8;36500:7;;:19;;;;;;;:::i;:::-;;;;;;;;36530:31;36540:10;36552:8;36530:9;:31::i;:::-;36348:221:::0;:::o;31410:87::-;31456:7;31483:6;;;;;;;;;;;31476:13;;31410:87;:::o;19745:104::-;19801:13;19834:7;19827:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19745:104;:::o;21484:302::-;21610:12;:10;:12::i;:::-;21598:24;;:8;:24;;;21594:54;;;21631:17;;;;;;;;;;;;;;21594:54;21706:8;21661:18;:32;21680:12;:10;:12::i;:::-;21661:32;;;;;;;;;;;;;;;:42;21694:8;21661:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21759:8;21730:48;;21745:12;:10;:12::i;:::-;21730:48;;;21769:8;21730:48;;;;;;:::i;:::-;;;;;;;;21484:302;;:::o;36266:74::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36324:8:::1;;;;;;;;;;;36323:9;36312:8;;:20;;;;;;;;;;;;;;;;;;36266:74::o:0;35207:27::-;;;;;;;;;;;;;:::o;22635:321::-;22794:28;22804:4;22810:2;22814:7;22794:9;:28::i;:::-;22838:48;22861:4;22867:2;22871:7;22880:5;22838:22;:48::i;:::-;22833:115;;22908:40;;;;;;;;;;;;;;22833:115;22635:321;;;;:::o;37361:719::-;37479:13;37532:16;37540:7;37532;:16::i;:::-;37510:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;37652:5;37640:17;;:8;;;;;;;;;;;:17;;;37636:71;;;37681:14;37674:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37636:71;37719:28;37750:10;:8;:10::i;:::-;37719:41;;37822:1;37797:14;37791:28;:32;:281;;;;;;;;;;;;;;;;;37915:14;37956:18;:7;:16;:18::i;:::-;37872:159;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37791:281;37771:301;;;37361:719;;;;:::o;35170:28::-;;;;:::o;21857:214::-;21999:4;22028:18;:25;22047:5;22028:25;;;;;;;;;;;;;;;:35;22054:8;22028:35;;;;;;;;;;;;;;;;;;;;;;;;;22021:42;;21857:214;;;;:::o;36067:126::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36170:15:::1;36153:14;:32;;;;;;;;;;;;:::i;:::-;;36067:126:::0;:::o;32319:238::-;31641:12;:10;:12::i;:::-;31630:23;;:7;:5;:7::i;:::-;:23;;;31622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32442:1:::1;32422:22;;:8;:22;;;;32400:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32521:28;32540:8;32521:18;:28::i;:::-;32319:238:::0;:::o;36577:729::-;36721:1;36695:25;36709:10;36695:13;:25::i;:::-;:27;36687:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36773:5;36761:17;;:8;;;;;;;;;;;:17;;;36753:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;36846:1;36831:12;:16;36809:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;37003:7;;36991:9;;:19;;;;:::i;:::-;36975:12;36959:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:51;;36937:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;37076:12;37118:10;37101:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;37091:39;;;;;;37076:54;;37163:48;37182:12;;37163:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37196:8;;37206:4;37163:18;:48::i;:::-;37141:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37263:35;37273:10;37285:12;37263:9;:35::i;:::-;36676:630;36577:729;;;:::o;6180:207::-;6310:4;6354:25;6339:40;;;:11;:40;;;;6332:47;;6180:207;;;:::o;23211:112::-;23268:4;23302:13;;23292:7;:23;23285:30;;23211:112;;;:::o;1666:98::-;1719:7;1746:10;1739:17;;1666:98;:::o;28069:196::-;28211:2;28184:15;:24;28200:7;28184:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28249:7;28245:2;28229:28;;28238:5;28229:28;;;;;;;;;;;;28069:196;;;:::o;25960:1991::-;26075:35;26113:20;26125:7;26113:11;:20::i;:::-;26075:58;;26146:22;26188:13;:18;;;26172:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;26247:12;:10;:12::i;:::-;26223:36;;:20;26235:7;26223:11;:20::i;:::-;:36;;;26172:87;:154;;;;26276:50;26293:13;:18;;;26313:12;:10;:12::i;:::-;26276:16;:50::i;:::-;26172:154;26146:181;;26345:17;26340:66;;26371:35;;;;;;;;;;;;;;26340:66;26443:4;26421:26;;:13;:18;;;:26;;;26417:67;;26456:28;;;;;;;;;;;;;;26417:67;26513:1;26499:16;;:2;:16;;;26495:52;;;26524:23;;;;;;;;;;;;;;26495:52;26671:49;26688:1;26692:7;26701:13;:18;;;26671:8;:49::i;:::-;27046:1;27016:12;:18;27029:4;27016:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27090:1;27062:12;:16;27075:2;27062:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27136:2;27108:11;:20;27120:7;27108:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;27198:15;27153:11;:20;27165:7;27153:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;27466:19;27498:1;27488:7;:11;27466:33;;27559:1;27518:43;;:11;:24;27530:11;27518:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;27514:321;;;27586:20;27594:11;27586:7;:20::i;:::-;27582:238;;;27663:13;:18;;;27631:11;:24;27643:11;27631:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;27746:13;:54;;;27704:11;:24;27716:11;27704:24;;;;;;;;;;;:39;;;:96;;;;;;;;;;;;;;;;;;27582:238;27514:321;26991:855;27882:7;27878:2;27863:27;;27872:4;27863:27;;;;;;;;;;;;27901:42;27922:4;27928:2;27932:7;27941:1;27901:20;:42::i;:::-;26064:1887;;25960:1991;;;:::o;18787:536::-;18875:21;;:::i;:::-;18919:16;18927:7;18919;:16::i;:::-;18914:61;;18944:31;;;;;;;;;;;;;;18914:61;19018:12;19033:7;19018:22;;19013:245;19050:1;19042:4;:9;19013:245;;19080:31;19114:11;:17;19126:4;19114:17;;;;;;;;;;;19080:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19180:1;19154:28;;:9;:14;;;:28;;;19150:93;;19214:9;19207:16;;;;;;19150:93;19061:197;19053:6;;;;;;;;19013:245;;;;19288:27;;;;;;;;;;;;;;18787:536;;;;:::o;32717:191::-;32791:16;32810:6;;;;;;;;;;;32791:25;;32836:8;32827:6;;:17;;;;;;;;;;;;;;;;;;32891:8;32860:40;;32881:8;32860:40;;;;;;;;;;;;32780:128;32717:191;:::o;23331:104::-;23400:27;23410:2;23414:8;23400:27;;;;;;;;;;;;:9;:27::i;:::-;23331:104;;:::o;28830:919::-;28985:4;29006:15;:2;:13;;;:15::i;:::-;29002:740;;;29075:2;29059:36;;;29118:12;:10;:12::i;:::-;29153:4;29180:7;29210:5;29059:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29038:649;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29438:1;29421:6;:13;:18;29417:255;;;29469:40;;;;;;;;;;;;;;29417:255;29622:6;29616:13;29607:6;29603:2;29599:15;29592:38;29038:649;29308:45;;;29298:55;;;:6;:55;;;;29291:62;;;;;29002:740;29726:4;29719:11;;28830:919;;;;;;;:::o;35737:110::-;35797:13;35830:9;35823:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35737:110;:::o;153:532::-;209:13;248:1;239:5;:10;235:53;;;266:10;;;;;;;;;;;;;;;;;;;;;235:53;298:12;313:5;298:20;;329:14;354:78;369:1;361:4;:9;354:78;;387:8;;;;;:::i;:::-;;;;418:2;410:10;;;;;:::i;:::-;;;354:78;;;442:19;474:6;464:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;442:39;;492:154;508:1;499:5;:10;492:154;;536:1;526:11;;;;;:::i;:::-;;;603:2;595:5;:10;;;;:::i;:::-;582:2;:24;;;;:::i;:::-;569:39;;552:6;559;552:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;632:2;623:11;;;;;:::i;:::-;;;492:154;;;670:6;656:21;;;;;153:532;;;;:::o;18378:207::-;18439:7;18480:1;18463:19;;:5;:19;;;18459:59;;;18491:27;;;;;;;;;;;;;;18459:59;18544:12;:19;18557:5;18544:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;18536:41;;18529:48;;18378:207;;;:::o;33276:190::-;33401:4;33454;33425:25;33438:5;33445:4;33425:12;:25::i;:::-;:33;33418:40;;33276:190;;;;;:::o;30808:158::-;;;;;:::o;23798:163::-;23921:32;23927:2;23931:8;23941:5;23948:4;23921:5;:32::i;:::-;23798:163;;;:::o;1903:115::-;1963:4;2009:1;1987:7;:19;;;:23;1980:30;;1903:115;;;:::o;33827:707::-;33937:7;33962:20;33985:4;33962:27;;34005:9;34000:497;34024:5;:12;34020:1;:16;34000:497;;;34058:20;34081:5;34087:1;34081:8;;;;;;;;:::i;:::-;;;;;;;;34058:31;;34124:12;34108;:28;34104:382;;34251:42;34266:12;34280;34251:14;:42::i;:::-;34236:57;;34104:382;;;34428:42;34443:12;34457;34428:14;:42::i;:::-;34413:57;;34104:382;34043:454;34038:3;;;;;:::i;:::-;;;;34000:497;;;;34514:12;34507:19;;;33827:707;;;;:::o;24220:1486::-;24359:20;24382:13;;24359:36;;24424:1;24410:16;;:2;:16;;;24406:48;;;24435:19;;;;;;;;;;;;;;24406:48;24903:8;24867:12;:16;24880:2;24867:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24968:8;24927:12;:16;24940:2;24927:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25027:2;24994:11;:25;25006:12;24994:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;25094:15;25044:11;:25;25056:12;25044:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;25127:20;25150:12;25127:35;;25184:9;25179:391;25199:8;25195:1;:12;25179:391;;;25263:12;25259:2;25238:38;;25255:1;25238:38;;;;;;;;;;;;25321:4;:89;;;;;25351:59;25382:1;25386:2;25390:12;25404:5;25351:22;:59::i;:::-;25350:60;25321:89;25295:225;;;25460:40;;;;;;;;;;;;;;25295:225;25540:14;;;;;;;25209:3;;;;;;;25179:391;;;;25602:12;25586:13;:28;;;;24842:784;25638:60;25667:1;25671:2;25675:12;25689:8;25638:20;:60::i;:::-;24348:1358;24220:1486;;;;:::o;34542:256::-;34637:13;34705:1;34699:4;34692:15;34734:1;34728:4;34721:15;34775:4;34769;34759:21;34750:30;;34542:256;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:704::-;6451:6;6459;6467;6516:2;6504:9;6495:7;6491:23;6487:32;6484:119;;;6522:79;;:::i;:::-;6484:119;6670:1;6659:9;6655:17;6642:31;6700:18;6692:6;6689:30;6686:117;;;6722:79;;:::i;:::-;6686:117;6835:80;6907:7;6898:6;6887:9;6883:22;6835:80;:::i;:::-;6817:98;;;;6613:312;6964:2;6990:53;7035:7;7026:6;7015:9;7011:22;6990:53;:::i;:::-;6980:63;;6935:118;6356:704;;;;;:::o;7066:329::-;7125:6;7174:2;7162:9;7153:7;7149:23;7145:32;7142:119;;;7180:79;;:::i;:::-;7142:119;7300:1;7325:53;7370:7;7361:6;7350:9;7346:22;7325:53;:::i;:::-;7315:63;;7271:117;7066:329;;;;:::o;7401:327::-;7459:6;7508:2;7496:9;7487:7;7483:23;7479:32;7476:119;;;7514:79;;:::i;:::-;7476:119;7634:1;7659:52;7703:7;7694:6;7683:9;7679:22;7659:52;:::i;:::-;7649:62;;7605:116;7401:327;;;;:::o;7734:349::-;7803:6;7852:2;7840:9;7831:7;7827:23;7823:32;7820:119;;;7858:79;;:::i;:::-;7820:119;7978:1;8003:63;8058:7;8049:6;8038:9;8034:22;8003:63;:::i;:::-;7993:73;;7949:127;7734:349;;;;:::o;8089:509::-;8158:6;8207:2;8195:9;8186:7;8182:23;8178:32;8175:119;;;8213:79;;:::i;:::-;8175:119;8361:1;8350:9;8346:17;8333:31;8391:18;8383:6;8380:30;8377:117;;;8413:79;;:::i;:::-;8377:117;8518:63;8573:7;8564:6;8553:9;8549:22;8518:63;:::i;:::-;8508:73;;8304:287;8089:509;;;;:::o;8604:329::-;8663:6;8712:2;8700:9;8691:7;8687:23;8683:32;8680:119;;;8718:79;;:::i;:::-;8680:119;8838:1;8863:53;8908:7;8899:6;8888:9;8884:22;8863:53;:::i;:::-;8853:63;;8809:117;8604:329;;;;:::o;8939:118::-;9026:24;9044:5;9026:24;:::i;:::-;9021:3;9014:37;8939:118;;:::o;9063:157::-;9168:45;9188:24;9206:5;9188:24;:::i;:::-;9168:45;:::i;:::-;9163:3;9156:58;9063:157;;:::o;9226:109::-;9307:21;9322:5;9307:21;:::i;:::-;9302:3;9295:34;9226:109;;:::o;9341:360::-;9427:3;9455:38;9487:5;9455:38;:::i;:::-;9509:70;9572:6;9567:3;9509:70;:::i;:::-;9502:77;;9588:52;9633:6;9628:3;9621:4;9614:5;9610:16;9588:52;:::i;:::-;9665:29;9687:6;9665:29;:::i;:::-;9660:3;9656:39;9649:46;;9431:270;9341:360;;;;:::o;9707:364::-;9795:3;9823:39;9856:5;9823:39;:::i;:::-;9878:71;9942:6;9937:3;9878:71;:::i;:::-;9871:78;;9958:52;10003:6;9998:3;9991:4;9984:5;9980:16;9958:52;:::i;:::-;10035:29;10057:6;10035:29;:::i;:::-;10030:3;10026:39;10019:46;;9799:272;9707:364;;;;:::o;10077:377::-;10183:3;10211:39;10244:5;10211:39;:::i;:::-;10266:89;10348:6;10343:3;10266:89;:::i;:::-;10259:96;;10364:52;10409:6;10404:3;10397:4;10390:5;10386:16;10364:52;:::i;:::-;10441:6;10436:3;10432:16;10425:23;;10187:267;10077:377;;;;:::o;10460:366::-;10602:3;10623:67;10687:2;10682:3;10623:67;:::i;:::-;10616:74;;10699:93;10788:3;10699:93;:::i;:::-;10817:2;10812:3;10808:12;10801:19;;10460:366;;;:::o;10832:::-;10974:3;10995:67;11059:2;11054:3;10995:67;:::i;:::-;10988:74;;11071:93;11160:3;11071:93;:::i;:::-;11189:2;11184:3;11180:12;11173:19;;10832:366;;;:::o;11204:::-;11346:3;11367:67;11431:2;11426:3;11367:67;:::i;:::-;11360:74;;11443:93;11532:3;11443:93;:::i;:::-;11561:2;11556:3;11552:12;11545:19;;11204:366;;;:::o;11576:400::-;11736:3;11757:84;11839:1;11834:3;11757:84;:::i;:::-;11750:91;;11850:93;11939:3;11850:93;:::i;:::-;11968:1;11963:3;11959:11;11952:18;;11576:400;;;:::o;11982:366::-;12124:3;12145:67;12209:2;12204:3;12145:67;:::i;:::-;12138:74;;12221:93;12310:3;12221:93;:::i;:::-;12339:2;12334:3;12330:12;12323:19;;11982:366;;;:::o;12354:::-;12496:3;12517:67;12581:2;12576:3;12517:67;:::i;:::-;12510:74;;12593:93;12682:3;12593:93;:::i;:::-;12711:2;12706:3;12702:12;12695:19;;12354:366;;;:::o;12726:::-;12868:3;12889:67;12953:2;12948:3;12889:67;:::i;:::-;12882:74;;12965:93;13054:3;12965:93;:::i;:::-;13083:2;13078:3;13074:12;13067:19;;12726:366;;;:::o;13098:::-;13240:3;13261:67;13325:2;13320:3;13261:67;:::i;:::-;13254:74;;13337:93;13426:3;13337:93;:::i;:::-;13455:2;13450:3;13446:12;13439:19;;13098:366;;;:::o;13470:::-;13612:3;13633:67;13697:2;13692:3;13633:67;:::i;:::-;13626:74;;13709:93;13798:3;13709:93;:::i;:::-;13827:2;13822:3;13818:12;13811:19;;13470:366;;;:::o;13842:::-;13984:3;14005:67;14069:2;14064:3;14005:67;:::i;:::-;13998:74;;14081:93;14170:3;14081:93;:::i;:::-;14199:2;14194:3;14190:12;14183:19;;13842:366;;;:::o;14214:::-;14356:3;14377:67;14441:2;14436:3;14377:67;:::i;:::-;14370:74;;14453:93;14542:3;14453:93;:::i;:::-;14571:2;14566:3;14562:12;14555:19;;14214:366;;;:::o;14586:118::-;14673:24;14691:5;14673:24;:::i;:::-;14668:3;14661:37;14586:118;;:::o;14710:256::-;14822:3;14837:75;14908:3;14899:6;14837:75;:::i;:::-;14937:2;14932:3;14928:12;14921:19;;14957:3;14950:10;;14710:256;;;;:::o;14972:701::-;15253:3;15275:95;15366:3;15357:6;15275:95;:::i;:::-;15268:102;;15387:95;15478:3;15469:6;15387:95;:::i;:::-;15380:102;;15499:148;15643:3;15499:148;:::i;:::-;15492:155;;15664:3;15657:10;;14972:701;;;;;:::o;15679:222::-;15772:4;15810:2;15799:9;15795:18;15787:26;;15823:71;15891:1;15880:9;15876:17;15867:6;15823:71;:::i;:::-;15679:222;;;;:::o;15907:640::-;16102:4;16140:3;16129:9;16125:19;16117:27;;16154:71;16222:1;16211:9;16207:17;16198:6;16154:71;:::i;:::-;16235:72;16303:2;16292:9;16288:18;16279:6;16235:72;:::i;:::-;16317;16385:2;16374:9;16370:18;16361:6;16317:72;:::i;:::-;16436:9;16430:4;16426:20;16421:2;16410:9;16406:18;16399:48;16464:76;16535:4;16526:6;16464:76;:::i;:::-;16456:84;;15907:640;;;;;;;:::o;16553:210::-;16640:4;16678:2;16667:9;16663:18;16655:26;;16691:65;16753:1;16742:9;16738:17;16729:6;16691:65;:::i;:::-;16553:210;;;;:::o;16769:313::-;16882:4;16920:2;16909:9;16905:18;16897:26;;16969:9;16963:4;16959:20;16955:1;16944:9;16940:17;16933:47;16997:78;17070:4;17061:6;16997:78;:::i;:::-;16989:86;;16769:313;;;;:::o;17088:419::-;17254:4;17292:2;17281:9;17277:18;17269:26;;17341:9;17335:4;17331:20;17327:1;17316:9;17312:17;17305:47;17369:131;17495:4;17369:131;:::i;:::-;17361:139;;17088:419;;;:::o;17513:::-;17679:4;17717:2;17706:9;17702:18;17694:26;;17766:9;17760:4;17756:20;17752:1;17741:9;17737:17;17730:47;17794:131;17920:4;17794:131;:::i;:::-;17786:139;;17513:419;;;:::o;17938:::-;18104:4;18142:2;18131:9;18127:18;18119:26;;18191:9;18185:4;18181:20;18177:1;18166:9;18162:17;18155:47;18219:131;18345:4;18219:131;:::i;:::-;18211:139;;17938:419;;;:::o;18363:::-;18529:4;18567:2;18556:9;18552:18;18544:26;;18616:9;18610:4;18606:20;18602:1;18591:9;18587:17;18580:47;18644:131;18770:4;18644:131;:::i;:::-;18636:139;;18363:419;;;:::o;18788:::-;18954:4;18992:2;18981:9;18977:18;18969:26;;19041:9;19035:4;19031:20;19027:1;19016:9;19012:17;19005:47;19069:131;19195:4;19069:131;:::i;:::-;19061:139;;18788:419;;;:::o;19213:::-;19379:4;19417:2;19406:9;19402:18;19394:26;;19466:9;19460:4;19456:20;19452:1;19441:9;19437:17;19430:47;19494:131;19620:4;19494:131;:::i;:::-;19486:139;;19213:419;;;:::o;19638:::-;19804:4;19842:2;19831:9;19827:18;19819:26;;19891:9;19885:4;19881:20;19877:1;19866:9;19862:17;19855:47;19919:131;20045:4;19919:131;:::i;:::-;19911:139;;19638:419;;;:::o;20063:::-;20229:4;20267:2;20256:9;20252:18;20244:26;;20316:9;20310:4;20306:20;20302:1;20291:9;20287:17;20280:47;20344:131;20470:4;20344:131;:::i;:::-;20336:139;;20063:419;;;:::o;20488:::-;20654:4;20692:2;20681:9;20677:18;20669:26;;20741:9;20735:4;20731:20;20727:1;20716:9;20712:17;20705:47;20769:131;20895:4;20769:131;:::i;:::-;20761:139;;20488:419;;;:::o;20913:::-;21079:4;21117:2;21106:9;21102:18;21094:26;;21166:9;21160:4;21156:20;21152:1;21141:9;21137:17;21130:47;21194:131;21320:4;21194:131;:::i;:::-;21186:139;;20913:419;;;:::o;21338:222::-;21431:4;21469:2;21458:9;21454:18;21446:26;;21482:71;21550:1;21539:9;21535:17;21526:6;21482:71;:::i;:::-;21338:222;;;;:::o;21566:129::-;21600:6;21627:20;;:::i;:::-;21617:30;;21656:33;21684:4;21676:6;21656:33;:::i;:::-;21566:129;;;:::o;21701:75::-;21734:6;21767:2;21761:9;21751:19;;21701:75;:::o;21782:307::-;21843:4;21933:18;21925:6;21922:30;21919:56;;;21955:18;;:::i;:::-;21919:56;21993:29;22015:6;21993:29;:::i;:::-;21985:37;;22077:4;22071;22067:15;22059:23;;21782:307;;;:::o;22095:308::-;22157:4;22247:18;22239:6;22236:30;22233:56;;;22269:18;;:::i;:::-;22233:56;22307:29;22329:6;22307:29;:::i;:::-;22299:37;;22391:4;22385;22381:15;22373:23;;22095:308;;;:::o;22409:98::-;22460:6;22494:5;22488:12;22478:22;;22409:98;;;:::o;22513:99::-;22565:6;22599:5;22593:12;22583:22;;22513:99;;;:::o;22618:168::-;22701:11;22735:6;22730:3;22723:19;22775:4;22770:3;22766:14;22751:29;;22618:168;;;;:::o;22792:169::-;22876:11;22910:6;22905:3;22898:19;22950:4;22945:3;22941:14;22926:29;;22792:169;;;;:::o;22967:148::-;23069:11;23106:3;23091:18;;22967:148;;;;:::o;23121:305::-;23161:3;23180:20;23198:1;23180:20;:::i;:::-;23175:25;;23214:20;23232:1;23214:20;:::i;:::-;23209:25;;23368:1;23300:66;23296:74;23293:1;23290:81;23287:107;;;23374:18;;:::i;:::-;23287:107;23418:1;23415;23411:9;23404:16;;23121:305;;;;:::o;23432:185::-;23472:1;23489:20;23507:1;23489:20;:::i;:::-;23484:25;;23523:20;23541:1;23523:20;:::i;:::-;23518:25;;23562:1;23552:35;;23567:18;;:::i;:::-;23552:35;23609:1;23606;23602:9;23597:14;;23432:185;;;;:::o;23623:191::-;23663:4;23683:20;23701:1;23683:20;:::i;:::-;23678:25;;23717:20;23735:1;23717:20;:::i;:::-;23712:25;;23756:1;23753;23750:8;23747:34;;;23761:18;;:::i;:::-;23747:34;23806:1;23803;23799:9;23791:17;;23623:191;;;;:::o;23820:96::-;23857:7;23886:24;23904:5;23886:24;:::i;:::-;23875:35;;23820:96;;;:::o;23922:90::-;23956:7;23999:5;23992:13;23985:21;23974:32;;23922:90;;;:::o;24018:77::-;24055:7;24084:5;24073:16;;24018:77;;;:::o;24101:149::-;24137:7;24177:66;24170:5;24166:78;24155:89;;24101:149;;;:::o;24256:126::-;24293:7;24333:42;24326:5;24322:54;24311:65;;24256:126;;;:::o;24388:77::-;24425:7;24454:5;24443:16;;24388:77;;;:::o;24471:154::-;24555:6;24550:3;24545;24532:30;24617:1;24608:6;24603:3;24599:16;24592:27;24471:154;;;:::o;24631:307::-;24699:1;24709:113;24723:6;24720:1;24717:13;24709:113;;;24808:1;24803:3;24799:11;24793:18;24789:1;24784:3;24780:11;24773:39;24745:2;24742:1;24738:10;24733:15;;24709:113;;;24840:6;24837:1;24834:13;24831:101;;;24920:1;24911:6;24906:3;24902:16;24895:27;24831:101;24680:258;24631:307;;;:::o;24944:320::-;24988:6;25025:1;25019:4;25015:12;25005:22;;25072:1;25066:4;25062:12;25093:18;25083:81;;25149:4;25141:6;25137:17;25127:27;;25083:81;25211:2;25203:6;25200:14;25180:18;25177:38;25174:84;;;25230:18;;:::i;:::-;25174:84;24995:269;24944:320;;;:::o;25270:281::-;25353:27;25375:4;25353:27;:::i;:::-;25345:6;25341:40;25483:6;25471:10;25468:22;25447:18;25435:10;25432:34;25429:62;25426:88;;;25494:18;;:::i;:::-;25426:88;25534:10;25530:2;25523:22;25313:238;25270:281;;:::o;25557:233::-;25596:3;25619:24;25637:5;25619:24;:::i;:::-;25610:33;;25665:66;25658:5;25655:77;25652:103;;;25735:18;;:::i;:::-;25652:103;25782:1;25775:5;25771:13;25764:20;;25557:233;;;:::o;25796:100::-;25835:7;25864:26;25884:5;25864:26;:::i;:::-;25853:37;;25796:100;;;:::o;25902:94::-;25941:7;25970:20;25984:5;25970:20;:::i;:::-;25959:31;;25902:94;;;:::o;26002:176::-;26034:1;26051:20;26069:1;26051:20;:::i;:::-;26046:25;;26085:20;26103:1;26085:20;:::i;:::-;26080:25;;26124:1;26114:35;;26129:18;;:::i;:::-;26114:35;26170:1;26167;26163:9;26158:14;;26002:176;;;;:::o;26184:180::-;26232:77;26229:1;26222:88;26329:4;26326:1;26319:15;26353:4;26350:1;26343:15;26370:180;26418:77;26415:1;26408:88;26515:4;26512:1;26505:15;26539:4;26536:1;26529:15;26556:180;26604:77;26601:1;26594:88;26701:4;26698:1;26691:15;26725:4;26722:1;26715:15;26742:180;26790:77;26787:1;26780:88;26887:4;26884:1;26877:15;26911:4;26908:1;26901:15;26928:180;26976:77;26973:1;26966:88;27073:4;27070:1;27063:15;27097:4;27094:1;27087:15;27114:180;27162:77;27159:1;27152:88;27259:4;27256:1;27249:15;27283:4;27280:1;27273:15;27300:117;27409:1;27406;27399:12;27423:117;27532:1;27529;27522:12;27546:117;27655:1;27652;27645:12;27669:117;27778:1;27775;27768:12;27792:117;27901:1;27898;27891:12;27915:117;28024:1;28021;28014:12;28038:102;28079:6;28130:2;28126:7;28121:2;28114:5;28110:14;28106:28;28096:38;;28038:102;;;:::o;28146:94::-;28179:8;28227:5;28223:2;28219:14;28198:35;;28146:94;;;:::o;28246:225::-;28386:34;28382:1;28374:6;28370:14;28363:58;28455:8;28450:2;28442:6;28438:15;28431:33;28246:225;:::o;28477:238::-;28617:34;28613:1;28605:6;28601:14;28594:58;28686:21;28681:2;28673:6;28669:15;28662:46;28477:238;:::o;28721:170::-;28861:22;28857:1;28849:6;28845:14;28838:46;28721:170;:::o;28897:155::-;29037:7;29033:1;29025:6;29021:14;29014:31;28897:155;:::o;29058:182::-;29198:34;29194:1;29186:6;29182:14;29175:58;29058:182;:::o;29246:234::-;29386:34;29382:1;29374:6;29370:14;29363:58;29455:17;29450:2;29442:6;29438:15;29431:42;29246:234;:::o;29486:222::-;29626:34;29622:1;29614:6;29610:14;29603:58;29695:5;29690:2;29682:6;29678:15;29671:30;29486:222;:::o;29714:165::-;29854:17;29850:1;29842:6;29838:14;29831:41;29714:165;:::o;29885:::-;30025:17;30021:1;30013:6;30009:14;30002:41;29885:165;:::o;30056:177::-;30196:29;30192:1;30184:6;30180:14;30173:53;30056:177;:::o;30239:163::-;30379:15;30375:1;30367:6;30363:14;30356:39;30239:163;:::o;30408:122::-;30481:24;30499:5;30481:24;:::i;:::-;30474:5;30471:35;30461:63;;30520:1;30517;30510:12;30461:63;30408:122;:::o;30536:116::-;30606:21;30621:5;30606:21;:::i;:::-;30599:5;30596:32;30586:60;;30642:1;30639;30632:12;30586:60;30536:116;:::o;30658:122::-;30731:24;30749:5;30731:24;:::i;:::-;30724:5;30721:35;30711:63;;30770:1;30767;30760:12;30711:63;30658:122;:::o;30786:120::-;30858:23;30875:5;30858:23;:::i;:::-;30851:5;30848:34;30838:62;;30896:1;30893;30886:12;30838:62;30786:120;:::o;30912:122::-;30985:24;31003:5;30985:24;:::i;:::-;30978:5;30975:35;30965:63;;31024:1;31021;31014:12;30965:63;30912:122;:::o

Swarm Source

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