ETH Price: $2,645.77 (+8.30%)
 

Overview

Max Total Supply

0 MM

Holders

2,575

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MM
0xa148c1e57fafa02801929a64ff643a98d5afb305
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

PUBLIC MINT IS LIVE: https://marinemarauderz.io The home of the Marine Marauderz, 7777 Sharks on a charitable mission into the metaverse! Each Marauder yields 10 $CHUM per day 1 $CHUM = 1 $CHUM Discord: https://discord.gg/marinemarauderz

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MarineMarauderz

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-21
*/

// SPDX-License-Identifier: GPL-3.0

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/MarineMarauderz.sol



pragma solidity ^0.8.0;



/**************************************************************
╭━╮╭━┳━━━┳━━━┳━━┳━╮╱╭┳━━━┳━╮╭━┳━━━┳━━━┳━━━┳╮╱╭┳━━━┳━━━┳━━━┳━━━━╮
┃┃╰╯┃┃╭━╮┃╭━╮┣┫┣┫┃╰╮┃┃╭━━┫┃╰╯┃┃╭━╮┃╭━╮┃╭━╮┃┃╱┃┣╮╭╮┃╭━━┫╭━╮┣━━╮━┃
┃╭╮╭╮┃┃╱┃┃╰━╯┃┃┃┃╭╮╰╯┃╰━━┫╭╮╭╮┃┃╱┃┃╰━╯┃┃╱┃┃┃╱┃┃┃┃┃┃╰━━┫╰━╯┃╱╭╯╭╯
┃┃┃┃┃┃╰━╯┃╭╮╭╯┃┃┃┃╰╮┃┃╭━━┫┃┃┃┃┃╰━╯┃╭╮╭┫╰━╯┃┃╱┃┃┃┃┃┃╭━━┫╭╮╭╯╭╯╭╯
┃┃┃┃┃┃╭━╮┃┃┃╰┳┫┣┫┃╱┃┃┃╰━━┫┃┃┃┃┃╭━╮┃┃┃╰┫╭━╮┃╰━╯┣╯╰╯┃╰━━┫┃┃╰┳╯━╰━╮
╰╯╰╯╰┻╯╱╰┻╯╰━┻━━┻╯╱╰━┻━━━┻╯╰╯╰┻╯╱╰┻╯╰━┻╯╱╰┻━━━┻━━━┻━━━┻╯╰━┻━━━━╯
By: Rocky Fantana & Bando
****************************************************************/

