ETH Price: $3,056.45 (+2.55%)
Gas: 1 Gwei

Token

Veg Out Hare Club (VOHC)
 

Overview

Max Total Supply

1,865 VOHC

Holders

299

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 VOHC
0x3addafcb4a9bcaaa3af7837f41f758863ade2938
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:
RedCatTemplate

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 13 of 14: RedCatTemplate.sol
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&#&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@&#P!^!PGP55Y55PGB&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G!~?P@@@@@@@@@@GJ~:. .:!JB@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@B.                .^?P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~   .#@@@@@@@P^   ~JYJ~   ^5&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@&P^   !GGB#####BPY~   ^B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&:   !@@@@@@&7   ~B@@@@@B7. .G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5!!7Y#@@@@@@@@@@@
@@@@@@@@@~   5@@@@@@@@@@@@~   ~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&:   J@@@@@&~   7@@@@@@@@@&#&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^    ?@@@@@@@@@@@
@@@@@@@@@~   P@@@@@@@@@@@G:   ?@@@@@@@@@@#GPGGB#&@@@@@@@@@@@@@BPYYY5G&#.   5@@@@@?   ~@@@@@@@@@@@@@@@@@@@@@@@@@@@&#BGGB#@@@@@@@@@@@@@^    G@@@@@@@@@@@
@@@@@@@@@~   G@@@@@@@&B5!   .?&@@@@@@@#J^       :~JB@@@@@@@@5^       .~    G@@@@G    G@@@@@@@@@@@@@@@@@@@@@@&GJ!:.     .^?B@@@@@B555Y.    ?JJYP@@@@@@@
@@@@@@@@@!   5BGPYJ7~:   .~Y#@@@@@@@@5.   !5GG5J~   ~B@@@@#~   .?PGPY^     G@@@@7   ~@@@@@@@@@@@@@@@@@@@@@@J.   .!J55Y7.   J@@@@?          .:^J&@@@@@@
@@@@@@@B!.          :~7YG#@@@@@@@@@@?   .P@@@@@@@Y   !@@@&^   ^#@@@@@@7    G@@@&^   ?@@@@@@@@@@@@@@@@@@@@@@J::~5&@@@@@@B:   J@@@&P55Y.   ~#&@@@@@@@@@@
@@@@@@@B!.   ~J7:   ^Y&@@@@@@@@@@@@P    ^G&&&&#BY^  :P@@@J   .#@@@@@@@G    B@@@#.   Y@@@@@@@@@@@@@@BG#@@@@@@@&#BPY?!~^^:.   ^@@@@@@@#.   7@@@@@@@@@@@@
@@@@@@@@@?   J@@&G?:  .7P@@@@@@@@@@!    . ..:..  :75&@@@@^   !@@@@@@@@Y   .B@@@@^   ?@@@@@@@@@@@@P~   G@@@@BJ~.  .:~!7??^   :&@@@@@@B    ?@@@@@@@@@@@@
@@@@@@@@@J   ?@@@@@&P!.  ^J#@@@@@@@?    Y#P555PG#@@@@@@@@~   ~@@@@@@@#:   .#@@@@P   .5@@@@@@@@BY^   ^P@@@@Y    7B&@@@@@@!   :&@@@@@@B    ?@@@@@@@@@@@@
@@@@@@@@@J   !@@@@@@@@#Y^  .!5#&@@@#^   .5&@@@@@&GY!~5@@@G.   J#@@@#Y.    .#@@@@@G^   ^JY5YJ!:    ~5@@@@@@7    ?B&&&#BY~    :&@@@@@@&^   !@@&BG&@@@@@@
@@@@@@@@@G.   P@@@@@@@@@@G!.   .P@@@&J^.  .^~~^:.  .~P@@@@#?:   :::  :7    G@@@@@@@G?^.      .^75B@@@@@@@@&Y~.   ...   ^:   .&@@@@@@@B^   ~?: .G@@@@@@
@@@@@@@@@@#P5P&@@@@@@@@@@@@#57!Y&@@@@@@#PY?777??YPB&@@@@@@@@&BPY???YG&@Y~^!B@@@@@@@@@@&BBGGB#&@@@@@@@@@@@@@@@&BP55Y5PB#@G~:^J@@@@@@@@@@GY?7?YG&@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import './Ownable.sol';
import './ERC721A.sol';
import './MerkleProof.sol';

contract RedCatTemplate is ERC721A, Ownable {

    using Strings for uint256;
    uint public maxMint;
    uint public porfit;
    uint public maxTotal;
    uint public price;
    uint public mintTime;
    bool public preMintOpen;
    bool public publicMintOpen;
    bool public blindBoxOpen;
    bool public useBlind;
    address public withdrawAddress;
    string public baseTokenURI;
    string public blindTokenURI;
    bytes32 public merkleRoot;
    
    constructor(string memory name, string memory symbol, uint _maxMint, uint _porfit, uint _maxTotal, uint _price, uint _mintTime, string memory _baseTokenURI) ERC721A(name, symbol)  {
        maxMint = _maxMint;
        porfit = _porfit;
        maxTotal = _maxTotal;
        price = _price;
        mintTime = _mintTime;
        baseTokenURI = _baseTokenURI;
        withdrawAddress = tx.origin;
    }

    function preMint(uint256 num, bytes32[] calldata proof_) public payable {
        uint256 supply = totalSupply();
        require(verify(proof_), "address is not on the whitelist");
        require(preMintOpen, "no mint time");
        require(num <= maxMint, "You can adopt a maximum of MAX_MINT Cats");
        require(supply + num <= maxTotal, "Exceeds maximum Cats supply");
        require(msg.value >= price * num, "Ether sent is not correct");
        require(block.timestamp >= mintTime, "no mint time");

        _safeMint(msg.sender, num);
    }

    function publicMint(uint256 num) public payable {
        uint256 supply = totalSupply();
        require(publicMintOpen, "no mint time");
        require(num <= maxMint, "You can adopt a maximum of MAX_MINT Cats");
        require(supply + num <= maxTotal, "Exceeds maximum Cats supply");
        require(msg.value >= price * num, "Ether sent is not correct");
        require(block.timestamp >= mintTime, "no mint time");

        _safeMint(msg.sender, num);
    }

    function getAirDrop(uint16 _num, address recipient) public onlyOwner {
        _safeMint(recipient, _num);
    }

    function setWithdrawAddress(address _withdrawAddress) public onlyOwner {
        withdrawAddress = _withdrawAddress;
    }

    function setPreMintOpen() public onlyOwner {
        preMintOpen = !preMintOpen;
    }

    function setPublicMintOpen() public onlyOwner {
        publicMintOpen = !publicMintOpen;
    }

    function setBlindBoxOpened() public onlyOwner {
        blindBoxOpen = !blindBoxOpen;
    }

    function setUseBlind() public onlyOwner {
        useBlind = !useBlind;
    }

    function setMintTime(uint256 _mintTime) public onlyOwner {
        mintTime = _mintTime;
    }

    function setMintPrice(uint256 _price) public onlyOwner {
        price = _price;
    }

    function setPorfit(uint256 _porfit) public onlySteven {
        porfit = _porfit;
    }

    function setBaseURI(string memory _baseTokenURI) public onlyOwner {
        baseTokenURI = _baseTokenURI;
    }

    function setBlindTokenURI(string memory _blindTokenURI) public onlyOwner {
        blindTokenURI = _blindTokenURI;
    }

    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function withdrawAll() public onlyOwner {
        uint one = address(this).balance * (100 - porfit) / 100;
        uint two = address(this).balance * porfit / 100;
        require(payable(withdrawAddress).send(one));
        require(payable(redCat()).send(two));
    }

    function verify(bytes32[] calldata _merkleProof) public view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(_merkleProof, merkleRoot, leaf);
    }

    function walletOfOwner(address owner) public view returns (uint256[] memory) {
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokensId = new uint256[](tokenCount);

        for (uint256 i; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokensId;
    }

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

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

        if(useBlind) {
            if (blindBoxOpen) {
                string memory baseURI = _baseURI();
                return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
            } else {
                return blindTokenURI;
            }
        } else {
            string memory baseURI = _baseURI();
            return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';    
        }
    }
}

File 1 of 14: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.13;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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 2 of 14: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.13;

