ETH Price: $2,645.34 (+0.72%)

Token

Bull Tang Clan (BTCNFT)
 

Overview

Max Total Supply

556 BTCNFT

Holders

178

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BTCNFT
0x7b2d448585765d9b8595ff144e8a754c8228fda6
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Bull Tang Clan is a unique collection of Bulls & Cows hanging around the Ethereum blockchain. Owning a Bull Tang Clan grants you access to unique perks toward our roadmap and Pitch2Fund Treasury.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Bulltangclan

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-10
*/

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/bulltangclan.sol

// SPDX-License-Identifier: MIT

/*

$$\                 $$\ $$\         $$\                                                   $$\                     
$$ |                $$ |$$ |        $$ |                                                  $$ |                    
$$$$$$$\  $$\   $$\ $$ |$$ |      $$$$$$\    $$$$$$\  $$$$$$$\   $$$$$$\         $$$$$$$\ $$ | $$$$$$\  $$$$$$$\  
$$  __$$\ $$ |  $$ |$$ |$$ |      \_$$  _|   \____$$\ $$  __$$\ $$  __$$\       $$  _____|$$ | \____$$\ $$  __$$\ 
$$ |  $$ |$$ |  $$ |$$ |$$ |        $$ |     $$$$$$$ |$$ |  $$ |$$ /  $$ |      $$ /      $$ | $$$$$$$ |$$ |  $$ |
$$ |  $$ |$$ |  $$ |$$ |$$ |        $$ |$$\ $$  __$$ |$$ |  $$ |$$ |  $$ |      $$ |      $$ |$$  __$$ |$$ |  $$ |
$$$$$$$  |\$$$$$$  |$$ |$$ |        \$$$$  |\$$$$$$$ |$$ |  $$ |\$$$$$$$ |      \$$$$$$$\ $$ |\$$$$$$$ |$$ |  $$ |
\_______/  \______/ \__|\__|         \____/  \_______|\__|  \__| \____$$ |       \_______|\__| \_______|\__|  \__|
                                                                $$\   $$ |                                        
                                                                \$$$$$$  |                                        
                                                                 \______/                                         

*/
pragma solidity ^0.8.8;



