ETH Price: $3,103.63 (+1.15%)
Gas: 14 Gwei

Token

SHIBABEAST (SB)
 

Overview

Max Total Supply

2,519 SB

Holders

1,401

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SB
0xed8dbe738cebb03b220907e40b9b5aa59f1c9a32
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:
SHIBABEAST

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-24
*/

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


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    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);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
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;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
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 tokenId);

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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 virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @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`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: SHIBABEAST.sol


// SHIBABEAST PROJECT
// CODE BY SHIBABEAST | KING @kinginthecode
pragma solidity ^0.8.11;

// @name:    SHIBABEAST
// @symbol:  SB
// @desc:    8K HIGH-QUALITY, 6000 FASHION SHIBAS
// @founder: https://twitter.com/SMITH_SHIBA
// @artist:  https://www.instagram.com/kreoarts/
// @dev:     https://twitter.com/kinginthecode
// @project: https://twitter.com/shibabeast_nft
// @project: https://www.instagram.com/shibabeast_nft/
// @url:     https://www.shiba-beast.io/

/* * * * * * * * * *
* ███████╗██████╗  *
* ██╔════╝██╔══██╗ *
* ███████╗██████╔╝ *
* ╚════██║██╔══██╗ *
* ███████║██████╔╝ *
* ╚══════╝╚═════╝  *
* * * * * * * * * */






contract SHIBABEAST is ERC721Enumerable, Ownable, ReentrancyGuard {
  using Strings for uint256;
  using Counters for Counters.Counter;

  // ========== SB CONTRACT VARIABLES ==========
  bool public PAUSE = false;
  bool public REVEAL = false;
  uint256 public COST = 0.3 ether;
  uint256 public SUPPLY = 6000;
  string public REVEALED_URI;
  string public NOT_REVEALED_URI;
  Counters.Counter private _TOKEN_IDS;
  
  // ========== SB CONTRACT CONSTRUCTOR ==========
  constructor(
    string memory _INIT_REVEALED_URI,
    string memory _INIT_NOT_REVEALED_URI
  ) ERC721("SHIBABEAST", "SB") {
    SET_REVEALED_URI(_INIT_REVEALED_URI);
    SET_NOT_REVEALED_URI(_INIT_NOT_REVEALED_URI);
    SHIBABEAST_MINT(9);
  }

  // ========== SB CONTRACT URI RETURN ==========
  function _baseURI() internal view virtual override returns (string memory) {
    return REVEALED_URI;
  }

  // ========== SB CONTRACT MINTER ==========
  function SHIBABEAST_MINT(uint256 _MINT_AMOUNT) public payable nonReentrant {
    require(!PAUSE, "SHIBABEAST CONTRACT IS PAUSED");
    uint256 MINTED_SUPPLY = totalSupply();
    require(_MINT_AMOUNT > 0, "MINT AMOUNT SHOULD BE AT LEAST 1");
    require(MINTED_SUPPLY + _MINT_AMOUNT <= SUPPLY, "MAX SUPPLY EXCEEDED");

    if (msg.sender != owner()) {
      require(_MINT_AMOUNT <= 5, "MAX PER TRANSACTION EXCEEDED");
      require(msg.value >= COST * _MINT_AMOUNT, "INSUFFICIENT FUNDS");
    }

    uint256 _NEW_TOKEN_ID;
    for (uint256 i = 1; i <= _MINT_AMOUNT; i++) {
      _TOKEN_IDS.increment();
      _NEW_TOKEN_ID = _TOKEN_IDS.current();
      _safeMint(msg.sender, _NEW_TOKEN_ID);
    }
  }

  // ========== SB CONTRACT NFT RETURN ==========
  function tokenURI(uint256 TOKEN_ID) public view virtual override returns (string memory) {
    require(_exists(TOKEN_ID));

    if(REVEAL == false) {
      return NOT_REVEALED_URI;
    }

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

  // ========== SB CONTRACT OWNER FUNCTIONS ==========
  function SET_REVEALED_URI(string memory _NEW_REVEALED_URI) public onlyOwner {
    REVEALED_URI = _NEW_REVEALED_URI;
  }

  function SET_NOT_REVEALED_URI(string memory _NEW_NOT_REVEALED_URI) public onlyOwner {
    NOT_REVEALED_URI = _NEW_NOT_REVEALED_URI;
  }

  function SET_SUPPLY(uint256 _NEW_SUPPLY) public onlyOwner {
    SUPPLY = _NEW_SUPPLY;
  }

  function SET_PAUSE(bool _NEW_PAUSE_STATE) public onlyOwner {
    PAUSE = _NEW_PAUSE_STATE;
  }

  function SET_REVEAL(bool _NEW_REVEAL_STATE) public onlyOwner {
    REVEAL = _NEW_REVEAL_STATE;
  }

  // ========== SB CONTRACT WITHDRAW ==========
  function WITHDRAW() public payable onlyOwner {
    uint256 _BALANCE = address(this).balance;
    uint256 _FOUNDER_BALANCE = _BALANCE * 14 / 100;
    uint256 _PARTNER_BALANCE = _BALANCE * 7 / 100;
    uint256 _CMUNITY_BALANCE = _BALANCE * 9 / 100;
    payable(0xb2016Edc04236866E81138B7aa68bd1Bcc2Cb4BD).transfer(_FOUNDER_BALANCE); /* == SB|KREOARTS ==== */
    payable(0x889121F5D5D675874e4605218040F33198a16319).transfer(_FOUNDER_BALANCE); /* == SB|KING ======== */
    payable(0x6129b64Ec39Fc57A1bf9fCf454334F1f7c448E30).transfer(_FOUNDER_BALANCE); /* == SB|SMITH ======= */
    payable(0x5a3A7511fF72f72f1AA95f5Ff50F90C6BBa760C6).transfer(_FOUNDER_BALANCE); /* == SB|EVA ========= */
    payable(0x56348105ec4F8bd3F1feABF584c6841C2ba25f1A).transfer(_FOUNDER_BALANCE); /* == SB|SONIA ======= */
    payable(0xf2338226c18D6BDD3Fdf58EFb7b19E92F79F0d67).transfer(_FOUNDER_BALANCE); /* == SB|NITRO ======= */
    payable(0xD8Aa5E8842b09d5B596D22F62C65e47b00F3E6E2).transfer(_PARTNER_BALANCE); /* == SB|KJ ========== */
    payable(0x61c9651b626B0aed8476243D2d27F4cdd0D2d881).transfer(_CMUNITY_BALANCE); /* == SB|CMUNITY ===== */
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_INIT_REVEALED_URI","type":"string"},{"internalType":"string","name":"_INIT_NOT_REVEALED_URI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_REVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEAL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_NEW_NOT_REVEALED_URI","type":"string"}],"name":"SET_NOT_REVEALED_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_NEW_PAUSE_STATE","type":"bool"}],"name":"SET_PAUSE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_NEW_REVEAL_STATE","type":"bool"}],"name":"SET_REVEAL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_NEW_REVEALED_URI","type":"string"}],"name":"SET_REVEALED_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NEW_SUPPLY","type":"uint256"}],"name":"SET_SUPPLY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MINT_AMOUNT","type":"uint256"}],"name":"SHIBABEAST_MINT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW","outputs":[],"stateMutability":"payable","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":[{"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"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":"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":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"TOKEN_ID","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"}]

60806040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550670429d069189e0000600d55611770600e553480156200005957600080fd5b50604051620061ff380380620061ff83398181016040528101906200007f9190620012d0565b6040518060400160405280600a81526020017f53484942414245415354000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f534200000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010392919062001083565b5080600190805190602001906200011c92919062001083565b5050506200013f620001336200018360201b60201c565b6200018b60201b60201c565b6001600b8190555062000158826200025160201b60201c565b6200016981620002fc60201b60201c565b6200017b6009620003a760201b60201c565b505062001c71565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002616200018360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002876200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d790620013b6565b60405180910390fd5b80600f9080519060200190620002f892919062001083565b5050565b6200030c6200018360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003326200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200038b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038290620013b6565b60405180910390fd5b8060109080519060200190620003a392919062001083565b5050565b6002600b541415620003f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e79062001428565b60405180910390fd5b6002600b81905550600c60009054906101000a900460ff16156200044b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000442906200149a565b60405180910390fd5b60006200045d6200067a60201b60201c565b905060008211620004a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049c906200150c565b60405180910390fd5b600e548282620004b6919062001567565b1115620004fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f19062001614565b60405180910390fd5b6200050a6200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620005da57600582111562000584576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057b9062001686565b60405180910390fd5b81600d54620005949190620016a8565b341015620005d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d09062001759565b60405180910390fd5b5b600080600190505b83811162000642576200060160116200068760201b62001be01760201c565b6200061860116200069d60201b62001bf61760201c565b91506200062c3383620006ab60201b60201c565b808062000639906200177b565b915050620005e2565b5050506001600b8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b6001816000016000828254019250508190555050565b600081600001549050919050565b620006cd828260405180602001604052806000815250620006d160201b60201c565b5050565b620006e383836200073f60201b60201c565b620006f860008484846200092560201b60201c565b6200073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000731906200183f565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a990620018b1565b60405180910390fd5b620007c38162000acf60201b60201c565b1562000806576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007fd9062001923565b60405180910390fd5b6200081a6000838362000b3b60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200086c919062001567565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620009538473ffffffffffffffffffffffffffffffffffffffff1662000c8260201b62001c041760201c565b1562000ac2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620009856200018360201b60201c565b8786866040518563ffffffff1660e01b8152600401620009a99493929190620019f8565b6020604051808303816000875af1925050508015620009e857506040513d601f19601f82011682018060405250810190620009e5919062001aa9565b60015b62000a71573d806000811462000a1b576040519150601f19603f3d011682016040523d82523d6000602084013e62000a20565b606091505b5060008151141562000a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a60906200183f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000ac7565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000b5383838362000c9560201b62001c171760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000ba05762000b9a8162000c9a60201b60201c565b62000be8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000be75762000be6838262000ce360201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c355762000c2f8162000e6060201b60201c565b62000c7d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c7c5762000c7b828262000f3c60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000cfd8462000fc860201b620011611760201c565b62000d09919062001adb565b905060006007600084815260200190815260200160002054905081811462000def576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000e76919062001adb565b905060006009600084815260200190815260200160002054905060006008838154811062000ea95762000ea862001b16565b5b90600052602060002001549050806008838154811062000ece5762000ecd62001b16565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000f205762000f1f62001b45565b5b6001900381819060005260206000200160009055905550505050565b600062000f548362000fc860201b620011611760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200103c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010339062001bea565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b828054620010919062001c3b565b90600052602060002090601f016020900481019282620010b5576000855562001101565b82601f10620010d057805160ff191683800117855562001101565b8280016001018555821562001101579182015b8281111562001100578251825591602001919060010190620010e3565b5b50905062001110919062001114565b5090565b5b808211156200112f57600081600090555060010162001115565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200119c8262001151565b810181811067ffffffffffffffff82111715620011be57620011bd62001162565b5b80604052505050565b6000620011d362001133565b9050620011e1828262001191565b919050565b600067ffffffffffffffff82111562001204576200120362001162565b5b6200120f8262001151565b9050602081019050919050565b60005b838110156200123c5780820151818401526020810190506200121f565b838111156200124c576000848401525b50505050565b6000620012696200126384620011e6565b620011c7565b9050828152602081018484840111156200128857620012876200114c565b5b620012958482856200121c565b509392505050565b600082601f830112620012b557620012b462001147565b5b8151620012c784826020860162001252565b91505092915050565b60008060408385031215620012ea57620012e96200113d565b5b600083015167ffffffffffffffff8111156200130b576200130a62001142565b5b62001319858286016200129d565b925050602083015167ffffffffffffffff8111156200133d576200133c62001142565b5b6200134b858286016200129d565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200139e60208362001355565b9150620013ab8262001366565b602082019050919050565b60006020820190508181036000830152620013d1816200138f565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600062001410601f8362001355565b91506200141d82620013d8565b602082019050919050565b60006020820190508181036000830152620014438162001401565b9050919050565b7f5348494241424541535420434f4e545241435420495320504155534544000000600082015250565b600062001482601d8362001355565b91506200148f826200144a565b602082019050919050565b60006020820190508181036000830152620014b58162001473565b9050919050565b7f4d494e5420414d4f554e542053484f554c44204245204154204c454153542031600082015250565b6000620014f460208362001355565b91506200150182620014bc565b602082019050919050565b600060208201905081810360008301526200152781620014e5565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001574826200152e565b915062001581836200152e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620015b957620015b862001538565b5b828201905092915050565b7f4d415820535550504c5920455843454544454400000000000000000000000000600082015250565b6000620015fc60138362001355565b91506200160982620015c4565b602082019050919050565b600060208201905081810360008301526200162f81620015ed565b9050919050565b7f4d415820504552205452414e53414354494f4e20455843454544454400000000600082015250565b60006200166e601c8362001355565b91506200167b8262001636565b602082019050919050565b60006020820190508181036000830152620016a1816200165f565b9050919050565b6000620016b5826200152e565b9150620016c2836200152e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620016fe57620016fd62001538565b5b828202905092915050565b7f494e53554646494349454e542046554e44530000000000000000000000000000600082015250565b60006200174160128362001355565b91506200174e8262001709565b602082019050919050565b60006020820190508181036000830152620017748162001732565b9050919050565b600062001788826200152e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620017be57620017bd62001538565b5b600182019050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006200182760328362001355565b91506200183482620017c9565b604082019050919050565b600060208201905081810360008301526200185a8162001818565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200189960208362001355565b9150620018a68262001861565b602082019050919050565b60006020820190508181036000830152620018cc816200188a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006200190b601c8362001355565b91506200191882620018d3565b602082019050919050565b600060208201905081810360008301526200193e81620018fc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620019728262001945565b9050919050565b620019848162001965565b82525050565b62001995816200152e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000620019c4826200199b565b620019d08185620019a6565b9350620019e28185602086016200121c565b620019ed8162001151565b840191505092915050565b600060808201905062001a0f600083018762001979565b62001a1e602083018662001979565b62001a2d60408301856200198a565b818103606083015262001a418184620019b7565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001a838162001a4c565b811462001a8f57600080fd5b50565b60008151905062001aa38162001a78565b92915050565b60006020828403121562001ac25762001ac16200113d565b5b600062001ad28482850162001a92565b91505092915050565b600062001ae8826200152e565b915062001af5836200152e565b92508282101562001b0b5762001b0a62001538565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600062001bd2602a8362001355565b915062001bdf8262001b74565b604082019050919050565b6000602082019050818103600083015262001c058162001bc3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062001c5457607f821691505b6020821081141562001c6b5762001c6a62001c0c565b5b50919050565b61457e8062001c816000396000f3fe6080604052600436106101e35760003560e01c8063893adbe111610102578063c50497ae11610095578063e65fad9711610064578063e65fad97146106c2578063e985e9c5146106ed578063ed99e1e21461072a578063f2fde38b14610755576101e3565b8063c50497ae14610615578063c87b56dd14610640578063cf1a53571461067d578063dc316e7c14610699576101e3565b8063a22cb465116100d1578063a22cb4651461056f578063a242e04f14610598578063b88d4fde146105c1578063bf8fbbd2146105ea576101e3565b8063893adbe1146104c55780638da5cb5b146104f057806395d89b411461051b578063a152d89914610546576101e3565b80632f745c591161017a5780636352211e116101495780636352211e1461040957806370a0823114610446578063715018a61461048357806382651bd01461049a576101e3565b80632f745c591461033d578063368fda591461037a57806342842e0e146103a35780634f6ccce7146103cc576101e3565b8063126f3c18116101b6578063126f3c18146102b657806316ba7197146102df57806318160ddd146102e957806323b872dd14610314576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f49565b61077e565b60405161021c9190612f91565b60405180910390f35b34801561023157600080fd5b5061023a6107f8565b6040516102479190613045565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061309d565b61088a565b604051610284919061310b565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613152565b61090f565b005b3480156102c257600080fd5b506102dd60048036038101906102d891906131be565b610a27565b005b6102e7610ac0565b005b3480156102f557600080fd5b506102fe610e76565b60405161030b91906131fa565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613215565b610e83565b005b34801561034957600080fd5b50610364600480360381019061035f9190613152565b610ee3565b60405161037191906131fa565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c919061339d565b610f88565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613215565b61101e565b005b3480156103d857600080fd5b506103f360048036038101906103ee919061309d565b61103e565b60405161040091906131fa565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b919061309d565b6110af565b60405161043d919061310b565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906133e6565b611161565b60405161047a91906131fa565b60405180910390f35b34801561048f57600080fd5b50610498611219565b005b3480156104a657600080fd5b506104af6112a1565b6040516104bc9190612f91565b60405180910390f35b3480156104d157600080fd5b506104da6112b4565b6040516104e79190613045565b60405180910390f35b3480156104fc57600080fd5b50610505611342565b604051610512919061310b565b60405180910390f35b34801561052757600080fd5b5061053061136c565b60405161053d9190613045565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061309d565b6113fe565b005b34801561057b57600080fd5b5061059660048036038101906105919190613413565b611484565b005b3480156105a457600080fd5b506105bf60048036038101906105ba919061339d565b61149a565b005b3480156105cd57600080fd5b506105e860048036038101906105e391906134f4565b611530565b005b3480156105f657600080fd5b506105ff611592565b60405161060c91906131fa565b60405180910390f35b34801561062157600080fd5b5061062a611598565b60405161063791906131fa565b60405180910390f35b34801561064c57600080fd5b506106676004803603810190610662919061309d565b61159e565b6040516106749190613045565b60405180910390f35b6106976004803603810190610692919061309d565b6116be565b005b3480156106a557600080fd5b506106c060048036038101906106bb91906131be565b61191a565b005b3480156106ce57600080fd5b506106d76119b3565b6040516106e49190612f91565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190613577565b6119c6565b6040516107219190612f91565b60405180910390f35b34801561073657600080fd5b5061073f611a5a565b60405161074c9190613045565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906133e6565b611ae8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f157506107f082611c1c565b5b9050919050565b606060008054610807906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610833906135e6565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b600061089582611cfe565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb9061368a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061091a826110af565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109829061371c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109aa611d6a565b73ffffffffffffffffffffffffffffffffffffffff1614806109d957506109d8816109d3611d6a565b6119c6565b5b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906137ae565b60405180910390fd5b610a228383611d72565b505050565b610a2f611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610a4d611342565b73ffffffffffffffffffffffffffffffffffffffff1614610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a9061381a565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b610ac8611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610ae6611342565b73ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b339061381a565b60405180910390fd5b600047905060006064600e83610b529190613869565b610b5c91906138f2565b905060006064600784610b6f9190613869565b610b7991906138f2565b905060006064600985610b8c9190613869565b610b9691906138f2565b905073b2016edc04236866e81138b7aa68bd1bcc2cb4bd73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610bf2573d6000803e3d6000fd5b5073889121f5d5d675874e4605218040f33198a1631973ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610c4d573d6000803e3d6000fd5b50736129b64ec39fc57a1bf9fcf454334f1f7c448e3073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610ca8573d6000803e3d6000fd5b50735a3a7511ff72f72f1aa95f5ff50f90c6bba760c673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610d03573d6000803e3d6000fd5b507356348105ec4f8bd3f1feabf584c6841c2ba25f1a73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610d5e573d6000803e3d6000fd5b5073f2338226c18d6bdd3fdf58efb7b19e92f79f0d6773ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610db9573d6000803e3d6000fd5b5073d8aa5e8842b09d5b596d22f62c65e47b00f3e6e273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610e14573d6000803e3d6000fd5b507361c9651b626b0aed8476243d2d27f4cdd0d2d88173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6f573d6000803e3d6000fd5b5050505050565b6000600880549050905090565b610e94610e8e611d6a565b82611e2b565b610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613995565b60405180910390fd5b610ede838383611f09565b505050565b6000610eee83611161565b8210610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613a27565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f90611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610fae611342565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061381a565b60405180910390fd5b806010908051906020019061101a929190612e3a565b5050565b61103983838360405180602001604052806000815250611530565b505050565b6000611048610e76565b8210611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090613ab9565b60405180910390fd5b6008828154811061109d5761109c613ad9565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613b7a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990613c0c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611221611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661123f611342565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9061381a565b60405180910390fd5b61129f6000612165565b565b600c60019054906101000a900460ff1681565b600f80546112c1906135e6565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed906135e6565b801561133a5780601f1061130f5761010080835404028352916020019161133a565b820191906000526020600020905b81548152906001019060200180831161131d57829003601f168201915b505050505081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461137b906135e6565b80601f01602080910402602001604051908101604052809291908181526020018280546113a7906135e6565b80156113f45780601f106113c9576101008083540402835291602001916113f4565b820191906000526020600020905b8154815290600101906020018083116113d757829003601f168201915b5050505050905090565b611406611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611424611342565b73ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114719061381a565b60405180910390fd5b80600e8190555050565b61149661148f611d6a565b838361222b565b5050565b6114a2611d6a565b73ffffffffffffffffffffffffffffffffffffffff166114c0611342565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d9061381a565b60405180910390fd5b80600f908051906020019061152c929190612e3a565b5050565b61154161153b611d6a565b83611e2b565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790613995565b60405180910390fd5b61158c84848484612398565b50505050565b600d5481565b600e5481565b60606115a982611cfe565b6115b257600080fd5b60001515600c60019054906101000a900460ff161515141561166057601080546115db906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906135e6565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b505050505090506116b9565b600061166a6123f4565b9050600081511161168a57604051806020016040528060008152506116b5565b8061169484612486565b6040516020016116a5929190613c68565b6040516020818303038152906040525b9150505b919050565b6002600b541415611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90613cd8565b60405180910390fd5b6002600b81905550600c60009054906101000a900460ff161561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613d44565b60405180910390fd5b6000611766610e76565b9050600082116117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613db0565b60405180910390fd5b600e5482826117ba9190613dd0565b11156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613e72565b60405180910390fd5b611803611342565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ca576005821115611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090613ede565b60405180910390fd5b81600d546118879190613869565b3410156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613f4a565b60405180910390fd5b5b600080600190505b83811161190c576118e36011611be0565b6118ed6011611bf6565b91506118f933836125e7565b808061190490613f6a565b9150506118d2565b5050506001600b8190555050565b611922611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611940611342565b73ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d9061381a565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60108054611a67906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a93906135e6565b8015611ae05780601f10611ab557610100808354040283529160200191611ae0565b820191906000526020600020905b815481529060010190602001808311611ac357829003601f168201915b505050505081565b611af0611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611b0e611342565b73ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b9061381a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90614025565b60405180910390fd5b611bdd81612165565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ce757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cf75750611cf682612605565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de5836110af565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3682611cfe565b611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c906140b7565b60405180910390fd5b6000611e80836110af565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eef57508373ffffffffffffffffffffffffffffffffffffffff16611ed78461088a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f005750611eff81856119c6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f29826110af565b73ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614149565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe6906141db565b60405180910390fd5b611ffa83838361266f565b612005600082611d72565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461205591906141fb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ac9190613dd0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561229a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122919061427b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161238b9190612f91565b60405180910390a3505050565b6123a3848484611f09565b6123af84848484612783565b6123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e59061430d565b60405180910390fd5b50505050565b6060600f8054612403906135e6565b80601f016020809104026020016040519081016040528092919081815260200182805461242f906135e6565b801561247c5780601f106124515761010080835404028352916020019161247c565b820191906000526020600020905b81548152906001019060200180831161245f57829003601f168201915b5050505050905090565b606060008214156124ce576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125e2565b600082905060005b600082146125005780806124e990613f6a565b915050600a826124f991906138f2565b91506124d6565b60008167ffffffffffffffff81111561251c5761251b613272565b5b6040519080825280601f01601f19166020018201604052801561254e5781602001600182028036833780820191505090505b5090505b600085146125db5760018261256791906141fb565b9150600a85612576919061432d565b60306125829190613dd0565b60f81b81838151811061259857612597613ad9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125d491906138f2565b9450612552565b8093505050505b919050565b61260182826040518060200160405280600081525061290b565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61267a838383611c17565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126bd576126b881612966565b6126fc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fb576126fa83826129af565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273f5761273a81612b1c565b61277e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461277d5761277c8282612bed565b5b5b505050565b60006127a48473ffffffffffffffffffffffffffffffffffffffff16611c04565b156128fe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127cd611d6a565b8786866040518563ffffffff1660e01b81526004016127ef94939291906143b3565b6020604051808303816000875af192505050801561282b57506040513d601f19601f820116820180604052508101906128289190614414565b60015b6128ae573d806000811461285b576040519150601f19603f3d011682016040523d82523d6000602084013e612860565b606091505b506000815114156128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d9061430d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612903565b600190505b949350505050565b6129158383612c6c565b6129226000848484612783565b612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129589061430d565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129bc84611161565b6129c691906141fb565b9050600060076000848152602001908152602001600020549050818114612aab576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b3091906141fb565b9050600060096000848152602001908152602001600020549050600060088381548110612b6057612b5f613ad9565b5b906000526020600020015490508060088381548110612b8257612b81613ad9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bd157612bd0614441565b5b6001900381819060005260206000200160009055905550505050565b6000612bf883611161565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd3906144bc565b60405180910390fd5b612ce581611cfe565b15612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90614528565b60405180910390fd5b612d316000838361266f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d819190613dd0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e46906135e6565b90600052602060002090601f016020900481019282612e685760008555612eaf565b82601f10612e8157805160ff1916838001178555612eaf565b82800160010185558215612eaf579182015b82811115612eae578251825591602001919060010190612e93565b5b509050612ebc9190612ec0565b5090565b5b80821115612ed9576000816000905550600101612ec1565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f2681612ef1565b8114612f3157600080fd5b50565b600081359050612f4381612f1d565b92915050565b600060208284031215612f5f57612f5e612ee7565b5b6000612f6d84828501612f34565b91505092915050565b60008115159050919050565b612f8b81612f76565b82525050565b6000602082019050612fa66000830184612f82565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fe6578082015181840152602081019050612fcb565b83811115612ff5576000848401525b50505050565b6000601f19601f8301169050919050565b600061301782612fac565b6130218185612fb7565b9350613031818560208601612fc8565b61303a81612ffb565b840191505092915050565b6000602082019050818103600083015261305f818461300c565b905092915050565b6000819050919050565b61307a81613067565b811461308557600080fd5b50565b60008135905061309781613071565b92915050565b6000602082840312156130b3576130b2612ee7565b5b60006130c184828501613088565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130f5826130ca565b9050919050565b613105816130ea565b82525050565b600060208201905061312060008301846130fc565b92915050565b61312f816130ea565b811461313a57600080fd5b50565b60008135905061314c81613126565b92915050565b6000806040838503121561316957613168612ee7565b5b60006131778582860161313d565b925050602061318885828601613088565b9150509250929050565b61319b81612f76565b81146131a657600080fd5b50565b6000813590506131b881613192565b92915050565b6000602082840312156131d4576131d3612ee7565b5b60006131e2848285016131a9565b91505092915050565b6131f481613067565b82525050565b600060208201905061320f60008301846131eb565b92915050565b60008060006060848603121561322e5761322d612ee7565b5b600061323c8682870161313d565b935050602061324d8682870161313d565b925050604061325e86828701613088565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132aa82612ffb565b810181811067ffffffffffffffff821117156132c9576132c8613272565b5b80604052505050565b60006132dc612edd565b90506132e882826132a1565b919050565b600067ffffffffffffffff82111561330857613307613272565b5b61331182612ffb565b9050602081019050919050565b82818337600083830152505050565b600061334061333b846132ed565b6132d2565b90508281526020810184848401111561335c5761335b61326d565b5b61336784828561331e565b509392505050565b600082601f83011261338457613383613268565b5b813561339484826020860161332d565b91505092915050565b6000602082840312156133b3576133b2612ee7565b5b600082013567ffffffffffffffff8111156133d1576133d0612eec565b5b6133dd8482850161336f565b91505092915050565b6000602082840312156133fc576133fb612ee7565b5b600061340a8482850161313d565b91505092915050565b6000806040838503121561342a57613429612ee7565b5b60006134388582860161313d565b9250506020613449858286016131a9565b9150509250929050565b600067ffffffffffffffff82111561346e5761346d613272565b5b61347782612ffb565b9050602081019050919050565b600061349761349284613453565b6132d2565b9050828152602081018484840111156134b3576134b261326d565b5b6134be84828561331e565b509392505050565b600082601f8301126134db576134da613268565b5b81356134eb848260208601613484565b91505092915050565b6000806000806080858703121561350e5761350d612ee7565b5b600061351c8782880161313d565b945050602061352d8782880161313d565b935050604061353e87828801613088565b925050606085013567ffffffffffffffff81111561355f5761355e612eec565b5b61356b878288016134c6565b91505092959194509250565b6000806040838503121561358e5761358d612ee7565b5b600061359c8582860161313d565b92505060206135ad8582860161313d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135fe57607f821691505b60208210811415613612576136116135b7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613674602c83612fb7565b915061367f82613618565b604082019050919050565b600060208201905081810360008301526136a381613667565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613706602183612fb7565b9150613711826136aa565b604082019050919050565b60006020820190508181036000830152613735816136f9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613798603883612fb7565b91506137a38261373c565b604082019050919050565b600060208201905081810360008301526137c78161378b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613804602083612fb7565b915061380f826137ce565b602082019050919050565b60006020820190508181036000830152613833816137f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387482613067565b915061387f83613067565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b8576138b761383a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138fd82613067565b915061390883613067565b925082613918576139176138c3565b5b828204905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061397f603183612fb7565b915061398a82613923565b604082019050919050565b600060208201905081810360008301526139ae81613972565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613a11602b83612fb7565b9150613a1c826139b5565b604082019050919050565b60006020820190508181036000830152613a4081613a04565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613aa3602c83612fb7565b9150613aae82613a47565b604082019050919050565b60006020820190508181036000830152613ad281613a96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613b64602983612fb7565b9150613b6f82613b08565b604082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613bf6602a83612fb7565b9150613c0182613b9a565b604082019050919050565b60006020820190508181036000830152613c2581613be9565b9050919050565b600081905092915050565b6000613c4282612fac565b613c4c8185613c2c565b9350613c5c818560208601612fc8565b80840191505092915050565b6000613c748285613c37565b9150613c808284613c37565b91508190509392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613cc2601f83612fb7565b9150613ccd82613c8c565b602082019050919050565b60006020820190508181036000830152613cf181613cb5565b9050919050565b7f5348494241424541535420434f4e545241435420495320504155534544000000600082015250565b6000613d2e601d83612fb7565b9150613d3982613cf8565b602082019050919050565b60006020820190508181036000830152613d5d81613d21565b9050919050565b7f4d494e5420414d4f554e542053484f554c44204245204154204c454153542031600082015250565b6000613d9a602083612fb7565b9150613da582613d64565b602082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b6000613ddb82613067565b9150613de683613067565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e1b57613e1a61383a565b5b828201905092915050565b7f4d415820535550504c5920455843454544454400000000000000000000000000600082015250565b6000613e5c601383612fb7565b9150613e6782613e26565b602082019050919050565b60006020820190508181036000830152613e8b81613e4f565b9050919050565b7f4d415820504552205452414e53414354494f4e20455843454544454400000000600082015250565b6000613ec8601c83612fb7565b9150613ed382613e92565b602082019050919050565b60006020820190508181036000830152613ef781613ebb565b9050919050565b7f494e53554646494349454e542046554e44530000000000000000000000000000600082015250565b6000613f34601283612fb7565b9150613f3f82613efe565b602082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b6000613f7582613067565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fa857613fa761383a565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061400f602683612fb7565b915061401a82613fb3565b604082019050919050565b6000602082019050818103600083015261403e81614002565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140a1602c83612fb7565b91506140ac82614045565b604082019050919050565b600060208201905081810360008301526140d081614094565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614133602983612fb7565b915061413e826140d7565b604082019050919050565b6000602082019050818103600083015261416281614126565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141c5602483612fb7565b91506141d082614169565b604082019050919050565b600060208201905081810360008301526141f4816141b8565b9050919050565b600061420682613067565b915061421183613067565b9250828210156142245761422361383a565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614265601983612fb7565b91506142708261422f565b602082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142f7603283612fb7565b91506143028261429b565b604082019050919050565b60006020820190508181036000830152614326816142ea565b9050919050565b600061433882613067565b915061434383613067565b925082614353576143526138c3565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143858261435e565b61438f8185614369565b935061439f818560208601612fc8565b6143a881612ffb565b840191505092915050565b60006080820190506143c860008301876130fc565b6143d560208301866130fc565b6143e260408301856131eb565b81810360608301526143f4818461437a565b905095945050505050565b60008151905061440e81612f1d565b92915050565b60006020828403121561442a57614429612ee7565b5b6000614438848285016143ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144a6602083612fb7565b91506144b182614470565b602082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614512601c83612fb7565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b905091905056fea26469706673582212200deb9f7422f703e09313463cc151c6355f6db7be14bc68c92fb4fe845674259064736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004d68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f516d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e6a44663572736e697233436e6d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f516d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e6a44663572736e697233436e6d00000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101e35760003560e01c8063893adbe111610102578063c50497ae11610095578063e65fad9711610064578063e65fad97146106c2578063e985e9c5146106ed578063ed99e1e21461072a578063f2fde38b14610755576101e3565b8063c50497ae14610615578063c87b56dd14610640578063cf1a53571461067d578063dc316e7c14610699576101e3565b8063a22cb465116100d1578063a22cb4651461056f578063a242e04f14610598578063b88d4fde146105c1578063bf8fbbd2146105ea576101e3565b8063893adbe1146104c55780638da5cb5b146104f057806395d89b411461051b578063a152d89914610546576101e3565b80632f745c591161017a5780636352211e116101495780636352211e1461040957806370a0823114610446578063715018a61461048357806382651bd01461049a576101e3565b80632f745c591461033d578063368fda591461037a57806342842e0e146103a35780634f6ccce7146103cc576101e3565b8063126f3c18116101b6578063126f3c18146102b657806316ba7197146102df57806318160ddd146102e957806323b872dd14610314576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f49565b61077e565b60405161021c9190612f91565b60405180910390f35b34801561023157600080fd5b5061023a6107f8565b6040516102479190613045565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061309d565b61088a565b604051610284919061310b565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613152565b61090f565b005b3480156102c257600080fd5b506102dd60048036038101906102d891906131be565b610a27565b005b6102e7610ac0565b005b3480156102f557600080fd5b506102fe610e76565b60405161030b91906131fa565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613215565b610e83565b005b34801561034957600080fd5b50610364600480360381019061035f9190613152565b610ee3565b60405161037191906131fa565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c919061339d565b610f88565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613215565b61101e565b005b3480156103d857600080fd5b506103f360048036038101906103ee919061309d565b61103e565b60405161040091906131fa565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b919061309d565b6110af565b60405161043d919061310b565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906133e6565b611161565b60405161047a91906131fa565b60405180910390f35b34801561048f57600080fd5b50610498611219565b005b3480156104a657600080fd5b506104af6112a1565b6040516104bc9190612f91565b60405180910390f35b3480156104d157600080fd5b506104da6112b4565b6040516104e79190613045565b60405180910390f35b3480156104fc57600080fd5b50610505611342565b604051610512919061310b565b60405180910390f35b34801561052757600080fd5b5061053061136c565b60405161053d9190613045565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061309d565b6113fe565b005b34801561057b57600080fd5b5061059660048036038101906105919190613413565b611484565b005b3480156105a457600080fd5b506105bf60048036038101906105ba919061339d565b61149a565b005b3480156105cd57600080fd5b506105e860048036038101906105e391906134f4565b611530565b005b3480156105f657600080fd5b506105ff611592565b60405161060c91906131fa565b60405180910390f35b34801561062157600080fd5b5061062a611598565b60405161063791906131fa565b60405180910390f35b34801561064c57600080fd5b506106676004803603810190610662919061309d565b61159e565b6040516106749190613045565b60405180910390f35b6106976004803603810190610692919061309d565b6116be565b005b3480156106a557600080fd5b506106c060048036038101906106bb91906131be565b61191a565b005b3480156106ce57600080fd5b506106d76119b3565b6040516106e49190612f91565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190613577565b6119c6565b6040516107219190612f91565b60405180910390f35b34801561073657600080fd5b5061073f611a5a565b60405161074c9190613045565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906133e6565b611ae8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f157506107f082611c1c565b5b9050919050565b606060008054610807906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610833906135e6565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b600061089582611cfe565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb9061368a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061091a826110af565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109829061371c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109aa611d6a565b73ffffffffffffffffffffffffffffffffffffffff1614806109d957506109d8816109d3611d6a565b6119c6565b5b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906137ae565b60405180910390fd5b610a228383611d72565b505050565b610a2f611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610a4d611342565b73ffffffffffffffffffffffffffffffffffffffff1614610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a9061381a565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b610ac8611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610ae6611342565b73ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b339061381a565b60405180910390fd5b600047905060006064600e83610b529190613869565b610b5c91906138f2565b905060006064600784610b6f9190613869565b610b7991906138f2565b905060006064600985610b8c9190613869565b610b9691906138f2565b905073b2016edc04236866e81138b7aa68bd1bcc2cb4bd73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610bf2573d6000803e3d6000fd5b5073889121f5d5d675874e4605218040f33198a1631973ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610c4d573d6000803e3d6000fd5b50736129b64ec39fc57a1bf9fcf454334f1f7c448e3073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610ca8573d6000803e3d6000fd5b50735a3a7511ff72f72f1aa95f5ff50f90c6bba760c673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610d03573d6000803e3d6000fd5b507356348105ec4f8bd3f1feabf584c6841c2ba25f1a73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610d5e573d6000803e3d6000fd5b5073f2338226c18d6bdd3fdf58efb7b19e92f79f0d6773ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610db9573d6000803e3d6000fd5b5073d8aa5e8842b09d5b596d22f62c65e47b00f3e6e273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610e14573d6000803e3d6000fd5b507361c9651b626b0aed8476243d2d27f4cdd0d2d88173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6f573d6000803e3d6000fd5b5050505050565b6000600880549050905090565b610e94610e8e611d6a565b82611e2b565b610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613995565b60405180910390fd5b610ede838383611f09565b505050565b6000610eee83611161565b8210610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613a27565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f90611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610fae611342565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061381a565b60405180910390fd5b806010908051906020019061101a929190612e3a565b5050565b61103983838360405180602001604052806000815250611530565b505050565b6000611048610e76565b8210611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090613ab9565b60405180910390fd5b6008828154811061109d5761109c613ad9565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613b7a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990613c0c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611221611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661123f611342565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9061381a565b60405180910390fd5b61129f6000612165565b565b600c60019054906101000a900460ff1681565b600f80546112c1906135e6565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed906135e6565b801561133a5780601f1061130f5761010080835404028352916020019161133a565b820191906000526020600020905b81548152906001019060200180831161131d57829003601f168201915b505050505081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461137b906135e6565b80601f01602080910402602001604051908101604052809291908181526020018280546113a7906135e6565b80156113f45780601f106113c9576101008083540402835291602001916113f4565b820191906000526020600020905b8154815290600101906020018083116113d757829003601f168201915b5050505050905090565b611406611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611424611342565b73ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114719061381a565b60405180910390fd5b80600e8190555050565b61149661148f611d6a565b838361222b565b5050565b6114a2611d6a565b73ffffffffffffffffffffffffffffffffffffffff166114c0611342565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d9061381a565b60405180910390fd5b80600f908051906020019061152c929190612e3a565b5050565b61154161153b611d6a565b83611e2b565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790613995565b60405180910390fd5b61158c84848484612398565b50505050565b600d5481565b600e5481565b60606115a982611cfe565b6115b257600080fd5b60001515600c60019054906101000a900460ff161515141561166057601080546115db906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906135e6565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b505050505090506116b9565b600061166a6123f4565b9050600081511161168a57604051806020016040528060008152506116b5565b8061169484612486565b6040516020016116a5929190613c68565b6040516020818303038152906040525b9150505b919050565b6002600b541415611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90613cd8565b60405180910390fd5b6002600b81905550600c60009054906101000a900460ff161561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613d44565b60405180910390fd5b6000611766610e76565b9050600082116117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613db0565b60405180910390fd5b600e5482826117ba9190613dd0565b11156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613e72565b60405180910390fd5b611803611342565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ca576005821115611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090613ede565b60405180910390fd5b81600d546118879190613869565b3410156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613f4a565b60405180910390fd5b5b600080600190505b83811161190c576118e36011611be0565b6118ed6011611bf6565b91506118f933836125e7565b808061190490613f6a565b9150506118d2565b5050506001600b8190555050565b611922611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611940611342565b73ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d9061381a565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60108054611a67906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a93906135e6565b8015611ae05780601f10611ab557610100808354040283529160200191611ae0565b820191906000526020600020905b815481529060010190602001808311611ac357829003601f168201915b505050505081565b611af0611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611b0e611342565b73ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b9061381a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90614025565b60405180910390fd5b611bdd81612165565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ce757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cf75750611cf682612605565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de5836110af565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3682611cfe565b611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c906140b7565b60405180910390fd5b6000611e80836110af565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eef57508373ffffffffffffffffffffffffffffffffffffffff16611ed78461088a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f005750611eff81856119c6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f29826110af565b73ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614149565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe6906141db565b60405180910390fd5b611ffa83838361266f565b612005600082611d72565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461205591906141fb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ac9190613dd0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561229a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122919061427b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161238b9190612f91565b60405180910390a3505050565b6123a3848484611f09565b6123af84848484612783565b6123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e59061430d565b60405180910390fd5b50505050565b6060600f8054612403906135e6565b80601f016020809104026020016040519081016040528092919081815260200182805461242f906135e6565b801561247c5780601f106124515761010080835404028352916020019161247c565b820191906000526020600020905b81548152906001019060200180831161245f57829003601f168201915b5050505050905090565b606060008214156124ce576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125e2565b600082905060005b600082146125005780806124e990613f6a565b915050600a826124f991906138f2565b91506124d6565b60008167ffffffffffffffff81111561251c5761251b613272565b5b6040519080825280601f01601f19166020018201604052801561254e5781602001600182028036833780820191505090505b5090505b600085146125db5760018261256791906141fb565b9150600a85612576919061432d565b60306125829190613dd0565b60f81b81838151811061259857612597613ad9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125d491906138f2565b9450612552565b8093505050505b919050565b61260182826040518060200160405280600081525061290b565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61267a838383611c17565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126bd576126b881612966565b6126fc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fb576126fa83826129af565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273f5761273a81612b1c565b61277e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461277d5761277c8282612bed565b5b5b505050565b60006127a48473ffffffffffffffffffffffffffffffffffffffff16611c04565b156128fe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127cd611d6a565b8786866040518563ffffffff1660e01b81526004016127ef94939291906143b3565b6020604051808303816000875af192505050801561282b57506040513d601f19601f820116820180604052508101906128289190614414565b60015b6128ae573d806000811461285b576040519150601f19603f3d011682016040523d82523d6000602084013e612860565b606091505b506000815114156128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d9061430d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612903565b600190505b949350505050565b6129158383612c6c565b6129226000848484612783565b612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129589061430d565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129bc84611161565b6129c691906141fb565b9050600060076000848152602001908152602001600020549050818114612aab576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b3091906141fb565b9050600060096000848152602001908152602001600020549050600060088381548110612b6057612b5f613ad9565b5b906000526020600020015490508060088381548110612b8257612b81613ad9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bd157612bd0614441565b5b6001900381819060005260206000200160009055905550505050565b6000612bf883611161565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd3906144bc565b60405180910390fd5b612ce581611cfe565b15612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90614528565b60405180910390fd5b612d316000838361266f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d819190613dd0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e46906135e6565b90600052602060002090601f016020900481019282612e685760008555612eaf565b82601f10612e8157805160ff1916838001178555612eaf565b82800160010185558215612eaf579182015b82811115612eae578251825591602001919060010190612e93565b5b509050612ebc9190612ec0565b5090565b5b80821115612ed9576000816000905550600101612ec1565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f2681612ef1565b8114612f3157600080fd5b50565b600081359050612f4381612f1d565b92915050565b600060208284031215612f5f57612f5e612ee7565b5b6000612f6d84828501612f34565b91505092915050565b60008115159050919050565b612f8b81612f76565b82525050565b6000602082019050612fa66000830184612f82565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fe6578082015181840152602081019050612fcb565b83811115612ff5576000848401525b50505050565b6000601f19601f8301169050919050565b600061301782612fac565b6130218185612fb7565b9350613031818560208601612fc8565b61303a81612ffb565b840191505092915050565b6000602082019050818103600083015261305f818461300c565b905092915050565b6000819050919050565b61307a81613067565b811461308557600080fd5b50565b60008135905061309781613071565b92915050565b6000602082840312156130b3576130b2612ee7565b5b60006130c184828501613088565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130f5826130ca565b9050919050565b613105816130ea565b82525050565b600060208201905061312060008301846130fc565b92915050565b61312f816130ea565b811461313a57600080fd5b50565b60008135905061314c81613126565b92915050565b6000806040838503121561316957613168612ee7565b5b60006131778582860161313d565b925050602061318885828601613088565b9150509250929050565b61319b81612f76565b81146131a657600080fd5b50565b6000813590506131b881613192565b92915050565b6000602082840312156131d4576131d3612ee7565b5b60006131e2848285016131a9565b91505092915050565b6131f481613067565b82525050565b600060208201905061320f60008301846131eb565b92915050565b60008060006060848603121561322e5761322d612ee7565b5b600061323c8682870161313d565b935050602061324d8682870161313d565b925050604061325e86828701613088565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132aa82612ffb565b810181811067ffffffffffffffff821117156132c9576132c8613272565b5b80604052505050565b60006132dc612edd565b90506132e882826132a1565b919050565b600067ffffffffffffffff82111561330857613307613272565b5b61331182612ffb565b9050602081019050919050565b82818337600083830152505050565b600061334061333b846132ed565b6132d2565b90508281526020810184848401111561335c5761335b61326d565b5b61336784828561331e565b509392505050565b600082601f83011261338457613383613268565b5b813561339484826020860161332d565b91505092915050565b6000602082840312156133b3576133b2612ee7565b5b600082013567ffffffffffffffff8111156133d1576133d0612eec565b5b6133dd8482850161336f565b91505092915050565b6000602082840312156133fc576133fb612ee7565b5b600061340a8482850161313d565b91505092915050565b6000806040838503121561342a57613429612ee7565b5b60006134388582860161313d565b9250506020613449858286016131a9565b9150509250929050565b600067ffffffffffffffff82111561346e5761346d613272565b5b61347782612ffb565b9050602081019050919050565b600061349761349284613453565b6132d2565b9050828152602081018484840111156134b3576134b261326d565b5b6134be84828561331e565b509392505050565b600082601f8301126134db576134da613268565b5b81356134eb848260208601613484565b91505092915050565b6000806000806080858703121561350e5761350d612ee7565b5b600061351c8782880161313d565b945050602061352d8782880161313d565b935050604061353e87828801613088565b925050606085013567ffffffffffffffff81111561355f5761355e612eec565b5b61356b878288016134c6565b91505092959194509250565b6000806040838503121561358e5761358d612ee7565b5b600061359c8582860161313d565b92505060206135ad8582860161313d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135fe57607f821691505b60208210811415613612576136116135b7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613674602c83612fb7565b915061367f82613618565b604082019050919050565b600060208201905081810360008301526136a381613667565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613706602183612fb7565b9150613711826136aa565b604082019050919050565b60006020820190508181036000830152613735816136f9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613798603883612fb7565b91506137a38261373c565b604082019050919050565b600060208201905081810360008301526137c78161378b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613804602083612fb7565b915061380f826137ce565b602082019050919050565b60006020820190508181036000830152613833816137f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387482613067565b915061387f83613067565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b8576138b761383a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138fd82613067565b915061390883613067565b925082613918576139176138c3565b5b828204905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061397f603183612fb7565b915061398a82613923565b604082019050919050565b600060208201905081810360008301526139ae81613972565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613a11602b83612fb7565b9150613a1c826139b5565b604082019050919050565b60006020820190508181036000830152613a4081613a04565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613aa3602c83612fb7565b9150613aae82613a47565b604082019050919050565b60006020820190508181036000830152613ad281613a96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613b64602983612fb7565b9150613b6f82613b08565b604082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613bf6602a83612fb7565b9150613c0182613b9a565b604082019050919050565b60006020820190508181036000830152613c2581613be9565b9050919050565b600081905092915050565b6000613c4282612fac565b613c4c8185613c2c565b9350613c5c818560208601612fc8565b80840191505092915050565b6000613c748285613c37565b9150613c808284613c37565b91508190509392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613cc2601f83612fb7565b9150613ccd82613c8c565b602082019050919050565b60006020820190508181036000830152613cf181613cb5565b9050919050565b7f5348494241424541535420434f4e545241435420495320504155534544000000600082015250565b6000613d2e601d83612fb7565b9150613d3982613cf8565b602082019050919050565b60006020820190508181036000830152613d5d81613d21565b9050919050565b7f4d494e5420414d4f554e542053484f554c44204245204154204c454153542031600082015250565b6000613d9a602083612fb7565b9150613da582613d64565b602082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b6000613ddb82613067565b9150613de683613067565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e1b57613e1a61383a565b5b828201905092915050565b7f4d415820535550504c5920455843454544454400000000000000000000000000600082015250565b6000613e5c601383612fb7565b9150613e6782613e26565b602082019050919050565b60006020820190508181036000830152613e8b81613e4f565b9050919050565b7f4d415820504552205452414e53414354494f4e20455843454544454400000000600082015250565b6000613ec8601c83612fb7565b9150613ed382613e92565b602082019050919050565b60006020820190508181036000830152613ef781613ebb565b9050919050565b7f494e53554646494349454e542046554e44530000000000000000000000000000600082015250565b6000613f34601283612fb7565b9150613f3f82613efe565b602082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b6000613f7582613067565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fa857613fa761383a565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061400f602683612fb7565b915061401a82613fb3565b604082019050919050565b6000602082019050818103600083015261403e81614002565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140a1602c83612fb7565b91506140ac82614045565b604082019050919050565b600060208201905081810360008301526140d081614094565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614133602983612fb7565b915061413e826140d7565b604082019050919050565b6000602082019050818103600083015261416281614126565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141c5602483612fb7565b91506141d082614169565b604082019050919050565b600060208201905081810360008301526141f4816141b8565b9050919050565b600061420682613067565b915061421183613067565b9250828210156142245761422361383a565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614265601983612fb7565b91506142708261422f565b602082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142f7603283612fb7565b91506143028261429b565b604082019050919050565b60006020820190508181036000830152614326816142ea565b9050919050565b600061433882613067565b915061434383613067565b925082614353576143526138c3565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143858261435e565b61438f8185614369565b935061439f818560208601612fc8565b6143a881612ffb565b840191505092915050565b60006080820190506143c860008301876130fc565b6143d560208301866130fc565b6143e260408301856131eb565b81810360608301526143f4818461437a565b905095945050505050565b60008151905061440e81612f1d565b92915050565b60006020828403121561442a57614429612ee7565b5b6000614438848285016143ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144a6602083612fb7565b91506144b182614470565b602082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614512601c83612fb7565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b905091905056fea26469706673582212200deb9f7422f703e09313463cc151c6355f6db7be14bc68c92fb4fe845674259064736f6c634300080b0033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004d68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f516d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e6a44663572736e697233436e6d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f516d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e6a44663572736e697233436e6d00000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _INIT_REVEALED_URI (string): https://sb.mypinata.cloud/ipfs/QmPfcSYTQhYMWNt1x49kVDALX56GZmumNjDf5rsnir3Cnm
Arg [1] : _INIT_NOT_REVEALED_URI (string): https://sb.mypinata.cloud/ipfs/QmPfcSYTQhYMWNt1x49kVDALX56GZmumNjDf5rsnir3Cnm

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000000000000000000000000000000000000000004d
Arg [3] : 68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f51
Arg [4] : 6d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e
Arg [5] : 6a44663572736e697233436e6d00000000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000004d
Arg [7] : 68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f51
Arg [8] : 6d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e
Arg [9] : 6a44663572736e697233436e6d00000000000000000000000000000000000000


Deployed Bytecode Sourcemap

50313:3925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43278:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29984:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31543:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31066:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52835:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53092:1143;;;:::i;:::-;;43918:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32293:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43586:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52595:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32703:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44108:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29678:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29408:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8954:103;;;;;;;;;;;;;:::i;:::-;;50536:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50636;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8303:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30153:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52738:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31836:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52468:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32959:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50567:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50603:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52039:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51266:716;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52937:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50506:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32062:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50667:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9212:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43278:224;43380:4;43419:35;43404:50;;;:11;:50;;;;:90;;;;43458:36;43482:11;43458:23;:36::i;:::-;43404:90;43397:97;;43278:224;;;:::o;29984:100::-;30038:13;30071:5;30064:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29984:100;:::o;31543:221::-;31619:7;31647:16;31655:7;31647;:16::i;:::-;31639:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31732:15;:24;31748:7;31732:24;;;;;;;;;;;;;;;;;;;;;31725:31;;31543:221;;;:::o;31066:411::-;31147:13;31163:23;31178:7;31163:14;:23::i;:::-;31147:39;;31211:5;31205:11;;:2;:11;;;;31197:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31305:5;31289:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31314:37;31331:5;31338:12;:10;:12::i;:::-;31314:16;:37::i;:::-;31289:62;31267:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31448:21;31457:2;31461:7;31448:8;:21::i;:::-;31136:341;31066:411;;:::o;52835:96::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52909:16:::1;52901:5;;:24;;;;;;;;;;;;;;;;;;52835:96:::0;:::o;53092:1143::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53144:16:::1;53163:21;53144:40;;53191:24;53234:3;53229:2;53218:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;53191:46;;53244:24;53286:3;53282:1;53271:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;53244:45;;53296:24;53338:3;53334:1;53323:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;53296:45;;53356:42;53348:60;;:78;53409:16;53348:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53467:42;53459:60;;:78;53520:16;53459:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53578:42;53570:60;;:78;53631:16;53570:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53689:42;53681:60;;:78;53742:16;53681:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53800:42;53792:60;;:78;53853:16;53792:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53911:42;53903:60;;:78;53964:16;53903:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54022:42;54014:60;;:78;54075:16;54014:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54133:42;54125:60;;:78;54186:16;54125:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53137:1098;;;;53092:1143::o:0;43918:113::-;43979:7;44006:10;:17;;;;43999:24;;43918:113;:::o;32293:339::-;32488:41;32507:12;:10;:12::i;:::-;32521:7;32488:18;:41::i;:::-;32480:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32596:28;32606:4;32612:2;32616:7;32596:9;:28::i;:::-;32293:339;;;:::o;43586:256::-;43683:7;43719:23;43736:5;43719:16;:23::i;:::-;43711:5;:31;43703:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43808:12;:19;43821:5;43808:19;;;;;;;;;;;;;;;:26;43828:5;43808:26;;;;;;;;;;;;43801:33;;43586:256;;;;:::o;52595:137::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52705:21:::1;52686:16;:40;;;;;;;;;;;;:::i;:::-;;52595:137:::0;:::o;32703:185::-;32841:39;32858:4;32864:2;32868:7;32841:39;;;;;;;;;;;;:16;:39::i;:::-;32703:185;;;:::o;44108:233::-;44183:7;44219:30;:28;:30::i;:::-;44211:5;:38;44203:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44316:10;44327:5;44316:17;;;;;;;;:::i;:::-;;;;;;;;;;44309:24;;44108:233;;;:::o;29678:239::-;29750:7;29770:13;29786:7;:16;29794:7;29786:16;;;;;;;;;;;;;;;;;;;;;29770:32;;29838:1;29821:19;;:5;:19;;;;29813:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29904:5;29897:12;;;29678:239;;;:::o;29408:208::-;29480:7;29525:1;29508:19;;:5;:19;;;;29500:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29592:9;:16;29602:5;29592:16;;;;;;;;;;;;;;;;29585:23;;29408:208;;;:::o;8954:103::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9019:30:::1;9046:1;9019:18;:30::i;:::-;8954:103::o:0;50536:26::-;;;;;;;;;;;;;:::o;50636:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8303:87::-;8349:7;8376:6;;;;;;;;;;;8369:13;;8303:87;:::o;30153:104::-;30209:13;30242:7;30235:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30153:104;:::o;52738:91::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52812:11:::1;52803:6;:20;;;;52738:91:::0;:::o;31836:155::-;31931:52;31950:12;:10;:12::i;:::-;31964:8;31974;31931:18;:52::i;:::-;31836:155;;:::o;52468:121::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52566:17:::1;52551:12;:32;;;;;;;;;;;;:::i;:::-;;52468:121:::0;:::o;32959:328::-;33134:41;33153:12;:10;:12::i;:::-;33167:7;33134:18;:41::i;:::-;33126:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33240:39;33254:4;33260:2;33264:7;33273:5;33240:13;:39::i;:::-;32959:328;;;;:::o;50567:31::-;;;;:::o;50603:28::-;;;;:::o;52039:367::-;52113:13;52143:17;52151:8;52143:7;:17::i;:::-;52135:26;;;;;;52183:5;52173:15;;:6;;;;;;;;;;;:15;;;52170:60;;;52206:16;52199:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52170:60;52238:30;52271:10;:8;:10::i;:::-;52238:43;;52328:1;52301:16;52295:30;:34;:105;;;;;;;;;;;;;;;;;52356:16;52374:19;:8;:17;:19::i;:::-;52339:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52295:105;52288:112;;;52039:367;;;;:::o;51266:716::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;51357:5:::1;;;;;;;;;;;51356:6;51348:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;51403:21;51427:13;:11;:13::i;:::-;51403:37;;51470:1;51455:12;:16;51447:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51555:6;;51539:12;51523:13;:28;;;;:::i;:::-;:38;;51515:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51612:7;:5;:7::i;:::-;51598:21;;:10;:21;;;51594:174;;51654:1;51638:12;:17;;51630:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51725:12;51718:4;;:19;;;;:::i;:::-;51705:9;:32;;51697:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;51594:174;51776:21;51809:9:::0;51821:1:::1;51809:13;;51804:173;51829:12;51824:1;:17;51804:173;;51857:22;:10;:20;:22::i;:::-;51904:20;:10;:18;:20::i;:::-;51888:36;;51933;51943:10;51955:13;51933:9;:36::i;:::-;51843:3;;;;;:::i;:::-;;;;51804:173;;;;51341:641;;1768:1:::0;2722:7;:22;;;;51266:716;:::o;52937:100::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53014:17:::1;53005:6;;:26;;;;;;;;;;;;;;;;;;52937:100:::0;:::o;50506:25::-;;;;;;;;;;;;;:::o;32062:164::-;32159:4;32183:18;:25;32202:5;32183:25;;;;;;;;;;;;;;;:35;32209:8;32183:35;;;;;;;;;;;;;;;;;;;;;;;;;32176:42;;32062:164;;;;:::o;50667:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9212:201::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9321:1:::1;9301:22;;:8;:22;;;;9293:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9377:28;9396:8;9377:18;:28::i;:::-;9212:201:::0;:::o;3753:127::-;3860:1;3842:7;:14;;;:19;;;;;;;;;;;3753:127;:::o;3631:114::-;3696:7;3723;:14;;;3716:21;;3631:114;;;:::o;10591:387::-;10651:4;10859:12;10926:7;10914:20;10906:28;;10969:1;10962:4;:8;10955:15;;;10591:387;;;:::o;41346:126::-;;;;:::o;29039:305::-;29141:4;29193:25;29178:40;;;:11;:40;;;;:105;;;;29250:33;29235:48;;;:11;:48;;;;29178:105;:158;;;;29300:36;29324:11;29300:23;:36::i;:::-;29178:158;29158:178;;29039:305;;;:::o;34797:127::-;34862:4;34914:1;34886:30;;:7;:16;34894:7;34886:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34879:37;;34797:127;;;:::o;7027:98::-;7080:7;7107:10;7100:17;;7027:98;:::o;38779:174::-;38881:2;38854:15;:24;38870:7;38854:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38937:7;38933:2;38899:46;;38908:23;38923:7;38908:14;:23::i;:::-;38899:46;;;;;;;;;;;;38779:174;;:::o;35091:348::-;35184:4;35209:16;35217:7;35209;:16::i;:::-;35201:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35285:13;35301:23;35316:7;35301:14;:23::i;:::-;35285:39;;35354:5;35343:16;;:7;:16;;;:51;;;;35387:7;35363:31;;:20;35375:7;35363:11;:20::i;:::-;:31;;;35343:51;:87;;;;35398:32;35415:5;35422:7;35398:16;:32::i;:::-;35343:87;35335:96;;;35091:348;;;;:::o;38083:578::-;38242:4;38215:31;;:23;38230:7;38215:14;:23::i;:::-;:31;;;38207:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38325:1;38311:16;;:2;:16;;;;38303:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38381:39;38402:4;38408:2;38412:7;38381:20;:39::i;:::-;38485:29;38502:1;38506:7;38485:8;:29::i;:::-;38546:1;38527:9;:15;38537:4;38527:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38575:1;38558:9;:13;38568:2;38558:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38606:2;38587:7;:16;38595:7;38587:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38645:7;38641:2;38626:27;;38635:4;38626:27;;;;;;;;;;;;38083:578;;;:::o;9573:191::-;9647:16;9666:6;;;;;;;;;;;9647:25;;9692:8;9683:6;;:17;;;;;;;;;;;;;;;;;;9747:8;9716:40;;9737:8;9716:40;;;;;;;;;;;;9636:128;9573:191;:::o;39095:315::-;39250:8;39241:17;;:5;:17;;;;39233:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39337:8;39299:18;:25;39318:5;39299:25;;;;;;;;;;;;;;;:35;39325:8;39299:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39383:8;39361:41;;39376:5;39361:41;;;39393:8;39361:41;;;;;;:::i;:::-;;;;;;;;39095:315;;;:::o;34169:::-;34326:28;34336:4;34342:2;34346:7;34326:9;:28::i;:::-;34373:48;34396:4;34402:2;34406:7;34415:5;34373:22;:48::i;:::-;34365:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34169:315;;;;:::o;51106:107::-;51166:13;51195:12;51188:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51106:107;:::o;4589:723::-;4645:13;4875:1;4866:5;:10;4862:53;;;4893:10;;;;;;;;;;;;;;;;;;;;;4862:53;4925:12;4940:5;4925:20;;4956:14;4981:78;4996:1;4988:4;:9;4981:78;;5014:8;;;;;:::i;:::-;;;;5045:2;5037:10;;;;;:::i;:::-;;;4981:78;;;5069:19;5101:6;5091:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5069:39;;5119:154;5135:1;5126:5;:10;5119:154;;5163:1;5153:11;;;;;:::i;:::-;;;5230:2;5222:5;:10;;;;:::i;:::-;5209:2;:24;;;;:::i;:::-;5196:39;;5179:6;5186;5179:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5259:2;5250:11;;;;;:::i;:::-;;;5119:154;;;5297:6;5283:21;;;;;4589:723;;;;:::o;35781:110::-;35857:26;35867:2;35871:7;35857:26;;;;;;;;;;;;:9;:26::i;:::-;35781:110;;:::o;20735:157::-;20820:4;20859:25;20844:40;;;:11;:40;;;;20837:47;;20735:157;;;:::o;44954:589::-;45098:45;45125:4;45131:2;45135:7;45098:26;:45::i;:::-;45176:1;45160:18;;:4;:18;;;45156:187;;;45195:40;45227:7;45195:31;:40::i;:::-;45156:187;;;45265:2;45257:10;;:4;:10;;;45253:90;;45284:47;45317:4;45323:7;45284:32;:47::i;:::-;45253:90;45156:187;45371:1;45357:16;;:2;:16;;;45353:183;;;45390:45;45427:7;45390:36;:45::i;:::-;45353:183;;;45463:4;45457:10;;:2;:10;;;45453:83;;45484:40;45512:2;45516:7;45484:27;:40::i;:::-;45453:83;45353:183;44954:589;;;:::o;39975:799::-;40130:4;40151:15;:2;:13;;;:15::i;:::-;40147:620;;;40203:2;40187:36;;;40224:12;:10;:12::i;:::-;40238:4;40244:7;40253:5;40187:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40183:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40446:1;40429:6;:13;:18;40425:272;;;40472:60;;;;;;;;;;:::i;:::-;;;;;;;;40425:272;40647:6;40641:13;40632:6;40628:2;40624:15;40617:38;40183:529;40320:41;;;40310:51;;;:6;:51;;;;40303:58;;;;;40147:620;40751:4;40744:11;;39975:799;;;;;;;:::o;36118:321::-;36248:18;36254:2;36258:7;36248:5;:18::i;:::-;36299:54;36330:1;36334:2;36338:7;36347:5;36299:22;:54::i;:::-;36277:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36118:321;;;:::o;46266:164::-;46370:10;:17;;;;46343:15;:24;46359:7;46343:24;;;;;;;;;;;:44;;;;46398:10;46414:7;46398:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46266:164;:::o;47057:988::-;47323:22;47373:1;47348:22;47365:4;47348:16;:22::i;:::-;:26;;;;:::i;:::-;47323:51;;47385:18;47406:17;:26;47424:7;47406:26;;;;;;;;;;;;47385:47;;47553:14;47539:10;:28;47535:328;;47584:19;47606:12;:18;47619:4;47606:18;;;;;;;;;;;;;;;:34;47625:14;47606:34;;;;;;;;;;;;47584:56;;47690:11;47657:12;:18;47670:4;47657:18;;;;;;;;;;;;;;;:30;47676:10;47657:30;;;;;;;;;;;:44;;;;47807:10;47774:17;:30;47792:11;47774:30;;;;;;;;;;;:43;;;;47569:294;47535:328;47959:17;:26;47977:7;47959:26;;;;;;;;;;;47952:33;;;48003:12;:18;48016:4;48003:18;;;;;;;;;;;;;;;:34;48022:14;48003:34;;;;;;;;;;;47996:41;;;47138:907;;47057:988;;:::o;48340:1079::-;48593:22;48638:1;48618:10;:17;;;;:21;;;;:::i;:::-;48593:46;;48650:18;48671:15;:24;48687:7;48671:24;;;;;;;;;;;;48650:45;;49022:19;49044:10;49055:14;49044:26;;;;;;;;:::i;:::-;;;;;;;;;;49022:48;;49108:11;49083:10;49094;49083:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;49219:10;49188:15;:28;49204:11;49188:28;;;;;;;;;;;:41;;;;49360:15;:24;49376:7;49360:24;;;;;;;;;;;49353:31;;;49395:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48411:1008;;;48340:1079;:::o;45844:221::-;45929:14;45946:20;45963:2;45946:16;:20::i;:::-;45929:37;;46004:7;45977:12;:16;45990:2;45977:16;;;;;;;;;;;;;;;:24;45994:6;45977:24;;;;;;;;;;;:34;;;;46051:6;46022:17;:26;46040:7;46022:26;;;;;;;;;;;:35;;;;45918:147;45844:221;;:::o;36775:382::-;36869:1;36855:16;;:2;:16;;;;36847:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36928:16;36936:7;36928;:16::i;:::-;36927:17;36919:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36990:45;37019:1;37023:2;37027:7;36990:20;:45::i;:::-;37065:1;37048:9;:13;37058:2;37048:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37096:2;37077:7;:16;37085:7;37077:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37141:7;37137:2;37116:33;;37133:1;37116:33;;;;;;;;;;;;36775:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:116::-;5008:21;5023:5;5008:21;:::i;:::-;5001:5;4998:32;4988:60;;5044:1;5041;5034:12;4988:60;4938:116;:::o;5060:133::-;5103:5;5141:6;5128:20;5119:29;;5157:30;5181:5;5157:30;:::i;:::-;5060:133;;;;:::o;5199:323::-;5255:6;5304:2;5292:9;5283:7;5279:23;5275:32;5272:119;;;5310:79;;:::i;:::-;5272:119;5430:1;5455:50;5497:7;5488:6;5477:9;5473:22;5455:50;:::i;:::-;5445:60;;5401:114;5199:323;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:117::-;6614:1;6611;6604:12;6628:117;6737:1;6734;6727:12;6751:180;6799:77;6796:1;6789:88;6896:4;6893:1;6886:15;6920:4;6917:1;6910:15;6937:281;7020:27;7042:4;7020:27;:::i;:::-;7012:6;7008:40;7150:6;7138:10;7135:22;7114:18;7102:10;7099:34;7096:62;7093:88;;;7161:18;;:::i;:::-;7093:88;7201:10;7197:2;7190:22;6980:238;6937:281;;:::o;7224:129::-;7258:6;7285:20;;:::i;:::-;7275:30;;7314:33;7342:4;7334:6;7314:33;:::i;:::-;7224:129;;;:::o;7359:308::-;7421:4;7511:18;7503:6;7500:30;7497:56;;;7533:18;;:::i;:::-;7497:56;7571:29;7593:6;7571:29;:::i;:::-;7563:37;;7655:4;7649;7645:15;7637:23;;7359:308;;;:::o;7673:154::-;7757:6;7752:3;7747;7734:30;7819:1;7810:6;7805:3;7801:16;7794:27;7673:154;;;:::o;7833:412::-;7911:5;7936:66;7952:49;7994:6;7952:49;:::i;:::-;7936:66;:::i;:::-;7927:75;;8025:6;8018:5;8011:21;8063:4;8056:5;8052:16;8101:3;8092:6;8087:3;8083:16;8080:25;8077:112;;;8108:79;;:::i;:::-;8077:112;8198:41;8232:6;8227:3;8222;8198:41;:::i;:::-;7917:328;7833:412;;;;;:::o;8265:340::-;8321:5;8370:3;8363:4;8355:6;8351:17;8347:27;8337:122;;8378:79;;:::i;:::-;8337:122;8495:6;8482:20;8520:79;8595:3;8587:6;8580:4;8572:6;8568:17;8520:79;:::i;:::-;8511:88;;8327:278;8265:340;;;;:::o;8611:509::-;8680:6;8729:2;8717:9;8708:7;8704:23;8700:32;8697:119;;;8735:79;;:::i;:::-;8697:119;8883:1;8872:9;8868:17;8855:31;8913:18;8905:6;8902:30;8899:117;;;8935:79;;:::i;:::-;8899:117;9040:63;9095:7;9086:6;9075:9;9071:22;9040:63;:::i;:::-;9030:73;;8826:287;8611:509;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:180::-;12498:77;12495:1;12488:88;12595:4;12592:1;12585:15;12619:4;12616:1;12609:15;12636:320;12680:6;12717:1;12711:4;12707:12;12697:22;;12764:1;12758:4;12754:12;12785:18;12775:81;;12841:4;12833:6;12829:17;12819:27;;12775:81;12903:2;12895:6;12892:14;12872:18;12869:38;12866:84;;;12922:18;;:::i;:::-;12866:84;12687:269;12636:320;;;:::o;12962:231::-;13102:34;13098:1;13090:6;13086:14;13079:58;13171:14;13166:2;13158:6;13154:15;13147:39;12962:231;:::o;13199:366::-;13341:3;13362:67;13426:2;13421:3;13362:67;:::i;:::-;13355:74;;13438:93;13527:3;13438:93;:::i;:::-;13556:2;13551:3;13547:12;13540:19;;13199:366;;;:::o;13571:419::-;13737:4;13775:2;13764:9;13760:18;13752:26;;13824:9;13818:4;13814:20;13810:1;13799:9;13795:17;13788:47;13852:131;13978:4;13852:131;:::i;:::-;13844:139;;13571:419;;;:::o;13996:220::-;14136:34;14132:1;14124:6;14120:14;14113:58;14205:3;14200:2;14192:6;14188:15;14181:28;13996:220;:::o;14222:366::-;14364:3;14385:67;14449:2;14444:3;14385:67;:::i;:::-;14378:74;;14461:93;14550:3;14461:93;:::i;:::-;14579:2;14574:3;14570:12;14563:19;;14222:366;;;:::o;14594:419::-;14760:4;14798:2;14787:9;14783:18;14775:26;;14847:9;14841:4;14837:20;14833:1;14822:9;14818:17;14811:47;14875:131;15001:4;14875:131;:::i;:::-;14867:139;;14594:419;;;:::o;15019:243::-;15159:34;15155:1;15147:6;15143:14;15136:58;15228:26;15223:2;15215:6;15211:15;15204:51;15019:243;:::o;15268:366::-;15410:3;15431:67;15495:2;15490:3;15431:67;:::i;:::-;15424:74;;15507:93;15596:3;15507:93;:::i;:::-;15625:2;15620:3;15616:12;15609:19;;15268:366;;;:::o;15640:419::-;15806:4;15844:2;15833:9;15829:18;15821:26;;15893:9;15887:4;15883:20;15879:1;15868:9;15864:17;15857:47;15921:131;16047:4;15921:131;:::i;:::-;15913:139;;15640:419;;;:::o;16065:182::-;16205:34;16201:1;16193:6;16189:14;16182:58;16065:182;:::o;16253:366::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:419::-;16791:4;16829:2;16818:9;16814:18;16806:26;;16878:9;16872:4;16868:20;16864:1;16853:9;16849:17;16842:47;16906:131;17032:4;16906:131;:::i;:::-;16898:139;;16625:419;;;:::o;17050:180::-;17098:77;17095:1;17088:88;17195:4;17192:1;17185:15;17219:4;17216:1;17209:15;17236:348;17276:7;17299:20;17317:1;17299:20;:::i;:::-;17294:25;;17333:20;17351:1;17333:20;:::i;:::-;17328:25;;17521:1;17453:66;17449:74;17446:1;17443:81;17438:1;17431:9;17424:17;17420:105;17417:131;;;17528:18;;:::i;:::-;17417:131;17576:1;17573;17569:9;17558:20;;17236:348;;;;:::o;17590:180::-;17638:77;17635:1;17628:88;17735:4;17732:1;17725:15;17759:4;17756:1;17749:15;17776:185;17816:1;17833:20;17851:1;17833:20;:::i;:::-;17828:25;;17867:20;17885:1;17867:20;:::i;:::-;17862:25;;17906:1;17896:35;;17911:18;;:::i;:::-;17896:35;17953:1;17950;17946:9;17941:14;;17776:185;;;;:::o;17967:236::-;18107:34;18103:1;18095:6;18091:14;18084:58;18176:19;18171:2;18163:6;18159:15;18152:44;17967:236;:::o;18209:366::-;18351:3;18372:67;18436:2;18431:3;18372:67;:::i;:::-;18365:74;;18448:93;18537:3;18448:93;:::i;:::-;18566:2;18561:3;18557:12;18550:19;;18209:366;;;:::o;18581:419::-;18747:4;18785:2;18774:9;18770:18;18762:26;;18834:9;18828:4;18824:20;18820:1;18809:9;18805:17;18798:47;18862:131;18988:4;18862:131;:::i;:::-;18854:139;;18581:419;;;:::o;19006:230::-;19146:34;19142:1;19134:6;19130:14;19123:58;19215:13;19210:2;19202:6;19198:15;19191:38;19006:230;:::o;19242:366::-;19384:3;19405:67;19469:2;19464:3;19405:67;:::i;:::-;19398:74;;19481:93;19570:3;19481:93;:::i;:::-;19599:2;19594:3;19590:12;19583:19;;19242:366;;;:::o;19614:419::-;19780:4;19818:2;19807:9;19803:18;19795:26;;19867:9;19861:4;19857:20;19853:1;19842:9;19838:17;19831:47;19895:131;20021:4;19895:131;:::i;:::-;19887:139;;19614:419;;;:::o;20039:231::-;20179:34;20175:1;20167:6;20163:14;20156:58;20248:14;20243:2;20235:6;20231:15;20224:39;20039:231;:::o;20276:366::-;20418:3;20439:67;20503:2;20498:3;20439:67;:::i;:::-;20432:74;;20515:93;20604:3;20515:93;:::i;:::-;20633:2;20628:3;20624:12;20617:19;;20276:366;;;:::o;20648:419::-;20814:4;20852:2;20841:9;20837:18;20829:26;;20901:9;20895:4;20891:20;20887:1;20876:9;20872:17;20865:47;20929:131;21055:4;20929:131;:::i;:::-;20921:139;;20648:419;;;:::o;21073:180::-;21121:77;21118:1;21111:88;21218:4;21215:1;21208:15;21242:4;21239:1;21232:15;21259:228;21399:34;21395:1;21387:6;21383:14;21376:58;21468:11;21463:2;21455:6;21451:15;21444:36;21259:228;:::o;21493:366::-;21635:3;21656:67;21720:2;21715:3;21656:67;:::i;:::-;21649:74;;21732:93;21821:3;21732:93;:::i;:::-;21850:2;21845:3;21841:12;21834:19;;21493:366;;;:::o;21865:419::-;22031:4;22069:2;22058:9;22054:18;22046:26;;22118:9;22112:4;22108:20;22104:1;22093:9;22089:17;22082:47;22146:131;22272:4;22146:131;:::i;:::-;22138:139;;21865:419;;;:::o;22290:229::-;22430:34;22426:1;22418:6;22414:14;22407:58;22499:12;22494:2;22486:6;22482:15;22475:37;22290:229;:::o;22525:366::-;22667:3;22688:67;22752:2;22747:3;22688:67;:::i;:::-;22681:74;;22764:93;22853:3;22764:93;:::i;:::-;22882:2;22877:3;22873:12;22866:19;;22525:366;;;:::o;22897:419::-;23063:4;23101:2;23090:9;23086:18;23078:26;;23150:9;23144:4;23140:20;23136:1;23125:9;23121:17;23114:47;23178:131;23304:4;23178:131;:::i;:::-;23170:139;;22897:419;;;:::o;23322:148::-;23424:11;23461:3;23446:18;;23322:148;;;;:::o;23476:377::-;23582:3;23610:39;23643:5;23610:39;:::i;:::-;23665:89;23747:6;23742:3;23665:89;:::i;:::-;23658:96;;23763:52;23808:6;23803:3;23796:4;23789:5;23785:16;23763:52;:::i;:::-;23840:6;23835:3;23831:16;23824:23;;23586:267;23476:377;;;;:::o;23859:435::-;24039:3;24061:95;24152:3;24143:6;24061:95;:::i;:::-;24054:102;;24173:95;24264:3;24255:6;24173:95;:::i;:::-;24166:102;;24285:3;24278:10;;23859:435;;;;;:::o;24300:181::-;24440:33;24436:1;24428:6;24424:14;24417:57;24300:181;:::o;24487:366::-;24629:3;24650:67;24714:2;24709:3;24650:67;:::i;:::-;24643:74;;24726:93;24815:3;24726:93;:::i;:::-;24844:2;24839:3;24835:12;24828:19;;24487:366;;;:::o;24859:419::-;25025:4;25063:2;25052:9;25048:18;25040:26;;25112:9;25106:4;25102:20;25098:1;25087:9;25083:17;25076:47;25140:131;25266:4;25140:131;:::i;:::-;25132:139;;24859:419;;;:::o;25284:179::-;25424:31;25420:1;25412:6;25408:14;25401:55;25284:179;:::o;25469:366::-;25611:3;25632:67;25696:2;25691:3;25632:67;:::i;:::-;25625:74;;25708:93;25797:3;25708:93;:::i;:::-;25826:2;25821:3;25817:12;25810:19;;25469:366;;;:::o;25841:419::-;26007:4;26045:2;26034:9;26030:18;26022:26;;26094:9;26088:4;26084:20;26080:1;26069:9;26065:17;26058:47;26122:131;26248:4;26122:131;:::i;:::-;26114:139;;25841:419;;;:::o;26266:182::-;26406:34;26402:1;26394:6;26390:14;26383:58;26266:182;:::o;26454:366::-;26596:3;26617:67;26681:2;26676:3;26617:67;:::i;:::-;26610:74;;26693:93;26782:3;26693:93;:::i;:::-;26811:2;26806:3;26802:12;26795:19;;26454:366;;;:::o;26826:419::-;26992:4;27030:2;27019:9;27015:18;27007:26;;27079:9;27073:4;27069:20;27065:1;27054:9;27050:17;27043:47;27107:131;27233:4;27107:131;:::i;:::-;27099:139;;26826:419;;;:::o;27251:305::-;27291:3;27310:20;27328:1;27310:20;:::i;:::-;27305:25;;27344:20;27362:1;27344:20;:::i;:::-;27339:25;;27498:1;27430:66;27426:74;27423:1;27420:81;27417:107;;;27504:18;;:::i;:::-;27417:107;27548:1;27545;27541:9;27534:16;;27251:305;;;;:::o;27562:169::-;27702:21;27698:1;27690:6;27686:14;27679:45;27562:169;:::o;27737:366::-;27879:3;27900:67;27964:2;27959:3;27900:67;:::i;:::-;27893:74;;27976:93;28065:3;27976:93;:::i;:::-;28094:2;28089:3;28085:12;28078:19;;27737:366;;;:::o;28109:419::-;28275:4;28313:2;28302:9;28298:18;28290:26;;28362:9;28356:4;28352:20;28348:1;28337:9;28333:17;28326:47;28390:131;28516:4;28390:131;:::i;:::-;28382:139;;28109:419;;;:::o;28534:178::-;28674:30;28670:1;28662:6;28658:14;28651:54;28534:178;:::o;28718:366::-;28860:3;28881:67;28945:2;28940:3;28881:67;:::i;:::-;28874:74;;28957:93;29046:3;28957:93;:::i;:::-;29075:2;29070:3;29066:12;29059:19;;28718:366;;;:::o;29090:419::-;29256:4;29294:2;29283:9;29279:18;29271:26;;29343:9;29337:4;29333:20;29329:1;29318:9;29314:17;29307:47;29371:131;29497:4;29371:131;:::i;:::-;29363:139;;29090:419;;;:::o;29515:168::-;29655:20;29651:1;29643:6;29639:14;29632:44;29515:168;:::o;29689:366::-;29831:3;29852:67;29916:2;29911:3;29852:67;:::i;:::-;29845:74;;29928:93;30017:3;29928:93;:::i;:::-;30046:2;30041:3;30037:12;30030:19;;29689:366;;;:::o;30061:419::-;30227:4;30265:2;30254:9;30250:18;30242:26;;30314:9;30308:4;30304:20;30300:1;30289:9;30285:17;30278:47;30342:131;30468:4;30342:131;:::i;:::-;30334:139;;30061:419;;;:::o;30486:233::-;30525:3;30548:24;30566:5;30548:24;:::i;:::-;30539:33;;30594:66;30587:5;30584:77;30581:103;;;30664:18;;:::i;:::-;30581:103;30711:1;30704:5;30700:13;30693:20;;30486:233;;;:::o;30725:225::-;30865:34;30861:1;30853:6;30849:14;30842:58;30934:8;30929:2;30921:6;30917:15;30910:33;30725:225;:::o;30956:366::-;31098:3;31119:67;31183:2;31178:3;31119:67;:::i;:::-;31112:74;;31195:93;31284:3;31195:93;:::i;:::-;31313:2;31308:3;31304:12;31297:19;;30956:366;;;:::o;31328:419::-;31494:4;31532:2;31521:9;31517:18;31509:26;;31581:9;31575:4;31571:20;31567:1;31556:9;31552:17;31545:47;31609:131;31735:4;31609:131;:::i;:::-;31601:139;;31328:419;;;:::o;31753:231::-;31893:34;31889:1;31881:6;31877:14;31870:58;31962:14;31957:2;31949:6;31945:15;31938:39;31753:231;:::o;31990:366::-;32132:3;32153:67;32217:2;32212:3;32153:67;:::i;:::-;32146:74;;32229:93;32318:3;32229:93;:::i;:::-;32347:2;32342:3;32338:12;32331:19;;31990:366;;;:::o;32362:419::-;32528:4;32566:2;32555:9;32551:18;32543:26;;32615:9;32609:4;32605:20;32601:1;32590:9;32586:17;32579:47;32643:131;32769:4;32643:131;:::i;:::-;32635:139;;32362:419;;;:::o;32787:228::-;32927:34;32923:1;32915:6;32911:14;32904:58;32996:11;32991:2;32983:6;32979:15;32972:36;32787:228;:::o;33021:366::-;33163:3;33184:67;33248:2;33243:3;33184:67;:::i;:::-;33177:74;;33260:93;33349:3;33260:93;:::i;:::-;33378:2;33373:3;33369:12;33362:19;;33021:366;;;:::o;33393:419::-;33559:4;33597:2;33586:9;33582:18;33574:26;;33646:9;33640:4;33636:20;33632:1;33621:9;33617:17;33610:47;33674:131;33800:4;33674:131;:::i;:::-;33666:139;;33393:419;;;:::o;33818:223::-;33958:34;33954:1;33946:6;33942:14;33935:58;34027:6;34022:2;34014:6;34010:15;34003:31;33818:223;:::o;34047:366::-;34189:3;34210:67;34274:2;34269:3;34210:67;:::i;:::-;34203:74;;34286:93;34375:3;34286:93;:::i;:::-;34404:2;34399:3;34395:12;34388:19;;34047:366;;;:::o;34419:419::-;34585:4;34623:2;34612:9;34608:18;34600:26;;34672:9;34666:4;34662:20;34658:1;34647:9;34643:17;34636:47;34700:131;34826:4;34700:131;:::i;:::-;34692:139;;34419:419;;;:::o;34844:191::-;34884:4;34904:20;34922:1;34904:20;:::i;:::-;34899:25;;34938:20;34956:1;34938:20;:::i;:::-;34933:25;;34977:1;34974;34971:8;34968:34;;;34982:18;;:::i;:::-;34968:34;35027:1;35024;35020:9;35012:17;;34844:191;;;;:::o;35041:175::-;35181:27;35177:1;35169:6;35165:14;35158:51;35041:175;:::o;35222:366::-;35364:3;35385:67;35449:2;35444:3;35385:67;:::i;:::-;35378:74;;35461:93;35550:3;35461:93;:::i;:::-;35579:2;35574:3;35570:12;35563:19;;35222:366;;;:::o;35594:419::-;35760:4;35798:2;35787:9;35783:18;35775:26;;35847:9;35841:4;35837:20;35833:1;35822:9;35818:17;35811:47;35875:131;36001:4;35875:131;:::i;:::-;35867:139;;35594:419;;;:::o;36019:237::-;36159:34;36155:1;36147:6;36143:14;36136:58;36228:20;36223:2;36215:6;36211:15;36204:45;36019:237;:::o;36262:366::-;36404:3;36425:67;36489:2;36484:3;36425:67;:::i;:::-;36418:74;;36501:93;36590:3;36501:93;:::i;:::-;36619:2;36614:3;36610:12;36603:19;;36262:366;;;:::o;36634:419::-;36800:4;36838:2;36827:9;36823:18;36815:26;;36887:9;36881:4;36877:20;36873:1;36862:9;36858:17;36851:47;36915:131;37041:4;36915:131;:::i;:::-;36907:139;;36634:419;;;:::o;37059:176::-;37091:1;37108:20;37126:1;37108:20;:::i;:::-;37103:25;;37142:20;37160:1;37142:20;:::i;:::-;37137:25;;37181:1;37171:35;;37186:18;;:::i;:::-;37171:35;37227:1;37224;37220:9;37215:14;;37059:176;;;;:::o;37241:98::-;37292:6;37326:5;37320:12;37310:22;;37241:98;;;:::o;37345:168::-;37428:11;37462:6;37457:3;37450:19;37502:4;37497:3;37493:14;37478:29;;37345:168;;;;:::o;37519:360::-;37605:3;37633:38;37665:5;37633:38;:::i;:::-;37687:70;37750:6;37745:3;37687:70;:::i;:::-;37680:77;;37766:52;37811:6;37806:3;37799:4;37792:5;37788:16;37766:52;:::i;:::-;37843:29;37865:6;37843:29;:::i;:::-;37838:3;37834:39;37827:46;;37609:270;37519:360;;;;:::o;37885:640::-;38080:4;38118:3;38107:9;38103:19;38095:27;;38132:71;38200:1;38189:9;38185:17;38176:6;38132:71;:::i;:::-;38213:72;38281:2;38270:9;38266:18;38257:6;38213:72;:::i;:::-;38295;38363:2;38352:9;38348:18;38339:6;38295:72;:::i;:::-;38414:9;38408:4;38404:20;38399:2;38388:9;38384:18;38377:48;38442:76;38513:4;38504:6;38442:76;:::i;:::-;38434:84;;37885:640;;;;;;;:::o;38531:141::-;38587:5;38618:6;38612:13;38603:22;;38634:32;38660:5;38634:32;:::i;:::-;38531:141;;;;:::o;38678:349::-;38747:6;38796:2;38784:9;38775:7;38771:23;38767:32;38764:119;;;38802:79;;:::i;:::-;38764:119;38922:1;38947:63;39002:7;38993:6;38982:9;38978:22;38947:63;:::i;:::-;38937:73;;38893:127;38678:349;;;;:::o;39033:180::-;39081:77;39078:1;39071:88;39178:4;39175:1;39168:15;39202:4;39199:1;39192:15;39219:182;39359:34;39355:1;39347:6;39343:14;39336:58;39219:182;:::o;39407:366::-;39549:3;39570:67;39634:2;39629:3;39570:67;:::i;:::-;39563:74;;39646:93;39735:3;39646:93;:::i;:::-;39764:2;39759:3;39755:12;39748:19;;39407:366;;;:::o;39779:419::-;39945:4;39983:2;39972:9;39968:18;39960:26;;40032:9;40026:4;40022:20;40018:1;40007:9;40003:17;39996:47;40060:131;40186:4;40060:131;:::i;:::-;40052:139;;39779:419;;;:::o;40204:178::-;40344:30;40340:1;40332:6;40328:14;40321:54;40204:178;:::o;40388:366::-;40530:3;40551:67;40615:2;40610:3;40551:67;:::i;:::-;40544:74;;40627:93;40716:3;40627:93;:::i;:::-;40745:2;40740:3;40736:12;40729:19;;40388:366;;;:::o;40760:419::-;40926:4;40964:2;40953:9;40949:18;40941:26;;41013:9;41007:4;41003:20;40999:1;40988:9;40984:17;40977:47;41041:131;41167:4;41041:131;:::i;:::-;41033:139;;40760:419;;;:::o

Swarm Source

ipfs://0deb9f7422f703e09313463cc151c6355f6db7be14bc68c92fb4fe8456742590
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.