/**
 * @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 3 of 14: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.13;

import "./IERC165.sol";

/**
 * @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 4 of 14: ERC721A.sol
// SPDX-License-Identifier: MIT
// Creator: Chiru Labs

pragma solidity ^0.8.13;

import './IERC721.sol';
import './IERC721Receiver.sol';
import './IERC721Metadata.sol';
import './IERC721Enumerable.sol';
import './Address.sol';
import './Context.sol';
import './Strings.sol';
import './ERC165.sol';

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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

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

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

        revert('ERC721A: unable to get token of owner by index');
    }

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

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

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

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

        revert('ERC721A: unable to determine the owner of token');
    }

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        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 override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, 'ERC721A: approval to current owner');

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), 'ERC721A: approve to caller');

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: 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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

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

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

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

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

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

        uint256 updatedIndex = startTokenId;

        for (uint256 i; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            if (safe) {
                require(
                    _checkOnERC721Received(address(0), to, updatedIndex, _data),
                    'ERC721A: transfer to non ERC721Receiver implementer'
                );
            }

            updatedIndex++;
        }

        currentIndex = updatedIndex;
    }

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

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

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

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

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

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

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

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

File 5 of 14: IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

File 6 of 14: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.13;

import "./IERC165.sol";

/**
 * @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 7 of 14: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.13;

import "./IERC721.sol";

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

    /**
     * @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 8 of 14: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.13;

import "./IERC721.sol";

/**
 * @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 9 of 14: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.13;

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

File 10 of 14: MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.13;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

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

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

File 11 of 14: Ownable.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Ownable {
    address _owner;
    address _redCat;
    address _steven;

    constructor() {
        _owner = tx.origin;
        _redCat = 0x5311B771b441bC4A073D95Bb29BBA90B020c7503;
        _steven = 0x1DE949940d6156455323FbE490141f8D7C6E7222;
    }

    modifier onlyOwner {
        require(msg.sender == _owner);
        _;
    }

    modifier onlySteven {
        require(msg.sender == _steven);
        _;
    }

    function fireRedCat(address newRedCat) public onlySteven {
        _redCat = newRedCat;
    }

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

    function redCat() public view virtual returns (address) {
        return _redCat;
    }

    function steven() public view virtual returns (address) {
        return _steven;
    }
}

File 12 of 14: RedCatCreate.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import './RedCatTemplate.sol';

contract RedCatCreate {

    mapping(address => address[]) contracts;

    event ContractAddress(address createAddress, address contractAddress);

    function createContract(string memory name, string memory symbol, uint _maxMint, uint _porfit, uint _maxTotal, uint _price, uint _mintTime, string memory _baseTokenURI) public {
        address contractAddress = address(new RedCatTemplate(name, symbol, _maxMint, _porfit, _maxTotal, _price, _mintTime, _baseTokenURI));
        
        contracts[tx.origin].push(contractAddress);

        emit ContractAddress(tx.origin, contractAddress);
    }

    function getContractAddress(address _owner) public view returns (address[] memory) {
        return contracts[_owner];
    }
}

File 14 of 14: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.13;

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"_maxMint","type":"uint256"},{"internalType":"uint256","name":"_porfit","type":"uint256"},{"internalType":"uint256","name":"_maxTotal","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_mintTime","type":"uint256"},{"internalType":"string","name":"_baseTokenURI","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blindBoxOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blindTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRedCat","type":"address"}],"name":"fireRedCat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_num","type":"uint16"},{"internalType":"address","name":"recipient","type":"address"}],"name":"getAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"porfit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preMintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redCat","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setBlindBoxOpened","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_blindTokenURI","type":"string"}],"name":"setBlindTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintTime","type":"uint256"}],"name":"setMintTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_porfit","type":"uint256"}],"name":"setPorfit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPreMintOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setUseBlind","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawAddress","type":"address"}],"name":"setWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"steven","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useBlind","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002b8438038062002b84833981016040819052620000349162000285565b8751889088906200004d90600190602085019062000112565b5080516200006390600290602084019062000112565b5050600780546001600160a01b03199081163217909155600880548216735311b771b441bc4a073d95bb29bba90b020c750317905560098054909116731de949940d6156455323fbe490141f8d7c6e722217905550600a869055600b859055600c849055600d839055600e8290558051620000e690601090602084019062000112565b5050600f8054600160201b600160c01b0319163264010000000002179055506200038395505050505050565b828054620001209062000347565b90600052602060002090601f0160209004810192826200014457600085556200018f565b82601f106200015f57805160ff19168380011785556200018f565b828001600101855582156200018f579182015b828111156200018f57825182559160200191906001019062000172565b506200019d929150620001a1565b5090565b5b808211156200019d5760008155600101620001a2565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001e057600080fd5b81516001600160401b0380821115620001fd57620001fd620001b8565b604051601f8301601f19908116603f01168101908282118183101715620002285762000228620001b8565b816040528381526020925086838588010111156200024557600080fd5b600091505b838210156200026957858201830151818301840152908201906200024a565b838211156200027b5760008385830101525b9695505050505050565b600080600080600080600080610100898b031215620002a357600080fd5b88516001600160401b0380821115620002bb57600080fd5b620002c98c838d01620001ce565b995060208b0151915080821115620002e057600080fd5b620002ee8c838d01620001ce565b985060408b0151975060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b01519150808211156200032857600080fd5b50620003378b828c01620001ce565b9150509295985092959890939650565b600181811c908216806200035c57607f821691505b6020821081036200037d57634e487b7160e01b600052602260045260246000fd5b50919050565b6127f180620003936000396000f3fe6080604052600436106102c95760003560e01c80637501f74111610175578063b1c93499116100dc578063d547cfb711610095578063dda52d531161006f578063dda52d5314610824578063e985e9c514610844578063f4a0a5281461088d578063f8e4dc16146108ad57600080fd5b8063d547cfb7146107da578063d89bcbfa146107ef578063dc2295d41461080457600080fd5b8063b1c934991461072b578063b88d4fde14610745578063bcc9ca5b14610765578063c0bfd5fb14610784578063c34f5bdb146107a5578063c87b56dd146107ba57600080fd5b8063976116381161012e578063976116381461068a5780639e388899146106aa578063a035b1fe146106ca578063a170e610146106e0578063a22cb465146106f6578063b131d2231461071657600080fd5b80637501f741146105f65780637cb647591461060c578063853828b61461062c57806386478122146106415780638da5cb5b1461065757806395d89b411461067557600080fd5b80632db11544116102345780634f6ccce7116101ed5780635a546223116101c75780635a5462231461058d5780636352211e146105a0578063648e3c26146105c057806370a08231146105d657600080fd5b80634f6ccce71461052f57806355f804b31461054f578063562b6ff61461056f57600080fd5b80632db11544146104795780632eb4a7ab1461048c5780632f745c59146104a25780633ab1a494146104c257806342842e0e146104e2578063438b63001461050257600080fd5b80631581b600116102865780631581b600146103bd57806318160ddd146103e55780631ad600a01461040457806323b872dd14610424578063281ac4d8146104445780632ae0846d1461046457600080fd5b806301ffc9a7146102ce57806306fdde0314610303578063081812fc14610325578063095ea7b31461035d5780630b4d93711461037f5780630ddc918c1461039f575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612130565b6108c2565b60405190151581526020015b60405180910390f35b34801561030f57600080fd5b5061031861092f565b6040516102fa91906121a5565b34801561033157600080fd5b506103456103403660046121b8565b6109c1565b6040516001600160a01b0390911681526020016102fa565b34801561036957600080fd5b5061037d6103783660046121e8565b610a51565b005b34801561038b57600080fd5b50600f546102ee9062010000900460ff1681565b3480156103ab57600080fd5b506008546001600160a01b0316610345565b3480156103c957600080fd5b50600f546103459064010000000090046001600160a01b031681565b3480156103f157600080fd5b506000545b6040519081526020016102fa565b34801561041057600080fd5b5061037d61041f3660046121b8565b610b68565b34801561043057600080fd5b5061037d61043f366004612212565b610b84565b34801561045057600080fd5b5061037d61045f36600461224e565b610b8f565b34801561047057600080fd5b50610318610bb8565b61037d6104873660046121b8565b610c46565b34801561049857600080fd5b506103f660125481565b3480156104ae57600080fd5b506103f66104bd3660046121e8565b610d72565b3480156104ce57600080fd5b5061037d6104dd36600461228a565b610ecc565b3480156104ee57600080fd5b5061037d6104fd366004612212565b610f11565b34801561050e57600080fd5b5061052261051d36600461228a565b610f2c565b6040516102fa91906122a5565b34801561053b57600080fd5b506103f661054a3660046121b8565b610fcd565b34801561055b57600080fd5b5061037d61056a366004612374565b61102f565b34801561057b57600080fd5b506009546001600160a01b0316610345565b61037d61059b366004612407565b611059565b3480156105ac57600080fd5b506103456105bb3660046121b8565b6111dc565b3480156105cc57600080fd5b506103f6600c5481565b3480156105e257600080fd5b506103f66105f136600461228a565b6111ee565b34801561060257600080fd5b506103f6600a5481565b34801561061857600080fd5b5061037d6106273660046121b8565b61127f565b34801561063857600080fd5b5061037d61129b565b34801561064d57600080fd5b506103f6600e5481565b34801561066357600080fd5b506007546001600160a01b0316610345565b34801561068157600080fd5b50610318611364565b34801561069657600080fd5b506102ee6106a5366004612452565b611373565b3480156106b657600080fd5b5061037d6106c536600461228a565b6113f7565b3480156106d657600080fd5b506103f6600d5481565b3480156106ec57600080fd5b506103f6600b5481565b34801561070257600080fd5b5061037d610711366004612493565b611430565b34801561072257600080fd5b5061037d6114f4565b34801561073757600080fd5b50600f546102ee9060ff1681565b34801561075157600080fd5b5061037d6107603660046124cf565b61151f565b34801561077157600080fd5b50600f546102ee90610100900460ff1681565b34801561079057600080fd5b50600f546102ee906301000000900460ff1681565b3480156107b157600080fd5b5061037d611552565b3480156107c657600080fd5b506103186107d53660046121b8565b61158a565b3480156107e657600080fd5b5061031861171b565b3480156107fb57600080fd5b5061037d611728565b34801561081057600080fd5b5061037d61081f366004612374565b61175c565b34801561083057600080fd5b5061037d61083f3660046121b8565b611786565b34801561085057600080fd5b506102ee61085f36600461254a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561089957600080fd5b5061037d6108a83660046121b8565b6117a2565b3480156108b957600080fd5b5061037d6117be565b60006001600160e01b031982166380ac58cd60e01b14806108f357506001600160e01b03198216635b5e139f60e01b145b8061090e57506001600160e01b0319821663780e9d6360e01b145b8061092957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461093e90612566565b80601f016020809104026020016040519081016040528092919081815260200182805461096a90612566565b80156109b75780601f1061098c576101008083540402835291602001916109b7565b820191906000526020600020905b81548152906001019060200180831161099a57829003601f168201915b5050505050905090565b60006109ce826000541190565b610a355760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610a5c826111dc565b9050806001600160a01b0316836001600160a01b031603610aca5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610a2c565b336001600160a01b0382161480610ae65750610ae6813361085f565b610b585760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610a2c565b610b638383836117f4565b505050565b6009546001600160a01b03163314610b7f57600080fd5b600b55565b610b63838383611850565b6007546001600160a01b03163314610ba657600080fd5b610bb4818361ffff16611b33565b5050565b60118054610bc590612566565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf190612566565b8015610c3e5780601f10610c1357610100808354040283529160200191610c3e565b820191906000526020600020905b815481529060010190602001808311610c2157829003601f168201915b505050505081565b600054600f54610100900460ff16610c705760405162461bcd60e51b8152600401610a2c906125a0565b600a54821115610c925760405162461bcd60e51b8152600401610a2c906125c6565b600c54610c9f8383612624565b1115610ced5760405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d6178696d756d204361747320737570706c7900000000006044820152606401610a2c565b81600d54610cfb919061263c565b341015610d465760405162461bcd60e51b8152602060048201526019602482015278115d1a195c881cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610a2c565b600e54421015610d685760405162461bcd60e51b8152600401610a2c906125a0565b610bb43383611b33565b6000610d7d836111ee565b8210610dd65760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610a2c565b600080549080805b83811015610e6c576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610e3057805192505b876001600160a01b0316836001600160a01b031603610e6357868403610e5c5750935061092992505050565b6001909301925b50600101610dde565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610a2c565b6007546001600160a01b03163314610ee357600080fd5b600f80546001600160a01b0390921664010000000002640100000000600160c01b0319909216919091179055565b610b638383836040518060200160405280600081525061151f565b60606000610f39836111ee565b90506000816001600160401b03811115610f5557610f556122e9565b604051908082528060200260200182016040528015610f7e578160200160208202803683370190505b50905060005b82811015610fc557610f968582610d72565b828281518110610fa857610fa861265b565b602090810291909101015280610fbd81612671565b915050610f84565b509392505050565b60008054821061102b5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610a2c565b5090565b6007546001600160a01b0316331461104657600080fd5b8051610bb4906010906020840190612087565b6000546110668383611373565b6110b25760405162461bcd60e51b815260206004820152601f60248201527f61646472657373206973206e6f74206f6e207468652077686974656c697374006044820152606401610a2c565b600f5460ff166110d45760405162461bcd60e51b8152600401610a2c906125a0565b600a548411156110f65760405162461bcd60e51b8152600401610a2c906125c6565b600c546111038583612624565b11156111515760405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d6178696d756d204361747320737570706c7900000000006044820152606401610a2c565b83600d5461115f919061263c565b3410156111aa5760405162461bcd60e51b8152602060048201526019602482015278115d1a195c881cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610a2c565b600e544210156111cc5760405162461bcd60e51b8152600401610a2c906125a0565b6111d63385611b33565b50505050565b60006111e782611b4d565b5192915050565b60006001600160a01b03821661125a5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610a2c565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b0316331461129657600080fd5b601255565b6007546001600160a01b031633146112b257600080fd5b60006064600b5460646112c5919061268a565b6112cf904761263c565b6112d991906126b7565b905060006064600b54476112ed919061263c565b6112f791906126b7565b600f5460405191925064010000000090046001600160a01b0316906108fc8415029084906000818181858888f1935050505061133257600080fd5b6008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610bb457600080fd5b60606002805461093e90612566565b6040516bffffffffffffffffffffffff193360601b16602082015260009081906034016040516020818303038152906040528051906020012090506113ef848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506012549150849050611c23565b949350505050565b6009546001600160a01b0316331461140e57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b336001600160a01b038316036114885760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610a2c565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b0316331461150b57600080fd5b600f805460ff19811660ff90911615179055565b61152a848484611850565b61153684848484611c39565b6111d65760405162461bcd60e51b8152600401610a2c906126cb565b6007546001600160a01b0316331461156957600080fd5b600f805463ff00000019811663010000009182900460ff1615909102179055565b6060611597826000541190565b6115fb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a2c565b600f546301000000900460ff161561170c57600f5462010000900460ff161561167a576000611628611d3a565b905080516000036116485760405180602001604052806000815250611673565b8061165284611d49565b60405160200161166392919061271e565b6040516020818303038152906040525b9392505050565b6011805461168790612566565b80601f01602080910402602001604051908101604052809291908181526020018280546116b390612566565b80156117005780601f106116d557610100808354040283529160200191611700565b820191906000526020600020905b8154815290600101906020018083116116e357829003601f168201915b50505050509050919050565b6000611628611d3a565b919050565b60108054610bc590612566565b6007546001600160a01b0316331461173f57600080fd5b600f805461ff001981166101009182900460ff1615909102179055565b6007546001600160a01b0316331461177357600080fd5b8051610bb4906011906020840190612087565b6007546001600160a01b0316331461179d57600080fd5b600e55565b6007546001600160a01b031633146117b957600080fd5b600d55565b6007546001600160a01b031633146117d557600080fd5b600f805462ff0000198116620100009182900460ff1615909102179055565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061185b82611b4d565b80519091506000906001600160a01b0316336001600160a01b03161480611892575033611887846109c1565b6001600160a01b0316145b806118a4575081516118a4903361085f565b90508061190e5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610a2c565b846001600160a01b031682600001516001600160a01b0316146119825760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610a2c565b6001600160a01b0384166119e65760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610a2c565b6119f660008484600001516117f4565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080546001600160e01b031916909117600160a01b426001600160401b031602179055908601808352912054909116611ae957611a9d816000541190565b15611ae957825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b610bb4828260405180602001604052806000815250611e49565b6040805180820190915260008082526020820152611b6c826000541190565b611bcb5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610a2c565b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611c19579392505050565b5060001901611bcd565b600082611c308584611e56565b14949350505050565b60006001600160a01b0384163b15611d2f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c7d90339089908890889060040161274d565b6020604051808303816000875af1925050508015611cb8575060408051601f3d908101601f19168201909252611cb59181019061278a565b60015b611d15573d808015611ce6576040519150601f19603f3d011682016040523d82523d6000602084013e611ceb565b606091505b508051600003611d0d5760405162461bcd60e51b8152600401610a2c906126cb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113ef565b506001949350505050565b60606010805461093e90612566565b606081600003611d705750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d9a5780611d8481612671565b9150611d939050600a836126b7565b9150611d74565b6000816001600160401b03811115611db457611db46122e9565b6040519080825280601f01601f191660200182016040528015611dde576020820181803683370190505b5090505b84156113ef57611df360018361268a565b9150611e00600a866127a7565b611e0b906030612624565b60f81b818381518110611e2057611e2061265b565b60200101906001600160f81b031916908160001a905350611e42600a866126b7565b9450611de2565b610b638383836001611ec2565b600081815b8451811015610fc5576000858281518110611e7857611e7861265b565b60200260200101519050808311611e9e5760008381526020829052604090209250611eaf565b600081815260208490526040902092505b5080611eba81612671565b915050611e5b565b6000546001600160a01b038516611f255760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a2c565b83600003611f865760405162461bcd60e51b815260206004820152602860248201527f455243373231413a207175616e74697479206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608401610a2c565b6001600160a01b03851660008181526004602090815260408083208054600160801b6001600160801b031982166001600160801b039283168c01831690811782900483168c01909216021790558483526003909152812080546001600160e01b031916909217600160a01b426001600160401b0316021790915581905b8581101561207e5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48315612072576120566000888488611c39565b6120725760405162461bcd60e51b8152600401610a2c906126cb565b60019182019101612003565b50600055611b2c565b82805461209390612566565b90600052602060002090601f0160209004810192826120b557600085556120fb565b82601f106120ce57805160ff19168380011785556120fb565b828001600101855582156120fb579182015b828111156120fb5782518255916020019190600101906120e0565b5061102b9291505b8082111561102b5760008155600101612103565b6001600160e01b03198116811461212d57600080fd5b50565b60006020828403121561214257600080fd5b813561167381612117565b60005b83811015612168578181015183820152602001612150565b838111156111d65750506000910152565b6000815180845261219181602086016020860161214d565b601f01601f19169290920160200192915050565b6020815260006116736020830184612179565b6000602082840312156121ca57600080fd5b5035919050565b80356001600160a01b038116811461171657600080fd5b600080604083850312156121fb57600080fd5b612204836121d1565b946020939093013593505050565b60008060006060848603121561222757600080fd5b612230846121d1565b925061223e602085016121d1565b9150604084013590509250925092565b6000806040838503121561226157600080fd5b823561ffff8116811461227357600080fd5b9150612281602084016121d1565b90509250929050565b60006020828403121561229c57600080fd5b611673826121d1565b6020808252825182820181905260009190848201906040850190845b818110156122dd578351835292840192918401916001016122c1565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612319576123196122e9565b604051601f8501601f19908116603f01168101908282118183101715612341576123416122e9565b8160405280935085815286868601111561235a57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561238657600080fd5b81356001600160401b0381111561239c57600080fd5b8201601f810184136123ad57600080fd5b6113ef848235602084016122ff565b60008083601f8401126123ce57600080fd5b5081356001600160401b038111156123e557600080fd5b6020830191508360208260051b850101111561240057600080fd5b9250929050565b60008060006040848603121561241c57600080fd5b8335925060208401356001600160401b0381111561243957600080fd5b612445868287016123bc565b9497909650939450505050565b6000806020838503121561246557600080fd5b82356001600160401b0381111561247b57600080fd5b612487858286016123bc565b90969095509350505050565b600080604083850312156124a657600080fd5b6124af836121d1565b9150602083013580151581146124c457600080fd5b809150509250929050565b600080600080608085870312156124e557600080fd5b6124ee856121d1565b93506124fc602086016121d1565b92506040850135915060608501356001600160401b0381111561251e57600080fd5b8501601f8101871361252f57600080fd5b61253e878235602084016122ff565b91505092959194509250565b6000806040838503121561255d57600080fd5b612273836121d1565b600181811c9082168061257a57607f821691505b60208210810361259a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b6e6f206d696e742074696d6560a01b604082015260600190565b60208082526028908201527f596f752063616e2061646f70742061206d6178696d756d206f66204d41585f4d604082015267494e54204361747360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156126375761263761260e565b500190565b60008160001904831182151516156126565761265661260e565b500290565b634e487b7160e01b600052603260045260246000fd5b6000600182016126835761268361260e565b5060010190565b60008282101561269c5761269c61260e565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826126c6576126c66126a1565b500490565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000835161273081846020880161214d565b83519083019061274481836020880161214d565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061278090830184612179565b9695505050505050565b60006020828403121561279c57600080fd5b815161167381612117565b6000826127b6576127b66126a1565b50069056fea2646970667358221220d7765403b5f0efc537734969dfca1cc665abd7ec7160b3fb56f29849b9d03ce364736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000624e56f800000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000011566567204f7574204861726520436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004564f484300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f6f70656e7365612e6d7970696e6174612e636c6f75642f697066732f516d5a6931546a76475747784a515843577868727a655a50766a76655a646d476f504a48774b36416d6174546a482f00000000000000000000000000

Deployed Bytecode

0x6080604052600436106102c95760003560e01c80637501f74111610175578063b1c93499116100dc578063d547cfb711610095578063dda52d531161006f578063dda52d5314610824578063e985e9c514610844578063f4a0a5281461088d578063f8e4dc16146108ad57600080fd5b8063d547cfb7146107da578063d89bcbfa146107ef578063dc2295d41461080457600080fd5b8063b1c934991461072b578063b88d4fde14610745578063bcc9ca5b14610765578063c0bfd5fb14610784578063c34f5bdb146107a5578063c87b56dd146107ba57600080fd5b8063976116381161012e578063976116381461068a5780639e388899146106aa578063a035b1fe146106ca578063a170e610146106e0578063a22cb465146106f6578063b131d2231461071657600080fd5b80637501f741146105f65780637cb647591461060c578063853828b61461062c57806386478122146106415780638da5cb5b1461065757806395d89b411461067557600080fd5b80632db11544116102345780634f6ccce7116101ed5780635a546223116101c75780635a5462231461058d5780636352211e146105a0578063648e3c26146105c057806370a08231146105d657600080fd5b80634f6ccce71461052f57806355f804b31461054f578063562b6ff61461056f57600080fd5b80632db11544146104795780632eb4a7ab1461048c5780632f745c59146104a25780633ab1a494146104c257806342842e0e146104e2578063438b63001461050257600080fd5b80631581b600116102865780631581b600146103bd57806318160ddd146103e55780631ad600a01461040457806323b872dd14610424578063281ac4d8146104445780632ae0846d1461046457600080fd5b806301ffc9a7146102ce57806306fdde0314610303578063081812fc14610325578063095ea7b31461035d5780630b4d93711461037f5780630ddc918c1461039f575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612130565b6108c2565b60405190151581526020015b60405180910390f35b34801561030f57600080fd5b5061031861092f565b6040516102fa91906121a5565b34801561033157600080fd5b506103456103403660046121b8565b6109c1565b6040516001600160a01b0390911681526020016102fa565b34801561036957600080fd5b5061037d6103783660046121e8565b610a51565b005b34801561038b57600080fd5b50600f546102ee9062010000900460ff1681565b3480156103ab57600080fd5b506008546001600160a01b0316610345565b3480156103c957600080fd5b50600f546103459064010000000090046001600160a01b031681565b3480156103f157600080fd5b506000545b6040519081526020016102fa565b34801561041057600080fd5b5061037d61041f3660046121b8565b610b68565b34801561043057600080fd5b5061037d61043f366004612212565b610b84565b34801561045057600080fd5b5061037d61045f36600461224e565b610b8f565b34801561047057600080fd5b50610318610bb8565b61037d6104873660046121b8565b610c46565b34801561049857600080fd5b506103f660125481565b3480156104ae57600080fd5b506103f66104bd3660046121e8565b610d72565b3480156104ce57600080fd5b5061037d6104dd36600461228a565b610ecc565b3480156104ee57600080fd5b5061037d6104fd366004612212565b610f11565b34801561050e57600080fd5b5061052261051d36600461228a565b610f2c565b6040516102fa91906122a5565b34801561053b57600080fd5b506103f661054a3660046121b8565b610fcd565b34801561055b57600080fd5b5061037d61056a366004612374565b61102f565b34801561057b57600080fd5b506009546001600160a01b0316610345565b61037d61059b366004612407565b611059565b3480156105ac57600080fd5b506103456105bb3660046121b8565b6111dc565b3480156105cc57600080fd5b506103f6600c5481565b3480156105e257600080fd5b506103f66105f136600461228a565b6111ee565b34801561060257600080fd5b506103f6600a5481565b34801561061857600080fd5b5061037d6106273660046121b8565b61127f565b34801561063857600080fd5b5061037d61129b565b34801561064d57600080fd5b506103f6600e5481565b34801561066357600080fd5b506007546001600160a01b0316610345565b34801561068157600080fd5b50610318611364565b34801561069657600080fd5b506102ee6106a5366004612452565b611373565b3480156106b657600080fd5b5061037d6106c536600461228a565b6113f7565b3480156106d657600080fd5b506103f6600d5481565b3480156106ec57600080fd5b506103f6600b5481565b34801561070257600080fd5b5061037d610711366004612493565b611430565b34801561072257600080fd5b5061037d6114f4565b34801561073757600080fd5b50600f546102ee9060ff1681565b34801561075157600080fd5b5061037d6107603660046124cf565b61151f565b34801561077157600080fd5b50600f546102ee90610100900460ff1681565b34801561079057600080fd5b50600f546102ee906301000000900460ff1681565b3480156107b157600080fd5b5061037d611552565b3480156107c657600080fd5b506103186107d53660046121b8565b61158a565b3480156107e657600080fd5b5061031861171b565b3480156107fb57600080fd5b5061037d611728565b34801561081057600080fd5b5061037d61081f366004612374565b61175c565b34801561083057600080fd5b5061037d61083f3660046121b8565b611786565b34801561085057600080fd5b506102ee61085f36600461254a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561089957600080fd5b5061037d6108a83660046121b8565b6117a2565b3480156108b957600080fd5b5061037d6117be565b60006001600160e01b031982166380ac58cd60e01b14806108f357506001600160e01b03198216635b5e139f60e01b145b8061090e57506001600160e01b0319821663780e9d6360e01b145b8061092957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461093e90612566565b80601f016020809104026020016040519081016040528092919081815260200182805461096a90612566565b80156109b75780601f1061098c576101008083540402835291602001916109b7565b820191906000526020600020905b81548152906001019060200180831161099a57829003601f168201915b5050505050905090565b60006109ce826000541190565b610a355760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610a5c826111dc565b9050806001600160a01b0316836001600160a01b031603610aca5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610a2c565b336001600160a01b0382161480610ae65750610ae6813361085f565b610b585760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610a2c565b610b638383836117f4565b505050565b6009546001600160a01b03163314610b7f57600080fd5b600b55565b610b63838383611850565b6007546001600160a01b03163314610ba657600080fd5b610bb4818361ffff16611b33565b5050565b60118054610bc590612566565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf190612566565b8015610c3e5780601f10610c1357610100808354040283529160200191610c3e565b820191906000526020600020905b815481529060010190602001808311610c2157829003601f168201915b505050505081565b600054600f54610100900460ff16610c705760405162461bcd60e51b8152600401610a2c906125a0565b600a54821115610c925760405162461bcd60e51b8152600401610a2c906125c6565b600c54610c9f8383612624565b1115610ced5760405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d6178696d756d204361747320737570706c7900000000006044820152606401610a2c565b81600d54610cfb919061263c565b341015610d465760405162461bcd60e51b8152602060048201526019602482015278115d1a195c881cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610a2c565b600e54421015610d685760405162461bcd60e51b8152600401610a2c906125a0565b610bb43383611b33565b6000610d7d836111ee565b8210610dd65760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610a2c565b600080549080805b83811015610e6c576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610e3057805192505b876001600160a01b0316836001600160a01b031603610e6357868403610e5c5750935061092992505050565b6001909301925b50600101610dde565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610a2c565b6007546001600160a01b03163314610ee357600080fd5b600f80546001600160a01b0390921664010000000002640100000000600160c01b0319909216919091179055565b610b638383836040518060200160405280600081525061151f565b60606000610f39836111ee565b90506000816001600160401b03811115610f5557610f556122e9565b604051908082528060200260200182016040528015610f7e578160200160208202803683370190505b50905060005b82811015610fc557610f968582610d72565b828281518110610fa857610fa861265b565b602090810291909101015280610fbd81612671565b915050610f84565b509392505050565b60008054821061102b5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610a2c565b5090565b6007546001600160a01b0316331461104657600080fd5b8051610bb4906010906020840190612087565b6000546110668383611373565b6110b25760405162461bcd60e51b815260206004820152601f60248201527f61646472657373206973206e6f74206f6e207468652077686974656c697374006044820152606401610a2c565b600f5460ff166110d45760405162461bcd60e51b8152600401610a2c906125a0565b600a548411156110f65760405162461bcd60e51b8152600401610a2c906125c6565b600c546111038583612624565b11156111515760405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d6178696d756d204361747320737570706c7900000000006044820152606401610a2c565b83600d5461115f919061263c565b3410156111aa5760405162461bcd60e51b8152602060048201526019602482015278115d1a195c881cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610a2c565b600e544210156111cc5760405162461bcd60e51b8152600401610a2c906125a0565b6111d63385611b33565b50505050565b60006111e782611b4d565b5192915050565b60006001600160a01b03821661125a5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610a2c565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b0316331461129657600080fd5b601255565b6007546001600160a01b031633146112b257600080fd5b60006064600b5460646112c5919061268a565b6112cf904761263c565b6112d991906126b7565b905060006064600b54476112ed919061263c565b6112f791906126b7565b600f5460405191925064010000000090046001600160a01b0316906108fc8415029084906000818181858888f1935050505061133257600080fd5b6008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610bb457600080fd5b60606002805461093e90612566565b6040516bffffffffffffffffffffffff193360601b16602082015260009081906034016040516020818303038152906040528051906020012090506113ef848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506012549150849050611c23565b949350505050565b6009546001600160a01b0316331461140e57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b336001600160a01b038316036114885760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610a2c565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b0316331461150b57600080fd5b600f805460ff19811660ff90911615179055565b61152a848484611850565b61153684848484611c39565b6111d65760405162461bcd60e51b8152600401610a2c906126cb565b6007546001600160a01b0316331461156957600080fd5b600f805463ff00000019811663010000009182900460ff1615909102179055565b6060611597826000541190565b6115fb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a2c565b600f546301000000900460ff161561170c57600f5462010000900460ff161561167a576000611628611d3a565b905080516000036116485760405180602001604052806000815250611673565b8061165284611d49565b60405160200161166392919061271e565b6040516020818303038152906040525b9392505050565b6011805461168790612566565b80601f01602080910402602001604051908101604052809291908181526020018280546116b390612566565b80156117005780601f106116d557610100808354040283529160200191611700565b820191906000526020600020905b8154815290600101906020018083116116e357829003601f168201915b50505050509050919050565b6000611628611d3a565b919050565b60108054610bc590612566565b6007546001600160a01b0316331461173f57600080fd5b600f805461ff001981166101009182900460ff1615909102179055565b6007546001600160a01b0316331461177357600080fd5b8051610bb4906011906020840190612087565b6007546001600160a01b0316331461179d57600080fd5b600e55565b6007546001600160a01b031633146117b957600080fd5b600d55565b6007546001600160a01b031633146117d557600080fd5b600f805462ff0000198116620100009182900460ff1615909102179055565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061185b82611b4d565b80519091506000906001600160a01b0316336001600160a01b03161480611892575033611887846109c1565b6001600160a01b0316145b806118a4575081516118a4903361085f565b90508061190e5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610a2c565b846001600160a01b031682600001516001600160a01b0316146119825760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610a2c565b6001600160a01b0384166119e65760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610a2c565b6119f660008484600001516117f4565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080546001600160e01b031916909117600160a01b426001600160401b031602179055908601808352912054909116611ae957611a9d816000541190565b15611ae957825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b610bb4828260405180602001604052806000815250611e49565b6040805180820190915260008082526020820152611b6c826000541190565b611bcb5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610a2c565b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611c19579392505050565b5060001901611bcd565b600082611c308584611e56565b14949350505050565b60006001600160a01b0384163b15611d2f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c7d90339089908890889060040161274d565b6020604051808303816000875af1925050508015611cb8575060408051601f3d908101601f19168201909252611cb59181019061278a565b60015b611d15573d808015611ce6576040519150601f19603f3d011682016040523d82523d6000602084013e611ceb565b606091505b508051600003611d0d5760405162461bcd60e51b8152600401610a2c906126cb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113ef565b506001949350505050565b60606010805461093e90612566565b606081600003611d705750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d9a5780611d8481612671565b9150611d939050600a836126b7565b9150611d74565b6000816001600160401b03811115611db457611db46122e9565b6040519080825280601f01601f191660200182016040528015611dde576020820181803683370190505b5090505b84156113ef57611df360018361268a565b9150611e00600a866127a7565b611e0b906030612624565b60f81b818381518110611e2057611e2061265b565b60200101906001600160f81b031916908160001a905350611e42600a866126b7565b9450611de2565b610b638383836001611ec2565b600081815b8451811015610fc5576000858281518110611e7857611e7861265b565b60200260200101519050808311611e9e5760008381526020829052604090209250611eaf565b600081815260208490526040902092505b5080611eba81612671565b915050611e5b565b6000546001600160a01b038516611f255760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a2c565b83600003611f865760405162461bcd60e51b815260206004820152602860248201527f455243373231413a207175616e74697479206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608401610a2c565b6001600160a01b03851660008181526004602090815260408083208054600160801b6001600160801b031982166001600160801b039283168c01831690811782900483168c01909216021790558483526003909152812080546001600160e01b031916909217600160a01b426001600160401b0316021790915581905b8581101561207e5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48315612072576120566000888488611c39565b6120725760405162461bcd60e51b8152600401610a2c906126cb565b60019182019101612003565b50600055611b2c565b82805461209390612566565b90600052602060002090601f0160209004810192826120b557600085556120fb565b82601f106120ce57805160ff19168380011785556120fb565b828001600101855582156120fb579182015b828111156120fb5782518255916020019190600101906120e0565b5061102b9291505b8082111561102b5760008155600101612103565b6001600160e01b03198116811461212d57600080fd5b50565b60006020828403121561214257600080fd5b813561167381612117565b60005b83811015612168578181015183820152602001612150565b838111156111d65750506000910152565b6000815180845261219181602086016020860161214d565b601f01601f19169290920160200192915050565b6020815260006116736020830184612179565b6000602082840312156121ca57600080fd5b5035919050565b80356001600160a01b038116811461171657600080fd5b600080604083850312156121fb57600080fd5b612204836121d1565b946020939093013593505050565b60008060006060848603121561222757600080fd5b612230846121d1565b925061223e602085016121d1565b9150604084013590509250925092565b6000806040838503121561226157600080fd5b823561ffff8116811461227357600080fd5b9150612281602084016121d1565b90509250929050565b60006020828403121561229c57600080fd5b611673826121d1565b6020808252825182820181905260009190848201906040850190845b818110156122dd578351835292840192918401916001016122c1565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612319576123196122e9565b604051601f8501601f19908116603f01168101908282118183101715612341576123416122e9565b8160405280935085815286868601111561235a57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561238657600080fd5b81356001600160401b0381111561239c57600080fd5b8201601f810184136123ad57600080fd5b6113ef848235602084016122ff565b60008083601f8401126123ce57600080fd5b5081356001600160401b038111156123e557600080fd5b6020830191508360208260051b850101111561240057600080fd5b9250929050565b60008060006040848603121561241c57600080fd5b8335925060208401356001600160401b0381111561243957600080fd5b612445868287016123bc565b9497909650939450505050565b6000806020838503121561246557600080fd5b82356001600160401b0381111561247b57600080fd5b612487858286016123bc565b90969095509350505050565b600080604083850312156124a657600080fd5b6124af836121d1565b9150602083013580151581146124c457600080fd5b809150509250929050565b600080600080608085870312156124e557600080fd5b6124ee856121d1565b93506124fc602086016121d1565b92506040850135915060608501356001600160401b0381111561251e57600080fd5b8501601f8101871361252f57600080fd5b61253e878235602084016122ff565b91505092959194509250565b6000806040838503121561255d57600080fd5b612273836121d1565b600181811c9082168061257a57607f821691505b60208210810361259a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b6e6f206d696e742074696d6560a01b604082015260600190565b60208082526028908201527f596f752063616e2061646f70742061206d6178696d756d206f66204d41585f4d604082015267494e54204361747360c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156126375761263761260e565b500190565b60008160001904831182151516156126565761265661260e565b500290565b634e487b7160e01b600052603260045260246000fd5b6000600182016126835761268361260e565b5060010190565b60008282101561269c5761269c61260e565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826126c6576126c66126a1565b500490565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000835161273081846020880161214d565b83519083019061274481836020880161214d565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061278090830184612179565b9695505050505050565b60006020828403121561279c57600080fd5b815161167381612117565b6000826127b6576127b66126a1565b50069056fea2646970667358221220d7765403b5f0efc537734969dfca1cc665abd7ec7160b3fb56f29849b9d03ce364736f6c634300080d0033

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

000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000624e56f800000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000011566567204f7574204861726520436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004564f484300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f6f70656e7365612e6d7970696e6174612e636c6f75642f697066732f516d5a6931546a76475747784a515843577868727a655a50766a76655a646d476f504a48774b36416d6174546a482f00000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Veg Out Hare Club
Arg [1] : symbol (string): VOHC
Arg [2] : _maxMint (uint256): 5
Arg [3] : _porfit (uint256): 10
Arg [4] : _maxTotal (uint256): 10000
Arg [5] : _price (uint256): 10000000000000000
Arg [6] : _mintTime (uint256): 1649301240
Arg [7] : _baseTokenURI (string): https://opensea.mypinata.cloud/ipfs/QmZi1TjvGWGxJQXCWxhrzeZPvjveZdmGoPJHwK6AmatTjH/

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [5] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [6] : 00000000000000000000000000000000000000000000000000000000624e56f8
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [9] : 566567204f7574204861726520436c7562000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [11] : 564f484300000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000053
Arg [13] : 68747470733a2f2f6f70656e7365612e6d7970696e6174612e636c6f75642f69
Arg [14] : 7066732f516d5a6931546a76475747784a515843577868727a655a50766a7665
Arg [15] : 5a646d476f504a48774b36416d6174546a482f00000000000000000000000000


Deployed Bytecode Sourcemap

3344:4907:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3709:356:3;;;;;;;;;;-1:-1:-1;3709:356:3;;;;;:::i;:::-;;:::i;:::-;;;565:14:14;;558:22;540:41;;528:2;513:18;3709:356:3;;;;;;;;5547:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7109:214::-;;;;;;;;;;-1:-1:-1;7109:214:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:14;;;1674:51;;1662:2;1647:18;7109:214:3;1528:203:14;6630:413:3;;;;;;;;;;-1:-1:-1;6630:413:3;;;;;:::i;:::-;;:::i;:::-;;3621:24:12;;;;;;;;;;-1:-1:-1;3621:24:12;;;;;;;;;;;710:89:10;;;;;;;;;;-1:-1:-1;784:7:10;;-1:-1:-1;;;;;784:7:10;710:89;;3679:30:12;;;;;;;;;;-1:-1:-1;3679:30:12;;;;;;;-1:-1:-1;;;;;3679:30:12;;;2022:100:3;;;;;;;;;;-1:-1:-1;2075:7:3;2102:12;2022:100;;;2319:25:14;;;2307:2;2292:18;2022:100:3;2173:177:14;6136:89:12;;;;;;;;;;-1:-1:-1;6136:89:12;;;;;:::i;:::-;;:::i;7985:170:3:-;;;;;;;;;;-1:-1:-1;7985:170:3;;;;;:::i;:::-;;:::i;5293:114:12:-;;;;;;;;;;-1:-1:-1;5293:114:12;;;;;:::i;:::-;;:::i;3749:27::-;;;;;;;;;;;;;:::i;4810:475::-;;;;;;:::i;:::-;;:::i;3783:25::-;;;;;;;;;;;;;;;;2686:951:3;;;;;;;;;;-1:-1:-1;2686:951:3;;;;;:::i;:::-;;:::i;5415:124:12:-;;;;;;;;;;-1:-1:-1;5415:124:12;;;;;:::i;:::-;;:::i;8226:185:3:-;;;;;;;;;;-1:-1:-1;8226:185:3;;;;;:::i;:::-;;:::i;7102:342:12:-;;;;;;;;;;-1:-1:-1;7102:342:12;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2199:187:3:-;;;;;;;;;;-1:-1:-1;2199:187:3;;;;;:::i;:::-;;:::i;6233:113:12:-;;;;;;;;;;-1:-1:-1;6233:113:12;;;;;:::i;:::-;;:::i;807:89:10:-;;;;;;;;;;-1:-1:-1;881:7:10;;-1:-1:-1;;;;;881:7:10;807:89;;4237:565:12;;;;;;:::i;:::-;;:::i;5356:124:3:-;;;;;;;;;;-1:-1:-1;5356:124:3;;;;;:::i;:::-;;:::i;3480:20:12:-;;;;;;;;;;;;;;;;4129:221:3;;;;;;;;;;-1:-1:-1;4129:221:3;;;;;:::i;:::-;;:::i;3429:19:12:-;;;;;;;;;;;;;;;;6484:104;;;;;;;;;;-1:-1:-1;6484:104:12;;;;;:::i;:::-;;:::i;6596:273::-;;;;;;;;;;;;;:::i;3531:20::-;;;;;;;;;;;;;;;;615:87:10;;;;;;;;;;-1:-1:-1;688:6:10;;-1:-1:-1;;;;;688:6:10;615:87;;5716:104:3;;;;;;;;;;;;;:::i;6877:217:12:-;;;;;;;;;;-1:-1:-1;6877:217:12;;;;;:::i;:::-;;:::i;512:95:10:-;;;;;;;;;;-1:-1:-1;512:95:10;;;;;:::i;:::-;;:::i;3507:17:12:-;;;;;;;;;;;;;;;;3455:18;;;;;;;;;;;;;;;;7395:288:3;;;;;;;;;;-1:-1:-1;7395:288:3;;;;;:::i;:::-;;:::i;5547:88:12:-;;;;;;;;;;;;;:::i;3558:23::-;;;;;;;;;;-1:-1:-1;3558:23:12;;;;;;;;8482:355:3;;;;;;;;;;-1:-1:-1;8482:355:3;;;;;:::i;:::-;;:::i;3588:26:12:-;;;;;;;;;;-1:-1:-1;3588:26:12;;;;;;;;;;;3652:20;;;;;;;;;;-1:-1:-1;3652:20:12;;;;;;;;;;;5849:79;;;;;;;;;;;;;:::i;7573:675::-;;;;;;;;;;-1:-1:-1;7573:675:12;;;;;:::i;:::-;;:::i;3716:26::-;;;;;;;;;;;;;:::i;5643:97::-;;;;;;;;;;;;;:::i;6354:122::-;;;;;;;;;;-1:-1:-1;6354:122:12;;;;;:::i;:::-;;:::i;5936:96::-;;;;;;;;;;-1:-1:-1;5936:96:12;;;;;:::i;:::-;;:::i;7754:164:3:-;;;;;;;;;;-1:-1:-1;7754:164:3;;;;;:::i;:::-;-1:-1:-1;;;;;7875:25:3;;;7851:4;7875:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;7754:164;6040:88:12;;;;;;;;;;-1:-1:-1;6040:88:12;;;;;:::i;:::-;;:::i;5748:93::-;;;;;;;;;;;;;:::i;3709:356:3:-;3811:4;-1:-1:-1;;;;;;3844:40:3;;-1:-1:-1;;;3844:40:3;;:101;;-1:-1:-1;;;;;;;3897:48:3;;-1:-1:-1;;;3897:48:3;3844:101;:164;;;-1:-1:-1;;;;;;;3958:50:3;;-1:-1:-1;;;3958:50:3;3844:164;:213;;;-1:-1:-1;;;;;;;;;;964:40:2;;;4021:36:3;3828:229;3709:356;-1:-1:-1;;3709:356:3:o;5547:100::-;5601:13;5634:5;5627:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5547:100;:::o;7109:214::-;7177:7;7205:16;7213:7;9149:4;9183:12;-1:-1:-1;9173:22:3;9092:111;7205:16;7197:74;;;;-1:-1:-1;;;7197:74:3;;8659:2:14;7197:74:3;;;8641:21:14;8698:2;8678:18;;;8671:30;8737:34;8717:18;;;8710:62;-1:-1:-1;;;8788:18:14;;;8781:43;8841:19;;7197:74:3;;;;;;;;;-1:-1:-1;7291:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;7291:24:3;;7109:214::o;6630:413::-;6703:13;6719:24;6735:7;6719:15;:24::i;:::-;6703:40;;6768:5;-1:-1:-1;;;;;6762:11:3;:2;-1:-1:-1;;;;;6762:11:3;;6754:58;;;;-1:-1:-1;;;6754:58:3;;9073:2:14;6754:58:3;;;9055:21:14;9112:2;9092:18;;;9085:30;9151:34;9131:18;;;9124:62;-1:-1:-1;;;9202:18:14;;;9195:32;9244:19;;6754:58:3;8871:398:14;6754:58:3;737:10:1;-1:-1:-1;;;;;6847:21:3;;;;:62;;-1:-1:-1;6872:37:3;6889:5;737:10:1;7754:164:3;:::i;6872:37::-;6825:169;;;;-1:-1:-1;;;6825:169:3;;9476:2:14;6825:169:3;;;9458:21:14;9515:2;9495:18;;;9488:30;9554:34;9534:18;;;9527:62;9625:27;9605:18;;;9598:55;9670:19;;6825:169:3;9274:421:14;6825:169:3;7007:28;7016:2;7020:7;7029:5;7007:8;:28::i;:::-;6692:351;6630:413;;:::o;6136:89:12:-;476:7:10;;-1:-1:-1;;;;;476:7:10;462:10;:21;454:30;;;;;;6201:6:12::1;:16:::0;6136:89::o;7985:170:3:-;8119:28;8129:4;8135:2;8139:7;8119:9;:28::i;5293:114:12:-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;5373:26:12::1;5383:9;5394:4;5373:26;;:9;:26::i;:::-;5293:114:::0;;:::o;3749:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4810:475::-;4869:14;2102:12:3;4918:14:12;;;;;;;4910:39;;;;-1:-1:-1;;;4910:39:12;;;;;;;:::i;:::-;4975:7;;4968:3;:14;;4960:67;;;;-1:-1:-1;;;4960:67:12;;;;;;;:::i;:::-;5062:8;;5046:12;5055:3;5046:6;:12;:::i;:::-;:24;;5038:64;;;;-1:-1:-1;;;5038:64:12;;10917:2:14;5038:64:12;;;10899:21:14;10956:2;10936:18;;;10929:30;10995:29;10975:18;;;10968:57;11042:18;;5038:64:12;10715:351:14;5038:64:12;5142:3;5134:5;;:11;;;;:::i;:::-;5121:9;:24;;5113:62;;;;-1:-1:-1;;;5113:62:12;;11446:2:14;5113:62:12;;;11428:21:14;11485:2;11465:18;;;11458:30;-1:-1:-1;;;11504:18:14;;;11497:55;11569:18;;5113:62:12;11244:349:14;5113:62:12;5213:8;;5194:15;:27;;5186:52;;;;-1:-1:-1;;;5186:52:12;;;;;;;:::i;:::-;5251:26;5261:10;5273:3;5251:9;:26::i;2686:951:3:-;2775:7;2811:16;2821:5;2811:9;:16::i;:::-;2803:5;:24;2795:71;;;;-1:-1:-1;;;2795:71:3;;11800:2:14;2795:71:3;;;11782:21:14;11839:2;11819:18;;;11812:30;11878:34;11858:18;;;11851:62;-1:-1:-1;;;11929:18:14;;;11922:32;11971:19;;2795:71:3;11598:398:14;2795:71:3;2877:22;2102:12;;;2877:22;;3132:422;3152:14;3148:1;:18;3132:422;;;3188:31;3222:14;;;:11;:14;;;;;;;;;3188:48;;;;;;;;;-1:-1:-1;;;;;3188:48:3;;;;;-1:-1:-1;;;3188:48:3;;;-1:-1:-1;;;;;3188:48:3;;;;;;;;3255:28;3251:103;;3324:14;;;-1:-1:-1;3251:103:3;3393:5;-1:-1:-1;;;;;3372:26:3;:17;-1:-1:-1;;;;;3372:26:3;;3368:175;;3438:5;3423:11;:20;3419:77;;-1:-1:-1;3475:1:3;-1:-1:-1;3468:8:3;;-1:-1:-1;;;3468:8:3;3419:77;3514:13;;;;;3368:175;-1:-1:-1;3168:3:3;;3132:422;;;-1:-1:-1;3573:56:3;;-1:-1:-1;;;3573:56:3;;12203:2:14;3573:56:3;;;12185:21:14;12242:2;12222:18;;;12215:30;12281:34;12261:18;;;12254:62;-1:-1:-1;;;12332:18:14;;;12325:44;12386:19;;3573:56:3;12001:410:14;5415:124:12;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;5497:15:12::1;:34:::0;;-1:-1:-1;;;;;5497:34:12;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;5497:34:12;;::::1;::::0;;;::::1;::::0;;5415:124::o;8226:185:3:-;8364:39;8381:4;8387:2;8391:7;8364:39;;;;;;;;;;;;:16;:39::i;7102:342:12:-;7161:16;7190:18;7211:16;7221:5;7211:9;:16::i;:::-;7190:37;;7238:25;7280:10;-1:-1:-1;;;;;7266:25:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7266:25:12;;7238:53;;7309:9;7304:107;7324:10;7320:1;:14;7304:107;;;7370:29;7390:5;7397:1;7370:19;:29::i;:::-;7356:8;7365:1;7356:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;7336:3;;;;:::i;:::-;;;;7304:107;;;-1:-1:-1;7428:8:12;7102:342;-1:-1:-1;;;7102:342:12:o;2199:187:3:-;2266:7;2102:12;;2294:5;:21;2286:69;;;;-1:-1:-1;;;2286:69:3;;12890:2:14;2286:69:3;;;12872:21:14;12929:2;12909:18;;;12902:30;12968:34;12948:18;;;12941:62;-1:-1:-1;;;13019:18:14;;;13012:33;13062:19;;2286:69:3;12688:399:14;2286:69:3;-1:-1:-1;2373:5:3;2199:187::o;6233:113:12:-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;6310:28:12;;::::1;::::0;:12:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;4237:565::-:0;4320:14;2102:12:3;4369:14:12;4376:6;;4369;:14::i;:::-;4361:58;;;;-1:-1:-1;;;4361:58:12;;13294:2:14;4361:58:12;;;13276:21:14;13333:2;13313:18;;;13306:30;13372:33;13352:18;;;13345:61;13423:18;;4361:58:12;13092:355:14;4361:58:12;4438:11;;;;4430:36;;;;-1:-1:-1;;;4430:36:12;;;;;;;:::i;:::-;4492:7;;4485:3;:14;;4477:67;;;;-1:-1:-1;;;4477:67:12;;;;;;;:::i;:::-;4579:8;;4563:12;4572:3;4563:6;:12;:::i;:::-;:24;;4555:64;;;;-1:-1:-1;;;4555:64:12;;10917:2:14;4555:64:12;;;10899:21:14;10956:2;10936:18;;;10929:30;10995:29;10975:18;;;10968:57;11042:18;;4555:64:12;10715:351:14;4555:64:12;4659:3;4651:5;;:11;;;;:::i;:::-;4638:9;:24;;4630:62;;;;-1:-1:-1;;;4630:62:12;;11446:2:14;4630:62:12;;;11428:21:14;11485:2;11465:18;;;11458:30;-1:-1:-1;;;11504:18:14;;;11497:55;11569:18;;4630:62:12;11244:349:14;4630:62:12;4730:8;;4711:15;:27;;4703:52;;;;-1:-1:-1;;;4703:52:12;;;;;;;:::i;:::-;4768:26;4778:10;4790:3;4768:9;:26::i;:::-;4309:493;4237:565;;;:::o;5356:124:3:-;5420:7;5447:20;5459:7;5447:11;:20::i;:::-;:25;;5356:124;-1:-1:-1;;5356:124:3:o;4129:221::-;4193:7;-1:-1:-1;;;;;4221:19:3;;4213:75;;;;-1:-1:-1;;;4213:75:3;;13654:2:14;4213:75:3;;;13636:21:14;13693:2;13673:18;;;13666:30;13732:34;13712:18;;;13705:62;-1:-1:-1;;;13783:18:14;;;13776:41;13834:19;;4213:75:3;13452:407:14;4213:75:3;-1:-1:-1;;;;;;4314:19:3;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;4314:27:3;;4129:221::o;6484:104:12:-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;6556:10:12::1;:24:::0;6484:104::o;6596:273::-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;6647:8:12::1;6699:3;6689:6;;6683:3;:12;;;;:::i;:::-;6658:38;::::0;:21:::1;:38;:::i;:::-;:44;;;;:::i;:::-;6647:55;;6713:8;6757:3;6748:6;;6724:21;:30;;;;:::i;:::-;:36;;;;:::i;:::-;6787:15;::::0;6779:34:::1;::::0;6713:47;;-1:-1:-1;6787:15:12;;::::1;-1:-1:-1::0;;;;;6787:15:12::1;::::0;6779:34:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;6787:15;6779:34;::::1;;;;;;6771:43;;;::::0;::::1;;784:7:10::0;;6833:27:12::1;::::0;-1:-1:-1;;;;;784:7:10;;;;6833:27:12;::::1;;;::::0;6856:3;;6833:27:::1;::::0;;;6856:3;784:7:10;6833:27:12;::::1;;;;;;6825:36;;;::::0;::::1;5716:104:3::0;5772:13;5805:7;5798:14;;;;;:::i;6877:217:12:-;6989:28;;-1:-1:-1;;7006:10:12;14400:2:14;14396:15;14392:53;6989:28:12;;;14380:66:14;6947:4:12;;;;14462:12:14;;6989:28:12;;;;;;;;;;;;6979:39;;;;;;6964:54;;7036:50;7055:12;;7036:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7069:10:12;;;-1:-1:-1;7081:4:12;;-1:-1:-1;7036:18:12;:50::i;:::-;7029:57;6877:217;-1:-1:-1;;;;6877:217:12:o;512:95:10:-;476:7;;-1:-1:-1;;;;;476:7:10;462:10;:21;454:30;;;;;;580:7:::1;:19:::0;;-1:-1:-1;;;;;;580:19:10::1;-1:-1:-1::0;;;;;580:19:10;;;::::1;::::0;;;::::1;::::0;;512:95::o;7395:288:3:-;737:10:1;-1:-1:-1;;;;;7490:24:3;;;7482:63;;;;-1:-1:-1;;;7482:63:3;;14687:2:14;7482:63:3;;;14669:21:14;14726:2;14706:18;;;14699:30;14765:28;14745:18;;;14738:56;14811:18;;7482:63:3;14485:350:14;7482:63:3;737:10:1;7558:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;7558:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;7558:53:3;;;;;;;;;;7627:48;;540:41:14;;;7558:42:3;;737:10:1;7627:48:3;;513:18:14;7627:48:3;;;;;;;7395:288;;:::o;5547:88:12:-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;5616:11:12::1;::::0;;-1:-1:-1;;5601:26:12;::::1;5616:11;::::0;;::::1;5615:12;5601:26;::::0;;5547:88::o;8482:355:3:-;8641:28;8651:4;8657:2;8661:7;8641:9;:28::i;:::-;8702:48;8725:4;8731:2;8735:7;8744:5;8702:22;:48::i;:::-;8680:149;;;;-1:-1:-1;;;8680:149:3;;;;;;;:::i;5849:79:12:-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;5912:8:12::1;::::0;;-1:-1:-1;;5900:20:12;::::1;5912:8:::0;;;;::::1;;;5911:9;5900:20:::0;;::::1;;::::0;;5849:79::o;7573:675::-;7646:13;7680:16;7688:7;9149:4:3;9183:12;-1:-1:-1;9173:22:3;9092:111;7680:16:12;7672:76;;;;-1:-1:-1;;;7672:76:12;;15462:2:14;7672:76:12;;;15444:21:14;15501:2;15481:18;;;15474:30;15540:34;15520:18;;;15513:62;-1:-1:-1;;;15591:18:14;;;15584:45;15646:19;;7672:76:12;15260:411:14;7672:76:12;7764:8;;;;;;;7761:480;;;7793:12;;;;;;;7789:261;;;7826:21;7850:10;:8;:10::i;:::-;7826:34;;7892:7;7886:21;7911:1;7886:26;:87;;;;;;;;;;;;;;;;;7939:7;7948:18;:7;:16;:18::i;:::-;7922:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7886:87;7879:94;7573:675;-1:-1:-1;;;7573:675:12:o;7789:261::-;8021:13;8014:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7573:675;;;:::o;7761:480::-;8082:21;8106:10;:8;:10::i;7761:480::-;7573:675;;;:::o;3716:26::-;;;;;;;:::i;5643:97::-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;5718:14:12::1;::::0;;-1:-1:-1;;5700:32:12;::::1;5718:14;::::0;;;::::1;;;5717:15;5700:32:::0;;::::1;;::::0;;5643:97::o;6354:122::-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;6438:30:12;;::::1;::::0;:13:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;5936:96::-:0;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;6004:8:12::1;:20:::0;5936:96::o;6040:88::-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;6106:5:12::1;:14:::0;6040:88::o;5748:93::-;388:6:10;;-1:-1:-1;;;;;388:6:10;374:10;:20;366:29;;;;;;5821:12:12::1;::::0;;-1:-1:-1;;5805:28:12;::::1;5821:12:::0;;;;::::1;;;5820:13;5805:28:::0;;::::1;;::::0;;5748:93::o;13872:196:3:-;13987:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;13987:29:3;-1:-1:-1;;;;;13987:29:3;;;;;;;;;14032:28;;13987:24;;14032:28;;;;;;;13872:196;;;:::o;11820:1934::-;11935:35;11973:20;11985:7;11973:11;:20::i;:::-;12048:18;;11935:58;;-1:-1:-1;12006:22:3;;-1:-1:-1;;;;;12032:34:3;737:10:1;-1:-1:-1;;;;;12032:34:3;;:83;;;-1:-1:-1;737:10:1;12079:20:3;12091:7;12079:11;:20::i;:::-;-1:-1:-1;;;;;12079:36:3;;12032:83;:146;;;-1:-1:-1;12145:18:3;;12128:50;;737:10:1;7754:164:3;:::i;12128:50::-;12006:173;;12200:17;12192:80;;;;-1:-1:-1;;;12192:80:3;;16353:2:14;12192:80:3;;;16335:21:14;16392:2;16372:18;;;16365:30;16431:34;16411:18;;;16404:62;-1:-1:-1;;;16482:18:14;;;16475:48;16540:19;;12192:80:3;16151:414:14;12192:80:3;12315:4;-1:-1:-1;;;;;12293:26:3;:13;:18;;;-1:-1:-1;;;;;12293:26:3;;12285:77;;;;-1:-1:-1;;;12285:77:3;;16772:2:14;12285:77:3;;;16754:21:14;16811:2;16791:18;;;16784:30;16850:34;16830:18;;;16823:62;-1:-1:-1;;;16901:18:14;;;16894:36;16947:19;;12285:77:3;16570:402:14;12285:77:3;-1:-1:-1;;;;;12381:16:3;;12373:66;;;;-1:-1:-1;;;12373:66:3;;17179:2:14;12373:66:3;;;17161:21:14;17218:2;17198:18;;;17191:30;17257:34;17237:18;;;17230:62;-1:-1:-1;;;17308:18:14;;;17301:35;17353:19;;12373:66:3;16977:401:14;12373:66:3;12560:49;12577:1;12581:7;12590:13;:18;;;12560:8;:49::i;:::-;-1:-1:-1;;;;;12897:18:3;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;;;;;12897:31:3;;;-1:-1:-1;;;;;12897:31:3;;;-1:-1:-1;;12897:31:3;;;;;;;12939:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;12939:29:3;;;;;;;;;;;;;12981:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;13022:61:3;;;;-1:-1:-1;;;13067:15:3;-1:-1:-1;;;;;13022:61:3;;;;;13345:11;;;13371:24;;;;;:29;13345:11;;13371:29;13367:275;;13435:20;13443:11;9149:4;9183:12;-1:-1:-1;9173:22:3;9092:111;13435:20;13431:200;;;13508:18;;;13476:24;;;:11;:24;;;;;;;;:50;;13587:28;;;;-1:-1:-1;;;;;13545:70:3;-1:-1:-1;;;13545:70:3;-1:-1:-1;;;;;;13545:70:3;;;-1:-1:-1;;;;;13476:50:3;;;13545:70;;;;;;;13431:200;12876:773;13685:7;13681:2;-1:-1:-1;;;;;13666:27:3;13675:4;-1:-1:-1;;;;;13666:27:3;;;;;;;;;;;13704:42;11924:1830;;11820:1934;;;:::o;9211:104::-;9280:27;9290:2;9294:8;9280:27;;;;;;;;;;;;:9;:27::i;4789:505::-;-1:-1:-1;;;;;;;;;;;;;;;;;4892:16:3;4900:7;9149:4;9183:12;-1:-1:-1;9173:22:3;9092:111;4892:16;4884:71;;;;-1:-1:-1;;;4884:71:3;;17585:2:14;4884:71:3;;;17567:21:14;17624:2;17604:18;;;17597:30;17663:34;17643:18;;;17636:62;-1:-1:-1;;;17714:18:14;;;17707:40;17764:19;;4884:71:3;17383:406:14;4884:71:3;5005:7;4985:225;5048:31;5082:17;;;:11;:17;;;;;;;;;5048:51;;;;;;;;;-1:-1:-1;;;;;5048:51:3;;;;;-1:-1:-1;;;5048:51:3;;;-1:-1:-1;;;;;5048:51:3;;;;;;;;5118:28;5114:85;;5174:9;4789:505;-1:-1:-1;;;4789:505:3:o;5114:85::-;-1:-1:-1;;;5025:6:3;4985:225;;1181:190:9;1306:4;1359;1330:25;1343:5;1350:4;1330:12;:25::i;:::-;:33;;1181:190;-1:-1:-1;;;;1181:190:9:o;14633:804:3:-;14788:4;-1:-1:-1;;;;;14809:13:3;;1506:19:0;:23;14805:625:3;;14845:72;;-1:-1:-1;;;14845:72:3;;-1:-1:-1;;;;;14845:36:3;;;;;:72;;737:10:1;;14896:4:3;;14902:7;;14911:5;;14845:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14845:72:3;;;;;;;;-1:-1:-1;;14845:72:3;;;;;;;;;;;;:::i;:::-;;;14841:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15091:6;:13;15108:1;15091:18;15087:273;;15134:61;;-1:-1:-1;;;15134:61:3;;;;;;;:::i;15087:273::-;15310:6;15304:13;15295:6;15291:2;15287:15;15280:38;14841:534;-1:-1:-1;;;;;;14968:55:3;-1:-1:-1;;;14968:55:3;;-1:-1:-1;14961:62:3;;14805:625;-1:-1:-1;15414:4:3;14633:804;;;;;;:::o;7452:113:12:-;7512:13;7545:12;7538:19;;;;;:::i;343:723:13:-;399:13;620:5;629:1;620:10;616:53;;-1:-1:-1;;647:10:13;;;;;;;;;;;;-1:-1:-1;;;647:10:13;;;;;343:723::o;616:53::-;694:5;679:12;735:78;742:9;;735:78;;768:8;;;;:::i;:::-;;-1:-1:-1;791:10:13;;-1:-1:-1;799:2:13;791:10;;:::i;:::-;;;735:78;;;823:19;855:6;-1:-1:-1;;;;;845:17:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;845:17:13;;823:39;;873:154;880:10;;873:154;;907:11;917:1;907:11;;:::i;:::-;;-1:-1:-1;976:10:13;984:2;976:5;:10;:::i;:::-;963:24;;:2;:24;:::i;:::-;950:39;;933:6;940;933:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;933:56:13;;;;;;;;-1:-1:-1;1004:11:13;1013:2;1004:11;;:::i;:::-;;;873:154;;9678:163:3;9801:32;9807:2;9811:8;9821:5;9828:4;9801:5;:32::i;1732:675:9:-;1815:7;1858:4;1815:7;1873:497;1897:5;:12;1893:1;:16;1873:497;;;1931:20;1954:5;1960:1;1954:8;;;;;;;;:::i;:::-;;;;;;;1931:31;;1997:12;1981;:28;1977:382;;2483:13;2533:15;;;2569:4;2562:15;;;2616:4;2600:21;;2109:57;;1977:382;;;2483:13;2533:15;;;2569:4;2562:15;;;2616:4;2600:21;;2286:57;;1977:382;-1:-1:-1;1911:3:9;;;;:::i;:::-;;;;1873:497;;10100:1466:3;10239:20;10262:12;-1:-1:-1;;;;;10293:16:3;;10285:62;;;;-1:-1:-1;;;10285:62:3;;19277:2:14;10285:62:3;;;19259:21:14;19316:2;19296:18;;;19289:30;19355:34;19335:18;;;19328:62;-1:-1:-1;;;19406:18:14;;;19399:31;19447:19;;10285:62:3;19075:397:14;10285:62:3;10366:8;10378:1;10366:13;10358:66;;;;-1:-1:-1;;;10358:66:3;;19679:2:14;10358:66:3;;;19661:21:14;19718:2;19698:18;;;19691:30;19757:34;19737:18;;;19730:62;-1:-1:-1;;;19808:18:14;;;19801:38;19856:19;;10358:66:3;19477:404:14;10358:66:3;-1:-1:-1;;;;;10768:16:3;;;;;;:12;:16;;;;;;;;:45;;-1:-1:-1;;;;;;;;;10768:45:3;;-1:-1:-1;;;;;10768:45:3;;;;;;;;;;10824:50;;;;;;;;;;;;;;10887:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;10933:66:3;;;;-1:-1:-1;;;10983:15:3;-1:-1:-1;;;;;10933:66:3;;;;;;10887:25;;11060:379;11080:8;11076:1;:12;11060:379;;;11115:38;;11140:12;;-1:-1:-1;;;;;11115:38:3;;;11132:1;;11115:38;;11132:1;;11115:38;11172:4;11168:229;;;11227:59;11258:1;11262:2;11266:12;11280:5;11227:22;:59::i;:::-;11197:184;;;;-1:-1:-1;;;11197:184:3;;;;;;;:::i;:::-;11413:14;;;;;11090:3;11060:379;;;-1:-1:-1;11451:12:3;:27;11498:60;4237:565:12;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:14;-1:-1:-1;;;;;;88:32:14;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:14;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:14;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:14:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:14;;1343:180;-1:-1:-1;1343:180:14:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:14;;1843:42;;1833:70;;1899:1;1896;1889:12;1914:254;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:14:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:346::-;2755:6;2763;2816:2;2804:9;2795:7;2791:23;2787:32;2784:52;;;2832:1;2829;2822:12;2784:52;2871:9;2858:23;2921:6;2914:5;2910:18;2903:5;2900:29;2890:57;;2943:1;2940;2933:12;2890:57;2966:5;-1:-1:-1;2990:38:14;3024:2;3009:18;;2990:38;:::i;:::-;2980:48;;2688:346;;;;;:::o;3221:186::-;3280:6;3333:2;3321:9;3312:7;3308:23;3304:32;3301:52;;;3349:1;3346;3339:12;3301:52;3372:29;3391:9;3372:29;:::i;3412:632::-;3583:2;3635:21;;;3705:13;;3608:18;;;3727:22;;;3554:4;;3583:2;3806:15;;;;3780:2;3765:18;;;3554:4;3849:169;3863:6;3860:1;3857:13;3849:169;;;3924:13;;3912:26;;3993:15;;;;3958:12;;;;3885:1;3878:9;3849:169;;;-1:-1:-1;4035:3:14;;3412:632;-1:-1:-1;;;;;;3412:632:14:o;4049:127::-;4110:10;4105:3;4101:20;4098:1;4091:31;4141:4;4138:1;4131:15;4165:4;4162:1;4155:15;4181:632;4246:5;-1:-1:-1;;;;;4317:2:14;4309:6;4306:14;4303:40;;;4323:18;;:::i;:::-;4398:2;4392:9;4366:2;4452:15;;-1:-1:-1;;4448:24:14;;;4474:2;4444:33;4440:42;4428:55;;;4498:18;;;4518:22;;;4495:46;4492:72;;;4544:18;;:::i;:::-;4584:10;4580:2;4573:22;4613:6;4604:15;;4643:6;4635;4628:22;4683:3;4674:6;4669:3;4665:16;4662:25;4659:45;;;4700:1;4697;4690:12;4659:45;4750:6;4745:3;4738:4;4730:6;4726:17;4713:44;4805:1;4798:4;4789:6;4781;4777:19;4773:30;4766:41;;;;4181:632;;;;;:::o;4818:451::-;4887:6;4940:2;4928:9;4919:7;4915:23;4911:32;4908:52;;;4956:1;4953;4946:12;4908:52;4996:9;4983:23;-1:-1:-1;;;;;5021:6:14;5018:30;5015:50;;;5061:1;5058;5051:12;5015:50;5084:22;;5137:4;5129:13;;5125:27;-1:-1:-1;5115:55:14;;5166:1;5163;5156:12;5115:55;5189:74;5255:7;5250:2;5237:16;5232:2;5228;5224:11;5189:74;:::i;5274:367::-;5337:8;5347:6;5401:3;5394:4;5386:6;5382:17;5378:27;5368:55;;5419:1;5416;5409:12;5368:55;-1:-1:-1;5442:20:14;;-1:-1:-1;;;;;5474:30:14;;5471:50;;;5517:1;5514;5507:12;5471:50;5554:4;5546:6;5542:17;5530:29;;5614:3;5607:4;5597:6;5594:1;5590:14;5582:6;5578:27;5574:38;5571:47;5568:67;;;5631:1;5628;5621:12;5568:67;5274:367;;;;;:::o;5646:505::-;5741:6;5749;5757;5810:2;5798:9;5789:7;5785:23;5781:32;5778:52;;;5826:1;5823;5816:12;5778:52;5862:9;5849:23;5839:33;;5923:2;5912:9;5908:18;5895:32;-1:-1:-1;;;;;5942:6:14;5939:30;5936:50;;;5982:1;5979;5972:12;5936:50;6021:70;6083:7;6074:6;6063:9;6059:22;6021:70;:::i;:::-;5646:505;;6110:8;;-1:-1:-1;5995:96:14;;-1:-1:-1;;;;5646:505:14:o;6341:437::-;6427:6;6435;6488:2;6476:9;6467:7;6463:23;6459:32;6456:52;;;6504:1;6501;6494:12;6456:52;6544:9;6531:23;-1:-1:-1;;;;;6569:6:14;6566:30;6563:50;;;6609:1;6606;6599:12;6563:50;6648:70;6710:7;6701:6;6690:9;6686:22;6648:70;:::i;:::-;6737:8;;6622:96;;-1:-1:-1;6341:437:14;-1:-1:-1;;;;6341:437:14:o;6783:347::-;6848:6;6856;6909:2;6897:9;6888:7;6884:23;6880:32;6877:52;;;6925:1;6922;6915:12;6877:52;6948:29;6967:9;6948:29;:::i;:::-;6938:39;;7027:2;7016:9;7012:18;6999:32;7074:5;7067:13;7060:21;7053:5;7050:32;7040:60;;7096:1;7093;7086:12;7040:60;7119:5;7109:15;;;6783:347;;;;;:::o;7135:667::-;7230:6;7238;7246;7254;7307:3;7295:9;7286:7;7282:23;7278:33;7275:53;;;7324:1;7321;7314:12;7275:53;7347:29;7366:9;7347:29;:::i;:::-;7337:39;;7395:38;7429:2;7418:9;7414:18;7395:38;:::i;:::-;7385:48;;7480:2;7469:9;7465:18;7452:32;7442:42;;7535:2;7524:9;7520:18;7507:32;-1:-1:-1;;;;;7554:6:14;7551:30;7548:50;;;7594:1;7591;7584:12;7548:50;7617:22;;7670:4;7662:13;;7658:27;-1:-1:-1;7648:55:14;;7699:1;7696;7689:12;7648:55;7722:74;7788:7;7783:2;7770:16;7765:2;7761;7757:11;7722:74;:::i;:::-;7712:84;;;7135:667;;;;;;;:::o;7807:260::-;7875:6;7883;7936:2;7924:9;7915:7;7911:23;7907:32;7904:52;;;7952:1;7949;7942:12;7904:52;7975:29;7994:9;7975:29;:::i;8072:380::-;8151:1;8147:12;;;;8194;;;8215:61;;8269:4;8261:6;8257:17;8247:27;;8215:61;8322:2;8314:6;8311:14;8291:18;8288:38;8285:161;;8368:10;8363:3;8359:20;8356:1;8349:31;8403:4;8400:1;8393:15;8431:4;8428:1;8421:15;8285:161;;8072:380;;;:::o;9700:336::-;9902:2;9884:21;;;9941:2;9921:18;;;9914:30;-1:-1:-1;;;9975:2:14;9960:18;;9953:42;10027:2;10012:18;;9700:336::o;10041:404::-;10243:2;10225:21;;;10282:2;10262:18;;;10255:30;10321:34;10316:2;10301:18;;10294:62;-1:-1:-1;;;10387:2:14;10372:18;;10365:38;10435:3;10420:19;;10041:404::o;10450:127::-;10511:10;10506:3;10502:20;10499:1;10492:31;10542:4;10539:1;10532:15;10566:4;10563:1;10556:15;10582:128;10622:3;10653:1;10649:6;10646:1;10643:13;10640:39;;;10659:18;;:::i;:::-;-1:-1:-1;10695:9:14;;10582:128::o;11071:168::-;11111:7;11177:1;11173;11169:6;11165:14;11162:1;11159:21;11154:1;11147:9;11140:17;11136:45;11133:71;;;11184:18;;:::i;:::-;-1:-1:-1;11224:9:14;;11071:168::o;12416:127::-;12477:10;12472:3;12468:20;12465:1;12458:31;12508:4;12505:1;12498:15;12532:4;12529:1;12522:15;12548:135;12587:3;12608:17;;;12605:43;;12628:18;;:::i;:::-;-1:-1:-1;12675:1:14;12664:13;;12548:135::o;13864:125::-;13904:4;13932:1;13929;13926:8;13923:34;;;13937:18;;:::i;:::-;-1:-1:-1;13974:9:14;;13864:125::o;13994:127::-;14055:10;14050:3;14046:20;14043:1;14036:31;14086:4;14083:1;14076:15;14110:4;14107:1;14100:15;14126:120;14166:1;14192;14182:35;;14197:18;;:::i;:::-;-1:-1:-1;14231:9:14;;14126:120::o;14840:415::-;15042:2;15024:21;;;15081:2;15061:18;;;15054:30;15120:34;15115:2;15100:18;;15093:62;-1:-1:-1;;;15186:2:14;15171:18;;15164:49;15245:3;15230:19;;14840:415::o;15676:470::-;15855:3;15893:6;15887:13;15909:53;15955:6;15950:3;15943:4;15935:6;15931:17;15909:53;:::i;:::-;16025:13;;15984:16;;;;16047:57;16025:13;15984:16;16081:4;16069:17;;16047:57;:::i;:::-;16120:20;;15676:470;-1:-1:-1;;;;15676:470:14:o;18210:489::-;-1:-1:-1;;;;;18479:15:14;;;18461:34;;18531:15;;18526:2;18511:18;;18504:43;18578:2;18563:18;;18556:34;;;18626:3;18621:2;18606:18;;18599:31;;;18404:4;;18647:46;;18673:19;;18665:6;18647:46;:::i;:::-;18639:54;18210:489;-1:-1:-1;;;;;;18210:489:14:o;18704:249::-;18773:6;18826:2;18814:9;18805:7;18801:23;18797:32;18794:52;;;18842:1;18839;18832:12;18794:52;18874:9;18868:16;18893:30;18917:5;18893:30;:::i;18958:112::-;18990:1;19016;19006:35;;19021:18;;:::i;:::-;-1:-1:-1;19055:9:14;;18958:112::o

Swarm Source

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