ETH Price: $2,584.41 (-4.13%)

Token

Murlock Zombies (MRLCK)
 

Overview

Max Total Supply

168 MRLCK

Holders

51

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MRLCK
0xe3fe3443854ac45c74e774014d43fcc3bd55a024
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MurlockZombiesCollection

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


////OFFICIAL MINT LINK -> https://www.murlocks.com/



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

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

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

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

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

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


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

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

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

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

abstract contract ERC721Optimized is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    string private _name;
    string private _symbol;
    address[] internal _owners;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;     
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }     

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        uint count = 0;
        uint length = _owners.length;
        for( uint i = 0; i < length; ++i ){
          if( owner == _owners[i] ){
            ++count;
          }
        }
        delete length;
        return count;
    }

    function getOwners() public view virtual returns (address[] memory) {
        return _owners;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _owners.length;
    }

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

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721Optimized.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);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId));

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId));
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

	function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }

	function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId));
        address owner = ERC721Optimized.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

	function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
	function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data)
        );
    }

	function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0));
        require(!_exists(tokenId));

        _beforeTokenTransfer(address(0), to, tokenId);
        _owners.push(to);

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

	function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721Optimized.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

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

	function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721Optimized.ownerOf(tokenId) == from);
        require(to != address(0));

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

	function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721Optimized.ownerOf(tokenId), to, tokenId);
    }

	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("aa");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
	function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