contract Bulltangclan is ERC721Enumerable, Ownable {
    using Strings for uint256;

    uint256 public constant MAX_NFTS = 8888;
    uint256 public constant PRICE_PRESALE = 0.04 ether;
    uint256 public constant PRICE_WHITELIST = 0.06 ether;
    uint256 public constant PRICE_PUBLIC_SALE = 0.06 ether;
    uint256 public constant MAX_MINT_PRESALE = 5;
    uint256 public constant MAX_MINT_WHITELIST = 5;
    uint256 public constant MAX_MINT_PUBLIC = 3;
    
    uint256 public constant RESERVED_NFTS = 482;
    address public constant treasuryAddress = 0x89a105f59633e8420Da2683e86F6b5f621Fc6747;
    address public constant teamAddress = 0xce6C41f86181053cd0AE946e484a4cbA46eD4b1f;
    

    uint256 public reservedClaimed;
    uint256 public totalNftsMinted;
    string public baseURI;
    string public baseExtension = ".json";
    bool public presaleStarted;
    bool public whitelistStarted;
    bool public publicSaleStarted;

    uint256 private pricePresale = PRICE_PRESALE;
    uint256 private priceWhitelistSale = PRICE_WHITELIST;
    uint256 private pricePublicSale = PRICE_PUBLIC_SALE;

    mapping(address => bool) private _presaleList;
    mapping(address => bool) private _whitelist;
    mapping(address => uint256) private _totalClaimed;

    event BaseURIChanged(string baseURI);
    event PresaleMint(address minter, uint256 amountOfNfts);
    event WhitelistMint(address minter, uint256 amountOfNfts);
    event PublicSaleMint(address minter, uint256 amountOfNfts);

    modifier whenPresaleStarted() {
        require(presaleStarted, "Presale is not open yet");
        _;
    }

    modifier whenPublicSaleStarted() {
        require(publicSaleStarted, "Public sale is not open yet");
        _;
    }

    modifier whenWhitelistSaleStarted() {
        require(whitelistStarted, "Whitelist sale is not open yet");
        _;
    }

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI
        
      ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
       
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function claimReserved(address recipient, uint256 amount) external onlyOwner {
        require(reservedClaimed != RESERVED_NFTS, "You have already claimed all reserved nfts");
        require(reservedClaimed + amount <= RESERVED_NFTS, "Mint exceeds max reserved nfts");
        require(recipient != address(0), "Cannot add null address");
        require(totalSupply() < MAX_NFTS, "All NFTs have been minted");
        require(totalSupply() + amount <= MAX_NFTS, "Mint exceeds max supply");

        uint256 _nextTokenId = totalNftsMinted + 1;

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(recipient, _nextTokenId + i);
        }
        totalNftsMinted += amount;
        reservedClaimed += amount;
    }

    function addToPresale(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _presaleList[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }

    function addToWhitelist(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _whitelist[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }


    function checkPresaleEligibility(address addr) external view returns (bool) {
        return _presaleList[addr];
    }

    function checkWhitelistEligibility(address addr) external view returns (bool) {
        return _whitelist[addr];
    }

    function amountClaimedBy(address owner) external view returns (uint256) {
        require(owner != address(0), "Cannot add null address");

        return _totalClaimed[owner];
    }

    function mint(uint256 amountOfNfts) external payable whenPublicSaleStarted {
        require(totalSupply() < MAX_NFTS, "All NFTs have been minted");
        require(amountOfNfts <= MAX_MINT_PUBLIC, "Amount exceeds NFTs per transaction");
        require(totalSupply() + amountOfNfts <= MAX_NFTS, "Mint exceeds max supply");
        require(_totalClaimed[msg.sender] + amountOfNfts <= MAX_MINT_PUBLIC, "Amount exceeds max NFTs per wallet");
        require(amountOfNfts > 0, "Must mint at least one NFT");
        require(pricePublicSale * amountOfNfts == msg.value, "Amount of ETH is incorrect");

        for (uint256 i = 0; i < amountOfNfts; i++) {
            uint256 tokenId = totalNftsMinted + 1;

            totalNftsMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PublicSaleMint(msg.sender, amountOfNfts);
    }

    function mintPresale(uint256 amountOfNfts) external payable whenPresaleStarted {
        require(_presaleList[msg.sender], "You are not whitelisted for the presale");
        require(totalSupply() < MAX_NFTS, "All NFTs have been minted");
        require(amountOfNfts <= MAX_MINT_PRESALE, "Purchase exceeds presale limit");
        require(totalSupply() + amountOfNfts <= MAX_NFTS, "Mint exceeds max supply");
        require(_totalClaimed[msg.sender] + amountOfNfts <= MAX_MINT_PRESALE, "Purchase exceeds max allowed per wallet");
        require(amountOfNfts > 0, "Must mint at least one NFT");
        require(pricePresale * amountOfNfts == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfNfts; i++) {
            uint256 tokenId = totalNftsMinted + 1;

            totalNftsMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PresaleMint(msg.sender, amountOfNfts);
    }

    function mintWhitelist(uint256 amountOfNfts) external payable whenWhitelistSaleStarted {
        require(_whitelist[msg.sender], "You are not whitelisted to mint");
        require(totalSupply() < MAX_NFTS, "All NFTs have been minted");
        require(amountOfNfts <= MAX_MINT_WHITELIST, "Purchase exceeds Whitelist limit");
        require(totalSupply() + amountOfNfts <= MAX_NFTS, "Mint exceeds max supply");
        require(_totalClaimed[msg.sender] + amountOfNfts <= MAX_MINT_WHITELIST, "Purchase exceeds max allowed max allowed per wallet");
        require(amountOfNfts > 0, "Must mint at least one NFT");
        require(priceWhitelistSale * amountOfNfts == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfNfts; i++) {
            uint256 tokenId = totalNftsMinted + 1;

            totalNftsMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit WhitelistMint(msg.sender, amountOfNfts);
    }
    
 

    function togglePresaleStarted() external onlyOwner {
        presaleStarted = !presaleStarted;
    }

    function toggleWhitelistStarted() external onlyOwner {
        whitelistStarted = !whitelistStarted;
    }
    
    function togglePublicSaleStarted() external onlyOwner {
        publicSaleStarted = !publicSaleStarted;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
        emit BaseURIChanged(_newBaseURI);
    }

    function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
        baseExtension = _newBaseExtension;
    }
    
    
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory){
        require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
        
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : "";
    }
    
    function withdrawAll() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficent balance");
        _widthdraw(treasuryAddress, ((balance * 50) / 100));
        _widthdraw(teamAddress, ((balance * 50) / 100));
    }

    function _widthdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{ value: _amount }("");
        require(success, "Failed to widthdraw Ether");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","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":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfNfts","type":"uint256"}],"name":"PresaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfNfts","type":"uint256"}],"name":"PublicSaleMint","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfNfts","type":"uint256"}],"name":"WhitelistMint","type":"event"},{"inputs":[],"name":"MAX_MINT_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_WHITELIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PUBLIC_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_WHITELIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_NFTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkWhitelistEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimReserved","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":[{"internalType":"uint256","name":"amountOfNfts","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfNfts","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfNfts","type":"uint256"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","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":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedClaimed","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":"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhitelistStarted","outputs":[],"stateMutability":"nonpayable","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":"totalNftsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600e9190620001e1565b50668e1bc9bf04000060105566d529ae9e86000060115566d529ae9e8600006012553480156200005757600080fd5b50604051620038d3380380620038d38339810160408190526200007a9162000361565b82518390839062000093906000906020850190620001e1565b508051620000a9906001906020840190620001e1565b505050620000c6620000c0620000da60201b60201c565b620000de565b620000d18162000130565b50505062000464565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b031633146200018f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001a490600d906020840190620001e1565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051620001d69190620003f2565b60405180910390a150565b828054620001ef9062000427565b90600052602060002090601f0160209004810192826200021357600085556200025e565b82601f106200022e57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025e57825182559160200191906001019062000241565b506200026c92915062000270565b5090565b5b808211156200026c576000815560010162000271565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002ba578181015183820152602001620002a0565b83811115620002ca576000848401525b50505050565b600082601f830112620002e257600080fd5b81516001600160401b0380821115620002ff57620002ff62000287565b604051601f8301601f19908116603f011681019082821181831017156200032a576200032a62000287565b816040528381528660208588010111156200034457600080fd5b620003578460208301602089016200029d565b9695505050505050565b6000806000606084860312156200037757600080fd5b83516001600160401b03808211156200038f57600080fd5b6200039d87838801620002d0565b94506020860151915080821115620003b457600080fd5b620003c287838801620002d0565b93506040860151915080821115620003d957600080fd5b50620003e886828701620002d0565b9150509250925092565b6020815260008251806020840152620004138160408501602087016200029d565b601f01601f19169190910160400192915050565b600181811c908216806200043c57607f821691505b602082108114156200045e57634e487b7160e01b600052602260045260246000fd5b50919050565b61345f80620004746000396000f3fe6080604052600436106102e45760003560e01c8063715018a611610190578063afa6c735116100dc578063da3ef23f11610095578063ed1fc2a21161006f578063ed1fc2a214610857578063f2fde38b1461086c578063f6f279601461088c578063f759867a146108c557600080fd5b8063da3ef23f146107d9578063e985e9c5146107f9578063eb66896c1461084257600080fd5b8063afa6c73514610741578063b88d4fde1461075c578063c5f956af1461077c578063c6682862146107a4578063c87b56dd146107b9578063d78521991461053257600080fd5b80638da5cb5b11610149578063a22cb46511610123578063a22cb465146106a8578063a2e91477146106c8578063a425e257146106e8578063aef6ee1f1461072157600080fd5b80638da5cb5b1461066257806395d89b4114610680578063a0712d681461069557600080fd5b8063715018a6146105ec57806372fbaacb146106015780637e95eac41461056d5780637f64978314610617578063853828b6146106375780638a53388a1461064c57600080fd5b80632f745c591161024f5780634fe8545a1161020857806363172ac1116101e257806363172ac1146105825780636352211e146105975780636c0360eb146105b757806370a08231146105cc57600080fd5b80634fe8545a1461053257806355f804b31461054d57806358941a4d1461056d57600080fd5b80632f745c591461048b5780632f814575146104ab578063339159d3146104c057806342842e0e146104df5780634618163e146104ff5780634f6ccce71461051257600080fd5b806318160ddd116102a157806318160ddd146103d85780631978f469146103ed5780631b5757f21461040d5780631c75f0851461042d57806323b872dd14610455578063245100431461047557600080fd5b806301ffc9a7146102e957806304549d6f1461031e57806306fdde0314610338578063081812fc1461035a578063093d8c6414610392578063095ea7b3146103b6575b600080fd5b3480156102f557600080fd5b50610309610304366004612cc0565b6108d8565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50600f546103099060ff1681565b34801561034457600080fd5b5061034d610903565b6040516103159190612d35565b34801561036657600080fd5b5061037a610375366004612d48565b610995565b6040516001600160a01b039091168152602001610315565b34801561039e57600080fd5b506103a86122b881565b604051908152602001610315565b3480156103c257600080fd5b506103d66103d1366004612d7d565b610a2f565b005b3480156103e457600080fd5b506008546103a8565b3480156103f957600080fd5b506103a8610408366004612da7565b610b45565b34801561041957600080fd5b506103d6610428366004612d7d565b610b89565b34801561043957600080fd5b5061037a73ce6c41f86181053cd0ae946e484a4cba46ed4b1f81565b34801561046157600080fd5b506103d6610470366004612dc2565b610d76565b34801561048157600080fd5b506103a8600b5481565b34801561049757600080fd5b506103a86104a6366004612d7d565b610da7565b3480156104b757600080fd5b506103d6610e3d565b3480156104cc57600080fd5b50600f5461030990610100900460ff1681565b3480156104eb57600080fd5b506103d66104fa366004612dc2565b610e86565b6103d661050d366004612d48565b610ea1565b34801561051e57600080fd5b506103a861052d366004612d48565b6111bb565b34801561053e57600080fd5b506103a866d529ae9e86000081565b34801561055957600080fd5b506103d6610568366004612e8a565b61124e565b34801561057957600080fd5b506103a8600581565b34801561058e57600080fd5b506103a8600381565b3480156105a357600080fd5b5061037a6105b2366004612d48565b6112bb565b3480156105c357600080fd5b5061034d611332565b3480156105d857600080fd5b506103a86105e7366004612da7565b6113c0565b3480156105f857600080fd5b506103d6611447565b34801561060d57600080fd5b506103a8600c5481565b34801561062357600080fd5b506103d6610632366004612ed3565b61147d565b34801561064357600080fd5b506103d6611611565b34801561065857600080fd5b506103a86101e281565b34801561066e57600080fd5b50600a546001600160a01b031661037a565b34801561068c57600080fd5b5061034d6116db565b6103d66106a3366004612d48565b6116ea565b3480156106b457600080fd5b506103d66106c3366004612f48565b6119a0565b3480156106d457600080fd5b50600f546103099062010000900460ff1681565b3480156106f457600080fd5b50610309610703366004612da7565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561072d57600080fd5b506103d661073c366004612ed3565b611a65565b34801561074d57600080fd5b506103a8668e1bc9bf04000081565b34801561076857600080fd5b506103d6610777366004612f84565b611bf9565b34801561078857600080fd5b5061037a7389a105f59633e8420da2683e86f6b5f621fc674781565b3480156107b057600080fd5b5061034d611c31565b3480156107c557600080fd5b5061034d6107d4366004612d48565b611c3e565b3480156107e557600080fd5b506103d66107f4366004612e8a565b611d1c565b34801561080557600080fd5b50610309610814366004613000565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561084e57600080fd5b506103d6611d5d565b34801561086357600080fd5b506103d6611da4565b34801561087857600080fd5b506103d6610887366004612da7565b611de2565b34801561089857600080fd5b506103096108a7366004612da7565b6001600160a01b031660009081526014602052604090205460ff1690565b6103d66108d3366004612d48565b611e7a565b60006001600160e01b0319821663780e9d6360e01b14806108fd57506108fd8261218c565b92915050565b60606000805461091290613033565b80601f016020809104026020016040519081016040528092919081815260200182805461093e90613033565b801561098b5780601f106109605761010080835404028352916020019161098b565b820191906000526020600020905b81548152906001019060200180831161096e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a135760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a3a826112bb565b9050806001600160a01b0316836001600160a01b03161415610aa85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a0a565b336001600160a01b0382161480610ac45750610ac48133610814565b610b365760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a0a565b610b4083836121dc565b505050565b60006001600160a01b038216610b6d5760405162461bcd60e51b8152600401610a0a9061306e565b506001600160a01b031660009081526015602052604090205490565b600a546001600160a01b03163314610bb35760405162461bcd60e51b8152600401610a0a906130a5565b6101e2600b541415610c1a5760405162461bcd60e51b815260206004820152602a60248201527f596f75206861766520616c726561647920636c61696d656420616c6c207265736044820152696572766564206e66747360b01b6064820152608401610a0a565b6101e281600b54610c2b91906130f0565b1115610c795760405162461bcd60e51b815260206004820152601e60248201527f4d696e742065786365656473206d6178207265736572766564206e66747300006044820152606401610a0a565b6001600160a01b038216610c9f5760405162461bcd60e51b8152600401610a0a9061306e565b6122b8610cab60085490565b10610cc85760405162461bcd60e51b8152600401610a0a90613108565b6122b881610cd560085490565b610cdf91906130f0565b1115610cfd5760405162461bcd60e51b8152600401610a0a9061313f565b6000600c546001610d0e91906130f0565b905060005b82811015610d4057610d2e84610d2983856130f0565b61224a565b80610d3881613176565b915050610d13565b5081600c6000828254610d5391906130f0565b9250508190555081600b6000828254610d6c91906130f0565b9091555050505050565b610d803382612264565b610d9c5760405162461bcd60e51b8152600401610a0a90613191565b610b4083838361235b565b6000610db2836113c0565b8210610e145760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a0a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e675760405162461bcd60e51b8152600401610a0a906130a5565b600f805462ff0000198116620100009182900460ff1615909102179055565b610b4083838360405180602001604052806000815250611bf9565b600f54610100900460ff16610ef85760405162461bcd60e51b815260206004820152601e60248201527f57686974656c6973742073616c65206973206e6f74206f70656e2079657400006044820152606401610a0a565b3360009081526014602052604090205460ff16610f575760405162461bcd60e51b815260206004820152601f60248201527f596f7520617265206e6f742077686974656c697374656420746f206d696e74006044820152606401610a0a565b6122b8610f6360085490565b10610f805760405162461bcd60e51b8152600401610a0a90613108565b6005811115610fd15760405162461bcd60e51b815260206004820181905260248201527f507572636861736520657863656564732057686974656c697374206c696d69746044820152606401610a0a565b6122b881610fde60085490565b610fe891906130f0565b11156110065760405162461bcd60e51b8152600401610a0a9061313f565b336000908152601560205260409020546005906110249083906130f0565b111561108e5760405162461bcd60e51b815260206004820152603360248201527f50757263686173652065786365656473206d617820616c6c6f776564206d617860448201527208185b1b1bddd959081c195c881dd85b1b195d606a1b6064820152608401610a0a565b600081116110ae5760405162461bcd60e51b8152600401610a0a906131e2565b34816011546110bd9190613219565b146111045760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a0a565b60005b8181101561117d576000600c54600161112091906130f0565b90506001600c600082825461113591906130f0565b909155505033600090815260156020526040812080546001929061115a9084906130f0565b9091555061116a9050338261224a565b508061117581613176565b915050611107565b5060408051338152602081018390527f3175668c3bc41d83dd982a992932fc7512416b71850f41443845d2a4c2e3ec6391015b60405180910390a150565b60006111c660085490565b82106112295760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a0a565b6008828154811061123c5761123c613238565b90600052602060002001549050919050565b600a546001600160a01b031633146112785760405162461bcd60e51b8152600401610a0a906130a5565b805161128b90600d906020840190612c11565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516111b09190612d35565b6000818152600260205260408120546001600160a01b0316806108fd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a0a565b600d805461133f90613033565b80601f016020809104026020016040519081016040528092919081815260200182805461136b90613033565b80156113b85780601f1061138d576101008083540402835291602001916113b8565b820191906000526020600020905b81548152906001019060200180831161139b57829003601f168201915b505050505081565b60006001600160a01b03821661142b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a0a565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146114715760405162461bcd60e51b8152600401610a0a906130a5565b61147b6000612506565b565b600a546001600160a01b031633146114a75760405162461bcd60e51b8152600401610a0a906130a5565b60005b81811015610b405760008383838181106114c6576114c6613238565b90506020020160208101906114db9190612da7565b6001600160a01b031614156115025760405162461bcd60e51b8152600401610a0a9061306e565b60016014600085858581811061151a5761151a613238565b905060200201602081019061152f9190612da7565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560158185858581811061156f5761156f613238565b90506020020160208101906115849190612da7565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116115b15760006115fe565b601560008484848181106115c7576115c7613238565b90506020020160208101906115dc9190612da7565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b508061160981613176565b9150506114aa565b600a546001600160a01b0316331461163b5760405162461bcd60e51b8152600401610a0a906130a5565b478061167f5760405162461bcd60e51b8152602060048201526013602482015272496e737566666963656e742062616c616e636560681b6044820152606401610a0a565b6116b37389a105f59633e8420da2683e86f6b5f621fc674760646116a4846032613219565b6116ae9190613264565b612558565b6116d873ce6c41f86181053cd0ae946e484a4cba46ed4b1f60646116a4846032613219565b50565b60606001805461091290613033565b600f5462010000900460ff166117425760405162461bcd60e51b815260206004820152601b60248201527f5075626c69632073616c65206973206e6f74206f70656e2079657400000000006044820152606401610a0a565b6122b861174e60085490565b1061176b5760405162461bcd60e51b8152600401610a0a90613108565b60038111156117c85760405162461bcd60e51b815260206004820152602360248201527f416d6f756e742065786365656473204e46547320706572207472616e7361637460448201526234b7b760e91b6064820152608401610a0a565b6122b8816117d560085490565b6117df91906130f0565b11156117fd5760405162461bcd60e51b8152600401610a0a9061313f565b3360009081526015602052604090205460039061181b9083906130f0565b11156118745760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742065786365656473206d6178204e465473207065722077616c6c604482015261195d60f21b6064820152608401610a0a565b600081116118945760405162461bcd60e51b8152600401610a0a906131e2565b34816012546118a39190613219565b146118f05760405162461bcd60e51b815260206004820152601a60248201527f416d6f756e74206f662045544820697320696e636f72726563740000000000006044820152606401610a0a565b60005b81811015611969576000600c54600161190c91906130f0565b90506001600c600082825461192191906130f0565b90915550503360009081526015602052604081208054600192906119469084906130f0565b909155506119569050338261224a565b508061196181613176565b9150506118f3565b5060408051338152602081018390527f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b591016111b0565b6001600160a01b0382163314156119f95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a0a565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611a8f5760405162461bcd60e51b8152600401610a0a906130a5565b60005b81811015610b40576000838383818110611aae57611aae613238565b9050602002016020810190611ac39190612da7565b6001600160a01b03161415611aea5760405162461bcd60e51b8152600401610a0a9061306e565b600160136000858585818110611b0257611b02613238565b9050602002016020810190611b179190612da7565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155601581858585818110611b5757611b57613238565b9050602002016020810190611b6c9190612da7565b6001600160a01b03166001600160a01b031681526020019081526020016000205411611b99576000611be6565b60156000848484818110611baf57611baf613238565b9050602002016020810190611bc49190612da7565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b5080611bf181613176565b915050611a92565b611c033383612264565b611c1f5760405162461bcd60e51b8152600401610a0a90613191565b611c2b848484846125fb565b50505050565b600e805461133f90613033565b6000818152600260205260409020546060906001600160a01b0316611cbd5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a0a565b6000611cc761262e565b90506000815111611ce75760405180602001604052806000815250611d15565b80611cf18461263d565b600e604051602001611d0593929190613278565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611d465760405162461bcd60e51b8152600401610a0a906130a5565b8051611d5990600e906020840190612c11565b5050565b600a546001600160a01b03163314611d875760405162461bcd60e51b8152600401610a0a906130a5565b600f805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b03163314611dce5760405162461bcd60e51b8152600401610a0a906130a5565b600f805460ff19811660ff90911615179055565b600a546001600160a01b03163314611e0c5760405162461bcd60e51b8152600401610a0a906130a5565b6001600160a01b038116611e715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0a565b6116d881612506565b600f5460ff16611ecc5760405162461bcd60e51b815260206004820152601760248201527f50726573616c65206973206e6f74206f70656e207965740000000000000000006044820152606401610a0a565b3360009081526013602052604090205460ff16611f3b5760405162461bcd60e51b815260206004820152602760248201527f596f7520617265206e6f742077686974656c697374656420666f72207468652060448201526670726573616c6560c81b6064820152608401610a0a565b6122b8611f4760085490565b10611f645760405162461bcd60e51b8152600401610a0a90613108565b6005811115611fb55760405162461bcd60e51b815260206004820152601e60248201527f507572636861736520657863656564732070726573616c65206c696d697400006044820152606401610a0a565b6122b881611fc260085490565b611fcc91906130f0565b1115611fea5760405162461bcd60e51b8152600401610a0a9061313f565b336000908152601560205260409020546005906120089083906130f0565b11156120665760405162461bcd60e51b815260206004820152602760248201527f50757263686173652065786365656473206d617820616c6c6f77656420706572604482015266081dd85b1b195d60ca1b6064820152608401610a0a565b600081116120865760405162461bcd60e51b8152600401610a0a906131e2565b34816010546120959190613219565b146120dc5760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a0a565b60005b81811015612155576000600c5460016120f891906130f0565b90506001600c600082825461210d91906130f0565b90915550503360009081526015602052604081208054600192906121329084906130f0565b909155506121429050338261224a565b508061214d81613176565b9150506120df565b5060408051338152602081018390527ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a391016111b0565b60006001600160e01b031982166380ac58cd60e01b14806121bd57506001600160e01b03198216635b5e139f60e01b145b806108fd57506301ffc9a760e01b6001600160e01b03198316146108fd565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612211826112bb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611d5982826040518060200160405280600081525061273b565b6000818152600260205260408120546001600160a01b03166122dd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a0a565b60006122e8836112bb565b9050806001600160a01b0316846001600160a01b031614806123235750836001600160a01b031661231884610995565b6001600160a01b0316145b8061235357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661236e826112bb565b6001600160a01b0316146123d65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a0a565b6001600160a01b0382166124385760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0a565b61244383838361276e565b61244e6000826121dc565b6001600160a01b038316600090815260036020526040812080546001929061247790849061333c565b90915550506001600160a01b03821660009081526003602052604081208054600192906124a59084906130f0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146125a5576040519150601f19603f3d011682016040523d82523d6000602084013e6125aa565b606091505b5050905080610b405760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20776964746864726177204574686572000000000000006044820152606401610a0a565b61260684848461235b565b61261284848484612826565b611c2b5760405162461bcd60e51b8152600401610a0a90613353565b6060600d805461091290613033565b6060816126615750506040805180820190915260018152600360fc1b602082015290565b8160005b811561268b578061267581613176565b91506126849050600a83613264565b9150612665565b60008167ffffffffffffffff8111156126a6576126a6612dfe565b6040519080825280601f01601f1916602001820160405280156126d0576020820181803683370190505b5090505b8415612353576126e560018361333c565b91506126f2600a866133a5565b6126fd9060306130f0565b60f81b81838151811061271257612712613238565b60200101906001600160f81b031916908160001a905350612734600a86613264565b94506126d4565b6127458383612933565b6127526000848484612826565b610b405760405162461bcd60e51b8152600401610a0a90613353565b6001600160a01b0383166127c9576127c481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6127ec565b816001600160a01b0316836001600160a01b0316146127ec576127ec8382612a81565b6001600160a01b03821661280357610b4081612b1e565b826001600160a01b0316826001600160a01b031614610b4057610b408282612bcd565b60006001600160a01b0384163b1561292857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061286a9033908990889088906004016133b9565b602060405180830381600087803b15801561288457600080fd5b505af19250505080156128b4575060408051601f3d908101601f191682019092526128b1918101906133f6565b60015b61290e573d8080156128e2576040519150601f19603f3d011682016040523d82523d6000602084013e6128e7565b606091505b5080516129065760405162461bcd60e51b8152600401610a0a90613353565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612353565b506001949350505050565b6001600160a01b0382166129895760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a0a565b6000818152600260205260409020546001600160a01b0316156129ee5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a0a565b6129fa6000838361276e565b6001600160a01b0382166000908152600360205260408120805460019290612a239084906130f0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612a8e846113c0565b612a98919061333c565b600083815260076020526040902054909150808214612aeb576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612b309060019061333c565b60008381526009602052604081205460088054939450909284908110612b5857612b58613238565b906000526020600020015490508060088381548110612b7957612b79613238565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612bb157612bb1613413565b6001900381819060005260206000200160009055905550505050565b6000612bd8836113c0565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612c1d90613033565b90600052602060002090601f016020900481019282612c3f5760008555612c85565b82601f10612c5857805160ff1916838001178555612c85565b82800160010185558215612c85579182015b82811115612c85578251825591602001919060010190612c6a565b50612c91929150612c95565b5090565b5b80821115612c915760008155600101612c96565b6001600160e01b0319811681146116d857600080fd5b600060208284031215612cd257600080fd5b8135611d1581612caa565b60005b83811015612cf8578181015183820152602001612ce0565b83811115611c2b5750506000910152565b60008151808452612d21816020860160208601612cdd565b601f01601f19169290920160200192915050565b602081526000611d156020830184612d09565b600060208284031215612d5a57600080fd5b5035919050565b80356001600160a01b0381168114612d7857600080fd5b919050565b60008060408385031215612d9057600080fd5b612d9983612d61565b946020939093013593505050565b600060208284031215612db957600080fd5b611d1582612d61565b600080600060608486031215612dd757600080fd5b612de084612d61565b9250612dee60208501612d61565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612e2f57612e2f612dfe565b604051601f8501601f19908116603f01168101908282118183101715612e5757612e57612dfe565b81604052809350858152868686011115612e7057600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612e9c57600080fd5b813567ffffffffffffffff811115612eb357600080fd5b8201601f81018413612ec457600080fd5b61235384823560208401612e14565b60008060208385031215612ee657600080fd5b823567ffffffffffffffff80821115612efe57600080fd5b818501915085601f830112612f1257600080fd5b813581811115612f2157600080fd5b8660208260051b8501011115612f3657600080fd5b60209290920196919550909350505050565b60008060408385031215612f5b57600080fd5b612f6483612d61565b915060208301358015158114612f7957600080fd5b809150509250929050565b60008060008060808587031215612f9a57600080fd5b612fa385612d61565b9350612fb160208601612d61565b925060408501359150606085013567ffffffffffffffff811115612fd457600080fd5b8501601f81018713612fe557600080fd5b612ff487823560208401612e14565b91505092959194509250565b6000806040838503121561301357600080fd5b61301c83612d61565b915061302a60208401612d61565b90509250929050565b600181811c9082168061304757607f821691505b6020821081141561306857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526017908201527f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613103576131036130da565b500190565b60208082526019908201527f416c6c204e4654732068617665206265656e206d696e74656400000000000000604082015260600190565b60208082526017908201527f4d696e742065786365656473206d617820737570706c79000000000000000000604082015260600190565b600060001982141561318a5761318a6130da565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601a908201527f4d757374206d696e74206174206c65617374206f6e65204e4654000000000000604082015260600190565b6000816000190483118215151615613233576132336130da565b500290565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826132735761327361324e565b500490565b60008451602061328b8285838a01612cdd565b85519184019161329e8184848a01612cdd565b8554920191600090600181811c90808316806132bb57607f831692505b8583108114156132d957634e487b7160e01b85526022600452602485fd5b8080156132ed57600181146132fe5761332b565b60ff1985168852838801955061332b565b60008b81526020902060005b858110156133235781548a82015290840190880161330a565b505083880195505b50939b9a5050505050505050505050565b60008282101561334e5761334e6130da565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826133b4576133b461324e565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133ec90830184612d09565b9695505050505050565b60006020828403121561340857600080fd5b8151611d1581612caa565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200cb289c09e2852147df56683824083998ff1b218b068589545713207daea67be64736f6c63430008080033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e42756c6c2054616e6720436c616e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064254434e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b697066733a2f2f5442442f000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102e45760003560e01c8063715018a611610190578063afa6c735116100dc578063da3ef23f11610095578063ed1fc2a21161006f578063ed1fc2a214610857578063f2fde38b1461086c578063f6f279601461088c578063f759867a146108c557600080fd5b8063da3ef23f146107d9578063e985e9c5146107f9578063eb66896c1461084257600080fd5b8063afa6c73514610741578063b88d4fde1461075c578063c5f956af1461077c578063c6682862146107a4578063c87b56dd146107b9578063d78521991461053257600080fd5b80638da5cb5b11610149578063a22cb46511610123578063a22cb465146106a8578063a2e91477146106c8578063a425e257146106e8578063aef6ee1f1461072157600080fd5b80638da5cb5b1461066257806395d89b4114610680578063a0712d681461069557600080fd5b8063715018a6146105ec57806372fbaacb146106015780637e95eac41461056d5780637f64978314610617578063853828b6146106375780638a53388a1461064c57600080fd5b80632f745c591161024f5780634fe8545a1161020857806363172ac1116101e257806363172ac1146105825780636352211e146105975780636c0360eb146105b757806370a08231146105cc57600080fd5b80634fe8545a1461053257806355f804b31461054d57806358941a4d1461056d57600080fd5b80632f745c591461048b5780632f814575146104ab578063339159d3146104c057806342842e0e146104df5780634618163e146104ff5780634f6ccce71461051257600080fd5b806318160ddd116102a157806318160ddd146103d85780631978f469146103ed5780631b5757f21461040d5780631c75f0851461042d57806323b872dd14610455578063245100431461047557600080fd5b806301ffc9a7146102e957806304549d6f1461031e57806306fdde0314610338578063081812fc1461035a578063093d8c6414610392578063095ea7b3146103b6575b600080fd5b3480156102f557600080fd5b50610309610304366004612cc0565b6108d8565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50600f546103099060ff1681565b34801561034457600080fd5b5061034d610903565b6040516103159190612d35565b34801561036657600080fd5b5061037a610375366004612d48565b610995565b6040516001600160a01b039091168152602001610315565b34801561039e57600080fd5b506103a86122b881565b604051908152602001610315565b3480156103c257600080fd5b506103d66103d1366004612d7d565b610a2f565b005b3480156103e457600080fd5b506008546103a8565b3480156103f957600080fd5b506103a8610408366004612da7565b610b45565b34801561041957600080fd5b506103d6610428366004612d7d565b610b89565b34801561043957600080fd5b5061037a73ce6c41f86181053cd0ae946e484a4cba46ed4b1f81565b34801561046157600080fd5b506103d6610470366004612dc2565b610d76565b34801561048157600080fd5b506103a8600b5481565b34801561049757600080fd5b506103a86104a6366004612d7d565b610da7565b3480156104b757600080fd5b506103d6610e3d565b3480156104cc57600080fd5b50600f5461030990610100900460ff1681565b3480156104eb57600080fd5b506103d66104fa366004612dc2565b610e86565b6103d661050d366004612d48565b610ea1565b34801561051e57600080fd5b506103a861052d366004612d48565b6111bb565b34801561053e57600080fd5b506103a866d529ae9e86000081565b34801561055957600080fd5b506103d6610568366004612e8a565b61124e565b34801561057957600080fd5b506103a8600581565b34801561058e57600080fd5b506103a8600381565b3480156105a357600080fd5b5061037a6105b2366004612d48565b6112bb565b3480156105c357600080fd5b5061034d611332565b3480156105d857600080fd5b506103a86105e7366004612da7565b6113c0565b3480156105f857600080fd5b506103d6611447565b34801561060d57600080fd5b506103a8600c5481565b34801561062357600080fd5b506103d6610632366004612ed3565b61147d565b34801561064357600080fd5b506103d6611611565b34801561065857600080fd5b506103a86101e281565b34801561066e57600080fd5b50600a546001600160a01b031661037a565b34801561068c57600080fd5b5061034d6116db565b6103d66106a3366004612d48565b6116ea565b3480156106b457600080fd5b506103d66106c3366004612f48565b6119a0565b3480156106d457600080fd5b50600f546103099062010000900460ff1681565b3480156106f457600080fd5b50610309610703366004612da7565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561072d57600080fd5b506103d661073c366004612ed3565b611a65565b34801561074d57600080fd5b506103a8668e1bc9bf04000081565b34801561076857600080fd5b506103d6610777366004612f84565b611bf9565b34801561078857600080fd5b5061037a7389a105f59633e8420da2683e86f6b5f621fc674781565b3480156107b057600080fd5b5061034d611c31565b3480156107c557600080fd5b5061034d6107d4366004612d48565b611c3e565b3480156107e557600080fd5b506103d66107f4366004612e8a565b611d1c565b34801561080557600080fd5b50610309610814366004613000565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561084e57600080fd5b506103d6611d5d565b34801561086357600080fd5b506103d6611da4565b34801561087857600080fd5b506103d6610887366004612da7565b611de2565b34801561089857600080fd5b506103096108a7366004612da7565b6001600160a01b031660009081526014602052604090205460ff1690565b6103d66108d3366004612d48565b611e7a565b60006001600160e01b0319821663780e9d6360e01b14806108fd57506108fd8261218c565b92915050565b60606000805461091290613033565b80601f016020809104026020016040519081016040528092919081815260200182805461093e90613033565b801561098b5780601f106109605761010080835404028352916020019161098b565b820191906000526020600020905b81548152906001019060200180831161096e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a135760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a3a826112bb565b9050806001600160a01b0316836001600160a01b03161415610aa85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a0a565b336001600160a01b0382161480610ac45750610ac48133610814565b610b365760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a0a565b610b4083836121dc565b505050565b60006001600160a01b038216610b6d5760405162461bcd60e51b8152600401610a0a9061306e565b506001600160a01b031660009081526015602052604090205490565b600a546001600160a01b03163314610bb35760405162461bcd60e51b8152600401610a0a906130a5565b6101e2600b541415610c1a5760405162461bcd60e51b815260206004820152602a60248201527f596f75206861766520616c726561647920636c61696d656420616c6c207265736044820152696572766564206e66747360b01b6064820152608401610a0a565b6101e281600b54610c2b91906130f0565b1115610c795760405162461bcd60e51b815260206004820152601e60248201527f4d696e742065786365656473206d6178207265736572766564206e66747300006044820152606401610a0a565b6001600160a01b038216610c9f5760405162461bcd60e51b8152600401610a0a9061306e565b6122b8610cab60085490565b10610cc85760405162461bcd60e51b8152600401610a0a90613108565b6122b881610cd560085490565b610cdf91906130f0565b1115610cfd5760405162461bcd60e51b8152600401610a0a9061313f565b6000600c546001610d0e91906130f0565b905060005b82811015610d4057610d2e84610d2983856130f0565b61224a565b80610d3881613176565b915050610d13565b5081600c6000828254610d5391906130f0565b9250508190555081600b6000828254610d6c91906130f0565b9091555050505050565b610d803382612264565b610d9c5760405162461bcd60e51b8152600401610a0a90613191565b610b4083838361235b565b6000610db2836113c0565b8210610e145760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a0a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e675760405162461bcd60e51b8152600401610a0a906130a5565b600f805462ff0000198116620100009182900460ff1615909102179055565b610b4083838360405180602001604052806000815250611bf9565b600f54610100900460ff16610ef85760405162461bcd60e51b815260206004820152601e60248201527f57686974656c6973742073616c65206973206e6f74206f70656e2079657400006044820152606401610a0a565b3360009081526014602052604090205460ff16610f575760405162461bcd60e51b815260206004820152601f60248201527f596f7520617265206e6f742077686974656c697374656420746f206d696e74006044820152606401610a0a565b6122b8610f6360085490565b10610f805760405162461bcd60e51b8152600401610a0a90613108565b6005811115610fd15760405162461bcd60e51b815260206004820181905260248201527f507572636861736520657863656564732057686974656c697374206c696d69746044820152606401610a0a565b6122b881610fde60085490565b610fe891906130f0565b11156110065760405162461bcd60e51b8152600401610a0a9061313f565b336000908152601560205260409020546005906110249083906130f0565b111561108e5760405162461bcd60e51b815260206004820152603360248201527f50757263686173652065786365656473206d617820616c6c6f776564206d617860448201527208185b1b1bddd959081c195c881dd85b1b195d606a1b6064820152608401610a0a565b600081116110ae5760405162461bcd60e51b8152600401610a0a906131e2565b34816011546110bd9190613219565b146111045760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a0a565b60005b8181101561117d576000600c54600161112091906130f0565b90506001600c600082825461113591906130f0565b909155505033600090815260156020526040812080546001929061115a9084906130f0565b9091555061116a9050338261224a565b508061117581613176565b915050611107565b5060408051338152602081018390527f3175668c3bc41d83dd982a992932fc7512416b71850f41443845d2a4c2e3ec6391015b60405180910390a150565b60006111c660085490565b82106112295760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a0a565b6008828154811061123c5761123c613238565b90600052602060002001549050919050565b600a546001600160a01b031633146112785760405162461bcd60e51b8152600401610a0a906130a5565b805161128b90600d906020840190612c11565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516111b09190612d35565b6000818152600260205260408120546001600160a01b0316806108fd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a0a565b600d805461133f90613033565b80601f016020809104026020016040519081016040528092919081815260200182805461136b90613033565b80156113b85780601f1061138d576101008083540402835291602001916113b8565b820191906000526020600020905b81548152906001019060200180831161139b57829003601f168201915b505050505081565b60006001600160a01b03821661142b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a0a565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146114715760405162461bcd60e51b8152600401610a0a906130a5565b61147b6000612506565b565b600a546001600160a01b031633146114a75760405162461bcd60e51b8152600401610a0a906130a5565b60005b81811015610b405760008383838181106114c6576114c6613238565b90506020020160208101906114db9190612da7565b6001600160a01b031614156115025760405162461bcd60e51b8152600401610a0a9061306e565b60016014600085858581811061151a5761151a613238565b905060200201602081019061152f9190612da7565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560158185858581811061156f5761156f613238565b90506020020160208101906115849190612da7565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116115b15760006115fe565b601560008484848181106115c7576115c7613238565b90506020020160208101906115dc9190612da7565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b508061160981613176565b9150506114aa565b600a546001600160a01b0316331461163b5760405162461bcd60e51b8152600401610a0a906130a5565b478061167f5760405162461bcd60e51b8152602060048201526013602482015272496e737566666963656e742062616c616e636560681b6044820152606401610a0a565b6116b37389a105f59633e8420da2683e86f6b5f621fc674760646116a4846032613219565b6116ae9190613264565b612558565b6116d873ce6c41f86181053cd0ae946e484a4cba46ed4b1f60646116a4846032613219565b50565b60606001805461091290613033565b600f5462010000900460ff166117425760405162461bcd60e51b815260206004820152601b60248201527f5075626c69632073616c65206973206e6f74206f70656e2079657400000000006044820152606401610a0a565b6122b861174e60085490565b1061176b5760405162461bcd60e51b8152600401610a0a90613108565b60038111156117c85760405162461bcd60e51b815260206004820152602360248201527f416d6f756e742065786365656473204e46547320706572207472616e7361637460448201526234b7b760e91b6064820152608401610a0a565b6122b8816117d560085490565b6117df91906130f0565b11156117fd5760405162461bcd60e51b8152600401610a0a9061313f565b3360009081526015602052604090205460039061181b9083906130f0565b11156118745760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742065786365656473206d6178204e465473207065722077616c6c604482015261195d60f21b6064820152608401610a0a565b600081116118945760405162461bcd60e51b8152600401610a0a906131e2565b34816012546118a39190613219565b146118f05760405162461bcd60e51b815260206004820152601a60248201527f416d6f756e74206f662045544820697320696e636f72726563740000000000006044820152606401610a0a565b60005b81811015611969576000600c54600161190c91906130f0565b90506001600c600082825461192191906130f0565b90915550503360009081526015602052604081208054600192906119469084906130f0565b909155506119569050338261224a565b508061196181613176565b9150506118f3565b5060408051338152602081018390527f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b591016111b0565b6001600160a01b0382163314156119f95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a0a565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611a8f5760405162461bcd60e51b8152600401610a0a906130a5565b60005b81811015610b40576000838383818110611aae57611aae613238565b9050602002016020810190611ac39190612da7565b6001600160a01b03161415611aea5760405162461bcd60e51b8152600401610a0a9061306e565b600160136000858585818110611b0257611b02613238565b9050602002016020810190611b179190612da7565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155601581858585818110611b5757611b57613238565b9050602002016020810190611b6c9190612da7565b6001600160a01b03166001600160a01b031681526020019081526020016000205411611b99576000611be6565b60156000848484818110611baf57611baf613238565b9050602002016020810190611bc49190612da7565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b5080611bf181613176565b915050611a92565b611c033383612264565b611c1f5760405162461bcd60e51b8152600401610a0a90613191565b611c2b848484846125fb565b50505050565b600e805461133f90613033565b6000818152600260205260409020546060906001600160a01b0316611cbd5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a0a565b6000611cc761262e565b90506000815111611ce75760405180602001604052806000815250611d15565b80611cf18461263d565b600e604051602001611d0593929190613278565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611d465760405162461bcd60e51b8152600401610a0a906130a5565b8051611d5990600e906020840190612c11565b5050565b600a546001600160a01b03163314611d875760405162461bcd60e51b8152600401610a0a906130a5565b600f805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b03163314611dce5760405162461bcd60e51b8152600401610a0a906130a5565b600f805460ff19811660ff90911615179055565b600a546001600160a01b03163314611e0c5760405162461bcd60e51b8152600401610a0a906130a5565b6001600160a01b038116611e715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0a565b6116d881612506565b600f5460ff16611ecc5760405162461bcd60e51b815260206004820152601760248201527f50726573616c65206973206e6f74206f70656e207965740000000000000000006044820152606401610a0a565b3360009081526013602052604090205460ff16611f3b5760405162461bcd60e51b815260206004820152602760248201527f596f7520617265206e6f742077686974656c697374656420666f72207468652060448201526670726573616c6560c81b6064820152608401610a0a565b6122b8611f4760085490565b10611f645760405162461bcd60e51b8152600401610a0a90613108565b6005811115611fb55760405162461bcd60e51b815260206004820152601e60248201527f507572636861736520657863656564732070726573616c65206c696d697400006044820152606401610a0a565b6122b881611fc260085490565b611fcc91906130f0565b1115611fea5760405162461bcd60e51b8152600401610a0a9061313f565b336000908152601560205260409020546005906120089083906130f0565b11156120665760405162461bcd60e51b815260206004820152602760248201527f50757263686173652065786365656473206d617820616c6c6f77656420706572604482015266081dd85b1b195d60ca1b6064820152608401610a0a565b600081116120865760405162461bcd60e51b8152600401610a0a906131e2565b34816010546120959190613219565b146120dc5760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a0a565b60005b81811015612155576000600c5460016120f891906130f0565b90506001600c600082825461210d91906130f0565b90915550503360009081526015602052604081208054600192906121329084906130f0565b909155506121429050338261224a565b508061214d81613176565b9150506120df565b5060408051338152602081018390527ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a391016111b0565b60006001600160e01b031982166380ac58cd60e01b14806121bd57506001600160e01b03198216635b5e139f60e01b145b806108fd57506301ffc9a760e01b6001600160e01b03198316146108fd565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612211826112bb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611d5982826040518060200160405280600081525061273b565b6000818152600260205260408120546001600160a01b03166122dd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a0a565b60006122e8836112bb565b9050806001600160a01b0316846001600160a01b031614806123235750836001600160a01b031661231884610995565b6001600160a01b0316145b8061235357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661236e826112bb565b6001600160a01b0316146123d65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a0a565b6001600160a01b0382166124385760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0a565b61244383838361276e565b61244e6000826121dc565b6001600160a01b038316600090815260036020526040812080546001929061247790849061333c565b90915550506001600160a01b03821660009081526003602052604081208054600192906124a59084906130f0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146125a5576040519150601f19603f3d011682016040523d82523d6000602084013e6125aa565b606091505b5050905080610b405760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20776964746864726177204574686572000000000000006044820152606401610a0a565b61260684848461235b565b61261284848484612826565b611c2b5760405162461bcd60e51b8152600401610a0a90613353565b6060600d805461091290613033565b6060816126615750506040805180820190915260018152600360fc1b602082015290565b8160005b811561268b578061267581613176565b91506126849050600a83613264565b9150612665565b60008167ffffffffffffffff8111156126a6576126a6612dfe565b6040519080825280601f01601f1916602001820160405280156126d0576020820181803683370190505b5090505b8415612353576126e560018361333c565b91506126f2600a866133a5565b6126fd9060306130f0565b60f81b81838151811061271257612712613238565b60200101906001600160f81b031916908160001a905350612734600a86613264565b94506126d4565b6127458383612933565b6127526000848484612826565b610b405760405162461bcd60e51b8152600401610a0a90613353565b6001600160a01b0383166127c9576127c481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6127ec565b816001600160a01b0316836001600160a01b0316146127ec576127ec8382612a81565b6001600160a01b03821661280357610b4081612b1e565b826001600160a01b0316826001600160a01b031614610b4057610b408282612bcd565b60006001600160a01b0384163b1561292857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061286a9033908990889088906004016133b9565b602060405180830381600087803b15801561288457600080fd5b505af19250505080156128b4575060408051601f3d908101601f191682019092526128b1918101906133f6565b60015b61290e573d8080156128e2576040519150601f19603f3d011682016040523d82523d6000602084013e6128e7565b606091505b5080516129065760405162461bcd60e51b8152600401610a0a90613353565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612353565b506001949350505050565b6001600160a01b0382166129895760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a0a565b6000818152600260205260409020546001600160a01b0316156129ee5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a0a565b6129fa6000838361276e565b6001600160a01b0382166000908152600360205260408120805460019290612a239084906130f0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612a8e846113c0565b612a98919061333c565b600083815260076020526040902054909150808214612aeb576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612b309060019061333c565b60008381526009602052604081205460088054939450909284908110612b5857612b58613238565b906000526020600020015490508060088381548110612b7957612b79613238565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612bb157612bb1613413565b6001900381819060005260206000200160009055905550505050565b6000612bd8836113c0565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612c1d90613033565b90600052602060002090601f016020900481019282612c3f5760008555612c85565b82601f10612c5857805160ff1916838001178555612c85565b82800160010185558215612c85579182015b82811115612c85578251825591602001919060010190612c6a565b50612c91929150612c95565b5090565b5b80821115612c915760008155600101612c96565b6001600160e01b0319811681146116d857600080fd5b600060208284031215612cd257600080fd5b8135611d1581612caa565b60005b83811015612cf8578181015183820152602001612ce0565b83811115611c2b5750506000910152565b60008151808452612d21816020860160208601612cdd565b601f01601f19169290920160200192915050565b602081526000611d156020830184612d09565b600060208284031215612d5a57600080fd5b5035919050565b80356001600160a01b0381168114612d7857600080fd5b919050565b60008060408385031215612d9057600080fd5b612d9983612d61565b946020939093013593505050565b600060208284031215612db957600080fd5b611d1582612d61565b600080600060608486031215612dd757600080fd5b612de084612d61565b9250612dee60208501612d61565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612e2f57612e2f612dfe565b604051601f8501601f19908116603f01168101908282118183101715612e5757612e57612dfe565b81604052809350858152868686011115612e7057600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612e9c57600080fd5b813567ffffffffffffffff811115612eb357600080fd5b8201601f81018413612ec457600080fd5b61235384823560208401612e14565b60008060208385031215612ee657600080fd5b823567ffffffffffffffff80821115612efe57600080fd5b818501915085601f830112612f1257600080fd5b813581811115612f2157600080fd5b8660208260051b8501011115612f3657600080fd5b60209290920196919550909350505050565b60008060408385031215612f5b57600080fd5b612f6483612d61565b915060208301358015158114612f7957600080fd5b809150509250929050565b60008060008060808587031215612f9a57600080fd5b612fa385612d61565b9350612fb160208601612d61565b925060408501359150606085013567ffffffffffffffff811115612fd457600080fd5b8501601f81018713612fe557600080fd5b612ff487823560208401612e14565b91505092959194509250565b6000806040838503121561301357600080fd5b61301c83612d61565b915061302a60208401612d61565b90509250929050565b600181811c9082168061304757607f821691505b6020821081141561306857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526017908201527f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613103576131036130da565b500190565b60208082526019908201527f416c6c204e4654732068617665206265656e206d696e74656400000000000000604082015260600190565b60208082526017908201527f4d696e742065786365656473206d617820737570706c79000000000000000000604082015260600190565b600060001982141561318a5761318a6130da565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601a908201527f4d757374206d696e74206174206c65617374206f6e65204e4654000000000000604082015260600190565b6000816000190483118215151615613233576132336130da565b500290565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826132735761327361324e565b500490565b60008451602061328b8285838a01612cdd565b85519184019161329e8184848a01612cdd565b8554920191600090600181811c90808316806132bb57607f831692505b8583108114156132d957634e487b7160e01b85526022600452602485fd5b8080156132ed57600181146132fe5761332b565b60ff1985168852838801955061332b565b60008b81526020902060005b858110156133235781548a82015290840190880161330a565b505083880195505b50939b9a5050505050505050505050565b60008282101561334e5761334e6130da565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826133b4576133b461324e565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133ec90830184612d09565b9695505050505050565b60006020828403121561340857600080fd5b8151611d1581612caa565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200cb289c09e2852147df56683824083998ff1b218b068589545713207daea67be64736f6c63430008080033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e42756c6c2054616e6720436c616e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064254434e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b697066733a2f2f5442442f000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Bull Tang Clan
Arg [1] : _symbol (string): BTCNFT
Arg [2] : _initBaseURI (string): ipfs://TBD/

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [4] : 42756c6c2054616e6720436c616e000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 4254434e46540000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [8] : 697066733a2f2f5442442f000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44508:8654:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36967:224;;;;;;;;;;-1:-1:-1;36967:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;36967:224:0;;;;;;;;45365:26;;;;;;;;;;-1:-1:-1;45365:26:0;;;;;;;;24859:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26418:221::-;;;;;;;;;;-1:-1:-1;26418:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;26418:221:0;1528:203:1;44600:39:0;;;;;;;;;;;;44635:4;44600:39;;;;;1882:25:1;;;1870:2;1855:18;44600:39:0;1736:177:1;25941:411:0;;;;;;;;;;-1:-1:-1;25941:411:0;;;;;:::i;:::-;;:::i;:::-;;37607:113;;;;;;;;;;-1:-1:-1;37695:10:0;:17;37607:113;;48491:186;;;;;;;;;;-1:-1:-1;48491:186:0;;;;;:::i;:::-;;:::i;46752:743::-;;;;;;;;;;-1:-1:-1;46752:743:0;;;;;:::i;:::-;;:::i;45124:80::-;;;;;;;;;;;;45162:42;45124:80;;27308:339;;;;;;;;;;-1:-1:-1;27308:339:0;;;;;:::i;:::-;;:::i;45219:30::-;;;;;;;;;;;;;;;;37275:256;;;;;;;;;;-1:-1:-1;37275:256:0;;;;;:::i;:::-;;:::i;51879:111::-;;;;;;;;;;;;;:::i;45398:28::-;;;;;;;;;;-1:-1:-1;45398:28:0;;;;;;;;;;;27718:185;;;;;;;;;;-1:-1:-1;27718:185:0;;;;;:::i;:::-;;:::i;50611:1021::-;;;;;;:::i;:::-;;:::i;37797:233::-;;;;;;;;;;-1:-1:-1;37797:233:0;;;;;:::i;:::-;;:::i;44703:52::-;;;;;;;;;;;;44745:10;44703:52;;51998:147;;;;;;;;;;-1:-1:-1;51998:147:0;;;;;:::i;:::-;;:::i;44874:46::-;;;;;;;;;;;;44919:1;44874:46;;44927:43;;;;;;;;;;;;44969:1;44927:43;;24553:239;;;;;;;;;;-1:-1:-1;24553:239:0;;;;;:::i;:::-;;:::i;45293:21::-;;;;;;;;;;;;;:::i;24283:208::-;;;;;;;;;;-1:-1:-1;24283:208:0;;;;;:::i;:::-;;:::i;4558:94::-;;;;;;;;;;;;;:::i;45256:30::-;;;;;;;;;;;;;;;;47868:357;;;;;;;;;;-1:-1:-1;47868:357:0;;;;;:::i;:::-;;:::i;52687:272::-;;;;;;;;;;;;;:::i;44983:43::-;;;;;;;;;;;;45023:3;44983:43;;3907:87;;;;;;;;;;-1:-1:-1;3980:6:0;;-1:-1:-1;;;;;3980:6:0;3907:87;;25028:104;;;;;;;;;;;;;:::i;48685:913::-;;;;;;:::i;:::-;;:::i;26711:295::-;;;;;;;;;;-1:-1:-1;26711:295:0;;;;;:::i;:::-;;:::i;45433:29::-;;;;;;;;;;-1:-1:-1;45433:29:0;;;;;;;;;;;48235:120;;;;;;;;;;-1:-1:-1;48235:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;48329:18:0;48305:4;48329:18;;;:12;:18;;;;;;;;;48235:120;47503:357;;;;;;;;;;-1:-1:-1;47503:357:0;;;;;:::i;:::-;;:::i;44646:50::-;;;;;;;;;;;;44686:10;44646:50;;27974:328;;;;;;;;;;-1:-1:-1;27974:328:0;;;;;:::i;:::-;;:::i;45033:84::-;;;;;;;;;;;;45075:42;45033:84;;45321:37;;;;;;;;;;;;;:::i;52299:376::-;;;;;;;;;;-1:-1:-1;52299:376:0;;;;;:::i;:::-;;:::i;52153:128::-;;;;;;;;;;-1:-1:-1;52153:128:0;;;;;:::i;:::-;;:::i;27077:164::-;;;;;;;;;;-1:-1:-1;27077:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27198:25:0;;;27174:4;27198:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27077:164;51759:108;;;;;;;;;;;;;:::i;51649:102::-;;;;;;;;;;;;;:::i;4807:192::-;;;;;;;;;;-1:-1:-1;4807:192:0;;;;;:::i;:::-;;:::i;48363:120::-;;;;;;;;;;-1:-1:-1;48363:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;48459:16:0;48435:4;48459:16;;;:10;:16;;;;;;;;;48363:120;49606:997;;;;;;:::i;:::-;;:::i;36967:224::-;37069:4;-1:-1:-1;;;;;;37093:50:0;;-1:-1:-1;;;37093:50:0;;:90;;;37147:36;37171:11;37147:23;:36::i;:::-;37086:97;36967:224;-1:-1:-1;;36967:224:0:o;24859:100::-;24913:13;24946:5;24939:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24859:100;:::o;26418:221::-;26494:7;29901:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29901:16:0;26514:73;;;;-1:-1:-1;;;26514:73:0;;6600:2:1;26514:73:0;;;6582:21:1;6639:2;6619:18;;;6612:30;6678:34;6658:18;;;6651:62;-1:-1:-1;;;6729:18:1;;;6722:42;6781:19;;26514:73:0;;;;;;;;;-1:-1:-1;26607:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26607:24:0;;26418:221::o;25941:411::-;26022:13;26038:23;26053:7;26038:14;:23::i;:::-;26022:39;;26086:5;-1:-1:-1;;;;;26080:11:0;:2;-1:-1:-1;;;;;26080:11:0;;;26072:57;;;;-1:-1:-1;;;26072:57:0;;7013:2:1;26072:57:0;;;6995:21:1;7052:2;7032:18;;;7025:30;7091:34;7071:18;;;7064:62;-1:-1:-1;;;7142:18:1;;;7135:31;7183:19;;26072:57:0;6811:397:1;26072:57:0;2775:10;-1:-1:-1;;;;;26164:21:0;;;;:62;;-1:-1:-1;26189:37:0;26206:5;2775:10;27077:164;:::i;26189:37::-;26142:168;;;;-1:-1:-1;;;26142:168:0;;7415:2:1;26142:168:0;;;7397:21:1;7454:2;7434:18;;;7427:30;7493:34;7473:18;;;7466:62;7564:26;7544:18;;;7537:54;7608:19;;26142:168:0;7213:420:1;26142:168:0;26323:21;26332:2;26336:7;26323:8;:21::i;:::-;26011:341;25941:411;;:::o;48491:186::-;48554:7;-1:-1:-1;;;;;48582:19:0;;48574:55;;;;-1:-1:-1;;;48574:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48649:20:0;;;;;:13;:20;;;;;;;48491:186::o;46752:743::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;45023:3:::1;46848:15;;:32;;46840:87;;;::::0;-1:-1:-1;;;46840:87:0;;8553:2:1;46840:87:0::1;::::0;::::1;8535:21:1::0;8592:2;8572:18;;;8565:30;8631:34;8611:18;;;8604:62;-1:-1:-1;;;8682:18:1;;;8675:40;8732:19;;46840:87:0::1;8351:406:1::0;46840:87:0::1;45023:3;46964:6;46946:15;;:24;;;;:::i;:::-;:41;;46938:84;;;::::0;-1:-1:-1;;;46938:84:0;;9229:2:1;46938:84:0::1;::::0;::::1;9211:21:1::0;9268:2;9248:18;;;9241:30;9307:32;9287:18;;;9280:60;9357:18;;46938:84:0::1;9027:354:1::0;46938:84:0::1;-1:-1:-1::0;;;;;47041:23:0;::::1;47033:59;;;;-1:-1:-1::0;;;47033:59:0::1;;;;;;;:::i;:::-;44635:4;47111:13;37695:10:::0;:17;;37607:113;47111:13:::1;:24;47103:62;;;;-1:-1:-1::0;;;47103:62:0::1;;;;;;;:::i;:::-;44635:4;47200:6;47184:13;37695:10:::0;:17;;37607:113;47184:13:::1;:22;;;;:::i;:::-;:34;;47176:70;;;;-1:-1:-1::0;;;47176:70:0::1;;;;;;;:::i;:::-;47259:20;47282:15;;47300:1;47282:19;;;;:::i;:::-;47259:42;;47319:9;47314:102;47338:6;47334:1;:10;47314:102;;;47366:38;47376:9:::0;47387:16:::1;47402:1:::0;47387:12;:16:::1;:::i;:::-;47366:9;:38::i;:::-;47346:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47314:102;;;;47445:6;47426:15;;:25;;;;;;;:::i;:::-;;;;;;;;47481:6;47462:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;46752:743:0:o;27308:339::-;27503:41;2775:10;27536:7;27503:18;:41::i;:::-;27495:103;;;;-1:-1:-1;;;27495:103:0;;;;;;;:::i;:::-;27611:28;27621:4;27627:2;27631:7;27611:9;:28::i;37275:256::-;37372:7;37408:23;37425:5;37408:16;:23::i;:::-;37400:5;:31;37392:87;;;;-1:-1:-1;;;37392:87:0;;10852:2:1;37392:87:0;;;10834:21:1;10891:2;10871:18;;;10864:30;10930:34;10910:18;;;10903:62;-1:-1:-1;;;10981:18:1;;;10974:41;11032:19;;37392:87:0;10650:407:1;37392:87:0;-1:-1:-1;;;;;;37497:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37275:256::o;51879:111::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;51965:17:::1;::::0;;-1:-1:-1;;51944:38:0;::::1;51965:17:::0;;;;::::1;;;51964:18;51944:38:::0;;::::1;;::::0;;51879:111::o;27718:185::-;27856:39;27873:4;27879:2;27883:7;27856:39;;;;;;;;;;;;:16;:39::i;50611:1021::-;46340:16;;;;;;;46332:59;;;;-1:-1:-1;;;46332:59:0;;11264:2:1;46332:59:0;;;11246:21:1;11303:2;11283:18;;;11276:30;11342:32;11322:18;;;11315:60;11392:18;;46332:59:0;11062:354:1;46332:59:0;50728:10:::1;50717:22;::::0;;;:10:::1;:22;::::0;;;;;::::1;;50709:66;;;::::0;-1:-1:-1;;;50709:66:0;;11623:2:1;50709:66:0::1;::::0;::::1;11605:21:1::0;11662:2;11642:18;;;11635:30;11701:33;11681:18;;;11674:61;11752:18;;50709:66:0::1;11421:355:1::0;50709:66:0::1;44635:4;50794:13;37695:10:::0;:17;;37607:113;50794:13:::1;:24;50786:62;;;;-1:-1:-1::0;;;50786:62:0::1;;;;;;;:::i;:::-;44919:1;50867:12;:34;;50859:79;;;::::0;-1:-1:-1;;;50859:79:0;;11983:2:1;50859:79:0::1;::::0;::::1;11965:21:1::0;;;12002:18;;;11995:30;12061:34;12041:18;;;12034:62;12113:18;;50859:79:0::1;11781:356:1::0;50859:79:0::1;44635:4;50973:12;50957:13;37695:10:::0;:17;;37607:113;50957:13:::1;:28;;;;:::i;:::-;:40;;50949:76;;;;-1:-1:-1::0;;;50949:76:0::1;;;;;;;:::i;:::-;51058:10;51044:25;::::0;;;:13:::1;:25;::::0;;;;;44919:1:::1;::::0;51044:40:::1;::::0;51072:12;;51044:40:::1;:::i;:::-;:62;;51036:126;;;::::0;-1:-1:-1;;;51036:126:0;;12344:2:1;51036:126:0::1;::::0;::::1;12326:21:1::0;12383:2;12363:18;;;12356:30;12422:34;12402:18;;;12395:62;-1:-1:-1;;;12473:18:1;;;12466:49;12532:19;;51036:126:0::1;12142:415:1::0;51036:126:0::1;51196:1;51181:12;:16;51173:55;;;;-1:-1:-1::0;;;51173:55:0::1;;;;;;;:::i;:::-;51284:9;51268:12;51247:18;;:33;;;;:::i;:::-;:46;51239:82;;;::::0;-1:-1:-1;;;51239:82:0;;13292:2:1;51239:82:0::1;::::0;::::1;13274:21:1::0;13331:2;13311:18;;;13304:30;-1:-1:-1;;;13350:18:1;;;13343:53;13413:18;;51239:82:0::1;13090:347:1::0;51239:82:0::1;51339:9;51334:234;51358:12;51354:1;:16;51334:234;;;51392:15;51410;;51428:1;51410:19;;;;:::i;:::-;51392:37;;51465:1;51446:15;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;51495:10:0::1;51481:25;::::0;;;:13:::1;:25;::::0;;;;:30;;51510:1:::1;::::0;51481:25;:30:::1;::::0;51510:1;;51481:30:::1;:::i;:::-;::::0;;;-1:-1:-1;51526:30:0::1;::::0;-1:-1:-1;51536:10:0::1;51548:7:::0;51526:9:::1;:30::i;:::-;-1:-1:-1::0;51372:3:0;::::1;::::0;::::1;:::i;:::-;;;;51334:234;;;-1:-1:-1::0;51585:39:0::1;::::0;;51599:10:::1;13616:51:1::0;;13698:2;13683:18;;13676:34;;;51585:39:0::1;::::0;13589:18:1;51585:39:0::1;;;;;;;;50611:1021:::0;:::o;37797:233::-;37872:7;37908:30;37695:10;:17;;37607:113;37908:30;37900:5;:38;37892:95;;;;-1:-1:-1;;;37892:95:0;;13923:2:1;37892:95:0;;;13905:21:1;13962:2;13942:18;;;13935:30;14001:34;13981:18;;;13974:62;-1:-1:-1;;;14052:18:1;;;14045:42;14104:19;;37892:95:0;13721:408:1;37892:95:0;38005:10;38016:5;38005:17;;;;;;;;:::i;:::-;;;;;;;;;37998:24;;37797:233;;;:::o;51998:147::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;52073:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;52110:27;52125:11;52110:27;;;;;;:::i;24553:239::-:0;24625:7;24661:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24661:16:0;24696:19;24688:73;;;;-1:-1:-1;;;24688:73:0;;14468:2:1;24688:73:0;;;14450:21:1;14507:2;14487:18;;;14480:30;14546:34;14526:18;;;14519:62;-1:-1:-1;;;14597:18:1;;;14590:39;14646:19;;24688:73:0;14266:405:1;45293:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24283:208::-;24355:7;-1:-1:-1;;;;;24383:19:0;;24375:74;;;;-1:-1:-1;;;24375:74:0;;14878:2:1;24375:74:0;;;14860:21:1;14917:2;14897:18;;;14890:30;14956:34;14936:18;;;14929:62;-1:-1:-1;;;15007:18:1;;;15000:40;15057:19;;24375:74:0;14676:406:1;24375:74:0;-1:-1:-1;;;;;;24467:16:0;;;;;:9;:16;;;;;;;24283:208::o;4558:94::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;4623:21:::1;4641:1;4623:9;:21::i;:::-;4558:94::o:0;47868:357::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;47957:9:::1;47952:266;47972:20:::0;;::::1;47952:266;;;48046:1;48022:9:::0;;48032:1;48022:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48022:26:0::1;;;48014:62;;;;-1:-1:-1::0;;;48014:62:0::1;;;;;;;:::i;:::-;48120:4;48093:10;:24;48104:9;;48114:1;48104:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48093:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;48093:24:0;;;:31;;-1:-1:-1;;48093:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;48141:13:::1;-1:-1:-1::0;48155:9:0;;48165:1;48155:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48141:27:0::1;-1:-1:-1::0;;;;;48141:27:0::1;;;;;;;;;;;;;:31;:65;;48205:1;48141:65;;;48175:13;:27;48189:9;;48199:1;48189:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48175:27:0::1;-1:-1:-1::0;;;;;48175:27:0::1;;;;;;;;;;;;;48141:65;-1:-1:-1::0;47994:3:0;::::1;::::0;::::1;:::i;:::-;;;;47952:266;;52687:272:::0;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;52756:21:::1;52796:11:::0;52788:43:::1;;;::::0;-1:-1:-1;;;52788:43:0;;15289:2:1;52788:43:0::1;::::0;::::1;15271:21:1::0;15328:2;15308:18;;;15301:30;-1:-1:-1;;;15347:18:1;;;15340:49;15406:18;;52788:43:0::1;15087:343:1::0;52788:43:0::1;52842:51;45075:42;52888:3;52872:12;:7:::0;52882:2:::1;52872:12;:::i;:::-;52871:20;;;;:::i;:::-;52842:10;:51::i;:::-;52904:47;45162:42;52946:3;52930:12;:7:::0;52940:2:::1;52930:12;:::i;52904:47::-;52727:232;52687:272::o:0;25028:104::-;25084:13;25117:7;25110:14;;;;;:::i;48685:913::-;46208:17;;;;;;;46200:57;;;;-1:-1:-1;;;46200:57:0;;15894:2:1;46200:57:0;;;15876:21:1;15933:2;15913:18;;;15906:30;15972:29;15952:18;;;15945:57;16019:18;;46200:57:0;15692:351:1;46200:57:0;44635:4:::1;48779:13;37695:10:::0;:17;;37607:113;48779:13:::1;:24;48771:62;;;;-1:-1:-1::0;;;48771:62:0::1;;;;;;;:::i;:::-;44969:1;48852:12;:31;;48844:79;;;::::0;-1:-1:-1;;;48844:79:0;;16250:2:1;48844:79:0::1;::::0;::::1;16232:21:1::0;16289:2;16269:18;;;16262:30;16328:34;16308:18;;;16301:62;-1:-1:-1;;;16379:18:1;;;16372:33;16422:19;;48844:79:0::1;16048:399:1::0;48844:79:0::1;44635:4;48958:12;48942:13;37695:10:::0;:17;;37607:113;48942:13:::1;:28;;;;:::i;:::-;:40;;48934:76;;;;-1:-1:-1::0;;;48934:76:0::1;;;;;;;:::i;:::-;49043:10;49029:25;::::0;;;:13:::1;:25;::::0;;;;;44969:1:::1;::::0;49029:40:::1;::::0;49057:12;;49029:40:::1;:::i;:::-;:59;;49021:106;;;::::0;-1:-1:-1;;;49021:106:0;;16654:2:1;49021:106:0::1;::::0;::::1;16636:21:1::0;16693:2;16673:18;;;16666:30;16732:34;16712:18;;;16705:62;-1:-1:-1;;;16783:18:1;;;16776:32;16825:19;;49021:106:0::1;16452:398:1::0;49021:106:0::1;49161:1;49146:12;:16;49138:55;;;;-1:-1:-1::0;;;49138:55:0::1;;;;;;;:::i;:::-;49246:9;49230:12;49212:15;;:30;;;;:::i;:::-;:43;49204:82;;;::::0;-1:-1:-1;;;49204:82:0;;17057:2:1;49204:82:0::1;::::0;::::1;17039:21:1::0;17096:2;17076:18;;;17069:30;17135:28;17115:18;;;17108:56;17181:18;;49204:82:0::1;16855:350:1::0;49204:82:0::1;49304:9;49299:234;49323:12;49319:1;:16;49299:234;;;49357:15;49375;;49393:1;49375:19;;;;:::i;:::-;49357:37;;49430:1;49411:15;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;49460:10:0::1;49446:25;::::0;;;:13:::1;:25;::::0;;;;:30;;49475:1:::1;::::0;49446:25;:30:::1;::::0;49475:1;;49446:30:::1;:::i;:::-;::::0;;;-1:-1:-1;49491:30:0::1;::::0;-1:-1:-1;49501:10:0::1;49513:7:::0;49491:9:::1;:30::i;:::-;-1:-1:-1::0;49337:3:0;::::1;::::0;::::1;:::i;:::-;;;;49299:234;;;-1:-1:-1::0;49550:40:0::1;::::0;;49565:10:::1;13616:51:1::0;;13698:2;13683:18;;13676:34;;;49550:40:0::1;::::0;13589:18:1;49550:40:0::1;13442:274:1::0;26711:295:0;-1:-1:-1;;;;;26814:24:0;;2775:10;26814:24;;26806:62;;;;-1:-1:-1;;;26806:62:0;;17412:2:1;26806:62:0;;;17394:21:1;17451:2;17431:18;;;17424:30;17490:27;17470:18;;;17463:55;17535:18;;26806:62:0;17210:349:1;26806:62:0;2775:10;26881:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26881:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;26881:53:0;;;;;;;;;;26950:48;;540:41:1;;;26881:42:0;;2775:10;26950:48;;513:18:1;26950:48:0;;;;;;;26711:295;;:::o;47503:357::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;47590:9:::1;47585:268;47605:20:::0;;::::1;47585:268;;;47679:1;47655:9:::0;;47665:1;47655:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47655:26:0::1;;;47647:62;;;;-1:-1:-1::0;;;47647:62:0::1;;;;;;;:::i;:::-;47755:4;47726:12;:26;47739:9;;47749:1;47739:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47726:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;47726:26:0;;;:33;;-1:-1:-1;;47726:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;47776:13:::1;-1:-1:-1::0;47790:9:0;;47800:1;47790:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47776:27:0::1;-1:-1:-1::0;;;;;47776:27:0::1;;;;;;;;;;;;;:31;:65;;47840:1;47776:65;;;47810:13;:27;47824:9;;47834:1;47824:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47810:27:0::1;-1:-1:-1::0;;;;;47810:27:0::1;;;;;;;;;;;;;47776:65;-1:-1:-1::0;47627:3:0;::::1;::::0;::::1;:::i;:::-;;;;47585:268;;27974:328:::0;28149:41;2775:10;28182:7;28149:18;:41::i;:::-;28141:103;;;;-1:-1:-1;;;28141:103:0;;;;;;;:::i;:::-;28255:39;28269:4;28275:2;28279:7;28288:5;28255:13;:39::i;:::-;27974:328;;;;:::o;45321:37::-;;;;;;;:::i;52299:376::-;29877:4;29901:16;;;:7;:16;;;;;;52372:13;;-1:-1:-1;;;;;29901:16:0;52397:75;;;;-1:-1:-1;;;52397:75:0;;17766:2:1;52397:75:0;;;17748:21:1;17805:2;17785:18;;;17778:30;17844:34;17824:18;;;17817:62;-1:-1:-1;;;17895:18:1;;;17888:45;17950:19;;52397:75:0;17564:411:1;52397:75:0;52493:28;52524:10;:8;:10::i;:::-;52493:41;;52583:1;52558:14;52552:28;:32;:115;;;;;;;;;;;;;;;;;52611:14;52627:18;:7;:16;:18::i;:::-;52647:13;52594:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52552:115;52545:122;52299:376;-1:-1:-1;;;52299:376:0:o;52153:128::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;52240:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;:::-;;52153:128:::0;:::o;51759:108::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;51843:16:::1;::::0;;-1:-1:-1;;51823:36:0;::::1;51843:16;::::0;;;::::1;;;51842:17;51823:36:::0;;::::1;;::::0;;51759:108::o;51649:102::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;51729:14:::1;::::0;;-1:-1:-1;;51711:32:0;::::1;51729:14;::::0;;::::1;51728:15;51711:32;::::0;;51649:102::o;4807:192::-;3980:6;;-1:-1:-1;;;;;3980:6:0;2775:10;4127:23;4119:68;;;;-1:-1:-1;;;4119:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4896:22:0;::::1;4888:73;;;::::0;-1:-1:-1;;;4888:73:0;;19840:2:1;4888:73:0::1;::::0;::::1;19822:21:1::0;19879:2;19859:18;;;19852:30;19918:34;19898:18;;;19891:62;-1:-1:-1;;;19969:18:1;;;19962:36;20015:19;;4888:73:0::1;19638:402:1::0;4888:73:0::1;4972:19;4982:8;4972:9;:19::i;49606:997::-:0;46086:14;;;;46078:50;;;;-1:-1:-1;;;46078:50:0;;20247:2:1;46078:50:0;;;20229:21:1;20286:2;20266:18;;;20259:30;20325:25;20305:18;;;20298:53;20368:18;;46078:50:0;20045:347:1;46078:50:0;49717:10:::1;49704:24;::::0;;;:12:::1;:24;::::0;;;;;::::1;;49696:76;;;::::0;-1:-1:-1;;;49696:76:0;;20599:2:1;49696:76:0::1;::::0;::::1;20581:21:1::0;20638:2;20618:18;;;20611:30;20677:34;20657:18;;;20650:62;-1:-1:-1;;;20728:18:1;;;20721:37;20775:19;;49696:76:0::1;20397:403:1::0;49696:76:0::1;44635:4;49791:13;37695:10:::0;:17;;37607:113;49791:13:::1;:24;49783:62;;;;-1:-1:-1::0;;;49783:62:0::1;;;;;;;:::i;:::-;44866:1;49864:12;:32;;49856:75;;;::::0;-1:-1:-1;;;49856:75:0;;21007:2:1;49856:75:0::1;::::0;::::1;20989:21:1::0;21046:2;21026:18;;;21019:30;21085:32;21065:18;;;21058:60;21135:18;;49856:75:0::1;20805:354:1::0;49856:75:0::1;44635:4;49966:12;49950:13;37695:10:::0;:17;;37607:113;49950:13:::1;:28;;;;:::i;:::-;:40;;49942:76;;;;-1:-1:-1::0;;;49942:76:0::1;;;;;;;:::i;:::-;50051:10;50037:25;::::0;;;:13:::1;:25;::::0;;;;;44866:1:::1;::::0;50037:40:::1;::::0;50065:12;;50037:40:::1;:::i;:::-;:60;;50029:112;;;::::0;-1:-1:-1;;;50029:112:0;;21366:2:1;50029:112:0::1;::::0;::::1;21348:21:1::0;21405:2;21385:18;;;21378:30;21444:34;21424:18;;;21417:62;-1:-1:-1;;;21495:18:1;;;21488:37;21542:19;;50029:112:0::1;21164:403:1::0;50029:112:0::1;50175:1;50160:12;:16;50152:55;;;;-1:-1:-1::0;;;50152:55:0::1;;;;;;;:::i;:::-;50257:9;50241:12;50226;;:27;;;;:::i;:::-;:40;50218:76;;;::::0;-1:-1:-1;;;50218:76:0;;13292:2:1;50218:76:0::1;::::0;::::1;13274:21:1::0;13331:2;13311:18;;;13304:30;-1:-1:-1;;;13350:18:1;;;13343:53;13413:18;;50218:76:0::1;13090:347:1::0;50218:76:0::1;50312:9;50307:234;50331:12;50327:1;:16;50307:234;;;50365:15;50383;;50401:1;50383:19;;;;:::i;:::-;50365:37;;50438:1;50419:15;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;50468:10:0::1;50454:25;::::0;;;:13:::1;:25;::::0;;;;:30;;50483:1:::1;::::0;50454:25;:30:::1;::::0;50483:1;;50454:30:::1;:::i;:::-;::::0;;;-1:-1:-1;50499:30:0::1;::::0;-1:-1:-1;50509:10:0::1;50521:7:::0;50499:9:::1;:30::i;:::-;-1:-1:-1::0;50345:3:0;::::1;::::0;::::1;:::i;:::-;;;;50307:234;;;-1:-1:-1::0;50558:37:0::1;::::0;;50570:10:::1;13616:51:1::0;;13698:2;13683:18;;13676:34;;;50558:37:0::1;::::0;13589:18:1;50558:37:0::1;13442:274:1::0;23914:305:0;24016:4;-1:-1:-1;;;;;;24053:40:0;;-1:-1:-1;;;24053:40:0;;:105;;-1:-1:-1;;;;;;;24110:48:0;;-1:-1:-1;;;24110:48:0;24053:105;:158;;;-1:-1:-1;;;;;;;;;;16002:40:0;;;24175:36;15893:157;33794:174;33869:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33869:29:0;-1:-1:-1;;;;;33869:29:0;;;;;;;;:24;;33923:23;33869:24;33923:14;:23::i;:::-;-1:-1:-1;;;;;33914:46:0;;;;;;;;;;;33794:174;;:::o;30796:110::-;30872:26;30882:2;30886:7;30872:26;;;;;;;;;;;;:9;:26::i;30106:348::-;30199:4;29901:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29901:16:0;30216:73;;;;-1:-1:-1;;;30216:73:0;;21774:2:1;30216:73:0;;;21756:21:1;21813:2;21793:18;;;21786:30;21852:34;21832:18;;;21825:62;-1:-1:-1;;;21903:18:1;;;21896:42;21955:19;;30216:73:0;21572:408:1;30216:73:0;30300:13;30316:23;30331:7;30316:14;:23::i;:::-;30300:39;;30369:5;-1:-1:-1;;;;;30358:16:0;:7;-1:-1:-1;;;;;30358:16:0;;:51;;;;30402:7;-1:-1:-1;;;;;30378:31:0;:20;30390:7;30378:11;:20::i;:::-;-1:-1:-1;;;;;30378:31:0;;30358:51;:87;;;-1:-1:-1;;;;;;27198:25:0;;;27174:4;27198:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;30413:32;30350:96;30106:348;-1:-1:-1;;;;30106:348:0:o;33098:578::-;33257:4;-1:-1:-1;;;;;33230:31:0;:23;33245:7;33230:14;:23::i;:::-;-1:-1:-1;;;;;33230:31:0;;33222:85;;;;-1:-1:-1;;;33222:85:0;;22187:2:1;33222:85:0;;;22169:21:1;22226:2;22206:18;;;22199:30;22265:34;22245:18;;;22238:62;-1:-1:-1;;;22316:18:1;;;22309:39;22365:19;;33222:85:0;21985:405:1;33222:85:0;-1:-1:-1;;;;;33326:16:0;;33318:65;;;;-1:-1:-1;;;33318:65:0;;22597:2:1;33318:65:0;;;22579:21:1;22636:2;22616:18;;;22609:30;22675:34;22655:18;;;22648:62;-1:-1:-1;;;22726:18:1;;;22719:34;22770:19;;33318:65:0;22395:400:1;33318:65:0;33396:39;33417:4;33423:2;33427:7;33396:20;:39::i;:::-;33500:29;33517:1;33521:7;33500:8;:29::i;:::-;-1:-1:-1;;;;;33542:15:0;;;;;;:9;:15;;;;;:20;;33561:1;;33542:15;:20;;33561:1;;33542:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33573:13:0;;;;;;:9;:13;;;;;:18;;33590:1;;33573:13;:18;;33590:1;;33573:18;:::i;:::-;;;;-1:-1:-1;;33602:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33602:21:0;-1:-1:-1;;;;;33602:21:0;;;;;;;;;33641:27;;33602:16;;33641:27;;;;;;;33098:578;;;:::o;5007:173::-;5082:6;;;-1:-1:-1;;;;;5099:17:0;;;-1:-1:-1;;;;;;5099:17:0;;;;;;;5132:40;;5082:6;;;5099:17;5082:6;;5132:40;;5063:16;;5132:40;5052:128;5007:173;:::o;52967:192::-;53042:12;53060:8;-1:-1:-1;;;;;53060:13:0;53082:7;53060:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53041:54;;;53114:7;53106:45;;;;-1:-1:-1;;;53106:45:0;;23342:2:1;53106:45:0;;;23324:21:1;23381:2;23361:18;;;23354:30;23420:27;23400:18;;;23393:55;23465:18;;53106:45:0;23140:349:1;29184:315:0;29341:28;29351:4;29357:2;29361:7;29341:9;:28::i;:::-;29388:48;29411:4;29417:2;29421:7;29430:5;29388:22;:48::i;:::-;29380:111;;;;-1:-1:-1;;;29380:111:0;;;;;;;:::i;46636:108::-;46696:13;46729:7;46722:14;;;;;:::i;311:723::-;367:13;588:10;584:53;;-1:-1:-1;;615:10:0;;;;;;;;;;;;-1:-1:-1;;;615:10:0;;;;;311:723::o;584:53::-;662:5;647:12;703:78;710:9;;703:78;;736:8;;;;:::i;:::-;;-1:-1:-1;759:10:0;;-1:-1:-1;767:2:0;759:10;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;813:17:0;;791:39;;841:154;848:10;;841:154;;875:11;885:1;875:11;;:::i;:::-;;-1:-1:-1;944:10:0;952:2;944:5;:10;:::i;:::-;931:24;;:2;:24;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;901:56:0;;;;;;;;-1:-1:-1;972:11:0;981:2;972:11;;:::i;:::-;;;841:154;;31133:321;31263:18;31269:2;31273:7;31263:5;:18::i;:::-;31314:54;31345:1;31349:2;31353:7;31362:5;31314:22;:54::i;:::-;31292:154;;;;-1:-1:-1;;;31292:154:0;;;;;;;:::i;38643:589::-;-1:-1:-1;;;;;38849:18:0;;38845:187;;38884:40;38916:7;40059:10;:17;;40032:24;;;;:15;:24;;;;;:44;;;40087:24;;;;;;;;;;;;39955:164;38884:40;38845:187;;;38954:2;-1:-1:-1;;;;;38946:10:0;:4;-1:-1:-1;;;;;38946:10:0;;38942:90;;38973:47;39006:4;39012:7;38973:32;:47::i;:::-;-1:-1:-1;;;;;39046:16:0;;39042:183;;39079:45;39116:7;39079:36;:45::i;39042:183::-;39152:4;-1:-1:-1;;;;;39146:10:0;:2;-1:-1:-1;;;;;39146:10:0;;39142:83;;39173:40;39201:2;39205:7;39173:27;:40::i;34533:799::-;34688:4;-1:-1:-1;;;;;34709:13:0;;6276:20;6324:8;34705:620;;34745:72;;-1:-1:-1;;;34745:72:0;;-1:-1:-1;;;;;34745:36:0;;;;;:72;;2775:10;;34796:4;;34802:7;;34811:5;;34745:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34745:72:0;;;;;;;;-1:-1:-1;;34745:72:0;;;;;;;;;;;;:::i;:::-;;;34741:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34987:13:0;;34983:272;;35030:60;;-1:-1:-1;;;35030:60:0;;;;;;;:::i;34983:272::-;35205:6;35199:13;35190:6;35186:2;35182:15;35175:38;34741:529;-1:-1:-1;;;;;;34868:51:0;-1:-1:-1;;;34868:51:0;;-1:-1:-1;34861:58:0;;34705:620;-1:-1:-1;35309:4:0;34533:799;;;;;;:::o;31790:382::-;-1:-1:-1;;;;;31870:16:0;;31862:61;;;;-1:-1:-1;;;31862:61:0;;24980:2:1;31862:61:0;;;24962:21:1;;;24999:18;;;24992:30;25058:34;25038:18;;;25031:62;25110:18;;31862:61:0;24778:356:1;31862:61:0;29877:4;29901:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29901:16:0;:30;31934:58;;;;-1:-1:-1;;;31934:58:0;;25341:2:1;31934:58:0;;;25323:21:1;25380:2;25360:18;;;25353:30;25419;25399:18;;;25392:58;25467:18;;31934:58:0;25139:352:1;31934:58:0;32005:45;32034:1;32038:2;32042:7;32005:20;:45::i;:::-;-1:-1:-1;;;;;32063:13:0;;;;;;:9;:13;;;;;:18;;32080:1;;32063:13;:18;;32080:1;;32063:18;:::i;:::-;;;;-1:-1:-1;;32092:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32092:21:0;-1:-1:-1;;;;;32092:21:0;;;;;;;;32131:33;;32092:16;;;32131:33;;32092:16;;32131:33;31790:382;;:::o;40746:988::-;41012:22;41062:1;41037:22;41054:4;41037:16;:22::i;:::-;:26;;;;:::i;:::-;41074:18;41095:26;;;:17;:26;;;;;;41012:51;;-1:-1:-1;41228:28:0;;;41224:328;;-1:-1:-1;;;;;41295:18:0;;41273:19;41295:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41346:30;;;;;;:44;;;41463:30;;:17;:30;;;;;:43;;;41224:328;-1:-1:-1;41648:26:0;;;;:17;:26;;;;;;;;41641:33;;;-1:-1:-1;;;;;41692:18:0;;;;;:12;:18;;;;;:34;;;;;;;41685:41;40746:988::o;42029:1079::-;42307:10;:17;42282:22;;42307:21;;42327:1;;42307:21;:::i;:::-;42339:18;42360:24;;;:15;:24;;;;;;42733:10;:26;;42282:46;;-1:-1:-1;42360:24:0;;42282:46;;42733:26;;;;;;:::i;:::-;;;;;;;;;42711:48;;42797:11;42772:10;42783;42772:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;42877:28;;;:15;:28;;;;;;;:41;;;43049:24;;;;;43042:31;43084:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;42100:1008;;;42029:1079;:::o;39533:221::-;39618:14;39635:20;39652:2;39635:16;:20::i;:::-;-1:-1:-1;;;;;39666:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;39711:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;39533:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;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:1;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:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1: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:1;;1343:180;-1:-1:-1;1343:180:1:o;1918:173::-;1986:20;;-1:-1:-1;;;;;2035:31:1;;2025:42;;2015:70;;2081:1;2078;2071:12;2015:70;1918:173;;;:::o;2096:254::-;2164:6;2172;2225:2;2213:9;2204:7;2200:23;2196:32;2193:52;;;2241:1;2238;2231:12;2193:52;2264:29;2283:9;2264:29;:::i;:::-;2254:39;2340:2;2325:18;;;;2312:32;;-1:-1:-1;;;2096:254:1:o;2355:186::-;2414:6;2467:2;2455:9;2446:7;2442:23;2438:32;2435:52;;;2483:1;2480;2473:12;2435:52;2506:29;2525:9;2506:29;:::i;2546:328::-;2623:6;2631;2639;2692:2;2680:9;2671:7;2667:23;2663:32;2660:52;;;2708:1;2705;2698:12;2660:52;2731:29;2750:9;2731:29;:::i;:::-;2721:39;;2779:38;2813:2;2802:9;2798:18;2779:38;:::i;:::-;2769:48;;2864:2;2853:9;2849:18;2836:32;2826:42;;2546:328;;;;;:::o;2879:127::-;2940:10;2935:3;2931:20;2928:1;2921:31;2971:4;2968:1;2961:15;2995:4;2992:1;2985:15;3011:632;3076:5;3106:18;3147:2;3139:6;3136:14;3133:40;;;3153:18;;:::i;:::-;3228:2;3222:9;3196:2;3282:15;;-1:-1:-1;;3278:24:1;;;3304:2;3274:33;3270:42;3258:55;;;3328:18;;;3348:22;;;3325:46;3322:72;;;3374:18;;:::i;:::-;3414:10;3410:2;3403:22;3443:6;3434:15;;3473:6;3465;3458:22;3513:3;3504:6;3499:3;3495:16;3492:25;3489:45;;;3530:1;3527;3520:12;3489:45;3580:6;3575:3;3568:4;3560:6;3556:17;3543:44;3635:1;3628:4;3619:6;3611;3607:19;3603:30;3596:41;;;;3011:632;;;;;:::o;3648:451::-;3717:6;3770:2;3758:9;3749:7;3745:23;3741:32;3738:52;;;3786:1;3783;3776:12;3738:52;3826:9;3813:23;3859:18;3851:6;3848:30;3845:50;;;3891:1;3888;3881:12;3845:50;3914:22;;3967:4;3959:13;;3955:27;-1:-1:-1;3945:55:1;;3996:1;3993;3986:12;3945:55;4019:74;4085:7;4080:2;4067:16;4062:2;4058;4054:11;4019:74;:::i;4104:615::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4307:9;4294:23;4336:18;4377:2;4369:6;4366:14;4363:34;;;4393:1;4390;4383:12;4363:34;4431:6;4420:9;4416:22;4406:32;;4476:7;4469:4;4465:2;4461:13;4457:27;4447:55;;4498:1;4495;4488:12;4447:55;4538:2;4525:16;4564:2;4556:6;4553:14;4550:34;;;4580:1;4577;4570:12;4550:34;4633:7;4628:2;4618:6;4615:1;4611:14;4607:2;4603:23;4599:32;4596:45;4593:65;;;4654:1;4651;4644:12;4593:65;4685:2;4677:11;;;;;4707:6;;-1:-1:-1;4104:615:1;;-1:-1:-1;;;;4104:615:1:o;4724:347::-;4789:6;4797;4850:2;4838:9;4829:7;4825:23;4821:32;4818:52;;;4866:1;4863;4856:12;4818:52;4889:29;4908:9;4889:29;:::i;:::-;4879:39;;4968:2;4957:9;4953:18;4940:32;5015:5;5008:13;5001:21;4994:5;4991:32;4981:60;;5037:1;5034;5027:12;4981:60;5060:5;5050:15;;;4724:347;;;;;:::o;5076:667::-;5171:6;5179;5187;5195;5248:3;5236:9;5227:7;5223:23;5219:33;5216:53;;;5265:1;5262;5255:12;5216:53;5288:29;5307:9;5288:29;:::i;:::-;5278:39;;5336:38;5370:2;5359:9;5355:18;5336:38;:::i;:::-;5326:48;;5421:2;5410:9;5406:18;5393:32;5383:42;;5476:2;5465:9;5461:18;5448:32;5503:18;5495:6;5492:30;5489:50;;;5535:1;5532;5525:12;5489:50;5558:22;;5611:4;5603:13;;5599:27;-1:-1:-1;5589:55:1;;5640:1;5637;5630:12;5589:55;5663:74;5729:7;5724:2;5711:16;5706:2;5702;5698:11;5663:74;:::i;:::-;5653:84;;;5076:667;;;;;;;:::o;5748:260::-;5816:6;5824;5877:2;5865:9;5856:7;5852:23;5848:32;5845:52;;;5893:1;5890;5883:12;5845:52;5916:29;5935:9;5916:29;:::i;:::-;5906:39;;5964:38;5998:2;5987:9;5983:18;5964:38;:::i;:::-;5954:48;;5748:260;;;;;:::o;6013:380::-;6092:1;6088:12;;;;6135;;;6156:61;;6210:4;6202:6;6198:17;6188:27;;6156:61;6263:2;6255:6;6252:14;6232:18;6229:38;6226:161;;;6309:10;6304:3;6300:20;6297:1;6290:31;6344:4;6341:1;6334:15;6372:4;6369:1;6362:15;6226:161;;6013:380;;;:::o;7638:347::-;7840:2;7822:21;;;7879:2;7859:18;;;7852:30;7918:25;7913:2;7898:18;;7891:53;7976:2;7961:18;;7638:347::o;7990:356::-;8192:2;8174:21;;;8211:18;;;8204:30;8270:34;8265:2;8250:18;;8243:62;8337:2;8322:18;;7990:356::o;8762:127::-;8823:10;8818:3;8814:20;8811:1;8804:31;8854:4;8851:1;8844:15;8878:4;8875:1;8868:15;8894:128;8934:3;8965:1;8961:6;8958:1;8955:13;8952:39;;;8971:18;;:::i;:::-;-1:-1:-1;9007:9:1;;8894:128::o;9386:349::-;9588:2;9570:21;;;9627:2;9607:18;;;9600:30;9666:27;9661:2;9646:18;;9639:55;9726:2;9711:18;;9386:349::o;9740:347::-;9942:2;9924:21;;;9981:2;9961:18;;;9954:30;10020:25;10015:2;10000:18;;9993:53;10078:2;10063:18;;9740:347::o;10092:135::-;10131:3;-1:-1:-1;;10152:17:1;;10149:43;;;10172:18;;:::i;:::-;-1:-1:-1;10219:1:1;10208:13;;10092:135::o;10232:413::-;10434:2;10416:21;;;10473:2;10453:18;;;10446:30;10512:34;10507:2;10492:18;;10485:62;-1:-1:-1;;;10578:2:1;10563:18;;10556:47;10635:3;10620:19;;10232:413::o;12562:350::-;12764:2;12746:21;;;12803:2;12783:18;;;12776:30;12842:28;12837:2;12822:18;;12815:56;12903:2;12888:18;;12562:350::o;12917:168::-;12957:7;13023:1;13019;13015:6;13011:14;13008:1;13005:21;13000:1;12993:9;12986:17;12982:45;12979:71;;;13030:18;;:::i;:::-;-1:-1:-1;13070:9:1;;12917:168::o;14134:127::-;14195:10;14190:3;14186:20;14183:1;14176:31;14226:4;14223:1;14216:15;14250:4;14247:1;14240:15;15435:127;15496:10;15491:3;15487:20;15484:1;15477:31;15527:4;15524:1;15517:15;15551:4;15548:1;15541:15;15567:120;15607:1;15633;15623:35;;15638:18;;:::i;:::-;-1:-1:-1;15672:9:1;;15567:120::o;18106:1527::-;18330:3;18368:6;18362:13;18394:4;18407:51;18451:6;18446:3;18441:2;18433:6;18429:15;18407:51;:::i;:::-;18521:13;;18480:16;;;;18543:55;18521:13;18480:16;18565:15;;;18543:55;:::i;:::-;18687:13;;18620:20;;;18660:1;;18747;18769:18;;;;18822;;;;18849:93;;18927:4;18917:8;18913:19;18901:31;;18849:93;18990:2;18980:8;18977:16;18957:18;18954:40;18951:167;;;-1:-1:-1;;;19017:33:1;;19073:4;19070:1;19063:15;19103:4;19024:3;19091:17;18951:167;19134:18;19161:110;;;;19285:1;19280:328;;;;19127:481;;19161:110;-1:-1:-1;;19196:24:1;;19182:39;;19241:20;;;;-1:-1:-1;19161:110:1;;19280:328;18053:1;18046:14;;;18090:4;18077:18;;19375:1;19389:169;19403:8;19400:1;19397:15;19389:169;;;19485:14;;19470:13;;;19463:37;19528:16;;;;19420:10;;19389:169;;;19393:3;;19589:8;19582:5;19578:20;19571:27;;19127:481;-1:-1:-1;19624:3:1;;18106:1527;-1:-1:-1;;;;;;;;;;;18106:1527:1:o;22800:125::-;22840:4;22868:1;22865;22862:8;22859:34;;;22873:18;;:::i;:::-;-1:-1:-1;22910:9:1;;22800:125::o;23494:414::-;23696:2;23678:21;;;23735:2;23715:18;;;23708:30;23774:34;23769:2;23754:18;;23747:62;-1:-1:-1;;;23840:2:1;23825:18;;23818:48;23898:3;23883:19;;23494:414::o;23913:112::-;23945:1;23971;23961:35;;23976:18;;:::i;:::-;-1:-1:-1;24010:9:1;;23913:112::o;24030:489::-;-1:-1:-1;;;;;24299:15:1;;;24281:34;;24351:15;;24346:2;24331:18;;24324:43;24398:2;24383:18;;24376:34;;;24446:3;24441:2;24426:18;;24419:31;;;24224:4;;24467:46;;24493:19;;24485:6;24467:46;:::i;:::-;24459:54;24030:489;-1:-1:-1;;;;;;24030:489:1:o;24524:249::-;24593:6;24646:2;24634:9;24625:7;24621:23;24617:32;24614:52;;;24662:1;24659;24652:12;24614:52;24694:9;24688:16;24713:30;24737:5;24713:30;:::i;25496:127::-;25557:10;25552:3;25548:20;25545:1;25538:31;25588:4;25585:1;25578:15;25612:4;25609:1;25602:15

Swarm Source

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