contract MarineMarauderz is ERC721, Ownable {
    
    uint256 public PRICE = 0.07 ether;
    uint256 public constant MAX_SUPPLY = 7777;
    uint256 public constant OWNER_AMOUNT = 101;
    uint256 public MAXMINT = 2;
    uint256 public amountMinted;
    
    string public baseURI;
    
    bool public publicSaleLive = false;
    bool public whitelistLive = false;
    
    mapping(address => uint256) public whitelist;
    mapping(address => uint256) public addressMintedBalance; 
  
    constructor(
        string memory name_,
        string memory symbol_,
        string memory baseURI_
    ) ERC721(name_, symbol_) {
        baseURI = baseURI_;
        for (uint256 i = 0; i < OWNER_AMOUNT; i++) {
            _safeMint(msg.sender, ++amountMinted);
        }
    }

    function mint(uint256 _mintAmount) public payable {
        require(whitelistLive == true, "Whitelist is not live!");
        require(_mintAmount > 0, "Amount must be more than 0");
        require(_mintAmount <= MAXMINT, "Amount must be 2 or less for whitelist sale, 4 or less for public sale!");
        
        uint256 ownerMintedCount = addressMintedBalance[msg.sender];
        require(ownerMintedCount + _mintAmount <= MAXMINT, "Max NFTs per address exceeded");
        
        require(PRICE * _mintAmount <= msg.value, "Insufficient funds");        
        require(amountMinted + _mintAmount <= MAX_SUPPLY, "We have sold out, Thank you!");

        if (!publicSaleLive) {
            uint256 whitelistBalance = whitelist[msg.sender];
            require(
                whitelistBalance > 0,
                "Invalid whitelist balance - Public sale not live"
            );
            require(
                whitelistBalance >= _mintAmount,
                "Amount more than your whitelist limit"
            );
            whitelist[msg.sender] -= _mintAmount;
        }
               
        for (uint256 i = 0; i < _mintAmount; i++) {
             addressMintedBalance[msg.sender]++;
            _safeMint(msg.sender, ++amountMinted);
        }
    }

    function setWhitelist(address[] calldata addresses) public onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            whitelist[addresses[i]] = MAXMINT;
        }
    }

    function startPublicSale() public onlyOwner {
        require(!publicSaleLive, "Public sale is already live");
        publicSaleLive = true;
        MAXMINT = 4; 
    }
    
    function startWhitelistSale() public onlyOwner{
        require(!whitelistLive,"Whitelist sale is already live");
        whitelistLive = true;
    }
    
    function salesAreOver() public onlyOwner{
        publicSaleLive = false;
        whitelistLive = false;
    }

    function setBaseURI(string memory baseURI_) public onlyOwner {
        baseURI = baseURI_;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
    
    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        MAXMINT = _newmaxMintAmount;
    }
  
    function setCost(uint256 _newPrice) public onlyOwner {
        PRICE = _newPrice;
    }

    function withdrawToAddress(address payable recipient) public onlyOwner {
        require(address(this).balance > 0, "No contract balance");
        recipient.transfer(address(this).balance);
    }
    
    function ownerWithdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAXMINT","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":"OWNER_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"publicSaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"salesAreOver","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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startWhitelistSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266f8b0a10e4700006007556002600855600b805461ffff191690553480156200002c57600080fd5b5060405162002cf938038062002cf98339810160408190526200004f9162000569565b8251839083906200006890600090602085019062000409565b5080516200007e90600190602084019062000409565b5050506200009b62000095620000fe60201b60201c565b62000102565b8051620000b090600a90602084019062000409565b5060005b6065811015620000f457620000df33600960008154620000d49062000795565b918290555062000154565b80620000eb8162000795565b915050620000b4565b50505050620007df565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001768282604051806020016040528060008152506200017a60201b60201c565b5050565b620001868383620001c2565b620001956000848484620002ad565b620001bd5760405162461bcd60e51b8152600401620001b4906200064c565b60405180910390fd5b505050565b6001600160a01b038216620001eb5760405162461bcd60e51b8152600401620001b490620006d5565b620001f681620003e6565b15620002165760405162461bcd60e51b8152600401620001b4906200069e565b6200022460008383620001bd565b6001600160a01b03821660009081526003602052604081208054600192906200024f9084906200070a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000620002ce846001600160a01b03166200040360201b620011c71760201c565b15620003da576001600160a01b03841663150b7a02620002ed620000fe565b8786866040518563ffffffff1660e01b8152600401620003119493929190620005f6565b602060405180830381600087803b1580156200032c57600080fd5b505af19250505080156200035f575060408051601f3d908101601f191682019092526200035c9181019062000538565b60015b620003bf573d80801562000390576040519150601f19603f3d011682016040523d82523d6000602084013e62000395565b606091505b508051620003b75760405162461bcd60e51b8152600401620001b4906200064c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050620003de565b5060015b949350505050565b6000908152600260205260409020546001600160a01b0316151590565b3b151590565b828054620004179062000758565b90600052602060002090601f0160209004810192826200043b576000855562000486565b82601f106200045657805160ff191683800117855562000486565b8280016001018555821562000486579182015b828111156200048657825182559160200191906001019062000469565b506200049492915062000498565b5090565b5b8082111562000494576000815560010162000499565b600082601f830112620004c0578081fd5b81516001600160401b0380821115620004dd57620004dd620007c9565b604051601f8301601f191681016020018281118282101715620005045762000504620007c9565b6040528281528483016020018610156200051c578384fd5b6200052f83602083016020880162000725565b95945050505050565b6000602082840312156200054a578081fd5b81516001600160e01b03198116811462000562578182fd5b9392505050565b6000806000606084860312156200057e578182fd5b83516001600160401b038082111562000595578384fd5b620005a387838801620004af565b94506020860151915080821115620005b9578384fd5b620005c787838801620004af565b93506040860151915080821115620005dd578283fd5b50620005ec86828701620004af565b9150509250925092565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620006358160a085016020870162000725565b601f01601f19169190910160a00195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60008219821115620007205762000720620007b3565b500190565b60005b838110156200074257818101518382015260200162000728565b8381111562000752576000848401525b50505050565b6002810460018216806200076d57607f821691505b602082108114156200078f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620007ac57620007ac620007b3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61250a80620007ef6000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd14610581578063e985e9c5146105a1578063f2fde38b146105c1578063f4217648146105e1578063ff44e915146106015761020f565b8063a0712d681461050e578063a22cb46514610521578063a92bd72c14610541578063b88d4fde146105615761020f565b80638d859f3e116100e75780638d859f3e1461049a5780638da5cb5b146104af57806395d89b41146104c45780639979a194146104d95780639b19251a146104ee5761020f565b806370a0823114610430578063715018a6146104505780637af284d5146104655780637f00c7a61461047a5761020f565b80633d8a56601161019b57806344a0d68a1161016a57806344a0d68a146103a657806355f804b3146103c65780636352211e146103e657806368be9822146104065780636c0360eb1461041b5761020f565b80633d8a5660146103475780633dcfd9a41461035c57806342842e0e146103715780634311de8f146103915761020f565b80630c1c972a116101e25780630c1c972a146102bb57806318cae269146102d057806323b872dd146102fd57806326d938001461031d57806332cb6b0c146103325761020f565b806301ffc9a71461021457806306fdde031461024a578063081812fc1461026c578063095ea7b314610299575b600080fd5b34801561022057600080fd5b5061023461022f366004611b02565b610616565b6040516102419190611c44565b60405180910390f35b34801561025657600080fd5b5061025f61065e565b6040516102419190611c4f565b34801561027857600080fd5b5061028c610287366004611b80565b6106f0565b6040516102419190611bf3565b3480156102a557600080fd5b506102b96102b4366004611a68565b61073c565b005b3480156102c757600080fd5b506102b96107d4565b3480156102dc57600080fd5b506102f06102eb366004611926565b61084a565b6040516102419190612366565b34801561030957600080fd5b506102b961031836600461197a565b61085c565b34801561032957600080fd5b50610234610894565b34801561033e57600080fd5b506102f061089d565b34801561035357600080fd5b506102f06108a3565b34801561036857600080fd5b506102b96108a9565b34801561037d57600080fd5b506102b961038c36600461197a565b6108f5565b34801561039d57600080fd5b506102b9610910565b3480156103b257600080fd5b506102b96103c1366004611b80565b610982565b3480156103d257600080fd5b506102b96103e1366004611b3a565b6109c6565b3480156103f257600080fd5b5061028c610401366004611b80565b610a18565b34801561041257600080fd5b506102f0610a4d565b34801561042757600080fd5b5061025f610a52565b34801561043c57600080fd5b506102f061044b366004611926565b610ae0565b34801561045c57600080fd5b506102b9610b24565b34801561047157600080fd5b506102f0610b6f565b34801561048657600080fd5b506102b9610495366004611b80565b610b75565b3480156104a657600080fd5b506102f0610bb9565b3480156104bb57600080fd5b5061028c610bbf565b3480156104d057600080fd5b5061025f610bce565b3480156104e557600080fd5b50610234610bdd565b3480156104fa57600080fd5b506102f0610509366004611926565b610beb565b6102b961051c366004611b80565b610bfd565b34801561052d57600080fd5b506102b961053c366004611a37565b610dda565b34801561054d57600080fd5b506102b961055c366004611926565b610ea8565b34801561056d57600080fd5b506102b961057c3660046119ba565b610f3c565b34801561058d57600080fd5b5061025f61059c366004611b80565b610f7b565b3480156105ad57600080fd5b506102346105bc366004611942565b610ffe565b3480156105cd57600080fd5b506102b96105dc366004611926565b61102c565b3480156105ed57600080fd5b506102b96105fc366004611a93565b61109d565b34801561060d57600080fd5b506102b961114f565b60006001600160e01b031982166380ac58cd60e01b148061064757506001600160e01b03198216635b5e139f60e01b145b806106565750610656826111cd565b90505b919050565b60606000805461066d906123fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906123fd565b80156106e65780601f106106bb576101008083540402835291602001916106e6565b820191906000526020600020905b8154815290600101906020018083116106c957829003601f168201915b5050505050905090565b60006106fb826111e6565b6107205760405162461bcd60e51b8152600401610717906120d0565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061074782610a18565b9050806001600160a01b0316836001600160a01b0316141561077b5760405162461bcd60e51b81526004016107179061224d565b806001600160a01b031661078d611203565b6001600160a01b031614806107a957506107a9816105bc611203565b6107c55760405162461bcd60e51b815260040161071790611fab565b6107cf8383611207565b505050565b6107dc611203565b6001600160a01b03166107ed610bbf565b6001600160a01b0316146108135760405162461bcd60e51b81526004016107179061211c565b600b5460ff16156108365760405162461bcd60e51b815260040161071790611cf9565b600b805460ff191660011790556004600855565b600d6020526000908152604090205481565b61086d610867611203565b82611275565b6108895760405162461bcd60e51b81526004016107179061228e565b6107cf8383836112fa565b600b5460ff1681565b611e6181565b60085481565b6108b1611203565b6001600160a01b03166108c2610bbf565b6001600160a01b0316146108e85760405162461bcd60e51b81526004016107179061211c565b600b805461ffff19169055565b6107cf83838360405180602001604052806000815250610f3c565b610918611203565b6001600160a01b0316610929610bbf565b6001600160a01b03161461094f5760405162461bcd60e51b81526004016107179061211c565b6040514790339082156108fc029083906000818181858888f1935050505015801561097e573d6000803e3d6000fd5b5050565b61098a611203565b6001600160a01b031661099b610bbf565b6001600160a01b0316146109c15760405162461bcd60e51b81526004016107179061211c565b600755565b6109ce611203565b6001600160a01b03166109df610bbf565b6001600160a01b031614610a055760405162461bcd60e51b81526004016107179061211c565b805161097e90600a90602084019061181d565b6000818152600260205260408120546001600160a01b0316806106565760405162461bcd60e51b815260040161071790612052565b606581565b600a8054610a5f906123fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b906123fd565b8015610ad85780601f10610aad57610100808354040283529160200191610ad8565b820191906000526020600020905b815481529060010190602001808311610abb57829003601f168201915b505050505081565b60006001600160a01b038216610b085760405162461bcd60e51b815260040161071790612008565b506001600160a01b031660009081526003602052604090205490565b610b2c611203565b6001600160a01b0316610b3d610bbf565b6001600160a01b031614610b635760405162461bcd60e51b81526004016107179061211c565b610b6d6000611427565b565b60095481565b610b7d611203565b6001600160a01b0316610b8e610bbf565b6001600160a01b031614610bb45760405162461bcd60e51b81526004016107179061211c565b600855565b60075481565b6006546001600160a01b031690565b60606001805461066d906123fd565b600b54610100900460ff1681565b600c6020526000908152604090205481565b600b5460ff610100909104161515600114610c2a5760405162461bcd60e51b815260040161071790611f7b565b60008111610c4a5760405162461bcd60e51b815260040161071790611f18565b600854811115610c6c5760405162461bcd60e51b815260040161071790611e28565b336000908152600d6020526040902054600854610c89838361236f565b1115610ca75760405162461bcd60e51b815260040161071790611e95565b3482600754610cb6919061239b565b1115610cd45760405162461bcd60e51b815260040161071790611f4f565b611e6182600954610ce5919061236f565b1115610d035760405162461bcd60e51b815260040161071790612216565b600b5460ff16610d8057336000908152600c602052604090205480610d3a5760405162461bcd60e51b815260040161071790612316565b82811015610d5a5760405162461bcd60e51b815260040161071790611c62565b336000908152600c602052604081208054859290610d799084906123ba565b9091555050505b60005b828110156107cf57336000908152600d60205260408120805491610da683612438565b9190505550610dc833600960008154610dbe90612438565b9182905550611479565b80610dd281612438565b915050610d83565b610de2611203565b6001600160a01b0316826001600160a01b03161415610e135760405162461bcd60e51b815260040161071790611df1565b8060056000610e20611203565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e64611203565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e9c9190611c44565b60405180910390a35050565b610eb0611203565b6001600160a01b0316610ec1610bbf565b6001600160a01b031614610ee75760405162461bcd60e51b81526004016107179061211c565b60004711610f075760405162461bcd60e51b815260040161071790612151565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561097e573d6000803e3d6000fd5b610f4d610f47611203565b83611275565b610f695760405162461bcd60e51b81526004016107179061228e565b610f7584848484611493565b50505050565b6060610f86826111e6565b610fa25760405162461bcd60e51b8152600401610717906121c7565b6000610fac6114c6565b90506000815111610fcc5760405180602001604052806000815250610ff7565b80610fd6846114d5565b604051602001610fe7929190611bc4565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b611034611203565b6001600160a01b0316611045610bbf565b6001600160a01b03161461106b5760405162461bcd60e51b81526004016107179061211c565b6001600160a01b0381166110915760405162461bcd60e51b815260040161071790611d30565b61109a81611427565b50565b6110a5611203565b6001600160a01b03166110b6610bbf565b6001600160a01b0316146110dc5760405162461bcd60e51b81526004016107179061211c565b60005b818110156107cf57600854600c600085858581811061110e57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111239190611926565b6001600160a01b031681526020810191909152604001600020558061114781612438565b9150506110df565b611157611203565b6001600160a01b0316611168610bbf565b6001600160a01b03161461118e5760405162461bcd60e51b81526004016107179061211c565b600b54610100900460ff16156111b65760405162461bcd60e51b8152600401610717906122df565b600b805461ff001916610100179055565b3b151590565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061123c82610a18565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611280826111e6565b61129c5760405162461bcd60e51b815260040161071790611ecc565b60006112a783610a18565b9050806001600160a01b0316846001600160a01b031614806112e25750836001600160a01b03166112d7846106f0565b6001600160a01b0316145b806112f257506112f28185610ffe565b949350505050565b826001600160a01b031661130d82610a18565b6001600160a01b0316146113335760405162461bcd60e51b81526004016107179061217e565b6001600160a01b0382166113595760405162461bcd60e51b815260040161071790611dad565b6113648383836107cf565b61136f600082611207565b6001600160a01b03831660009081526003602052604081208054600192906113989084906123ba565b90915550506001600160a01b03821660009081526003602052604081208054600192906113c690849061236f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61097e8282604051806020016040528060008152506115f0565b61149e8484846112fa565b6114aa84848484611623565b610f755760405162461bcd60e51b815260040161071790611ca7565b6060600a805461066d906123fd565b6060816114fa57506040805180820190915260018152600360fc1b6020820152610659565b8160005b8115611524578061150e81612438565b915061151d9050600a83612387565b91506114fe565b60008167ffffffffffffffff81111561154d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611577576020820181803683370190505b5090505b84156112f25761158c6001836123ba565b9150611599600a86612453565b6115a490603061236f565b60f81b8183815181106115c757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506115e9600a86612387565b945061157b565b6115fa838361173e565b6116076000848484611623565b6107cf5760405162461bcd60e51b815260040161071790611ca7565b6000611637846001600160a01b03166111c7565b1561173357836001600160a01b031663150b7a02611653611203565b8786866040518563ffffffff1660e01b81526004016116759493929190611c07565b602060405180830381600087803b15801561168f57600080fd5b505af19250505080156116bf575060408051601f3d908101601f191682019092526116bc91810190611b1e565b60015b611719573d8080156116ed576040519150601f19603f3d011682016040523d82523d6000602084013e6116f2565b606091505b5080516117115760405162461bcd60e51b815260040161071790611ca7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112f2565b506001949350505050565b6001600160a01b0382166117645760405162461bcd60e51b81526004016107179061209b565b61176d816111e6565b1561178a5760405162461bcd60e51b815260040161071790611d76565b611796600083836107cf565b6001600160a01b03821660009081526003602052604081208054600192906117bf90849061236f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611829906123fd565b90600052602060002090601f01602090048101928261184b5760008555611891565b82601f1061186457805160ff1916838001178555611891565b82800160010185558215611891579182015b82811115611891578251825591602001919060010190611876565b5061189d9291506118a1565b5090565b5b8082111561189d57600081556001016118a2565b600067ffffffffffffffff808411156118d1576118d1612493565b604051601f8501601f1916810160200182811182821017156118f5576118f5612493565b60405284815291508183850186101561190d57600080fd5b8484602083013760006020868301015250509392505050565b600060208284031215611937578081fd5b8135610ff7816124a9565b60008060408385031215611954578081fd5b823561195f816124a9565b9150602083013561196f816124a9565b809150509250929050565b60008060006060848603121561198e578081fd5b8335611999816124a9565b925060208401356119a9816124a9565b929592945050506040919091013590565b600080600080608085870312156119cf578081fd5b84356119da816124a9565b935060208501356119ea816124a9565b925060408501359150606085013567ffffffffffffffff811115611a0c578182fd5b8501601f81018713611a1c578182fd5b611a2b878235602084016118b6565b91505092959194509250565b60008060408385031215611a49578182fd5b8235611a54816124a9565b91506020830135801515811461196f578182fd5b60008060408385031215611a7a578182fd5b8235611a85816124a9565b946020939093013593505050565b60008060208385031215611aa5578182fd5b823567ffffffffffffffff80821115611abc578384fd5b818501915085601f830112611acf578384fd5b813581811115611add578485fd5b8660208083028501011115611af0578485fd5b60209290920196919550909350505050565b600060208284031215611b13578081fd5b8135610ff7816124be565b600060208284031215611b2f578081fd5b8151610ff7816124be565b600060208284031215611b4b578081fd5b813567ffffffffffffffff811115611b61578182fd5b8201601f81018413611b71578182fd5b6112f2848235602084016118b6565b600060208284031215611b91578081fd5b5035919050565b60008151808452611bb08160208601602086016123d1565b601f01601f19169290920160200192915050565b60008351611bd68184602088016123d1565b835190830190611bea8183602088016123d1565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611c3a90830184611b98565b9695505050505050565b901515815260200190565b600060208252610ff76020830184611b98565b60208082526025908201527f416d6f756e74206d6f7265207468616e20796f75722077686974656c697374206040820152641b1a5b5a5d60da1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601b908201527f5075626c69632073616c6520697320616c7265616479206c6976650000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526047908201527f416d6f756e74206d7573742062652032206f72206c65737320666f722077686960408201527f74656c6973742073616c652c2034206f72206c65737320666f72207075626c69606082015266632073616c652160c81b608082015260a00190565b6020808252601d908201527f4d6178204e465473207065722061646472657373206578636565646564000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601a908201527f416d6f756e74206d757374206265206d6f7265207468616e2030000000000000604082015260600190565b602080825260129082015271496e73756666696369656e742066756e647360701b604082015260600190565b60208082526016908201527557686974656c697374206973206e6f74206c6976652160501b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152724e6f20636f6e74726163742062616c616e636560681b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252601c908201527f5765206861766520736f6c64206f75742c205468616e6b20796f752100000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601e908201527f57686974656c6973742073616c6520697320616c7265616479206c6976650000604082015260600190565b60208082526030908201527f496e76616c69642077686974656c6973742062616c616e6365202d205075626c60408201526f69632073616c65206e6f74206c69766560801b606082015260800190565b90815260200190565b6000821982111561238257612382612467565b500190565b6000826123965761239661247d565b500490565b60008160001904831182151516156123b5576123b5612467565b500290565b6000828210156123cc576123cc612467565b500390565b60005b838110156123ec5781810151838201526020016123d4565b83811115610f755750506000910152565b60028104600182168061241157607f821691505b6020821081141561243257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561244c5761244c612467565b5060010190565b6000826124625761246261247d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461109a57600080fd5b6001600160e01b03198116811461109a57600080fdfea2646970667358221220a8bdcccc5e9e4b22780d631410574b5b79691529627add2301e57d4b49ba7cb264736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000104d6172696e65204d617261756465727a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c806370a0823111610118578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd14610581578063e985e9c5146105a1578063f2fde38b146105c1578063f4217648146105e1578063ff44e915146106015761020f565b8063a0712d681461050e578063a22cb46514610521578063a92bd72c14610541578063b88d4fde146105615761020f565b80638d859f3e116100e75780638d859f3e1461049a5780638da5cb5b146104af57806395d89b41146104c45780639979a194146104d95780639b19251a146104ee5761020f565b806370a0823114610430578063715018a6146104505780637af284d5146104655780637f00c7a61461047a5761020f565b80633d8a56601161019b57806344a0d68a1161016a57806344a0d68a146103a657806355f804b3146103c65780636352211e146103e657806368be9822146104065780636c0360eb1461041b5761020f565b80633d8a5660146103475780633dcfd9a41461035c57806342842e0e146103715780634311de8f146103915761020f565b80630c1c972a116101e25780630c1c972a146102bb57806318cae269146102d057806323b872dd146102fd57806326d938001461031d57806332cb6b0c146103325761020f565b806301ffc9a71461021457806306fdde031461024a578063081812fc1461026c578063095ea7b314610299575b600080fd5b34801561022057600080fd5b5061023461022f366004611b02565b610616565b6040516102419190611c44565b60405180910390f35b34801561025657600080fd5b5061025f61065e565b6040516102419190611c4f565b34801561027857600080fd5b5061028c610287366004611b80565b6106f0565b6040516102419190611bf3565b3480156102a557600080fd5b506102b96102b4366004611a68565b61073c565b005b3480156102c757600080fd5b506102b96107d4565b3480156102dc57600080fd5b506102f06102eb366004611926565b61084a565b6040516102419190612366565b34801561030957600080fd5b506102b961031836600461197a565b61085c565b34801561032957600080fd5b50610234610894565b34801561033e57600080fd5b506102f061089d565b34801561035357600080fd5b506102f06108a3565b34801561036857600080fd5b506102b96108a9565b34801561037d57600080fd5b506102b961038c36600461197a565b6108f5565b34801561039d57600080fd5b506102b9610910565b3480156103b257600080fd5b506102b96103c1366004611b80565b610982565b3480156103d257600080fd5b506102b96103e1366004611b3a565b6109c6565b3480156103f257600080fd5b5061028c610401366004611b80565b610a18565b34801561041257600080fd5b506102f0610a4d565b34801561042757600080fd5b5061025f610a52565b34801561043c57600080fd5b506102f061044b366004611926565b610ae0565b34801561045c57600080fd5b506102b9610b24565b34801561047157600080fd5b506102f0610b6f565b34801561048657600080fd5b506102b9610495366004611b80565b610b75565b3480156104a657600080fd5b506102f0610bb9565b3480156104bb57600080fd5b5061028c610bbf565b3480156104d057600080fd5b5061025f610bce565b3480156104e557600080fd5b50610234610bdd565b3480156104fa57600080fd5b506102f0610509366004611926565b610beb565b6102b961051c366004611b80565b610bfd565b34801561052d57600080fd5b506102b961053c366004611a37565b610dda565b34801561054d57600080fd5b506102b961055c366004611926565b610ea8565b34801561056d57600080fd5b506102b961057c3660046119ba565b610f3c565b34801561058d57600080fd5b5061025f61059c366004611b80565b610f7b565b3480156105ad57600080fd5b506102346105bc366004611942565b610ffe565b3480156105cd57600080fd5b506102b96105dc366004611926565b61102c565b3480156105ed57600080fd5b506102b96105fc366004611a93565b61109d565b34801561060d57600080fd5b506102b961114f565b60006001600160e01b031982166380ac58cd60e01b148061064757506001600160e01b03198216635b5e139f60e01b145b806106565750610656826111cd565b90505b919050565b60606000805461066d906123fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906123fd565b80156106e65780601f106106bb576101008083540402835291602001916106e6565b820191906000526020600020905b8154815290600101906020018083116106c957829003601f168201915b5050505050905090565b60006106fb826111e6565b6107205760405162461bcd60e51b8152600401610717906120d0565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061074782610a18565b9050806001600160a01b0316836001600160a01b0316141561077b5760405162461bcd60e51b81526004016107179061224d565b806001600160a01b031661078d611203565b6001600160a01b031614806107a957506107a9816105bc611203565b6107c55760405162461bcd60e51b815260040161071790611fab565b6107cf8383611207565b505050565b6107dc611203565b6001600160a01b03166107ed610bbf565b6001600160a01b0316146108135760405162461bcd60e51b81526004016107179061211c565b600b5460ff16156108365760405162461bcd60e51b815260040161071790611cf9565b600b805460ff191660011790556004600855565b600d6020526000908152604090205481565b61086d610867611203565b82611275565b6108895760405162461bcd60e51b81526004016107179061228e565b6107cf8383836112fa565b600b5460ff1681565b611e6181565b60085481565b6108b1611203565b6001600160a01b03166108c2610bbf565b6001600160a01b0316146108e85760405162461bcd60e51b81526004016107179061211c565b600b805461ffff19169055565b6107cf83838360405180602001604052806000815250610f3c565b610918611203565b6001600160a01b0316610929610bbf565b6001600160a01b03161461094f5760405162461bcd60e51b81526004016107179061211c565b6040514790339082156108fc029083906000818181858888f1935050505015801561097e573d6000803e3d6000fd5b5050565b61098a611203565b6001600160a01b031661099b610bbf565b6001600160a01b0316146109c15760405162461bcd60e51b81526004016107179061211c565b600755565b6109ce611203565b6001600160a01b03166109df610bbf565b6001600160a01b031614610a055760405162461bcd60e51b81526004016107179061211c565b805161097e90600a90602084019061181d565b6000818152600260205260408120546001600160a01b0316806106565760405162461bcd60e51b815260040161071790612052565b606581565b600a8054610a5f906123fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b906123fd565b8015610ad85780601f10610aad57610100808354040283529160200191610ad8565b820191906000526020600020905b815481529060010190602001808311610abb57829003601f168201915b505050505081565b60006001600160a01b038216610b085760405162461bcd60e51b815260040161071790612008565b506001600160a01b031660009081526003602052604090205490565b610b2c611203565b6001600160a01b0316610b3d610bbf565b6001600160a01b031614610b635760405162461bcd60e51b81526004016107179061211c565b610b6d6000611427565b565b60095481565b610b7d611203565b6001600160a01b0316610b8e610bbf565b6001600160a01b031614610bb45760405162461bcd60e51b81526004016107179061211c565b600855565b60075481565b6006546001600160a01b031690565b60606001805461066d906123fd565b600b54610100900460ff1681565b600c6020526000908152604090205481565b600b5460ff610100909104161515600114610c2a5760405162461bcd60e51b815260040161071790611f7b565b60008111610c4a5760405162461bcd60e51b815260040161071790611f18565b600854811115610c6c5760405162461bcd60e51b815260040161071790611e28565b336000908152600d6020526040902054600854610c89838361236f565b1115610ca75760405162461bcd60e51b815260040161071790611e95565b3482600754610cb6919061239b565b1115610cd45760405162461bcd60e51b815260040161071790611f4f565b611e6182600954610ce5919061236f565b1115610d035760405162461bcd60e51b815260040161071790612216565b600b5460ff16610d8057336000908152600c602052604090205480610d3a5760405162461bcd60e51b815260040161071790612316565b82811015610d5a5760405162461bcd60e51b815260040161071790611c62565b336000908152600c602052604081208054859290610d799084906123ba565b9091555050505b60005b828110156107cf57336000908152600d60205260408120805491610da683612438565b9190505550610dc833600960008154610dbe90612438565b9182905550611479565b80610dd281612438565b915050610d83565b610de2611203565b6001600160a01b0316826001600160a01b03161415610e135760405162461bcd60e51b815260040161071790611df1565b8060056000610e20611203565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e64611203565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e9c9190611c44565b60405180910390a35050565b610eb0611203565b6001600160a01b0316610ec1610bbf565b6001600160a01b031614610ee75760405162461bcd60e51b81526004016107179061211c565b60004711610f075760405162461bcd60e51b815260040161071790612151565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561097e573d6000803e3d6000fd5b610f4d610f47611203565b83611275565b610f695760405162461bcd60e51b81526004016107179061228e565b610f7584848484611493565b50505050565b6060610f86826111e6565b610fa25760405162461bcd60e51b8152600401610717906121c7565b6000610fac6114c6565b90506000815111610fcc5760405180602001604052806000815250610ff7565b80610fd6846114d5565b604051602001610fe7929190611bc4565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b611034611203565b6001600160a01b0316611045610bbf565b6001600160a01b03161461106b5760405162461bcd60e51b81526004016107179061211c565b6001600160a01b0381166110915760405162461bcd60e51b815260040161071790611d30565b61109a81611427565b50565b6110a5611203565b6001600160a01b03166110b6610bbf565b6001600160a01b0316146110dc5760405162461bcd60e51b81526004016107179061211c565b60005b818110156107cf57600854600c600085858581811061110e57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111239190611926565b6001600160a01b031681526020810191909152604001600020558061114781612438565b9150506110df565b611157611203565b6001600160a01b0316611168610bbf565b6001600160a01b03161461118e5760405162461bcd60e51b81526004016107179061211c565b600b54610100900460ff16156111b65760405162461bcd60e51b8152600401610717906122df565b600b805461ff001916610100179055565b3b151590565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061123c82610a18565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611280826111e6565b61129c5760405162461bcd60e51b815260040161071790611ecc565b60006112a783610a18565b9050806001600160a01b0316846001600160a01b031614806112e25750836001600160a01b03166112d7846106f0565b6001600160a01b0316145b806112f257506112f28185610ffe565b949350505050565b826001600160a01b031661130d82610a18565b6001600160a01b0316146113335760405162461bcd60e51b81526004016107179061217e565b6001600160a01b0382166113595760405162461bcd60e51b815260040161071790611dad565b6113648383836107cf565b61136f600082611207565b6001600160a01b03831660009081526003602052604081208054600192906113989084906123ba565b90915550506001600160a01b03821660009081526003602052604081208054600192906113c690849061236f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61097e8282604051806020016040528060008152506115f0565b61149e8484846112fa565b6114aa84848484611623565b610f755760405162461bcd60e51b815260040161071790611ca7565b6060600a805461066d906123fd565b6060816114fa57506040805180820190915260018152600360fc1b6020820152610659565b8160005b8115611524578061150e81612438565b915061151d9050600a83612387565b91506114fe565b60008167ffffffffffffffff81111561154d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611577576020820181803683370190505b5090505b84156112f25761158c6001836123ba565b9150611599600a86612453565b6115a490603061236f565b60f81b8183815181106115c757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506115e9600a86612387565b945061157b565b6115fa838361173e565b6116076000848484611623565b6107cf5760405162461bcd60e51b815260040161071790611ca7565b6000611637846001600160a01b03166111c7565b1561173357836001600160a01b031663150b7a02611653611203565b8786866040518563ffffffff1660e01b81526004016116759493929190611c07565b602060405180830381600087803b15801561168f57600080fd5b505af19250505080156116bf575060408051601f3d908101601f191682019092526116bc91810190611b1e565b60015b611719573d8080156116ed576040519150601f19603f3d011682016040523d82523d6000602084013e6116f2565b606091505b5080516117115760405162461bcd60e51b815260040161071790611ca7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112f2565b506001949350505050565b6001600160a01b0382166117645760405162461bcd60e51b81526004016107179061209b565b61176d816111e6565b1561178a5760405162461bcd60e51b815260040161071790611d76565b611796600083836107cf565b6001600160a01b03821660009081526003602052604081208054600192906117bf90849061236f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611829906123fd565b90600052602060002090601f01602090048101928261184b5760008555611891565b82601f1061186457805160ff1916838001178555611891565b82800160010185558215611891579182015b82811115611891578251825591602001919060010190611876565b5061189d9291506118a1565b5090565b5b8082111561189d57600081556001016118a2565b600067ffffffffffffffff808411156118d1576118d1612493565b604051601f8501601f1916810160200182811182821017156118f5576118f5612493565b60405284815291508183850186101561190d57600080fd5b8484602083013760006020868301015250509392505050565b600060208284031215611937578081fd5b8135610ff7816124a9565b60008060408385031215611954578081fd5b823561195f816124a9565b9150602083013561196f816124a9565b809150509250929050565b60008060006060848603121561198e578081fd5b8335611999816124a9565b925060208401356119a9816124a9565b929592945050506040919091013590565b600080600080608085870312156119cf578081fd5b84356119da816124a9565b935060208501356119ea816124a9565b925060408501359150606085013567ffffffffffffffff811115611a0c578182fd5b8501601f81018713611a1c578182fd5b611a2b878235602084016118b6565b91505092959194509250565b60008060408385031215611a49578182fd5b8235611a54816124a9565b91506020830135801515811461196f578182fd5b60008060408385031215611a7a578182fd5b8235611a85816124a9565b946020939093013593505050565b60008060208385031215611aa5578182fd5b823567ffffffffffffffff80821115611abc578384fd5b818501915085601f830112611acf578384fd5b813581811115611add578485fd5b8660208083028501011115611af0578485fd5b60209290920196919550909350505050565b600060208284031215611b13578081fd5b8135610ff7816124be565b600060208284031215611b2f578081fd5b8151610ff7816124be565b600060208284031215611b4b578081fd5b813567ffffffffffffffff811115611b61578182fd5b8201601f81018413611b71578182fd5b6112f2848235602084016118b6565b600060208284031215611b91578081fd5b5035919050565b60008151808452611bb08160208601602086016123d1565b601f01601f19169290920160200192915050565b60008351611bd68184602088016123d1565b835190830190611bea8183602088016123d1565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611c3a90830184611b98565b9695505050505050565b901515815260200190565b600060208252610ff76020830184611b98565b60208082526025908201527f416d6f756e74206d6f7265207468616e20796f75722077686974656c697374206040820152641b1a5b5a5d60da1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601b908201527f5075626c69632073616c6520697320616c7265616479206c6976650000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526047908201527f416d6f756e74206d7573742062652032206f72206c65737320666f722077686960408201527f74656c6973742073616c652c2034206f72206c65737320666f72207075626c69606082015266632073616c652160c81b608082015260a00190565b6020808252601d908201527f4d6178204e465473207065722061646472657373206578636565646564000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601a908201527f416d6f756e74206d757374206265206d6f7265207468616e2030000000000000604082015260600190565b602080825260129082015271496e73756666696369656e742066756e647360701b604082015260600190565b60208082526016908201527557686974656c697374206973206e6f74206c6976652160501b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152724e6f20636f6e74726163742062616c616e636560681b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252601c908201527f5765206861766520736f6c64206f75742c205468616e6b20796f752100000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601e908201527f57686974656c6973742073616c6520697320616c7265616479206c6976650000604082015260600190565b60208082526030908201527f496e76616c69642077686974656c6973742062616c616e6365202d205075626c60408201526f69632073616c65206e6f74206c69766560801b606082015260800190565b90815260200190565b6000821982111561238257612382612467565b500190565b6000826123965761239661247d565b500490565b60008160001904831182151516156123b5576123b5612467565b500290565b6000828210156123cc576123cc612467565b500390565b60005b838110156123ec5781810151838201526020016123d4565b83811115610f755750506000910152565b60028104600182168061241157607f821691505b6020821081141561243257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561244c5761244c612467565b5060010190565b6000826124625761246261247d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461109a57600080fd5b6001600160e01b03198116811461109a57600080fdfea2646970667358221220a8bdcccc5e9e4b22780d631410574b5b79691529627add2301e57d4b49ba7cb264736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000104d6172696e65204d617261756465727a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d4d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Marine Marauderz