contract MurlockZombiesCollection is ERC721Optimized, Ownable, ReentrancyGuard 
{

    using Strings for uint256;

    uint256 public constant MAX_SUPPLY = 4999;
    uint256 public constant MAX_MINT_PER_TX = 3;

    uint256 public mintPrice = 0 ether;
    string public _baseMRLCKURI;
    bool public PUBLIC_SALE = false;
    
    event MurlocksMinted(address indexed mintAddress, uint256 indexed tokenId);
    event PermanentURI(string _value, uint256 indexed _id);

    constructor() ERC721Optimized("Murlock Zombies", "MRLCK") 
    {
    }

    function giveAway(address to, uint256 numberOfTokens) public onlyOwner {
        
        uint256 mintIndex = totalSupply();
        
        for (uint256 i = mintIndex; i < (mintIndex+numberOfTokens); i++) 
        {
            _safeMint(to, i);
        }

        emit MurlocksMinted(to, mintIndex+numberOfTokens);
    }

    function switchState() public onlyOwner
    {
        PUBLIC_SALE = !PUBLIC_SALE;
    }

    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "Insufficient balance");
        Address.sendValue(payable(msg.sender), address(this).balance);
    }

    function withdrawTo(uint256 amount, address payable to) public onlyOwner {
        require(address(this).balance > 0, "Insufficient balance");
        Address.sendValue(to, amount);
    }

    function setBaseURI(string memory newuri) public onlyOwner {
        _baseMRLCKURI = newuri;
    }

    function setMintPrice(uint256 newPrice) public onlyOwner {
        mintPrice = newPrice;
    }

    function mint(uint256 numberOfTokens) public payable nonReentrant {
        require((mintPrice * numberOfTokens) <= msg.value); //Small amount 
        require(numberOfTokens <= MAX_MINT_PER_TX);
        require((totalSupply() + numberOfTokens) <= MAX_SUPPLY);
        require(PUBLIC_SALE);
        
        uint256 mintIndex = totalSupply();
        for (uint256 i = 0; i < numberOfTokens; i++) 
        {
            _safeMint(_msgSender(), mintIndex + i);
            emit MurlocksMinted(_msgSender(), mintIndex + i);
        }
    }


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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0	? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : "";
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"mintAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"MurlocksMinted","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":"string","name":"_value","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"PermanentURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseMRLCKURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setMintPrice","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":"switchState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006007556009805460ff191690553480156200002057600080fd5b506040518060400160405280600f81526020016e4d75726c6f636b205a6f6d6269657360881b815250604051806040016040528060058152602001644d524c434b60d81b8152508160009081620000789190620001aa565b506001620000878282620001aa565b505050620000a46200009e620000af60201b60201c565b620000b3565b600160065562000276565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013057607f821691505b6020821081036200015157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001a557600081815260208120601f850160051c81016020861015620001805750805b601f850160051c820191505b81811015620001a1578281556001016200018c565b5050505b505050565b81516001600160401b03811115620001c657620001c662000105565b620001de81620001d784546200011b565b8462000157565b602080601f831160018114620002165760008415620001fd5750858301515b600019600386901b1c1916600185901b178555620001a1565b600085815260208120601f198616915b82811015620002475788860151825594840194600190910190840162000226565b5085821015620002665787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61210380620002866000396000f3fe6080604052600436106101cd5760003560e01c80638b6084e4116100f7578063a22cb46511610095578063ca80014411610064578063ca800144146104d9578063e985e9c5146104f9578063f2fde38b14610542578063f4a0a5281461056257600080fd5b8063a22cb46514610459578063b88d4fde14610479578063c86283c814610499578063c87b56dd146104b957600080fd5b8063922df6ae116100d1578063922df6ae146103fa57806395d89b411461040f578063a0712d6814610424578063a0e67e2b1461043757600080fd5b80638b6084e4146103b25780638da5cb5b146103c75780638ecad721146103e557600080fd5b80633ccfd60b1161016f5780636352211e1161013e5780636352211e146103475780636817c76c1461036757806370a082311461037d578063715018a61461039d57600080fd5b80633ccfd60b146102d857806342842e0e146102ed57806355f804b31461030d5780635f89584e1461032d57600080fd5b8063095ea7b3116101ab578063095ea7b31461026157806318160ddd1461028357806323b872dd146102a257806332cb6b0c146102c257600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611ab8565b610582565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c610667565b6040516101fe9190611b2d565b34801561023557600080fd5b50610249610244366004611b40565b6106f9565b6040516001600160a01b0390911681526020016101fe565b34801561026d57600080fd5b5061028161027c366004611b6e565b610797565b005b34801561028f57600080fd5b506002545b6040519081526020016101fe565b3480156102ae57600080fd5b506102816102bd366004611b9a565b6108c8565b3480156102ce57600080fd5b5061029461138781565b3480156102e457600080fd5b506102816108e6565b3480156102f957600080fd5b50610281610308366004611b9a565b61099c565b34801561031957600080fd5b50610281610328366004611c67565b6109b7565b34801561033957600080fd5b506009546101f29060ff1681565b34801561035357600080fd5b50610249610362366004611b40565b610a21565b34801561037357600080fd5b5061029460075481565b34801561038957600080fd5b50610294610398366004611cb0565b610ac1565b3480156103a957600080fd5b50610281610ba6565b3480156103be57600080fd5b50610281610c0a565b3480156103d357600080fd5b506005546001600160a01b0316610249565b3480156103f157600080fd5b50610294600381565b34801561040657600080fd5b5061021c610c78565b34801561041b57600080fd5b5061021c610d06565b610281610432366004611b40565b610d15565b34801561044357600080fd5b5061044c610e42565b6040516101fe9190611ccd565b34801561046557600080fd5b50610281610474366004611d1a565b610ea3565b34801561048557600080fd5b50610281610494366004611d58565b610f67565b3480156104a557600080fd5b506102816104b4366004611dd8565b610f8c565b3480156104c557600080fd5b5061021c6104d4366004611b40565b611040565b3480156104e557600080fd5b506102816104f4366004611b6e565b611119565b34801561050557600080fd5b506101f2610514366004611dfd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561054e57600080fd5b5061028161055d366004611cb0565b6111f3565b34801561056e57600080fd5b5061028161057d366004611b40565b6112d5565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061061557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061066157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461067690611e2b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a290611e2b565b80156106ef5780601f106106c4576101008083540402835291602001916106ef565b820191906000526020600020905b8154815290600101906020018083116106d257829003601f168201915b5050505050905090565b600061070482611334565b61077b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006107a282610a21565b9050806001600160a01b0316836001600160a01b03160361082b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610772565b336001600160a01b038216148061084757506108478133610514565b6108b95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610772565b6108c3838361137e565b505050565b6108d233826113f9565b6108db57600080fd5b6108c383838361148b565b6005546001600160a01b031633146109405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b600047116109905760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610772565b61099a334761154a565b565b6108c383838360405180602001604052806000815250610f67565b6005546001600160a01b03163314610a115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b6008610a1d8282611eb3565b5050565b60008060028381548110610a3757610a37611f73565b6000918252602090912001546001600160a01b03169050806106615760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610772565b60006001600160a01b038216610b3f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610772565b600254600090815b81811015610b9d5760028181548110610b6257610b62611f73565b6000918252602090912001546001600160a01b0390811690861603610b8d57610b8a83611f9f565b92505b610b9681611f9f565b9050610b47565b50909392505050565b6005546001600160a01b03163314610c005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b61099a6000611663565b6005546001600160a01b03163314610c645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b6009805460ff19811660ff90911615179055565b60088054610c8590611e2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb190611e2b565b8015610cfe5780601f10610cd357610100808354040283529160200191610cfe565b820191906000526020600020905b815481529060010190602001808311610ce157829003601f168201915b505050505081565b60606001805461067690611e2b565b600260065403610d675760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610772565b60026006556007543490610d7c908390611fb9565b1115610d8757600080fd5b6003811115610d9557600080fd5b61138781610da260025490565b610dac9190611fd8565b1115610db757600080fd5b60095460ff16610dc657600080fd5b6000610dd160025490565b905060005b82811015610e3857610df133610dec8385611fd8565b6116c2565b610dfb8183611fd8565b60405133907fbc0f255bcbac534231a9fe2136c89dfd7133fcd228ebe16c8063baab9e77f74a90600090a380610e3081611f9f565b915050610dd6565b5050600160065550565b606060028054806020026020016040519081016040528092919081815260200182805480156106ef57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e7c575050505050905090565b336001600160a01b03831603610efb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610772565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f7133836113f9565b610f7a57600080fd5b610f86848484846116dc565b50505050565b6005546001600160a01b03163314610fe65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b600047116110365760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610772565b610a1d818361154a565b606061104b82611334565b6110bd5760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610772565b60006110c76116fc565b905060008151116110e75760405180602001604052806000815250611112565b806110f18461170b565b604051602001611102929190611ff0565b6040516020818303038152906040525b9392505050565b6005546001600160a01b031633146111735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b600061117e60025490565b9050805b61118c8383611fd8565b8110156111af5761119d84826116c2565b806111a781611f9f565b915050611182565b506111ba8282611fd8565b6040516001600160a01b038516907fbc0f255bcbac534231a9fe2136c89dfd7133fcd228ebe16c8063baab9e77f74a90600090a3505050565b6005546001600160a01b0316331461124d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b6001600160a01b0381166112c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610772565b6112d281611663565b50565b6005546001600160a01b0316331461132f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b600755565b60025460009082108015610661575060006001600160a01b03166002838154811061136157611361611f73565b6000918252602090912001546001600160a01b0316141592915050565b6000818152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906113c082610a21565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061140482611334565b61140d57600080fd5b600061141883610a21565b9050806001600160a01b0316846001600160a01b031614806114535750836001600160a01b0316611448846106f9565b6001600160a01b0316145b8061148357506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661149e82610a21565b6001600160a01b0316146114b157600080fd5b6001600160a01b0382166114c457600080fd5b6114cf60008261137e565b81600282815481106114e3576114e3611f73565b60009182526020822001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b8047101561159a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610772565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146115e7576040519150601f19603f3d011682016040523d82523d6000602084013e6115ec565b606091505b50509050806108c35760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610772565b600580546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610a1d828260405180602001604052806000815250611840565b6116e784848461148b565b6116f384848484611860565b610f8657600080fd5b60606008805461067690611e2b565b60608160000361174e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611778578061176281611f9f565b91506117719050600a83612035565b9150611752565b60008167ffffffffffffffff81111561179357611793611bdb565b6040519080825280601f01601f1916602001820160405280156117bd576020820181803683370190505b5090505b8415611483576117d2600183612049565b91506117df600a86612060565b6117ea906030611fd8565b60f81b8183815181106117ff576117ff611f73565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611839600a86612035565b94506117c1565b61184a83836119db565b6118576000848484611860565b6108c357600080fd5b60006001600160a01b0384163b156119d0576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906118bd903390899088908890600401612074565b6020604051808303816000875af19250505080156118f8575060408051601f3d908101601f191682019092526118f5918101906120b0565b60015b611985573d808015611926576040519150601f19603f3d011682016040523d82523d6000602084013e61192b565b606091505b50805160000361197d5760405162461bcd60e51b815260206004820152600260248201527f61610000000000000000000000000000000000000000000000000000000000006044820152606401610772565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611483565b506001949350505050565b6001600160a01b0382166119ee57600080fd5b6119f781611334565b15611a0157600080fd5b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146112d257600080fd5b600060208284031215611aca57600080fd5b813561111281611a8a565b60005b83811015611af0578181015183820152602001611ad8565b83811115610f865750506000910152565b60008151808452611b19816020860160208601611ad5565b601f01601f19169290920160200192915050565b6020815260006111126020830184611b01565b600060208284031215611b5257600080fd5b5035919050565b6001600160a01b03811681146112d257600080fd5b60008060408385031215611b8157600080fd5b8235611b8c81611b59565b946020939093013593505050565b600080600060608486031215611baf57600080fd5b8335611bba81611b59565b92506020840135611bca81611b59565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611c0c57611c0c611bdb565b604051601f8501601f19908116603f01168101908282118183101715611c3457611c34611bdb565b81604052809350858152868686011115611c4d57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611c7957600080fd5b813567ffffffffffffffff811115611c9057600080fd5b8201601f81018413611ca157600080fd5b61148384823560208401611bf1565b600060208284031215611cc257600080fd5b813561111281611b59565b6020808252825182820181905260009190848201906040850190845b81811015611d0e5783516001600160a01b031683529284019291840191600101611ce9565b50909695505050505050565b60008060408385031215611d2d57600080fd5b8235611d3881611b59565b915060208301358015158114611d4d57600080fd5b809150509250929050565b60008060008060808587031215611d6e57600080fd5b8435611d7981611b59565b93506020850135611d8981611b59565b925060408501359150606085013567ffffffffffffffff811115611dac57600080fd5b8501601f81018713611dbd57600080fd5b611dcc87823560208401611bf1565b91505092959194509250565b60008060408385031215611deb57600080fd5b823591506020830135611d4d81611b59565b60008060408385031215611e1057600080fd5b8235611e1b81611b59565b91506020830135611d4d81611b59565b600181811c90821680611e3f57607f821691505b602082108103611e5f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156108c357600081815260208120601f850160051c81016020861015611e8c5750805b601f850160051c820191505b81811015611eab57828155600101611e98565b505050505050565b815167ffffffffffffffff811115611ecd57611ecd611bdb565b611ee181611edb8454611e2b565b84611e65565b602080601f831160018114611f165760008415611efe5750858301515b600019600386901b1c1916600185901b178555611eab565b600085815260208120601f198616915b82811015611f4557888601518255948401946001909101908401611f26565b5085821015611f635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198203611fb257611fb2611f89565b5060010190565b6000816000190483118215151615611fd357611fd3611f89565b500290565b60008219821115611feb57611feb611f89565b500190565b60008351612002818460208801611ad5565b835190830190612016818360208801611ad5565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826120445761204461201f565b500490565b60008282101561205b5761205b611f89565b500390565b60008261206f5761206f61201f565b500690565b60006001600160a01b038087168352808616602084015250836040830152608060608301526120a66080830184611b01565b9695505050505050565b6000602082840312156120c257600080fd5b815161111281611a8a56fea26469706673582212208505dce6b654e8209dafc5229c8792d23a15ba99a9f2962e0ec76deffe1c53c864736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80638b6084e4116100f7578063a22cb46511610095578063ca80014411610064578063ca800144146104d9578063e985e9c5146104f9578063f2fde38b14610542578063f4a0a5281461056257600080fd5b8063a22cb46514610459578063b88d4fde14610479578063c86283c814610499578063c87b56dd146104b957600080fd5b8063922df6ae116100d1578063922df6ae146103fa57806395d89b411461040f578063a0712d6814610424578063a0e67e2b1461043757600080fd5b80638b6084e4146103b25780638da5cb5b146103c75780638ecad721146103e557600080fd5b80633ccfd60b1161016f5780636352211e1161013e5780636352211e146103475780636817c76c1461036757806370a082311461037d578063715018a61461039d57600080fd5b80633ccfd60b146102d857806342842e0e146102ed57806355f804b31461030d5780635f89584e1461032d57600080fd5b8063095ea7b3116101ab578063095ea7b31461026157806318160ddd1461028357806323b872dd146102a257806332cb6b0c146102c257600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611ab8565b610582565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c610667565b6040516101fe9190611b2d565b34801561023557600080fd5b50610249610244366004611b40565b6106f9565b6040516001600160a01b0390911681526020016101fe565b34801561026d57600080fd5b5061028161027c366004611b6e565b610797565b005b34801561028f57600080fd5b506002545b6040519081526020016101fe565b3480156102ae57600080fd5b506102816102bd366004611b9a565b6108c8565b3480156102ce57600080fd5b5061029461138781565b3480156102e457600080fd5b506102816108e6565b3480156102f957600080fd5b50610281610308366004611b9a565b61099c565b34801561031957600080fd5b50610281610328366004611c67565b6109b7565b34801561033957600080fd5b506009546101f29060ff1681565b34801561035357600080fd5b50610249610362366004611b40565b610a21565b34801561037357600080fd5b5061029460075481565b34801561038957600080fd5b50610294610398366004611cb0565b610ac1565b3480156103a957600080fd5b50610281610ba6565b3480156103be57600080fd5b50610281610c0a565b3480156103d357600080fd5b506005546001600160a01b0316610249565b3480156103f157600080fd5b50610294600381565b34801561040657600080fd5b5061021c610c78565b34801561041b57600080fd5b5061021c610d06565b610281610432366004611b40565b610d15565b34801561044357600080fd5b5061044c610e42565b6040516101fe9190611ccd565b34801561046557600080fd5b50610281610474366004611d1a565b610ea3565b34801561048557600080fd5b50610281610494366004611d58565b610f67565b3480156104a557600080fd5b506102816104b4366004611dd8565b610f8c565b3480156104c557600080fd5b5061021c6104d4366004611b40565b611040565b3480156104e557600080fd5b506102816104f4366004611b6e565b611119565b34801561050557600080fd5b506101f2610514366004611dfd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561054e57600080fd5b5061028161055d366004611cb0565b6111f3565b34801561056e57600080fd5b5061028161057d366004611b40565b6112d5565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061061557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061066157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461067690611e2b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a290611e2b565b80156106ef5780601f106106c4576101008083540402835291602001916106ef565b820191906000526020600020905b8154815290600101906020018083116106d257829003601f168201915b5050505050905090565b600061070482611334565b61077b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006107a282610a21565b9050806001600160a01b0316836001600160a01b03160361082b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610772565b336001600160a01b038216148061084757506108478133610514565b6108b95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610772565b6108c3838361137e565b505050565b6108d233826113f9565b6108db57600080fd5b6108c383838361148b565b6005546001600160a01b031633146109405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b600047116109905760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610772565b61099a334761154a565b565b6108c383838360405180602001604052806000815250610f67565b6005546001600160a01b03163314610a115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b6008610a1d8282611eb3565b5050565b60008060028381548110610a3757610a37611f73565b6000918252602090912001546001600160a01b03169050806106615760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610772565b60006001600160a01b038216610b3f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610772565b600254600090815b81811015610b9d5760028181548110610b6257610b62611f73565b6000918252602090912001546001600160a01b0390811690861603610b8d57610b8a83611f9f565b92505b610b9681611f9f565b9050610b47565b50909392505050565b6005546001600160a01b03163314610c005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b61099a6000611663565b6005546001600160a01b03163314610c645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b6009805460ff19811660ff90911615179055565b60088054610c8590611e2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb190611e2b565b8015610cfe5780601f10610cd357610100808354040283529160200191610cfe565b820191906000526020600020905b815481529060010190602001808311610ce157829003601f168201915b505050505081565b60606001805461067690611e2b565b600260065403610d675760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610772565b60026006556007543490610d7c908390611fb9565b1115610d8757600080fd5b6003811115610d9557600080fd5b61138781610da260025490565b610dac9190611fd8565b1115610db757600080fd5b60095460ff16610dc657600080fd5b6000610dd160025490565b905060005b82811015610e3857610df133610dec8385611fd8565b6116c2565b610dfb8183611fd8565b60405133907fbc0f255bcbac534231a9fe2136c89dfd7133fcd228ebe16c8063baab9e77f74a90600090a380610e3081611f9f565b915050610dd6565b5050600160065550565b606060028054806020026020016040519081016040528092919081815260200182805480156106ef57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e7c575050505050905090565b336001600160a01b03831603610efb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610772565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f7133836113f9565b610f7a57600080fd5b610f86848484846116dc565b50505050565b6005546001600160a01b03163314610fe65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b600047116110365760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610772565b610a1d818361154a565b606061104b82611334565b6110bd5760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610772565b60006110c76116fc565b905060008151116110e75760405180602001604052806000815250611112565b806110f18461170b565b604051602001611102929190611ff0565b6040516020818303038152906040525b9392505050565b6005546001600160a01b031633146111735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b600061117e60025490565b9050805b61118c8383611fd8565b8110156111af5761119d84826116c2565b806111a781611f9f565b915050611182565b506111ba8282611fd8565b6040516001600160a01b038516907fbc0f255bcbac534231a9fe2136c89dfd7133fcd228ebe16c8063baab9e77f74a90600090a3505050565b6005546001600160a01b0316331461124d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b6001600160a01b0381166112c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610772565b6112d281611663565b50565b6005546001600160a01b0316331461132f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610772565b600755565b60025460009082108015610661575060006001600160a01b03166002838154811061136157611361611f73565b6000918252602090912001546001600160a01b0316141592915050565b6000818152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906113c082610a21565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061140482611334565b61140d57600080fd5b600061141883610a21565b9050806001600160a01b0316846001600160a01b031614806114535750836001600160a01b0316611448846106f9565b6001600160a01b0316145b8061148357506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661149e82610a21565b6001600160a01b0316146114b157600080fd5b6001600160a01b0382166114c457600080fd5b6114cf60008261137e565b81600282815481106114e3576114e3611f73565b60009182526020822001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b8047101561159a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610772565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146115e7576040519150601f19603f3d011682016040523d82523d6000602084013e6115ec565b606091505b50509050806108c35760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610772565b600580546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610a1d828260405180602001604052806000815250611840565b6116e784848461148b565b6116f384848484611860565b610f8657600080fd5b60606008805461067690611e2b565b60608160000361174e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611778578061176281611f9f565b91506117719050600a83612035565b9150611752565b60008167ffffffffffffffff81111561179357611793611bdb565b6040519080825280601f01601f1916602001820160405280156117bd576020820181803683370190505b5090505b8415611483576117d2600183612049565b91506117df600a86612060565b6117ea906030611fd8565b60f81b8183815181106117ff576117ff611f73565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611839600a86612035565b94506117c1565b61184a83836119db565b6118576000848484611860565b6108c357600080fd5b60006001600160a01b0384163b156119d0576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906118bd903390899088908890600401612074565b6020604051808303816000875af19250505080156118f8575060408051601f3d908101601f191682019092526118f5918101906120b0565b60015b611985573d808015611926576040519150601f19603f3d011682016040523d82523d6000602084013e61192b565b606091505b50805160000361197d5760405162461bcd60e51b815260206004820152600260248201527f61610000000000000000000000000000000000000000000000000000000000006044820152606401610772565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611483565b506001949350505050565b6001600160a01b0382166119ee57600080fd5b6119f781611334565b15611a0157600080fd5b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146112d257600080fd5b600060208284031215611aca57600080fd5b813561111281611a8a565b60005b83811015611af0578181015183820152602001611ad8565b83811115610f865750506000910152565b60008151808452611b19816020860160208601611ad5565b601f01601f19169290920160200192915050565b6020815260006111126020830184611b01565b600060208284031215611b5257600080fd5b5035919050565b6001600160a01b03811681146112d257600080fd5b60008060408385031215611b8157600080fd5b8235611b8c81611b59565b946020939093013593505050565b600080600060608486031215611baf57600080fd5b8335611bba81611b59565b92506020840135611bca81611b59565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611c0c57611c0c611bdb565b604051601f8501601f19908116603f01168101908282118183101715611c3457611c34611bdb565b81604052809350858152868686011115611c4d57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611c7957600080fd5b813567ffffffffffffffff811115611c9057600080fd5b8201601f81018413611ca157600080fd5b61148384823560208401611bf1565b600060208284031215611cc257600080fd5b813561111281611b59565b6020808252825182820181905260009190848201906040850190845b81811015611d0e5783516001600160a01b031683529284019291840191600101611ce9565b50909695505050505050565b60008060408385031215611d2d57600080fd5b8235611d3881611b59565b915060208301358015158114611d4d57600080fd5b809150509250929050565b60008060008060808587031215611d6e57600080fd5b8435611d7981611b59565b93506020850135611d8981611b59565b925060408501359150606085013567ffffffffffffffff811115611dac57600080fd5b8501601f81018713611dbd57600080fd5b611dcc87823560208401611bf1565b91505092959194509250565b60008060408385031215611deb57600080fd5b823591506020830135611d4d81611b59565b60008060408385031215611e1057600080fd5b8235611e1b81611b59565b91506020830135611d4d81611b59565b600181811c90821680611e3f57607f821691505b602082108103611e5f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156108c357600081815260208120601f850160051c81016020861015611e8c5750805b601f850160051c820191505b81811015611eab57828155600101611e98565b505050505050565b815167ffffffffffffffff811115611ecd57611ecd611bdb565b611ee181611edb8454611e2b565b84611e65565b602080601f831160018114611f165760008415611efe5750858301515b600019600386901b1c1916600185901b178555611eab565b600085815260208120601f198616915b82811015611f4557888601518255948401946001909101908401611f26565b5085821015611f635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198203611fb257611fb2611f89565b5060010190565b6000816000190483118215151615611fd357611fd3611f89565b500290565b60008219821115611feb57611feb611f89565b500190565b60008351612002818460208801611ad5565b835190830190612016818360208801611ad5565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826120445761204461201f565b500490565b60008282101561205b5761205b611f89565b500390565b60008261206f5761206f61201f565b500690565b60006001600160a01b038087168352808616602084015250836040830152608060608301526120a66080830184611b01565b9695505050505050565b6000602082840312156120c257600080fd5b815161111281611a8a56fea26469706673582212208505dce6b654e8209dafc5229c8792d23a15ba99a9f2962e0ec76deffe1c53c864736f6c634300080f0033