Arg [1] : symbol_ (string): MM
Arg [2] : baseURI_ (string):

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [4] : 4d6172696e65204d617261756465727a00000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4d4d000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36484:3590:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20684:305;;;;;;;;;;-1:-1:-1;20684:305:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21629:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23188:221::-;;;;;;;;;;-1:-1:-1;23188:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22711:411::-;;;;;;;;;;-1:-1:-1;22711:411:0;;;;;:::i;:::-;;:::i;:::-;;38796:173;;;;;;;;;;;;;:::i;36923:55::-;;;;;;;;;;-1:-1:-1;36923:55:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24078:339::-;;;;;;;;;;-1:-1:-1;24078:339:0;;;;;:::i;:::-;;:::i;36785:34::-;;;;;;;;;;;;;:::i;36581:41::-;;;;;;;;;;;;;:::i;36678:26::-;;;;;;;;;;;;;:::i;39145:113::-;;;;;;;;;;;;;:::i;24488:185::-;;;;;;;;;;-1:-1:-1;24488:185:0;;;;;:::i;:::-;;:::i;39926:145::-;;;;;;;;;;;;;:::i;39618:89::-;;;;;;;;;;-1:-1:-1;39618:89:0;;;;;:::i;:::-;;:::i;39266:98::-;;;;;;;;;;-1:-1:-1;39266:98:0;;;;;:::i;:::-;;:::i;21323:239::-;;;;;;;;;;-1:-1:-1;21323:239:0;;;;;:::i;:::-;;:::i;36629:42::-;;;;;;;;;;;;;:::i;36751:21::-;;;;;;;;;;;;;:::i;21053:208::-;;;;;;;;;;-1:-1:-1;21053:208:0;;;;;:::i;:::-;;:::i;34456:94::-;;;;;;;;;;;;;:::i;36711:27::-;;;;;;;;;;;;;:::i;39492:116::-;;;;;;;;;;-1:-1:-1;39492:116:0;;;;;:::i;:::-;;:::i;36541:33::-;;;;;;;;;;;;;:::i;33805:87::-;;;;;;;;;;;;;:::i;21798:104::-;;;;;;;;;;;;;:::i;36826:33::-;;;;;;;;;;;;;:::i;36872:44::-;;;;;;;;;;-1:-1:-1;36872:44:0;;;;;:::i;:::-;;:::i;37289:1297::-;;;;;;:::i;:::-;;:::i;23481:295::-;;;;;;;;;;-1:-1:-1;23481:295:0;;;;;:::i;:::-;;:::i;39715:199::-;;;;;;;;;;-1:-1:-1;39715:199:0;;;;;:::i;:::-;;:::i;24744:328::-;;;;;;;;;;-1:-1:-1;24744:328:0;;;;;:::i;:::-;;:::i;21973:334::-;;;;;;;;;;-1:-1:-1;21973:334:0;;;;;:::i;:::-;;:::i;23847:164::-;;;;;;;;;;-1:-1:-1;23847:164:0;;;;;:::i;:::-;;:::i;34705:192::-;;;;;;;;;;-1:-1:-1;34705:192:0;;;;;:::i;:::-;;:::i;38594:194::-;;;;;;;;;;-1:-1:-1;38594:194:0;;;;;:::i;:::-;;:::i;38981:152::-;;;;;;;;;;;;;:::i;20684:305::-;20786:4;-1:-1:-1;;;;;;20823:40:0;;-1:-1:-1;;;20823:40:0;;:105;;-1:-1:-1;;;;;;;20880:48:0;;-1:-1:-1;;;20880:48:0;20823:105;:158;;;;20945:36;20969:11;20945:23;:36::i;:::-;20803:178;;20684:305;;;;:::o;21629:100::-;21683:13;21716:5;21709:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21629:100;:::o;23188:221::-;23264:7;23292:16;23300:7;23292;:16::i;:::-;23284:73;;;;-1:-1:-1;;;23284:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;23377:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23377:24:0;;23188:221::o;22711:411::-;22792:13;22808:23;22823:7;22808:14;:23::i;:::-;22792:39;;22856:5;-1:-1:-1;;;;;22850:11:0;:2;-1:-1:-1;;;;;22850:11:0;;;22842:57;;;;-1:-1:-1;;;22842:57:0;;;;;;;:::i;:::-;22950:5;-1:-1:-1;;;;;22934:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;22934:21:0;;:62;;;;22959:37;22976:5;22983:12;:10;:12::i;22959:37::-;22912:168;;;;-1:-1:-1;;;22912:168:0;;;;;;;:::i;:::-;23093:21;23102:2;23106:7;23093:8;:21::i;:::-;22711:411;;;:::o;38796:173::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;38860:14:::1;::::0;::::1;;38859:15;38851:55;;;;-1:-1:-1::0;;;38851:55:0::1;;;;;;;:::i;:::-;38917:14;:21:::0;;-1:-1:-1;;38917:21:0::1;38934:4;38917:21;::::0;;38959:1:::1;38949:7;:11:::0;38796:173::o;36923:55::-;;;;;;;;;;;;;:::o;24078:339::-;24273:41;24292:12;:10;:12::i;:::-;24306:7;24273:18;:41::i;:::-;24265:103;;;;-1:-1:-1;;;24265:103:0;;;;;;;:::i;:::-;24381:28;24391:4;24397:2;24401:7;24381:9;:28::i;36785:34::-;;;;;;:::o;36581:41::-;36618:4;36581:41;:::o;36678:26::-;;;;:::o;39145:113::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;39196:14:::1;:22:::0;;-1:-1:-1;;39229:21:0;;;39145:113::o;24488:185::-;24626:39;24643:4;24649:2;24653:7;24626:39;;;;;;;;;;;;:16;:39::i;39926:145::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;40026:37:::1;::::0;39994:21:::1;::::0;40034:10:::1;::::0;40026:37;::::1;;;::::0;39994:21;;39979:12:::1;40026:37:::0;39979:12;40026:37;39994:21;40034:10;40026:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;34096:1;39926:145::o:0;39618:89::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;39682:5:::1;:17:::0;39618:89::o;39266:98::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;39338:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;21323:239::-:0;21395:7;21431:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21431:16:0;21466:19;21458:73;;;;-1:-1:-1;;;21458:73:0;;;;;;;:::i;36629:42::-;36668:3;36629:42;:::o;36751:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21053:208::-;21125:7;-1:-1:-1;;;;;21153:19:0;;21145:74;;;;-1:-1:-1;;;21145:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21237:16:0;;;;;:9;:16;;;;;;;21053:208::o;34456:94::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;34521:21:::1;34539:1;34521:9;:21::i;:::-;34456:94::o:0;36711:27::-;;;;:::o;39492:116::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;39573:7:::1;:27:::0;39492:116::o;36541:33::-;;;;:::o;33805:87::-;33878:6;;-1:-1:-1;;;;;33878:6:0;33805:87;:::o;21798:104::-;21854:13;21887:7;21880:14;;;;;:::i;36826:33::-;;;;;;;;;:::o;36872:44::-;;;;;;;;;;;;;:::o;37289:1297::-;37358:13;;;;;;;;:21;;:13;:21;37350:56;;;;-1:-1:-1;;;37350:56:0;;;;;;;:::i;:::-;37439:1;37425:11;:15;37417:54;;;;-1:-1:-1;;;37417:54:0;;;;;;;:::i;:::-;37505:7;;37490:11;:22;;37482:106;;;;-1:-1:-1;;;37482:106:0;;;;;;;:::i;:::-;37657:10;37609:24;37636:32;;;:20;:32;;;;;;37721:7;;37687:30;37706:11;37636:32;37687:30;:::i;:::-;:41;;37679:83;;;;-1:-1:-1;;;37679:83:0;;;;;;;:::i;:::-;37814:9;37799:11;37791:5;;:19;;;;:::i;:::-;:32;;37783:63;;;;-1:-1:-1;;;37783:63:0;;;;;;;:::i;:::-;36618:4;37888:11;37873:12;;:26;;;;:::i;:::-;:40;;37865:81;;;;-1:-1:-1;;;37865:81:0;;;;;;;:::i;:::-;37964:14;;;;37959:437;;38032:10;37995:24;38022:21;;;:9;:21;;;;;;38084:20;38058:130;;;;-1:-1:-1;;;38058:130:0;;;;;;;:::i;:::-;38249:11;38229:16;:31;;38203:130;;;;-1:-1:-1;;;38203:130:0;;;;;;;:::i;:::-;38358:10;38348:21;;;;:9;:21;;;;;:36;;38373:11;;38348:21;:36;;38373:11;;38348:36;:::i;:::-;;;;-1:-1:-1;;;37959:437:0;38428:9;38423:156;38447:11;38443:1;:15;38423:156;;;38502:10;38481:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;;;38530:37;38540:10;38554:12;;38552:14;;;;;:::i;:::-;;;;;-1:-1:-1;38530:9:0;:37::i;:::-;38460:3;;;;:::i;:::-;;;;38423:156;;23481:295;23596:12;:10;:12::i;:::-;-1:-1:-1;;;;;23584:24:0;:8;-1:-1:-1;;;;;23584:24:0;;;23576:62;;;;-1:-1:-1;;;23576:62:0;;;;;;;:::i;:::-;23696:8;23651:18;:32;23670:12;:10;:12::i;:::-;-1:-1:-1;;;;;23651:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;23651:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;23651:53:0;;;;;;;;;;;23735:12;:10;:12::i;:::-;-1:-1:-1;;;;;23720:48:0;;23759:8;23720:48;;;;;;:::i;:::-;;;;;;;;23481:295;;:::o;39715:199::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;39829:1:::1;39805:21;:25;39797:57;;;;-1:-1:-1::0;;;39797:57:0::1;;;;;;;:::i;:::-;39865:41;::::0;-1:-1:-1;;;;;39865:18:0;::::1;::::0;39884:21:::1;39865:41:::0;::::1;;;::::0;::::1;::::0;;;39884:21;39865:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;24744:328:::0;24919:41;24938:12;:10;:12::i;:::-;24952:7;24919:18;:41::i;:::-;24911:103;;;;-1:-1:-1;;;24911:103:0;;;;;;;:::i;:::-;25025:39;25039:4;25045:2;25049:7;25058:5;25025:13;:39::i;:::-;24744:328;;;;:::o;21973:334::-;22046:13;22080:16;22088:7;22080;:16::i;:::-;22072:76;;;;-1:-1:-1;;;22072:76:0;;;;;;;:::i;:::-;22161:21;22185:10;:8;:10::i;:::-;22161:34;;22237:1;22219:7;22213:21;:25;:86;;;;;;;;;;;;;;;;;22265:7;22274:18;:7;:16;:18::i;:::-;22248:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22213:86;22206:93;21973:334;-1:-1:-1;;;21973:334:0:o;23847:164::-;-1:-1:-1;;;;;23968:25:0;;;23944:4;23968:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23847:164::o;34705:192::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34794:22:0;::::1;34786:73;;;;-1:-1:-1::0;;;34786:73:0::1;;;;;;;:::i;:::-;34870:19;34880:8;34870:9;:19::i;:::-;34705:192:::0;:::o;38594:194::-;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;38679:9:::1;38674:107;38694:20:::0;;::::1;38674:107;;;38762:7;;38736:9;:23;38746:9;;38756:1;38746:12;;;;;-1:-1:-1::0;;;38746:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38736:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;38736:23:0;:33;38716:3;::::1;::::0;::::1;:::i;:::-;;;;38674:107;;38981:152:::0;34036:12;:10;:12::i;:::-;-1:-1:-1;;;;;34025:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34025:23:0;;34017:68;;;;-1:-1:-1;;;34017:68:0;;;;;;;:::i;:::-;39047:13:::1;::::0;::::1;::::0;::::1;;;39046:14;39038:56;;;;-1:-1:-1::0;;;39038:56:0::1;;;;;;;:::i;:::-;39105:13;:20:::0;;-1:-1:-1;;39105:20:0::1;;;::::0;;38981:152::o;2875:387::-;3198:20;3246:8;;;2875:387::o;12815:157::-;-1:-1:-1;;;;;;12924:40:0;;-1:-1:-1;;;12924:40:0;12815:157;;;:::o;26582:127::-;26647:4;26671:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26671:16:0;:30;;;26582:127::o;19138:98::-;19218:10;19138:98;:::o;30564:174::-;30639:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30639:29:0;-1:-1:-1;;;;;30639:29:0;;;;;;;;:24;;30693:23;30639:24;30693:14;:23::i;:::-;-1:-1:-1;;;;;30684:46:0;;;;;;;;;;;30564:174;;:::o;26876:348::-;26969:4;26994:16;27002:7;26994;:16::i;:::-;26986:73;;;;-1:-1:-1;;;26986:73:0;;;;;;;:::i;:::-;27070:13;27086:23;27101:7;27086:14;:23::i;:::-;27070:39;;27139:5;-1:-1:-1;;;;;27128:16:0;:7;-1:-1:-1;;;;;27128:16:0;;:51;;;;27172:7;-1:-1:-1;;;;;27148:31:0;:20;27160:7;27148:11;:20::i;:::-;-1:-1:-1;;;;;27148:31:0;;27128:51;:87;;;;27183:32;27200:5;27207:7;27183:16;:32::i;:::-;27120:96;26876:348;-1:-1:-1;;;;26876:348:0:o;29868:578::-;30027:4;-1:-1:-1;;;;;30000:31:0;:23;30015:7;30000:14;:23::i;:::-;-1:-1:-1;;;;;30000:31:0;;29992:85;;;;-1:-1:-1;;;29992:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30096:16:0;;30088:65;;;;-1:-1:-1;;;30088:65:0;;;;;;;:::i;:::-;30166:39;30187:4;30193:2;30197:7;30166:20;:39::i;:::-;30270:29;30287:1;30291:7;30270:8;:29::i;:::-;-1:-1:-1;;;;;30312:15:0;;;;;;:9;:15;;;;;:20;;30331:1;;30312:15;:20;;30331:1;;30312:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30343:13:0;;;;;;:9;:13;;;;;:18;;30360:1;;30343:13;:18;;30360:1;;30343:18;:::i;:::-;;;;-1:-1:-1;;30372:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30372:21:0;-1:-1:-1;;;;;30372:21:0;;;;;;;;;30411:27;;30372:16;;30411:27;;;;;;;29868:578;;;:::o;34905:173::-;34980:6;;;-1:-1:-1;;;;;34997:17:0;;;-1:-1:-1;;;;;;34997:17:0;;;;;;;35030:40;;34980:6;;;34997:17;34980:6;;35030:40;;34961:16;;35030:40;34905:173;;:::o;27566:110::-;27642:26;27652:2;27656:7;27642:26;;;;;;;;;;;;:9;:26::i;25954:315::-;26111:28;26121:4;26127:2;26131:7;26111:9;:28::i;:::-;26158:48;26181:4;26187:2;26191:7;26200:5;26158:22;:48::i;:::-;26150:111;;;;-1:-1:-1;;;26150:111:0;;;;;;;:::i;39372:108::-;39432:13;39465:7;39458:14;;;;;:::i;350:723::-;406:13;627:10;623:53;;-1:-1:-1;654:10:0;;;;;;;;;;;;-1:-1:-1;;;654:10:0;;;;;;623:53;701:5;686:12;742:78;749:9;;742:78;;775:8;;;;:::i;:::-;;-1:-1:-1;798:10:0;;-1:-1:-1;806:2:0;798:10;;:::i;:::-;;;742:78;;;830:19;862:6;852:17;;;;;;-1:-1:-1;;;852:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;852:17:0;;830:39;;880:154;887:10;;880:154;;914:11;924:1;914:11;;:::i;:::-;;-1:-1:-1;983:10:0;991:2;983:5;:10;:::i;:::-;970:24;;:2;:24;:::i;:::-;957:39;;940:6;947;940:14;;;;;;-1:-1:-1;;;940:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;940:56:0;;;;;;;;-1:-1:-1;1011:11:0;1020:2;1011:11;;:::i;:::-;;;880:154;;27903:321;28033:18;28039:2;28043:7;28033:5;:18::i;:::-;28084:54;28115:1;28119:2;28123:7;28132:5;28084:22;:54::i;:::-;28062:154;;;;-1:-1:-1;;;28062:154:0;;;;;;;:::i;31303:799::-;31458:4;31479:15;:2;-1:-1:-1;;;;;31479:13:0;;:15::i;:::-;31475:620;;;31531:2;-1:-1:-1;;;;;31515:36:0;;31552:12;:10;:12::i;:::-;31566:4;31572:7;31581:5;31515:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31515:72:0;;;;;;;;-1:-1:-1;;31515:72:0;;;;;;;;;;;;:::i;:::-;;;31511:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31757:13:0;;31753:272;;31800:60;;-1:-1:-1;;;31800:60:0;;;;;;;:::i;31753:272::-;31975:6;31969:13;31960:6;31956:2;31952:15;31945:38;31511:529;-1:-1:-1;;;;;;31638:51:0;-1:-1:-1;;;31638:51:0;;-1:-1:-1;31631:58:0;;31475:620;-1:-1:-1;32079:4:0;31303:799;;;;;;:::o;28560:382::-;-1:-1:-1;;;;;28640:16:0;;28632:61;;;;-1:-1:-1;;;28632:61:0;;;;;;;:::i;:::-;28713:16;28721:7;28713;:16::i;:::-;28712:17;28704:58;;;;-1:-1:-1;;;28704:58:0;;;;;;;:::i;:::-;28775:45;28804:1;28808:2;28812:7;28775:20;:45::i;:::-;-1:-1:-1;;;;;28833:13:0;;;;;;:9;:13;;;;;:18;;28850:1;;28833:13;:18;;28850:1;;28833:18;:::i;:::-;;;;-1:-1:-1;;28862:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28862:21:0;-1:-1:-1;;;;;28862:21:0;;;;;;;;28901:33;;28862:16;;;28901:33;;28862:16;;28901:33;28560:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:259::-;;738:2;726:9;717:7;713:23;709:32;706:2;;;759:6;751;744:22;706:2;803:9;790:23;822:33;849:5;822:33;:::i;1162:402::-;;;1291:2;1279:9;1270:7;1266:23;1262:32;1259:2;;;1312:6;1304;1297:22;1259:2;1356:9;1343:23;1375:33;1402:5;1375:33;:::i;:::-;1427:5;-1:-1:-1;1484:2:1;1469:18;;1456:32;1497:35;1456:32;1497:35;:::i;:::-;1551:7;1541:17;;;1249:315;;;;;:::o;1569:470::-;;;;1715:2;1703:9;1694:7;1690:23;1686:32;1683:2;;;1736:6;1728;1721:22;1683:2;1780:9;1767:23;1799:33;1826:5;1799:33;:::i;:::-;1851:5;-1:-1:-1;1908:2:1;1893:18;;1880:32;1921:35;1880:32;1921:35;:::i;:::-;1673:366;;1975:7;;-1:-1:-1;;;2029:2:1;2014:18;;;;2001:32;;1673:366::o;2044:830::-;;;;;2216:3;2204:9;2195:7;2191:23;2187:33;2184:2;;;2238:6;2230;2223:22;2184:2;2282:9;2269:23;2301:33;2328:5;2301:33;:::i;:::-;2353:5;-1:-1:-1;2410:2:1;2395:18;;2382:32;2423:35;2382:32;2423:35;:::i;:::-;2477:7;-1:-1:-1;2531:2:1;2516:18;;2503:32;;-1:-1:-1;2586:2:1;2571:18;;2558:32;2613:18;2602:30;;2599:2;;;2650:6;2642;2635:22;2599:2;2678:22;;2731:4;2723:13;;2719:27;-1:-1:-1;2709:2:1;;2765:6;2757;2750:22;2709:2;2793:75;2860:7;2855:2;2842:16;2837:2;2833;2829:11;2793:75;:::i;:::-;2783:85;;;2174:700;;;;;;;:::o;2879:438::-;;;3005:2;2993:9;2984:7;2980:23;2976:32;2973:2;;;3026:6;3018;3011:22;2973:2;3070:9;3057:23;3089:33;3116:5;3089:33;:::i;:::-;3141:5;-1:-1:-1;3198:2:1;3183:18;;3170:32;3240:15;;3233:23;3221:36;;3211:2;;3276:6;3268;3261:22;3322:327;;;3451:2;3439:9;3430:7;3426:23;3422:32;3419:2;;;3472:6;3464;3457:22;3419:2;3516:9;3503:23;3535:33;3562:5;3535:33;:::i;:::-;3587:5;3639:2;3624:18;;;;3611:32;;-1:-1:-1;;;3409:240:1:o;3654:666::-;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3822:6;3814;3807:22;3769:2;3867:9;3854:23;3896:18;3937:2;3929:6;3926:14;3923:2;;;3958:6;3950;3943:22;3923:2;4001:6;3990:9;3986:22;3976:32;;4046:7;4039:4;4035:2;4031:13;4027:27;4017:2;;4073:6;4065;4058:22;4017:2;4118;4105:16;4144:2;4136:6;4133:14;4130:2;;;4165:6;4157;4150:22;4130:2;4224:7;4219:2;4213;4205:6;4201:15;4197:2;4193:24;4189:33;4186:46;4183:2;;;4250:6;4242;4235:22;4183:2;4286;4278:11;;;;;4308:6;;-1:-1:-1;3759:561:1;;-1:-1:-1;;;;3759:561:1:o;4325:257::-;;4436:2;4424:9;4415:7;4411:23;4407:32;4404:2;;;4457:6;4449;4442:22;4404:2;4501:9;4488:23;4520:32;4546:5;4520:32;:::i;4587:261::-;;4709:2;4697:9;4688:7;4684:23;4680:32;4677:2;;;4730:6;4722;4715:22;4677:2;4767:9;4761:16;4786:32;4812:5;4786:32;:::i;4853:482::-;;4975:2;4963:9;4954:7;4950:23;4946:32;4943:2;;;4996:6;4988;4981:22;4943:2;5041:9;5028:23;5074:18;5066:6;5063:30;5060:2;;;5111:6;5103;5096:22;5060:2;5139:22;;5192:4;5184:13;;5180:27;-1:-1:-1;5170:2:1;;5226:6;5218;5211:22;5170:2;5254:75;5321:7;5316:2;5303:16;5298:2;5294;5290:11;5254:75;:::i;5340:190::-;;5452:2;5440:9;5431:7;5427:23;5423:32;5420:2;;;5473:6;5465;5458:22;5420:2;-1:-1:-1;5501:23:1;;5410:120;-1:-1:-1;5410:120:1:o;5535:259::-;;5616:5;5610:12;5643:6;5638:3;5631:19;5659:63;5715:6;5708:4;5703:3;5699:14;5692:4;5685:5;5681:16;5659:63;:::i;:::-;5776:2;5755:15;-1:-1:-1;;5751:29:1;5742:39;;;;5783:4;5738:50;;5586:208;-1:-1:-1;;5586:208:1:o;5799:470::-;;6016:6;6010:13;6032:53;6078:6;6073:3;6066:4;6058:6;6054:17;6032:53;:::i;:::-;6148:13;;6107:16;;;;6170:57;6148:13;6107:16;6204:4;6192:17;;6170:57;:::i;:::-;6243:20;;5986:283;-1:-1:-1;;;;5986:283:1:o;6274:203::-;-1:-1:-1;;;;;6438:32:1;;;;6420:51;;6408:2;6393:18;;6375:102::o;6482:490::-;-1:-1:-1;;;;;6751:15:1;;;6733:34;;6803:15;;6798:2;6783:18;;6776:43;6850:2;6835:18;;6828:34;;;6898:3;6893:2;6878:18;;6871:31;;;6482:490;;6919:47;;6946:19;;6938:6;6919:47;:::i;:::-;6911:55;6685:287;-1:-1:-1;;;;;;6685:287:1:o;6977:187::-;7142:14;;7135:22;7117:41;;7105:2;7090:18;;7072:92::o;7169:221::-;;7318:2;7307:9;7300:21;7338:46;7380:2;7369:9;7365:18;7357:6;7338:46;:::i;7395:401::-;7597:2;7579:21;;;7636:2;7616:18;;;7609:30;7675:34;7670:2;7655:18;;7648:62;-1:-1:-1;;;7741:2:1;7726:18;;7719:35;7786:3;7771:19;;7569:227::o;7801:414::-;8003:2;7985:21;;;8042:2;8022:18;;;8015:30;8081:34;8076:2;8061:18;;8054:62;-1:-1:-1;;;8147:2:1;8132:18;;8125:48;8205:3;8190:19;;7975:240::o;8220:351::-;8422:2;8404:21;;;8461:2;8441:18;;;8434:30;8500:29;8495:2;8480:18;;8473:57;8562:2;8547:18;;8394:177::o;8576:402::-;8778:2;8760:21;;;8817:2;8797:18;;;8790:30;8856:34;8851:2;8836:18;;8829:62;-1:-1:-1;;;8922:2:1;8907:18;;8900:36;8968:3;8953:19;;8750:228::o;8983:352::-;9185:2;9167:21;;;9224:2;9204:18;;;9197:30;9263;9258:2;9243:18;;9236:58;9326:2;9311:18;;9157:178::o;9340:400::-;9542:2;9524:21;;;9581:2;9561:18;;;9554:30;9620:34;9615:2;9600:18;;9593:62;-1:-1:-1;;;9686:2:1;9671:18;;9664:34;9730:3;9715:19;;9514:226::o;9745:349::-;9947:2;9929:21;;;9986:2;9966:18;;;9959:30;10025:27;10020:2;10005:18;;9998:55;10085:2;10070:18;;9919:175::o;10099:475::-;10301:2;10283:21;;;10340:2;10320:18;;;10313:30;10379:34;10374:2;10359:18;;10352:62;10450:34;10445:2;10430:18;;10423:62;-1:-1:-1;;;10516:3:1;10501:19;;10494:38;10564:3;10549:19;;10273:301::o;10579:353::-;10781:2;10763:21;;;10820:2;10800:18;;;10793:30;10859:31;10854:2;10839:18;;10832:59;10923:2;10908:18;;10753:179::o;10937:408::-;11139:2;11121:21;;;11178:2;11158:18;;;11151:30;11217:34;11212:2;11197:18;;11190:62;-1:-1:-1;;;11283:2:1;11268:18;;11261:42;11335:3;11320:19;;11111:234::o;11350:350::-;11552:2;11534:21;;;11591:2;11571:18;;;11564:30;11630:28;11625:2;11610:18;;11603:56;11691:2;11676:18;;11524:176::o;11705:342::-;11907:2;11889:21;;;11946:2;11926:18;;;11919:30;-1:-1:-1;;;11980:2:1;11965:18;;11958:48;12038:2;12023:18;;11879:168::o;12052:346::-;12254:2;12236:21;;;12293:2;12273:18;;;12266:30;-1:-1:-1;;;12327:2:1;12312:18;;12305:52;12389:2;12374:18;;12226:172::o;12403:420::-;12605:2;12587:21;;;12644:2;12624:18;;;12617:30;12683:34;12678:2;12663:18;;12656:62;12754:26;12749:2;12734:18;;12727:54;12813:3;12798:19;;12577:246::o;12828:406::-;13030:2;13012:21;;;13069:2;13049:18;;;13042:30;13108:34;13103:2;13088:18;;13081:62;-1:-1:-1;;;13174:2:1;13159:18;;13152:40;13224:3;13209:19;;13002:232::o;13239:405::-;13441:2;13423:21;;;13480:2;13460:18;;;13453:30;13519:34;13514:2;13499:18;;13492:62;-1:-1:-1;;;13585:2:1;13570:18;;13563:39;13634:3;13619:19;;13413:231::o;13649:356::-;13851:2;13833:21;;;13870:18;;;13863:30;13929:34;13924:2;13909:18;;13902:62;13996:2;13981:18;;13823:182::o;14010:408::-;14212:2;14194:21;;;14251:2;14231:18;;;14224:30;14290:34;14285:2;14270:18;;14263:62;-1:-1:-1;;;14356:2:1;14341:18;;14334:42;14408:3;14393:19;;14184:234::o;14423:356::-;14625:2;14607:21;;;14644:18;;;14637:30;14703:34;14698:2;14683:18;;14676:62;14770:2;14755:18;;14597:182::o;14784:343::-;14986:2;14968:21;;;15025:2;15005:18;;;14998:30;-1:-1:-1;;;15059:2:1;15044:18;;15037:49;15118:2;15103:18;;14958:169::o;15132:405::-;15334:2;15316:21;;;15373:2;15353:18;;;15346:30;15412:34;15407:2;15392:18;;15385:62;-1:-1:-1;;;15478:2:1;15463:18;;15456:39;15527:3;15512:19;;15306:231::o;15542:411::-;15744:2;15726:21;;;15783:2;15763:18;;;15756:30;15822:34;15817:2;15802:18;;15795:62;-1:-1:-1;;;15888:2:1;15873:18;;15866:45;15943:3;15928:19;;15716:237::o;15958:352::-;16160:2;16142:21;;;16199:2;16179:18;;;16172:30;16238;16233:2;16218:18;;16211:58;16301:2;16286:18;;16132:178::o;16315:397::-;16517:2;16499:21;;;16556:2;16536:18;;;16529:30;16595:34;16590:2;16575:18;;16568:62;-1:-1:-1;;;16661:2:1;16646:18;;16639:31;16702:3;16687:19;;16489:223::o;16717:413::-;16919:2;16901:21;;;16958:2;16938:18;;;16931:30;16997:34;16992:2;16977:18;;16970:62;-1:-1:-1;;;17063:2:1;17048:18;;17041:47;17120:3;17105:19;;16891:239::o;17135:354::-;17337:2;17319:21;;;17376:2;17356:18;;;17349:30;17415:32;17410:2;17395:18;;17388:60;17480:2;17465:18;;17309:180::o;17494:412::-;17696:2;17678:21;;;17735:2;17715:18;;;17708:30;17774:34;17769:2;17754:18;;17747:62;-1:-1:-1;;;17840:2:1;17825:18;;17818:46;17896:3;17881:19;;17668:238::o;17911:177::-;18057:25;;;18045:2;18030:18;;18012:76::o;18093:128::-;;18164:1;18160:6;18157:1;18154:13;18151:2;;;18170:18;;:::i;:::-;-1:-1:-1;18206:9:1;;18141:80::o;18226:120::-;;18292:1;18282:2;;18297:18;;:::i;:::-;-1:-1:-1;18331:9:1;;18272:74::o;18351:168::-;;18457:1;18453;18449:6;18445:14;18442:1;18439:21;18434:1;18427:9;18420:17;18416:45;18413:2;;;18464:18;;:::i;:::-;-1:-1:-1;18504:9:1;;18403:116::o;18524:125::-;;18592:1;18589;18586:8;18583:2;;;18597:18;;:::i;:::-;-1:-1:-1;18634:9:1;;18573:76::o;18654:258::-;18726:1;18736:113;18750:6;18747:1;18744:13;18736:113;;;18826:11;;;18820:18;18807:11;;;18800:39;18772:2;18765:10;18736:113;;;18867:6;18864:1;18861:13;18858:2;;;-1:-1:-1;;18902:1:1;18884:16;;18877:27;18707:205::o;18917:380::-;19002:1;18992:12;;19049:1;19039:12;;;19060:2;;19114:4;19106:6;19102:17;19092:27;;19060:2;19167;19159:6;19156:14;19136:18;19133:38;19130:2;;;19213:10;19208:3;19204:20;19201:1;19194:31;19248:4;19245:1;19238:15;19276:4;19273:1;19266:15;19130:2;;18972:325;;;:::o;19302:135::-;;-1:-1:-1;;19362:17:1;;19359:2;;;19382:18;;:::i;:::-;-1:-1:-1;19429:1:1;19418:13;;19349:88::o;19442:112::-;;19500:1;19490:2;;19505:18;;:::i;:::-;-1:-1:-1;19539:9:1;;19480:74::o;19559:127::-;19620:10;19615:3;19611:20;19608:1;19601:31;19651:4;19648:1;19641:15;19675:4;19672:1;19665:15;19691:127;19752:10;19747:3;19743:20;19740:1;19733:31;19783:4;19780:1;19773:15;19807:4;19804:1;19797:15;19823:127;19884:10;19879:3;19875:20;19872:1;19865:31;19915:4;19912:1;19905:15;19939:4;19936:1;19929:15;19955:133;-1:-1:-1;;;;;20032:31:1;;20022:42;;20012:2;;20078:1;20075;20068:12;20093:133;-1:-1:-1;;;;;;20169:32:1;;20159:43;;20149:2;;20216:1;20213;20206:12

Swarm Source

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