Deployed Bytecode Sourcemap

27541:2614:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21001:305;;;;;;;;;;-1:-1:-1;21001:305:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;21001:305:0;;;;;;;;22205:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22853:221::-;;;;;;;;;;-1:-1:-1;22853:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1797:55:1;;;1779:74;;1767:2;1752:18;22853:221:0;1633:226:1;22425:420:0;;;;;;;;;;-1:-1:-1;22425:420:0;;;;;:::i;:::-;;:::i;:::-;;21849:101;;;;;;;;;;-1:-1:-1;21928:7:0;:14;21849:101;;;2489:25:1;;;2477:2;2462:18;21849:101:0;2343:177:1;23557:233:0;;;;;;;;;;-1:-1:-1;23557:233:0;;;;;:::i;:::-;;:::i;27665:41::-;;;;;;;;;;;;27702:4;27665:41;;28547:186;;;;;;;;;;;;;:::i;23798:185::-;;;;;;;;;;-1:-1:-1;23798:185:0;;;;;:::i;:::-;;:::i;28939:100::-;;;;;;;;;;-1:-1:-1;28939:100:0;;;;;:::i;:::-;;:::i;27840:31::-;;;;;;;;;;-1:-1:-1;27840:31:0;;;;;;;;21958:239;;;;;;;;;;-1:-1:-1;21958:239:0;;;;;:::i;:::-;;:::i;27765:34::-;;;;;;;;;;;;;;;;21318:414;;;;;;;;;;-1:-1:-1;21318:414:0;;;;;:::i;:::-;;:::i;19707:103::-;;;;;;;;;;;;;:::i;28449:90::-;;;;;;;;;;;;;:::i;19056:87::-;;;;;;;;;;-1:-1:-1;19129:6:0;;-1:-1:-1;;;;;19129:6:0;19056:87;;27713:43;;;;;;;;;;;;27755:1;27713:43;;27806:27;;;;;;;;;;;;;:::i;22313:104::-;;;;;;;;;;;;;:::i;29151:548::-;;;;;;:::i;:::-;;:::i;21740:101::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23082:295::-;;;;;;;;;;-1:-1:-1;23082:295:0;;;;;:::i;:::-;;:::i;23991:275::-;;;;;;;;;;-1:-1:-1;23991:275:0;;;;;:::i;:::-;;:::i;28741:190::-;;;;;;;;;;-1:-1:-1;28741:190:0;;;;;:::i;:::-;;:::i;29816:336::-;;;;;;;;;;-1:-1:-1;29816:336:0;;;;;:::i;:::-;;:::i;28108:333::-;;;;;;;;;;-1:-1:-1;28108:333:0;;;;;:::i;:::-;;:::i;23385:164::-;;;;;;;;;;-1:-1:-1;23385:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23506:25:0;;;23482:4;23506:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23385:164;19965:201;;;;;;;;;;-1:-1:-1;19965:201:0;;;;;:::i;:::-;;:::i;29047:96::-;;;;;;;;;;-1:-1:-1;29047:96:0;;;;;:::i;:::-;;:::i;21001:305::-;21103:4;21140:40;;;21155:25;21140:40;;:105;;-1:-1:-1;21197:48:0;;;21212:33;21197:48;21140:105;:158;;;-1:-1:-1;814:25:0;799:40;;;;21262:36;21120:178;21001:305;-1:-1:-1;;21001:305:0:o;22205:100::-;22259:13;22292:5;22285:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22205:100;:::o;22853:221::-;22929:7;22957:16;22965:7;22957;:16::i;:::-;22949:73;;;;-1:-1:-1;;;22949:73:0;;7851:2:1;22949:73:0;;;7833:21:1;7890:2;7870:18;;;7863:30;7929:34;7909:18;;;7902:62;8000:14;7980:18;;;7973:42;8032:19;;22949:73:0;;;;;;;;;-1:-1:-1;23042:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23042:24:0;;22853:221::o;22425:420::-;22506:13;22522:32;22546:7;22522:23;:32::i;:::-;22506:48;;22579:5;-1:-1:-1;;;;;22573:11:0;:2;-1:-1:-1;;;;;22573:11:0;;22565:57;;;;-1:-1:-1;;;22565:57:0;;8264:2:1;22565:57:0;;;8246:21:1;8303:2;8283:18;;;8276:30;8342:34;8322:18;;;8315:62;8413:3;8393:18;;;8386:31;8434:19;;22565:57:0;8062:397:1;22565:57:0;967:10;-1:-1:-1;;;;;22657:21:0;;;;:62;;-1:-1:-1;22682:37:0;22699:5;967:10;23385:164;:::i;22682:37::-;22635:168;;;;-1:-1:-1;;;22635:168:0;;8666:2:1;22635:168:0;;;8648:21:1;8705:2;8685:18;;;8678:30;8744:34;8724:18;;;8717:62;8815:26;8795:18;;;8788:54;8859:19;;22635:168:0;8464:420:1;22635:168:0;22816:21;22825:2;22829:7;22816:8;:21::i;:::-;22495:350;22425:420;;:::o;23557:233::-;23699:41;967:10;23732:7;23699:18;:41::i;:::-;23691:50;;;;;;23754:28;23764:4;23770:2;23774:7;23754:9;:28::i;28547:186::-;19129:6;;-1:-1:-1;;;;;19129:6:0;967:10;19276:23;19268:68;;;;-1:-1:-1;;;19268:68:0;;9091:2:1;19268:68:0;;;9073:21:1;;;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9221:18;;19268:68:0;8889:356:1;19268:68:0;28627:1:::1;28603:21;:25;28595:58;;;::::0;-1:-1:-1;;;28595:58:0;;9452:2:1;28595:58:0::1;::::0;::::1;9434:21:1::0;9491:2;9471:18;;;9464:30;9530:22;9510:18;;;9503:50;9570:18;;28595:58:0::1;9250:344:1::0;28595:58:0::1;28664:61;28690:10;28703:21;28664:17;:61::i;:::-;28547:186::o:0;23798:185::-;23936:39;23953:4;23959:2;23963:7;23936:39;;;;;;;;;;;;:16;:39::i;28939:100::-;19129:6;;-1:-1:-1;;;;;19129:6:0;967:10;19276:23;19268:68;;;;-1:-1:-1;;;19268:68:0;;9091:2:1;19268:68:0;;;9073:21:1;;;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9221:18;;19268:68:0;8889:356:1;19268:68:0;29009:13:::1;:22;29025:6:::0;29009:13;:22:::1;:::i;:::-;;28939:100:::0;:::o;21958:239::-;22030:7;22050:13;22066:7;22074;22066:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;22066:16:0;;-1:-1:-1;22066:16:0;22093:73;;;;-1:-1:-1;;;22093:73:0;;12373:2:1;22093:73:0;;;12355:21:1;12412:2;12392:18;;;12385:30;12451:34;12431:18;;;12424:62;12522:11;12502:18;;;12495:39;12551:19;;22093:73:0;12171:405:1;21318:414:0;21390:7;-1:-1:-1;;;;;21418:19:0;;21410:74;;;;-1:-1:-1;;;21410:74:0;;12783:2:1;21410:74:0;;;12765:21:1;12822:2;12802:18;;;12795:30;12861:34;12841:18;;;12834:62;12932:12;12912:18;;;12905:40;12962:19;;21410:74:0;12581:406:1;21410:74:0;21534:7;:14;21495:10;;;21559:119;21580:6;21576:1;:10;21559:119;;;21619:7;21627:1;21619:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21619:10:0;;;21610:19;;;;21606:61;;21646:7;;;:::i;:::-;;;21606:61;21588:3;;;:::i;:::-;;;21559:119;;;-1:-1:-1;21719:5:0;;21318:414;-1:-1:-1;;;21318:414:0:o;19707:103::-;19129:6;;-1:-1:-1;;;;;19129:6:0;967:10;19276:23;19268:68;;;;-1:-1:-1;;;19268:68:0;;9091:2:1;19268:68:0;;;9073:21:1;;;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9221:18;;19268:68:0;8889:356:1;19268:68:0;19772:30:::1;19799:1;19772:18;:30::i;28449:90::-:0;19129:6;;-1:-1:-1;;;;;19129:6:0;967:10;19276:23;19268:68;;;;-1:-1:-1;;;19268:68:0;;9091:2:1;19268:68:0;;;9073:21:1;;;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9221:18;;19268:68:0;8889:356:1;19268:68:0;28520:11:::1;::::0;;-1:-1:-1;;28505:26:0;::::1;28520:11;::::0;;::::1;28519:12;28505:26;::::0;;28449:90::o;27806:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22313:104::-;22369:13;22402:7;22395:14;;;;;:::i;29151:548::-;17697:1;18295:7;;:19;18287:63;;;;-1:-1:-1;;;18287:63:0;;13583:2:1;18287:63:0;;;13565:21:1;13622:2;13602:18;;;13595:30;13661:33;13641:18;;;13634:61;13712:18;;18287:63:0;13381:355:1;18287:63:0;17697:1;18428:7;:18;29237:9:::1;::::0;29268::::1;::::0;29237:26:::1;::::0;29249:14;;29237:26:::1;:::i;:::-;29236:41;;29228:50;;;::::0;::::1;;27755:1;29313:14;:33;;29305:42;;;::::0;::::1;;27702:4;29383:14;29367:13;21928:7:::0;:14;;21849:101;29367:13:::1;:30;;;;:::i;:::-;29366:46;;29358:55;;;::::0;::::1;;29432:11;::::0;::::1;;29424:20;;;::::0;::::1;;29465:17;29485:13;21928:7:::0;:14;;21849:101;29485:13:::1;29465:33;;29514:9;29509:183;29533:14;29529:1;:18;29509:183;;;29579:38;967:10:::0;29603:13:::1;29615:1:::0;29603:9;:13:::1;:::i;:::-;29579:9;:38::i;:::-;29666:13;29678:1:::0;29666:9;:13:::1;:::i;:::-;29637:43;::::0;967:10;;29637:43:::1;::::0;;;::::1;29549:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29509:183;;;-1:-1:-1::0;;17653:1:0;18607:7;:22;-1:-1:-1;29151:548:0:o;21740:101::-;21790:16;21826:7;21819:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21819:14:0;;;;;;;;;;;;;;;;;;;;;;21740:101;:::o;23082:295::-;967:10;-1:-1:-1;;;;;23185:24:0;;;23177:62;;;;-1:-1:-1;;;23177:62:0;;14309:2:1;23177:62:0;;;14291:21:1;14348:2;14328:18;;;14321:30;14387:27;14367:18;;;14360:55;14432:18;;23177:62:0;14107:349:1;23177:62:0;967:10;23252:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23252:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23252:53:0;;;;;;;;;;23321:48;;586:41:1;;;23252:42:0;;967:10;23321:48;;559:18:1;23321:48:0;;;;;;;23082:295;;:::o;23991:275::-;24166:41;967:10;24199:7;24166:18;:41::i;:::-;24158:50;;;;;;24219:39;24233:4;24239:2;24243:7;24252:5;24219:13;:39::i;:::-;23991:275;;;;:::o;28741:190::-;19129:6;;-1:-1:-1;;;;;19129:6:0;967:10;19276:23;19268:68;;;;-1:-1:-1;;;19268:68:0;;9091:2:1;19268:68:0;;;9073:21:1;;;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9221:18;;19268:68:0;8889:356:1;19268:68:0;28857:1:::1;28833:21;:25;28825:58;;;::::0;-1:-1:-1;;;28825:58:0;;9452:2:1;28825:58:0::1;::::0;::::1;9434:21:1::0;9491:2;9471:18;;;9464:30;9530:22;9510:18;;;9503:50;9570:18;;28825:58:0::1;9250:344:1::0;28825:58:0::1;28894:29;28912:2;28916:6;28894:17;:29::i;29816:336::-:0;29889:13;29923:16;29931:7;29923;:16::i;:::-;29915:62;;;;-1:-1:-1;;;29915:62:0;;14663:2:1;29915:62:0;;;14645:21:1;14702:2;14682:18;;;14675:30;14741:34;14721:18;;;14714:62;14812:3;14792:18;;;14785:31;14833:19;;29915:62:0;14461:397:1;29915:62:0;29988:28;30019:10;:8;:10::i;:::-;29988:41;;30078:1;30053:14;30047:28;:32;:100;;;;;;;;;;;;;;;;;30106:14;30122:18;:7;:16;:18::i;:::-;30089:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30047:100;30040:107;29816:336;-1:-1:-1;;;29816:336:0:o;28108:333::-;19129:6;;-1:-1:-1;;;;;19129:6:0;967:10;19276:23;19268:68;;;;-1:-1:-1;;;19268:68:0;;9091:2:1;19268:68:0;;;9073:21:1;;;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9221:18;;19268:68:0;8889:356:1;19268:68:0;28200:17:::1;28220:13;21928:7:::0;:14;;21849:101;28220:13:::1;28200:33:::0;-1:-1:-1;28200:33:0;28254:118:::1;28287:24;28297:14:::0;28287:9;:24:::1;:::i;:::-;28282:1;:30;28254:118;;;28344:16;28354:2;28358:1;28344:9;:16::i;:::-;28314:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28254:118;;;-1:-1:-1::0;28408:24:0::1;28418:14:::0;28408:9;:24:::1;:::i;:::-;28389:44;::::0;-1:-1:-1;;;;;28389:44:0;::::1;::::0;::::1;::::0;;;::::1;28179:262;28108:333:::0;;:::o;19965:201::-;19129:6;;-1:-1:-1;;;;;19129:6:0;967:10;19276:23;19268:68;;;;-1:-1:-1;;;19268:68:0;;9091:2:1;19268:68:0;;;9073:21:1;;;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9221:18;;19268:68:0;8889:356:1;19268:68:0;-1:-1:-1;;;;;20054:22:0;::::1;20046:73;;;::::0;-1:-1:-1;;;20046:73:0;;15540:2:1;20046:73:0::1;::::0;::::1;15522:21:1::0;15579:2;15559:18;;;15552:30;15618:34;15598:18;;;15591:62;15689:8;15669:18;;;15662:36;15715:19;;20046:73:0::1;15338:402:1::0;20046:73:0::1;20130:28;20149:8;20130:18;:28::i;:::-;19965:201:::0;:::o;29047:96::-;19129:6;;-1:-1:-1;;;;;19129:6:0;967:10;19276:23;19268:68;;;;-1:-1:-1;;;19268:68:0;;9091:2:1;19268:68:0;;;9073:21:1;;;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9221:18;;19268:68:0;8889:356:1;19268:68:0;29115:9:::1;:20:::0;29047:96::o;24540:155::-;24639:7;:14;24605:4;;24629:24;;:58;;;;;24685:1;-1:-1:-1;;;;;24657:30:0;:7;24665;24657:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24657:16:0;:30;;24622:65;24540:155;-1:-1:-1;;24540:155:0:o;26460:183::-;26535:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;26535:29:0;-1:-1:-1;;;;;26535:29:0;;;;;;;;:24;;26589:32;26535:24;26589:23;:32::i;:::-;-1:-1:-1;;;;;26580:55:0;;;;;;;;;;;26460:183;;:::o;24700:309::-;24793:4;24818:16;24826:7;24818;:16::i;:::-;24810:25;;;;;;24846:13;24862:32;24886:7;24862:23;:32::i;:::-;24846:48;;24924:5;-1:-1:-1;;;;;24913:16:0;:7;-1:-1:-1;;;;;24913:16:0;;:51;;;;24957:7;-1:-1:-1;;;;;24933:31:0;:20;24945:7;24933:11;:20::i;:::-;-1:-1:-1;;;;;24933:31:0;;24913:51;:87;;;-1:-1:-1;;;;;;23506:25:0;;;23482:4;23506:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;24968:32;24905:96;24700:309;-1:-1:-1;;;;24700:309:0:o;26015:440::-;26183:4;-1:-1:-1;;;;;26147:40:0;:32;26171:7;26147:23;:32::i;:::-;-1:-1:-1;;;;;26147:40:0;;26139:49;;;;;;-1:-1:-1;;;;;26207:16:0;;26199:25;;;;;;26341:29;26358:1;26362:7;26341:8;:29::i;:::-;26400:2;26381:7;26389;26381:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;26381:21:0;-1:-1:-1;;;;;26381:21:0;;;;;;26420:27;;26439:7;;26420:27;;;;;;;;;;26381:16;26420:27;26015:440;;;:::o;10804:317::-;10919:6;10894:21;:31;;10886:73;;;;-1:-1:-1;;;10886:73:0;;15947:2:1;10886:73:0;;;15929:21:1;15986:2;15966:18;;;15959:30;16025:31;16005:18;;;15998:59;16074:18;;10886:73:0;15745:353:1;10886:73:0;10973:12;10991:9;-1:-1:-1;;;;;10991:14:0;11013:6;10991:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10972:52;;;11043:7;11035:78;;;;-1:-1:-1;;;11035:78:0;;16515:2:1;11035:78:0;;;16497:21:1;16554:2;16534:18;;;16527:30;16593:34;16573:18;;;16566:62;16664:28;16644:18;;;16637:56;16710:19;;11035:78:0;16313:422:1;20326:191:0;20419:6;;;-1:-1:-1;;;;;20436:17:0;;;-1:-1:-1;;20436:17:0;;;;;;;20469:40;;20419:6;;;20436:17;20419:6;;20469:40;;20400:16;;20469:40;20389:128;20326:191;:::o;25014:110::-;25090:26;25100:2;25104:7;25090:26;;;;;;;;;;;;:9;:26::i;24274:261::-;24431:28;24441:4;24447:2;24451:7;24431:9;:28::i;:::-;24478:48;24501:4;24507:2;24511:7;24520:5;24478:22;:48::i;:::-;24470:57;;;;;29709:99;29760:13;29790;29783:20;;;;;:::i;7113:723::-;7169:13;7390:5;7399:1;7390:10;7386:53;;-1:-1:-1;;7417:10:0;;;;;;;;;;;;;;;;;;7113:723::o;7386:53::-;7464:5;7449:12;7505:78;7512:9;;7505:78;;7538:8;;;;:::i;:::-;;-1:-1:-1;7561:10:0;;-1:-1:-1;7569:2:0;7561:10;;:::i;:::-;;;7505:78;;;7593:19;7625:6;7615:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7615:17:0;;7593:39;;7643:154;7650:10;;7643:154;;7677:11;7687:1;7677:11;;:::i;:::-;;-1:-1:-1;7746:10:0;7754:2;7746:5;:10;:::i;:::-;7733:24;;:2;:24;:::i;:::-;7720:39;;7703:6;7710;7703:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;7774:11:0;7783:2;7774:11;;:::i;:::-;;;7643:154;;25127:254;25257:18;25263:2;25267:7;25257:5;:18::i;:::-;25308:54;25339:1;25343:2;25347:7;25356:5;25308:22;:54::i;:::-;25286:87;;;;;26648:751;26803:4;-1:-1:-1;;;;;26824:13:0;;9805:20;9853:8;26820:572;;26860:72;;;;;-1:-1:-1;;;;;26860:36:0;;;;;:72;;967:10;;26911:4;;26917:7;;26926:5;;26860:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26860:72:0;;;;;;;;-1:-1:-1;;26860:72:0;;;;;;;;;;;;:::i;:::-;;;26856:481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27102:6;:13;27119:1;27102:18;27098:224;;27145:12;;-1:-1:-1;;;27145:12:0;;18274:2:1;27145:12:0;;;18256:21:1;18313:1;18293:18;;;18286:29;18351:4;18331:18;;;18324:32;18373:18;;27145:12:0;18072:325:1;27098:224:0;27272:6;27266:13;27257:6;27253:2;27249:15;27242:38;26856:481;26983:51;;26993:41;26983:51;;-1:-1:-1;26976:58:0;;26820:572;-1:-1:-1;27376:4:0;26648:751;;;;;;:::o;25386:278::-;-1:-1:-1;;;;;25466:16:0;;25458:25;;;;;;25503:16;25511:7;25503;:16::i;:::-;25502:17;25494:26;;;;;;25589:7;:16;;;;;;;-1:-1:-1;25589:16:0;;;;;;;-1:-1:-1;;25589:16:0;-1:-1:-1;;;;;25589:16:0;;;;;;;;25623:33;;25648:7;;-1:-1:-1;25623:33:0;;-1:-1:-1;;25623:33:0;25386:278;;:::o;14:177:1:-;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:1;868:16;;861:27;638:258::o;901:317::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1132:2;1120:15;-1:-1:-1;;1116:88:1;1107:98;;;;1207:4;1103:109;;901:317;-1:-1:-1;;901:317:1:o;1223:220::-;1372:2;1361:9;1354:21;1335:4;1392:45;1433:2;1422:9;1418:18;1410:6;1392:45;:::i;1448:180::-;1507:6;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;-1:-1:-1;1599:23:1;;1448:180;-1:-1:-1;1448:180:1:o;1864:154::-;-1:-1:-1;;;;;1943:5:1;1939:54;1932:5;1929:65;1919:93;;2008:1;2005;1998:12;2023:315;2091:6;2099;2152:2;2140:9;2131:7;2127:23;2123:32;2120:52;;;2168:1;2165;2158:12;2120:52;2207:9;2194:23;2226:31;2251:5;2226:31;:::i;:::-;2276:5;2328:2;2313:18;;;;2300:32;;-1:-1:-1;;;2023:315:1:o;2525:456::-;2602:6;2610;2618;2671:2;2659:9;2650:7;2646:23;2642:32;2639:52;;;2687:1;2684;2677:12;2639:52;2726:9;2713:23;2745:31;2770:5;2745:31;:::i;:::-;2795:5;-1:-1:-1;2852:2:1;2837:18;;2824:32;2865:33;2824:32;2865:33;:::i;:::-;2525:456;;2917:7;;-1:-1:-1;;;2971:2:1;2956:18;;;;2943:32;;2525:456::o;2986:184::-;-1:-1:-1;;;3035:1:1;3028:88;3135:4;3132:1;3125:15;3159:4;3156:1;3149:15;3175:691;3240:5;3270:18;3311:2;3303:6;3300:14;3297:40;;;3317:18;;:::i;:::-;3451:2;3445:9;3517:2;3505:15;;-1:-1:-1;;3501:24:1;;;3527:2;3497:33;3493:42;3481:55;;;3551:18;;;3571:22;;;3548:46;3545:72;;;3597:18;;:::i;:::-;3637:10;3633:2;3626:22;3666:6;3657:15;;3696:6;3688;3681:22;3736:3;3727:6;3722:3;3718:16;3715:25;3712:45;;;3753:1;3750;3743:12;3712:45;3803:6;3798:3;3791:4;3783:6;3779:17;3766:44;3858:1;3851:4;3842:6;3834;3830:19;3826:30;3819:41;;;;3175:691;;;;;:::o;3871:451::-;3940:6;3993:2;3981:9;3972:7;3968:23;3964:32;3961:52;;;4009:1;4006;3999:12;3961:52;4049:9;4036:23;4082:18;4074:6;4071:30;4068:50;;;4114:1;4111;4104:12;4068:50;4137:22;;4190:4;4182:13;;4178:27;-1:-1:-1;4168:55:1;;4219:1;4216;4209:12;4168:55;4242:74;4308:7;4303:2;4290:16;4285:2;4281;4277:11;4242:74;:::i;4327:247::-;4386:6;4439:2;4427:9;4418:7;4414:23;4410:32;4407:52;;;4455:1;4452;4445:12;4407:52;4494:9;4481:23;4513:31;4538:5;4513:31;:::i;4579:681::-;4750:2;4802:21;;;4872:13;;4775:18;;;4894:22;;;4721:4;;4750:2;4973:15;;;;4947:2;4932:18;;;4721:4;5016:218;5030:6;5027:1;5024:13;5016:218;;;5095:13;;-1:-1:-1;;;;;5091:62:1;5079:75;;5209:15;;;;5174:12;;;;5052:1;5045:9;5016:218;;;-1:-1:-1;5251:3:1;;4579:681;-1:-1:-1;;;;;;4579:681:1:o;5265:416::-;5330:6;5338;5391:2;5379:9;5370:7;5366:23;5362:32;5359:52;;;5407:1;5404;5397:12;5359:52;5446:9;5433:23;5465:31;5490:5;5465:31;:::i;:::-;5515:5;-1:-1:-1;5572:2:1;5557:18;;5544:32;5614:15;;5607:23;5595:36;;5585:64;;5645:1;5642;5635:12;5585:64;5668:7;5658:17;;;5265:416;;;;;:::o;5686:795::-;5781:6;5789;5797;5805;5858:3;5846:9;5837:7;5833:23;5829:33;5826:53;;;5875:1;5872;5865:12;5826:53;5914:9;5901:23;5933:31;5958:5;5933:31;:::i;:::-;5983:5;-1:-1:-1;6040:2:1;6025:18;;6012:32;6053:33;6012:32;6053:33;:::i;:::-;6105:7;-1:-1:-1;6159:2:1;6144:18;;6131:32;;-1:-1:-1;6214:2:1;6199:18;;6186:32;6241:18;6230:30;;6227:50;;;6273:1;6270;6263:12;6227:50;6296:22;;6349:4;6341:13;;6337:27;-1:-1:-1;6327:55:1;;6378:1;6375;6368:12;6327:55;6401:74;6467:7;6462:2;6449:16;6444:2;6440;6436:11;6401:74;:::i;:::-;6391:84;;;5686:795;;;;;;;:::o;6486:323::-;6562:6;6570;6623:2;6611:9;6602:7;6598:23;6594:32;6591:52;;;6639:1;6636;6629:12;6591:52;6675:9;6662:23;6652:33;;6735:2;6724:9;6720:18;6707:32;6748:31;6773:5;6748:31;:::i;6814:388::-;6882:6;6890;6943:2;6931:9;6922:7;6918:23;6914:32;6911:52;;;6959:1;6956;6949:12;6911:52;6998:9;6985:23;7017:31;7042:5;7017:31;:::i;:::-;7067:5;-1:-1:-1;7124:2:1;7109:18;;7096:32;7137:33;7096:32;7137:33;:::i;7207:437::-;7286:1;7282:12;;;;7329;;;7350:61;;7404:4;7396:6;7392:17;7382:27;;7350:61;7457:2;7449:6;7446:14;7426:18;7423:38;7420:218;;-1:-1:-1;;;7491:1:1;7484:88;7595:4;7592:1;7585:15;7623:4;7620:1;7613:15;7420:218;;7207:437;;;:::o;9725:545::-;9827:2;9822:3;9819:11;9816:448;;;9863:1;9888:5;9884:2;9877:17;9933:4;9929:2;9919:19;10003:2;9991:10;9987:19;9984:1;9980:27;9974:4;9970:38;10039:4;10027:10;10024:20;10021:47;;;-1:-1:-1;10062:4:1;10021:47;10117:2;10112:3;10108:12;10105:1;10101:20;10095:4;10091:31;10081:41;;10172:82;10190:2;10183:5;10180:13;10172:82;;;10235:17;;;10216:1;10205:13;10172:82;;;10176:3;;;9725:545;;;:::o;10506:1471::-;10632:3;10626:10;10659:18;10651:6;10648:30;10645:56;;;10681:18;;:::i;:::-;10710:97;10800:6;10760:38;10792:4;10786:11;10760:38;:::i;:::-;10754:4;10710:97;:::i;:::-;10862:4;;10926:2;10915:14;;10943:1;10938:782;;;;11764:1;11781:6;11778:89;;;-1:-1:-1;11833:19:1;;;11827:26;11778:89;-1:-1:-1;;10403:1:1;10399:11;;;10395:84;10391:89;10381:100;10487:1;10483:11;;;10378:117;11880:81;;10908:1063;;10938:782;9672:1;9665:14;;;9709:4;9696:18;;-1:-1:-1;;10974:79:1;;;11151:236;11165:7;11162:1;11159:14;11151:236;;;11254:19;;;11248:26;11233:42;;11346:27;;;;11314:1;11302:14;;;;11181:19;;11151:236;;;11155:3;11415:6;11406:7;11403:19;11400:261;;;11476:19;;;11470:26;-1:-1:-1;;11559:1:1;11555:14;;;11571:3;11551:24;11547:97;11543:102;11528:118;11513:134;;11400:261;-1:-1:-1;;;;;11707:1:1;11691:14;;;11687:22;11674:36;;-1:-1:-1;10506:1471:1:o;11982:184::-;-1:-1:-1;;;12031:1:1;12024:88;12131:4;12128:1;12121:15;12155:4;12152:1;12145:15;12992:184;-1:-1:-1;;;13041:1:1;13034:88;13141:4;13138:1;13131:15;13165:4;13162:1;13155:15;13181:195;13220:3;-1:-1:-1;;13244:5:1;13241:77;13238:103;;13321:18;;:::i;:::-;-1:-1:-1;13368:1:1;13357:13;;13181:195::o;13741:228::-;13781:7;13907:1;-1:-1:-1;;13835:74:1;13832:1;13829:81;13824:1;13817:9;13810:17;13806:105;13803:131;;;13914:18;;:::i;:::-;-1:-1:-1;13954:9:1;;13741:228::o;13974:128::-;14014:3;14045:1;14041:6;14038:1;14035:13;14032:39;;;14051:18;;:::i;:::-;-1:-1:-1;14087:9:1;;13974:128::o;14863:470::-;15042:3;15080:6;15074:13;15096:53;15142:6;15137:3;15130:4;15122:6;15118:17;15096:53;:::i;:::-;15212:13;;15171:16;;;;15234:57;15212:13;15171:16;15268:4;15256:17;;15234:57;:::i;:::-;15307:20;;14863:470;-1:-1:-1;;;;14863:470:1:o;16740:184::-;-1:-1:-1;;;16789:1:1;16782:88;16889:4;16886:1;16879:15;16913:4;16910:1;16903:15;16929:120;16969:1;16995;16985:35;;17000:18;;:::i;:::-;-1:-1:-1;17034:9:1;;16929:120::o;17054:125::-;17094:4;17122:1;17119;17116:8;17113:34;;;17127:18;;:::i;:::-;-1:-1:-1;17164:9:1;;17054:125::o;17184:112::-;17216:1;17242;17232:35;;17247:18;;:::i;:::-;-1:-1:-1;17281:9:1;;17184:112::o;17301:512::-;17495:4;-1:-1:-1;;;;;17605:2:1;17597:6;17593:15;17582:9;17575:34;17657:2;17649:6;17645:15;17640:2;17629:9;17625:18;17618:43;;17697:6;17692:2;17681:9;17677:18;17670:34;17740:3;17735:2;17724:9;17720:18;17713:31;17761:46;17802:3;17791:9;17787:19;17779:6;17761:46;:::i;:::-;17753:54;17301:512;-1:-1:-1;;;;;;17301:512:1:o;17818:249::-;17887:6;17940:2;17928:9;17919:7;17915:23;17911:32;17908:52;;;17956:1;17953;17946:12;17908:52;17988:9;17982:16;18007:30;18031:5;18007:30;:::i

Swarm Source

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