ETH Price: $2,450.96 (+1.10%)

Token

Pxl Pepes (PP)
 

Overview

Max Total Supply

726 PP

Holders

115

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
7 PP
0x51f554A692E45f8212b1C18439f4E587bd6200aD
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PxlPepes

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 10 of 11: PxlPepes.sol
// SPDX-License-Identifier: MIT
/**
  _____       _   _____                     
 |  __ \     | | |  __ \                    
 | |__) |_  _| | | |__) |__ _ __   ___  ___ 
 |  ___/\ \/ / | |  ___/ _ \ '_ \ / _ \/ __|
 | |     >  <| | | |  |  __/ |_) |  __/\__ \
 |_|    /_/\_\_| |_|   \___| .__/ \___||___/
                           | |              
                           |_|              
*/

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./Ownable.sol";
import "./Strings.sol";

contract PxlPepes is ERC721, Ownable {
  using Strings for uint256;
 
  bool public paused = false;
  string public baseURI;
  string public baseExtension = ".json";
  uint256 public maxSupply = 4200;
  uint256 public totalSupply = 0;
  ERC721 public moonpepes;

  constructor(
    string memory _initBaseURI,
    address _moonpepes
  ) ERC721("Pxl Pepes", "PP") {
      setBaseURI(_initBaseURI);
      setMoonPepesContract(_moonpepes);
  }

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

  function exists(uint256 tokenId) external view returns (bool) {
      return _exists(tokenId);
  }

  function mint(address _to, uint256[] calldata ids) external {
    require(!paused, "Paused");
    require(totalSupply + ids.length <= maxSupply, "Exceeds max supply");
    for(uint256 i; i < ids.length; i++) {
        require(moonpepes.ownerOf(ids[i]) == msg.sender, string(abi.encodePacked("Not owner of ID #", ids[i])));
        _mint(_to, ids[i]);
    }

    totalSupply += ids.length;
  }

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

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

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

  function setMoonPepesContract(address _moonpepes) public onlyOwner {
      moonpepes = ERC721(_moonpepes);
  }

  function setPaused(bool _paused) public onlyOwner {
      paused = _paused;
  }
}

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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 11: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 3 of 11: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 4 of 11: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata 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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

        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 overridden 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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 5 of 11: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 6 of 11: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

File 7 of 11: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 8 of 11: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

File 9 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

File 11 of 11: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_moonpepes","type":"address"}],"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"moonpepes","outputs":[{"internalType":"contract ERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_moonpepes","type":"address"}],"name":"setMoonPepesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600660146101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600890805190602001906200006c9291906200039e565b506110686009556000600a553480156200008557600080fd5b5060405162003c3b38038062003c3b8339818101604052810190620000ab9190620004e3565b6040518060400160405280600981526020017f50786c20506570657300000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f505000000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200012f9291906200039e565b508060019080519060200190620001489291906200039e565b5050506200016b6200015f6200019560201b60201c565b6200019d60201b60201c565b6200017c826200026360201b60201c565b6200018d816200028f60201b60201c565b50506200079e565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000273620002e360201b60201c565b80600790805190602001906200028b9291906200039e565b5050565b6200029f620002e360201b60201c565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620002f36200019560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003196200037460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003699062000570565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003ac906200066c565b90600052602060002090601f016020900481019282620003d057600085556200041c565b82601f10620003eb57805160ff19168380011785556200041c565b828001600101855582156200041c579182015b828111156200041b578251825591602001919060010190620003fe565b5b5090506200042b91906200042f565b5090565b5b808211156200044a57600081600090555060010162000430565b5090565b6000620004656200045f84620005bb565b62000592565b9050828152602081018484840111156200048457620004836200073b565b5b6200049184828562000636565b509392505050565b600081519050620004aa8162000784565b92915050565b600082601f830112620004c857620004c762000736565b5b8151620004da8482602086016200044e565b91505092915050565b60008060408385031215620004fd57620004fc62000745565b5b600083015167ffffffffffffffff8111156200051e576200051d62000740565b5b6200052c85828601620004b0565b92505060206200053f8582860162000499565b9150509250929050565b600062000558602083620005f1565b915062000565826200075b565b602082019050919050565b600060208201905081810360008301526200058b8162000549565b9050919050565b60006200059e620005b1565b9050620005ac8282620006a2565b919050565b6000604051905090565b600067ffffffffffffffff821115620005d957620005d862000707565b5b620005e4826200074a565b9050602081019050919050565b600082825260208201905092915050565b60006200060f8262000616565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200065657808201518184015260208101905062000639565b8381111562000666576000848401525b50505050565b600060028204905060018216806200068557607f821691505b602082108114156200069c576200069b620006d8565b5b50919050565b620006ad826200074a565b810181811067ffffffffffffffff82111715620006cf57620006ce62000707565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200078f8162000602565b81146200079b57600080fd5b50565b61348d80620007ae6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063bfe4419e11610097578063d5abeb0111610071578063d5abeb01146104a8578063de836ebd146104c6578063e985e9c5146104e2578063f2fde38b14610512576101a9565b8063bfe4419e1461043e578063c66828621461045a578063c87b56dd14610478576101a9565b80638da5cb5b116100d35780638da5cb5b146103ca57806395d89b41146103e8578063a22cb46514610406578063b88d4fde14610422576101a9565b80636c0360eb1461037257806370a0823114610390578063715018a6146103c0576101a9565b806323b872dd1161016657806355f804b31161014057806355f804b3146102ea5780635c975abb146103065780636352211e146103245780636a7e05f714610354576101a9565b806323b872dd1461028257806342842e0e1461029e5780634f558e79146102ba576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806316c38b3c1461024857806318160ddd14610264575b600080fd5b6101c860048036038101906101c391906123c2565b61052e565b6040516101d59190612918565b60405180910390f35b6101e6610610565b6040516101f3919061294e565b60405180910390f35b61021660048036038101906102119190612465565b6106a2565b60405161022391906128b1565b60405180910390f35b61024660048036038101906102419190612355565b6106e8565b005b610262600480360381019061025d9190612395565b610800565b005b61026c610825565b6040516102799190612b70565b60405180910390f35b61029c600480360381019061029791906121df565b61082b565b005b6102b860048036038101906102b391906121df565b61088b565b005b6102d460048036038101906102cf9190612465565b6108ab565b6040516102e19190612918565b60405180910390f35b61030460048036038101906102ff919061241c565b6108bd565b005b61030e6108df565b60405161031b9190612918565b60405180910390f35b61033e60048036038101906103399190612465565b6108f2565b60405161034b91906128b1565b60405180910390f35b61035c6109a4565b6040516103699190612933565b60405180910390f35b61037a6109ca565b604051610387919061294e565b60405180910390f35b6103aa60048036038101906103a59190612145565b610a58565b6040516103b79190612b70565b60405180910390f35b6103c8610b10565b005b6103d2610b24565b6040516103df91906128b1565b60405180910390f35b6103f0610b4e565b6040516103fd919061294e565b60405180910390f35b610420600480360381019061041b9190612315565b610be0565b005b61043c60048036038101906104379190612232565b610bf6565b005b61045860048036038101906104539190612145565b610c58565b005b610462610ca4565b60405161046f919061294e565b60405180910390f35b610492600480360381019061048d9190612465565b610d32565b60405161049f919061294e565b60405180910390f35b6104b0610ddc565b6040516104bd9190612b70565b60405180910390f35b6104e060048036038101906104db91906122b5565b610de2565b005b6104fc60048036038101906104f7919061219f565b61105a565b6040516105099190612918565b60405180910390f35b61052c60048036038101906105279190612145565b6110ee565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610609575061060882611172565b5b9050919050565b60606000805461061f90612e11565b80601f016020809104026020016040519081016040528092919081815260200182805461064b90612e11565b80156106985780601f1061066d57610100808354040283529160200191610698565b820191906000526020600020905b81548152906001019060200180831161067b57829003601f168201915b5050505050905090565b60006106ad826111dc565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106f3826108f2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075b90612b30565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610783611227565b73ffffffffffffffffffffffffffffffffffffffff1614806107b257506107b1816107ac611227565b61105a565b5b6107f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e890612ab0565b60405180910390fd5b6107fb838361122f565b505050565b6108086112e8565b80600660146101000a81548160ff02191690831515021790555050565b600a5481565b61083c610836611227565b82611366565b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087290612b50565b60405180910390fd5b6108868383836113fb565b505050565b6108a683838360405180602001604052806000815250610bf6565b505050565b60006108b682611662565b9050919050565b6108c56112e8565b80600790805190602001906108db929190611eee565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290612b10565b60405180910390fd5b80915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600780546109d790612e11565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0390612e11565b8015610a505780601f10610a2557610100808354040283529160200191610a50565b820191906000526020600020905b815481529060010190602001808311610a3357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090612a70565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b186112e8565b610b2260006116ce565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b5d90612e11565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8990612e11565b8015610bd65780601f10610bab57610100808354040283529160200191610bd6565b820191906000526020600020905b815481529060010190602001808311610bb957829003601f168201915b5050505050905090565b610bf2610beb611227565b8383611794565b5050565b610c07610c01611227565b83611366565b610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90612b50565b60405180910390fd5b610c5284848484611901565b50505050565b610c606112e8565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60088054610cb190612e11565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdd90612e11565b8015610d2a5780601f10610cff57610100808354040283529160200191610d2a565b820191906000526020600020905b815481529060010190602001808311610d0d57829003601f168201915b505050505081565b6060610d3d82611662565b610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390612990565b60405180910390fd5b6000610d8661195d565b90506000815111610da65760405180602001604052806000815250610dd4565b80610db0846119ef565b6008604051602001610dc49392919061285a565b6040516020818303038152906040525b915050919050565b60095481565b600660149054906101000a900460ff1615610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612970565b60405180910390fd5b60095482829050600a54610e469190612c6a565b1115610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90612a90565b60405180910390fd5b60005b82829050811015611038573373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858585818110610efd57610efc612f85565b5b905060200201356040518263ffffffff1660e01b8152600401610f209190612b70565b60206040518083038186803b158015610f3857600080fd5b505afa158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f709190612172565b73ffffffffffffffffffffffffffffffffffffffff1614838383818110610f9a57610f99612f85565b5b90506020020135604051602001610fb1919061288b565b60405160208183030381529060405290611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff8919061294e565b60405180910390fd5b506110258484848481811061101957611018612f85565b5b90506020020135611b50565b808061103090612e74565b915050610e8a565b5081819050600a600082825461104e9190612c6a565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110f66112e8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d906129d0565b60405180910390fd5b61116f816116ce565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111e581611662565b611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90612b10565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112a2836108f2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6112f0611227565b73ffffffffffffffffffffffffffffffffffffffff1661130e610b24565b73ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90612af0565b60405180910390fd5b565b600080611372836108f2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113b457506113b3818561105a565b5b806113f257508373ffffffffffffffffffffffffffffffffffffffff166113da846106a2565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661141b826108f2565b73ffffffffffffffffffffffffffffffffffffffff1614611471576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611468906129f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890612a30565b60405180910390fd5b6114ec838383611d2a565b6114f760008261122f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115479190612cf1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461159e9190612c6a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461165d838383611d2f565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa90612a50565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118f49190612918565b60405180910390a3505050565b61190c8484846113fb565b61191884848484611d34565b611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e906129b0565b60405180910390fd5b50505050565b60606007805461196c90612e11565b80601f016020809104026020016040519081016040528092919081815260200182805461199890612e11565b80156119e55780601f106119ba576101008083540402835291602001916119e5565b820191906000526020600020905b8154815290600101906020018083116119c857829003601f168201915b5050505050905090565b60606000821415611a37576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b4b565b600082905060005b60008214611a69578080611a5290612e74565b915050600a82611a629190612cc0565b9150611a3f565b60008167ffffffffffffffff811115611a8557611a84612fb4565b5b6040519080825280601f01601f191660200182016040528015611ab75781602001600182028036833780820191505090505b5090505b60008514611b4457600182611ad09190612cf1565b9150600a85611adf9190612ec7565b6030611aeb9190612c6a565b60f81b818381518110611b0157611b00612f85565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b3d9190612cc0565b9450611abb565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790612ad0565b60405180910390fd5b611bc981611662565b15611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090612a10565b60405180910390fd5b611c1560008383611d2a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c659190612c6a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d2660008383611d2f565b5050565b505050565b505050565b6000611d558473ffffffffffffffffffffffffffffffffffffffff16611ecb565b15611ebe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d7e611227565b8786866040518563ffffffff1660e01b8152600401611da094939291906128cc565b602060405180830381600087803b158015611dba57600080fd5b505af1925050508015611deb57506040513d601f19601f82011682018060405250810190611de891906123ef565b60015b611e6e573d8060008114611e1b576040519150601f19603f3d011682016040523d82523d6000602084013e611e20565b606091505b50600081511415611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d906129b0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611ec3565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611efa90612e11565b90600052602060002090601f016020900481019282611f1c5760008555611f63565b82601f10611f3557805160ff1916838001178555611f63565b82800160010185558215611f63579182015b82811115611f62578251825591602001919060010190611f47565b5b509050611f709190611f74565b5090565b5b80821115611f8d576000816000905550600101611f75565b5090565b6000611fa4611f9f84612bb0565b612b8b565b905082815260208101848484011115611fc057611fbf612ff2565b5b611fcb848285612dcf565b509392505050565b6000611fe6611fe184612be1565b612b8b565b90508281526020810184848401111561200257612001612ff2565b5b61200d848285612dcf565b509392505050565b600081359050612024816133fb565b92915050565b600081519050612039816133fb565b92915050565b60008083601f84011261205557612054612fe8565b5b8235905067ffffffffffffffff81111561207257612071612fe3565b5b60208301915083602082028301111561208e5761208d612fed565b5b9250929050565b6000813590506120a481613412565b92915050565b6000813590506120b981613429565b92915050565b6000815190506120ce81613429565b92915050565b600082601f8301126120e9576120e8612fe8565b5b81356120f9848260208601611f91565b91505092915050565b600082601f83011261211757612116612fe8565b5b8135612127848260208601611fd3565b91505092915050565b60008135905061213f81613440565b92915050565b60006020828403121561215b5761215a612ffc565b5b600061216984828501612015565b91505092915050565b60006020828403121561218857612187612ffc565b5b60006121968482850161202a565b91505092915050565b600080604083850312156121b6576121b5612ffc565b5b60006121c485828601612015565b92505060206121d585828601612015565b9150509250929050565b6000806000606084860312156121f8576121f7612ffc565b5b600061220686828701612015565b935050602061221786828701612015565b925050604061222886828701612130565b9150509250925092565b6000806000806080858703121561224c5761224b612ffc565b5b600061225a87828801612015565b945050602061226b87828801612015565b935050604061227c87828801612130565b925050606085013567ffffffffffffffff81111561229d5761229c612ff7565b5b6122a9878288016120d4565b91505092959194509250565b6000806000604084860312156122ce576122cd612ffc565b5b60006122dc86828701612015565b935050602084013567ffffffffffffffff8111156122fd576122fc612ff7565b5b6123098682870161203f565b92509250509250925092565b6000806040838503121561232c5761232b612ffc565b5b600061233a85828601612015565b925050602061234b85828601612095565b9150509250929050565b6000806040838503121561236c5761236b612ffc565b5b600061237a85828601612015565b925050602061238b85828601612130565b9150509250929050565b6000602082840312156123ab576123aa612ffc565b5b60006123b984828501612095565b91505092915050565b6000602082840312156123d8576123d7612ffc565b5b60006123e6848285016120aa565b91505092915050565b60006020828403121561240557612404612ffc565b5b6000612413848285016120bf565b91505092915050565b60006020828403121561243257612431612ffc565b5b600082013567ffffffffffffffff8111156124505761244f612ff7565b5b61245c84828501612102565b91505092915050565b60006020828403121561247b5761247a612ffc565b5b600061248984828501612130565b91505092915050565b61249b81612d25565b82525050565b6124aa81612d37565b82525050565b60006124bb82612c27565b6124c58185612c3d565b93506124d5818560208601612dde565b6124de81613001565b840191505092915050565b6124f281612d99565b82525050565b600061250382612c32565b61250d8185612c4e565b935061251d818560208601612dde565b61252681613001565b840191505092915050565b600061253c82612c32565b6125468185612c5f565b9350612556818560208601612dde565b80840191505092915050565b6000815461256f81612e11565b6125798186612c5f565b9450600182166000811461259457600181146125a5576125d8565b60ff198316865281860193506125d8565b6125ae85612c12565b60005b838110156125d0578154818901526001820191506020810190506125b1565b838801955050505b50505092915050565b60006125ee600683612c4e565b91506125f982613012565b602082019050919050565b6000612611601f83612c4e565b915061261c8261303b565b602082019050919050565b6000612634603283612c4e565b915061263f82613064565b604082019050919050565b6000612657602683612c4e565b9150612662826130b3565b604082019050919050565b600061267a602583612c4e565b915061268582613102565b604082019050919050565b600061269d601c83612c4e565b91506126a882613151565b602082019050919050565b60006126c0602483612c4e565b91506126cb8261317a565b604082019050919050565b60006126e3601983612c4e565b91506126ee826131c9565b602082019050919050565b6000612706602983612c4e565b9150612711826131f2565b604082019050919050565b6000612729601283612c4e565b915061273482613241565b602082019050919050565b600061274c603e83612c4e565b91506127578261326a565b604082019050919050565b600061276f602083612c4e565b915061277a826132b9565b602082019050919050565b6000612792602083612c4e565b915061279d826132e2565b602082019050919050565b60006127b5601183612c5f565b91506127c08261330b565b601182019050919050565b60006127d8601883612c4e565b91506127e382613334565b602082019050919050565b60006127fb602183612c4e565b91506128068261335d565b604082019050919050565b600061281e602e83612c4e565b9150612829826133ac565b604082019050919050565b61283d81612d8f565b82525050565b61285461284f82612d8f565b612ebd565b82525050565b60006128668286612531565b91506128728285612531565b915061287e8284612562565b9150819050949350505050565b6000612896826127a8565b91506128a28284612843565b60208201915081905092915050565b60006020820190506128c66000830184612492565b92915050565b60006080820190506128e16000830187612492565b6128ee6020830186612492565b6128fb6040830185612834565b818103606083015261290d81846124b0565b905095945050505050565b600060208201905061292d60008301846124a1565b92915050565b600060208201905061294860008301846124e9565b92915050565b6000602082019050818103600083015261296881846124f8565b905092915050565b60006020820190508181036000830152612989816125e1565b9050919050565b600060208201905081810360008301526129a981612604565b9050919050565b600060208201905081810360008301526129c981612627565b9050919050565b600060208201905081810360008301526129e98161264a565b9050919050565b60006020820190508181036000830152612a098161266d565b9050919050565b60006020820190508181036000830152612a2981612690565b9050919050565b60006020820190508181036000830152612a49816126b3565b9050919050565b60006020820190508181036000830152612a69816126d6565b9050919050565b60006020820190508181036000830152612a89816126f9565b9050919050565b60006020820190508181036000830152612aa98161271c565b9050919050565b60006020820190508181036000830152612ac98161273f565b9050919050565b60006020820190508181036000830152612ae981612762565b9050919050565b60006020820190508181036000830152612b0981612785565b9050919050565b60006020820190508181036000830152612b29816127cb565b9050919050565b60006020820190508181036000830152612b49816127ee565b9050919050565b60006020820190508181036000830152612b6981612811565b9050919050565b6000602082019050612b856000830184612834565b92915050565b6000612b95612ba6565b9050612ba18282612e43565b919050565b6000604051905090565b600067ffffffffffffffff821115612bcb57612bca612fb4565b5b612bd482613001565b9050602081019050919050565b600067ffffffffffffffff821115612bfc57612bfb612fb4565b5b612c0582613001565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612c7582612d8f565b9150612c8083612d8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612cb557612cb4612ef8565b5b828201905092915050565b6000612ccb82612d8f565b9150612cd683612d8f565b925082612ce657612ce5612f27565b5b828204905092915050565b6000612cfc82612d8f565b9150612d0783612d8f565b925082821015612d1a57612d19612ef8565b5b828203905092915050565b6000612d3082612d6f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612da482612dab565b9050919050565b6000612db682612dbd565b9050919050565b6000612dc882612d6f565b9050919050565b82818337600083830152505050565b60005b83811015612dfc578082015181840152602081019050612de1565b83811115612e0b576000848401525b50505050565b60006002820490506001821680612e2957607f821691505b60208210811415612e3d57612e3c612f56565b5b50919050565b612e4c82613001565b810181811067ffffffffffffffff82111715612e6b57612e6a612fb4565b5b80604052505050565b6000612e7f82612d8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612eb257612eb1612ef8565b5b600182019050919050565b6000819050919050565b6000612ed282612d8f565b9150612edd83612d8f565b925082612eed57612eec612f27565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f74206f776e6572206f662049442023000000000000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61340481612d25565b811461340f57600080fd5b50565b61341b81612d37565b811461342657600080fd5b50565b61343281612d43565b811461343d57600080fd5b50565b61344981612d8f565b811461345457600080fd5b5056fea2646970667358221220f9b243d2d1db736ce7b64287487349e2d7ae9a92fdb65af13bc83d1b90613c6c64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000002f74badce458387ecaef9b1f229afb5678e9aad0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d56716339395173594a615642555245563236344b733465335554767a615675775931476f71516a79544b6d442f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80636c0360eb116100f9578063bfe4419e11610097578063d5abeb0111610071578063d5abeb01146104a8578063de836ebd146104c6578063e985e9c5146104e2578063f2fde38b14610512576101a9565b8063bfe4419e1461043e578063c66828621461045a578063c87b56dd14610478576101a9565b80638da5cb5b116100d35780638da5cb5b146103ca57806395d89b41146103e8578063a22cb46514610406578063b88d4fde14610422576101a9565b80636c0360eb1461037257806370a0823114610390578063715018a6146103c0576101a9565b806323b872dd1161016657806355f804b31161014057806355f804b3146102ea5780635c975abb146103065780636352211e146103245780636a7e05f714610354576101a9565b806323b872dd1461028257806342842e0e1461029e5780634f558e79146102ba576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806316c38b3c1461024857806318160ddd14610264575b600080fd5b6101c860048036038101906101c391906123c2565b61052e565b6040516101d59190612918565b60405180910390f35b6101e6610610565b6040516101f3919061294e565b60405180910390f35b61021660048036038101906102119190612465565b6106a2565b60405161022391906128b1565b60405180910390f35b61024660048036038101906102419190612355565b6106e8565b005b610262600480360381019061025d9190612395565b610800565b005b61026c610825565b6040516102799190612b70565b60405180910390f35b61029c600480360381019061029791906121df565b61082b565b005b6102b860048036038101906102b391906121df565b61088b565b005b6102d460048036038101906102cf9190612465565b6108ab565b6040516102e19190612918565b60405180910390f35b61030460048036038101906102ff919061241c565b6108bd565b005b61030e6108df565b60405161031b9190612918565b60405180910390f35b61033e60048036038101906103399190612465565b6108f2565b60405161034b91906128b1565b60405180910390f35b61035c6109a4565b6040516103699190612933565b60405180910390f35b61037a6109ca565b604051610387919061294e565b60405180910390f35b6103aa60048036038101906103a59190612145565b610a58565b6040516103b79190612b70565b60405180910390f35b6103c8610b10565b005b6103d2610b24565b6040516103df91906128b1565b60405180910390f35b6103f0610b4e565b6040516103fd919061294e565b60405180910390f35b610420600480360381019061041b9190612315565b610be0565b005b61043c60048036038101906104379190612232565b610bf6565b005b61045860048036038101906104539190612145565b610c58565b005b610462610ca4565b60405161046f919061294e565b60405180910390f35b610492600480360381019061048d9190612465565b610d32565b60405161049f919061294e565b60405180910390f35b6104b0610ddc565b6040516104bd9190612b70565b60405180910390f35b6104e060048036038101906104db91906122b5565b610de2565b005b6104fc60048036038101906104f7919061219f565b61105a565b6040516105099190612918565b60405180910390f35b61052c60048036038101906105279190612145565b6110ee565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610609575061060882611172565b5b9050919050565b60606000805461061f90612e11565b80601f016020809104026020016040519081016040528092919081815260200182805461064b90612e11565b80156106985780601f1061066d57610100808354040283529160200191610698565b820191906000526020600020905b81548152906001019060200180831161067b57829003601f168201915b5050505050905090565b60006106ad826111dc565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106f3826108f2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075b90612b30565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610783611227565b73ffffffffffffffffffffffffffffffffffffffff1614806107b257506107b1816107ac611227565b61105a565b5b6107f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e890612ab0565b60405180910390fd5b6107fb838361122f565b505050565b6108086112e8565b80600660146101000a81548160ff02191690831515021790555050565b600a5481565b61083c610836611227565b82611366565b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087290612b50565b60405180910390fd5b6108868383836113fb565b505050565b6108a683838360405180602001604052806000815250610bf6565b505050565b60006108b682611662565b9050919050565b6108c56112e8565b80600790805190602001906108db929190611eee565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290612b10565b60405180910390fd5b80915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600780546109d790612e11565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0390612e11565b8015610a505780601f10610a2557610100808354040283529160200191610a50565b820191906000526020600020905b815481529060010190602001808311610a3357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090612a70565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b186112e8565b610b2260006116ce565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b5d90612e11565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8990612e11565b8015610bd65780601f10610bab57610100808354040283529160200191610bd6565b820191906000526020600020905b815481529060010190602001808311610bb957829003601f168201915b5050505050905090565b610bf2610beb611227565b8383611794565b5050565b610c07610c01611227565b83611366565b610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90612b50565b60405180910390fd5b610c5284848484611901565b50505050565b610c606112e8565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60088054610cb190612e11565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdd90612e11565b8015610d2a5780601f10610cff57610100808354040283529160200191610d2a565b820191906000526020600020905b815481529060010190602001808311610d0d57829003601f168201915b505050505081565b6060610d3d82611662565b610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390612990565b60405180910390fd5b6000610d8661195d565b90506000815111610da65760405180602001604052806000815250610dd4565b80610db0846119ef565b6008604051602001610dc49392919061285a565b6040516020818303038152906040525b915050919050565b60095481565b600660149054906101000a900460ff1615610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612970565b60405180910390fd5b60095482829050600a54610e469190612c6a565b1115610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90612a90565b60405180910390fd5b60005b82829050811015611038573373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858585818110610efd57610efc612f85565b5b905060200201356040518263ffffffff1660e01b8152600401610f209190612b70565b60206040518083038186803b158015610f3857600080fd5b505afa158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f709190612172565b73ffffffffffffffffffffffffffffffffffffffff1614838383818110610f9a57610f99612f85565b5b90506020020135604051602001610fb1919061288b565b60405160208183030381529060405290611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff8919061294e565b60405180910390fd5b506110258484848481811061101957611018612f85565b5b90506020020135611b50565b808061103090612e74565b915050610e8a565b5081819050600a600082825461104e9190612c6a565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110f66112e8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d906129d0565b60405180910390fd5b61116f816116ce565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111e581611662565b611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90612b10565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112a2836108f2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6112f0611227565b73ffffffffffffffffffffffffffffffffffffffff1661130e610b24565b73ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90612af0565b60405180910390fd5b565b600080611372836108f2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113b457506113b3818561105a565b5b806113f257508373ffffffffffffffffffffffffffffffffffffffff166113da846106a2565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661141b826108f2565b73ffffffffffffffffffffffffffffffffffffffff1614611471576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611468906129f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890612a30565b60405180910390fd5b6114ec838383611d2a565b6114f760008261122f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115479190612cf1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461159e9190612c6a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461165d838383611d2f565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa90612a50565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118f49190612918565b60405180910390a3505050565b61190c8484846113fb565b61191884848484611d34565b611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e906129b0565b60405180910390fd5b50505050565b60606007805461196c90612e11565b80601f016020809104026020016040519081016040528092919081815260200182805461199890612e11565b80156119e55780601f106119ba576101008083540402835291602001916119e5565b820191906000526020600020905b8154815290600101906020018083116119c857829003601f168201915b5050505050905090565b60606000821415611a37576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b4b565b600082905060005b60008214611a69578080611a5290612e74565b915050600a82611a629190612cc0565b9150611a3f565b60008167ffffffffffffffff811115611a8557611a84612fb4565b5b6040519080825280601f01601f191660200182016040528015611ab75781602001600182028036833780820191505090505b5090505b60008514611b4457600182611ad09190612cf1565b9150600a85611adf9190612ec7565b6030611aeb9190612c6a565b60f81b818381518110611b0157611b00612f85565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b3d9190612cc0565b9450611abb565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790612ad0565b60405180910390fd5b611bc981611662565b15611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090612a10565b60405180910390fd5b611c1560008383611d2a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c659190612c6a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d2660008383611d2f565b5050565b505050565b505050565b6000611d558473ffffffffffffffffffffffffffffffffffffffff16611ecb565b15611ebe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d7e611227565b8786866040518563ffffffff1660e01b8152600401611da094939291906128cc565b602060405180830381600087803b158015611dba57600080fd5b505af1925050508015611deb57506040513d601f19601f82011682018060405250810190611de891906123ef565b60015b611e6e573d8060008114611e1b576040519150601f19603f3d011682016040523d82523d6000602084013e611e20565b606091505b50600081511415611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d906129b0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611ec3565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611efa90612e11565b90600052602060002090601f016020900481019282611f1c5760008555611f63565b82601f10611f3557805160ff1916838001178555611f63565b82800160010185558215611f63579182015b82811115611f62578251825591602001919060010190611f47565b5b509050611f709190611f74565b5090565b5b80821115611f8d576000816000905550600101611f75565b5090565b6000611fa4611f9f84612bb0565b612b8b565b905082815260208101848484011115611fc057611fbf612ff2565b5b611fcb848285612dcf565b509392505050565b6000611fe6611fe184612be1565b612b8b565b90508281526020810184848401111561200257612001612ff2565b5b61200d848285612dcf565b509392505050565b600081359050612024816133fb565b92915050565b600081519050612039816133fb565b92915050565b60008083601f84011261205557612054612fe8565b5b8235905067ffffffffffffffff81111561207257612071612fe3565b5b60208301915083602082028301111561208e5761208d612fed565b5b9250929050565b6000813590506120a481613412565b92915050565b6000813590506120b981613429565b92915050565b6000815190506120ce81613429565b92915050565b600082601f8301126120e9576120e8612fe8565b5b81356120f9848260208601611f91565b91505092915050565b600082601f83011261211757612116612fe8565b5b8135612127848260208601611fd3565b91505092915050565b60008135905061213f81613440565b92915050565b60006020828403121561215b5761215a612ffc565b5b600061216984828501612015565b91505092915050565b60006020828403121561218857612187612ffc565b5b60006121968482850161202a565b91505092915050565b600080604083850312156121b6576121b5612ffc565b5b60006121c485828601612015565b92505060206121d585828601612015565b9150509250929050565b6000806000606084860312156121f8576121f7612ffc565b5b600061220686828701612015565b935050602061221786828701612015565b925050604061222886828701612130565b9150509250925092565b6000806000806080858703121561224c5761224b612ffc565b5b600061225a87828801612015565b945050602061226b87828801612015565b935050604061227c87828801612130565b925050606085013567ffffffffffffffff81111561229d5761229c612ff7565b5b6122a9878288016120d4565b91505092959194509250565b6000806000604084860312156122ce576122cd612ffc565b5b60006122dc86828701612015565b935050602084013567ffffffffffffffff8111156122fd576122fc612ff7565b5b6123098682870161203f565b92509250509250925092565b6000806040838503121561232c5761232b612ffc565b5b600061233a85828601612015565b925050602061234b85828601612095565b9150509250929050565b6000806040838503121561236c5761236b612ffc565b5b600061237a85828601612015565b925050602061238b85828601612130565b9150509250929050565b6000602082840312156123ab576123aa612ffc565b5b60006123b984828501612095565b91505092915050565b6000602082840312156123d8576123d7612ffc565b5b60006123e6848285016120aa565b91505092915050565b60006020828403121561240557612404612ffc565b5b6000612413848285016120bf565b91505092915050565b60006020828403121561243257612431612ffc565b5b600082013567ffffffffffffffff8111156124505761244f612ff7565b5b61245c84828501612102565b91505092915050565b60006020828403121561247b5761247a612ffc565b5b600061248984828501612130565b91505092915050565b61249b81612d25565b82525050565b6124aa81612d37565b82525050565b60006124bb82612c27565b6124c58185612c3d565b93506124d5818560208601612dde565b6124de81613001565b840191505092915050565b6124f281612d99565b82525050565b600061250382612c32565b61250d8185612c4e565b935061251d818560208601612dde565b61252681613001565b840191505092915050565b600061253c82612c32565b6125468185612c5f565b9350612556818560208601612dde565b80840191505092915050565b6000815461256f81612e11565b6125798186612c5f565b9450600182166000811461259457600181146125a5576125d8565b60ff198316865281860193506125d8565b6125ae85612c12565b60005b838110156125d0578154818901526001820191506020810190506125b1565b838801955050505b50505092915050565b60006125ee600683612c4e565b91506125f982613012565b602082019050919050565b6000612611601f83612c4e565b915061261c8261303b565b602082019050919050565b6000612634603283612c4e565b915061263f82613064565b604082019050919050565b6000612657602683612c4e565b9150612662826130b3565b604082019050919050565b600061267a602583612c4e565b915061268582613102565b604082019050919050565b600061269d601c83612c4e565b91506126a882613151565b602082019050919050565b60006126c0602483612c4e565b91506126cb8261317a565b604082019050919050565b60006126e3601983612c4e565b91506126ee826131c9565b602082019050919050565b6000612706602983612c4e565b9150612711826131f2565b604082019050919050565b6000612729601283612c4e565b915061273482613241565b602082019050919050565b600061274c603e83612c4e565b91506127578261326a565b604082019050919050565b600061276f602083612c4e565b915061277a826132b9565b602082019050919050565b6000612792602083612c4e565b915061279d826132e2565b602082019050919050565b60006127b5601183612c5f565b91506127c08261330b565b601182019050919050565b60006127d8601883612c4e565b91506127e382613334565b602082019050919050565b60006127fb602183612c4e565b91506128068261335d565b604082019050919050565b600061281e602e83612c4e565b9150612829826133ac565b604082019050919050565b61283d81612d8f565b82525050565b61285461284f82612d8f565b612ebd565b82525050565b60006128668286612531565b91506128728285612531565b915061287e8284612562565b9150819050949350505050565b6000612896826127a8565b91506128a28284612843565b60208201915081905092915050565b60006020820190506128c66000830184612492565b92915050565b60006080820190506128e16000830187612492565b6128ee6020830186612492565b6128fb6040830185612834565b818103606083015261290d81846124b0565b905095945050505050565b600060208201905061292d60008301846124a1565b92915050565b600060208201905061294860008301846124e9565b92915050565b6000602082019050818103600083015261296881846124f8565b905092915050565b60006020820190508181036000830152612989816125e1565b9050919050565b600060208201905081810360008301526129a981612604565b9050919050565b600060208201905081810360008301526129c981612627565b9050919050565b600060208201905081810360008301526129e98161264a565b9050919050565b60006020820190508181036000830152612a098161266d565b9050919050565b60006020820190508181036000830152612a2981612690565b9050919050565b60006020820190508181036000830152612a49816126b3565b9050919050565b60006020820190508181036000830152612a69816126d6565b9050919050565b60006020820190508181036000830152612a89816126f9565b9050919050565b60006020820190508181036000830152612aa98161271c565b9050919050565b60006020820190508181036000830152612ac98161273f565b9050919050565b60006020820190508181036000830152612ae981612762565b9050919050565b60006020820190508181036000830152612b0981612785565b9050919050565b60006020820190508181036000830152612b29816127cb565b9050919050565b60006020820190508181036000830152612b49816127ee565b9050919050565b60006020820190508181036000830152612b6981612811565b9050919050565b6000602082019050612b856000830184612834565b92915050565b6000612b95612ba6565b9050612ba18282612e43565b919050565b6000604051905090565b600067ffffffffffffffff821115612bcb57612bca612fb4565b5b612bd482613001565b9050602081019050919050565b600067ffffffffffffffff821115612bfc57612bfb612fb4565b5b612c0582613001565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612c7582612d8f565b9150612c8083612d8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612cb557612cb4612ef8565b5b828201905092915050565b6000612ccb82612d8f565b9150612cd683612d8f565b925082612ce657612ce5612f27565b5b828204905092915050565b6000612cfc82612d8f565b9150612d0783612d8f565b925082821015612d1a57612d19612ef8565b5b828203905092915050565b6000612d3082612d6f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612da482612dab565b9050919050565b6000612db682612dbd565b9050919050565b6000612dc882612d6f565b9050919050565b82818337600083830152505050565b60005b83811015612dfc578082015181840152602081019050612de1565b83811115612e0b576000848401525b50505050565b60006002820490506001821680612e2957607f821691505b60208210811415612e3d57612e3c612f56565b5b50919050565b612e4c82613001565b810181811067ffffffffffffffff82111715612e6b57612e6a612fb4565b5b80604052505050565b6000612e7f82612d8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612eb257612eb1612ef8565b5b600182019050919050565b6000819050919050565b6000612ed282612d8f565b9150612edd83612d8f565b925082612eed57612eec612f27565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f74206f776e6572206f662049442023000000000000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61340481612d25565b811461340f57600080fd5b50565b61341b81612d37565b811461342657600080fd5b50565b61343281612d43565b811461343d57600080fd5b50565b61344981612d8f565b811461345457600080fd5b5056fea2646970667358221220f9b243d2d1db736ce7b64287487349e2d7ae9a92fdb65af13bc83d1b90613c6c64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000002f74badce458387ecaef9b1f229afb5678e9aad0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d56716339395173594a615642555245563236344b733465335554767a615675775931476f71516a79544b6d442f00000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmVqc99QsYJaVBUREV264Ks4e3UTvzaVuwY1GoqQjyTKmD/
Arg [1] : _moonpepes (address): 0x02F74badcE458387ECAef9b1F229afB5678E9AAd

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000002f74badce458387ecaef9b1f229afb5678e9aad
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d56716339395173594a615642555245563236344b733465
Arg [4] : 335554767a615675775931476f71516a79544b6d442f00000000000000000000


Deployed Bytecode Sourcemap

515:1760:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1556:305:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2483:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3996:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3513:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2191:81:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;725:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4696:336:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5103:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1085:100:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1969:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;590:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2194:222:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;760:23:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;621:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1925:207:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1884:103:8;;;:::i;:::-;;1236:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2652:104:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4239:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5359:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2073:112:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;647:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:365;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;689:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1191:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4465:164:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2142:201:8;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1556:305:3;1658:4;1710:25;1695:40;;;:11;:40;;;;:105;;;;1767:33;1752:48;;;:11;:48;;;;1695:105;:158;;;;1817:36;1841:11;1817:23;:36::i;:::-;1695:158;1675:178;;1556:305;;;:::o;2483:100::-;2537:13;2570:5;2563:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2483:100;:::o;3996:171::-;4072:7;4092:23;4107:7;4092:14;:23::i;:::-;4135:15;:24;4151:7;4135:24;;;;;;;;;;;;;;;;;;;;;4128:31;;3996:171;;;:::o;3513:417::-;3594:13;3610:23;3625:7;3610:14;:23::i;:::-;3594:39;;3658:5;3652:11;;:2;:11;;;;3644:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3752:5;3736:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3761:37;3778:5;3785:12;:10;:12::i;:::-;3761:16;:37::i;:::-;3736:62;3714:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;3901:21;3910:2;3914:7;3901:8;:21::i;:::-;3583:347;3513:417;;:::o;2191:81:9:-;1122:13:8;:11;:13::i;:::-;2259:7:9::1;2250:6;;:16;;;;;;;;;;;;;;;;;;2191:81:::0;:::o;725:30::-;;;;:::o;4696:336:3:-;4891:41;4910:12;:10;:12::i;:::-;4924:7;4891:18;:41::i;:::-;4883:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;4996:28;5006:4;5012:2;5016:7;4996:9;:28::i;:::-;4696:336;;;:::o;5103:185::-;5241:39;5258:4;5264:2;5268:7;5241:39;;;;;;;;;;;;:16;:39::i;:::-;5103:185;;;:::o;1085:100:9:-;1141:4;1163:16;1171:7;1163;:16::i;:::-;1156:23;;1085:100;;;:::o;1969:98::-;1122:13:8;:11;:13::i;:::-;2050:11:9::1;2040:7;:21;;;;;;;;;;;;:::i;:::-;;1969:98:::0;:::o;590:26::-;;;;;;;;;;;;;:::o;2194:222:3:-;2266:7;2286:13;2302:7;:16;2310:7;2302:16;;;;;;;;;;;;;;;;;;;;;2286:32;;2354:1;2337:19;;:5;:19;;;;2329:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2403:5;2396:12;;;2194:222;;;:::o;760:23:9:-;;;;;;;;;;;;;:::o;621:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1925:207:3:-;1997:7;2042:1;2025:19;;:5;:19;;;;2017:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2108:9;:16;2118:5;2108:16;;;;;;;;;;;;;;;;2101:23;;1925:207;;;:::o;1884:103:8:-;1122:13;:11;:13::i;:::-;1949:30:::1;1976:1;1949:18;:30::i;:::-;1884:103::o:0;1236:87::-;1282:7;1309:6;;;;;;;;;;;1302:13;;1236:87;:::o;2652:104:3:-;2708:13;2741:7;2734:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2652:104;:::o;4239:155::-;4334:52;4353:12;:10;:12::i;:::-;4367:8;4377;4334:18;:52::i;:::-;4239:155;;:::o;5359:323::-;5533:41;5552:12;:10;:12::i;:::-;5566:7;5533:18;:41::i;:::-;5525:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;5636:38;5650:4;5656:2;5660:7;5669:4;5636:13;:38::i;:::-;5359:323;;;;:::o;2073:112:9:-;1122:13:8;:11;:13::i;:::-;2168:10:9::1;2149:9;;:30;;;;;;;;;;;;;;;;;;2073:112:::0;:::o;647:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1598:365::-;1671:13;1703:16;1711:7;1703;:16::i;:::-;1695:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1766:28;1797:10;:8;:10::i;:::-;1766:41;;1854:1;1829:14;1823:28;:32;:134;;;;;;;;;;;;;;;;;1892:14;1908:18;:7;:16;:18::i;:::-;1928:13;1875:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1823:134;1816:141;;;1598:365;;;:::o;689:31::-;;;;:::o;1191:401::-;1267:6;;;;;;;;;;;1266:7;1258:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;1327:9;;1313:3;;:10;;1299:11;;:24;;;;:::i;:::-;:37;;1291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1370:9;1366:187;1385:3;;:10;;1381:1;:14;1366:187;;;1450:10;1421:39;;:9;;;;;;;;;;;:17;;;1439:3;;1443:1;1439:6;;;;;;;:::i;:::-;;;;;;;;1421:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;1507:3;;1511:1;1507:6;;;;;;;:::i;:::-;;;;;;;;1469:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;1413:103;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1527:18;1533:3;1538;;1542:1;1538:6;;;;;;;:::i;:::-;;;;;;;;1527:5;:18::i;:::-;1397:3;;;;;:::i;:::-;;;;1366:187;;;;1576:3;;:10;;1561:11;;:25;;;;;;;:::i;:::-;;;;;;;;1191:401;;;:::o;4465:164:3:-;4562:4;4586:18;:25;4605:5;4586:25;;;;;;;;;;;;;;;:35;4612:8;4586:35;;;;;;;;;;;;;;;;;;;;;;;;;4579:42;;4465:164;;;;:::o;2142:201:8:-;1122:13;:11;:13::i;:::-;2251:1:::1;2231:22;;:8;:22;;;;2223:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2307:28;2326:8;2307:18;:28::i;:::-;2142:201:::0;:::o;854:157:2:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;11971:135:3:-;12053:16;12061:7;12053;:16::i;:::-;12045:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;11971:135;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;11250:174:3:-;11352:2;11325:15;:24;11341:7;11325:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11408:7;11404:2;11370:46;;11379:23;11394:7;11379:14;:23::i;:::-;11370:46;;;;;;;;;;;;11250:174;;:::o;1401:132:8:-;1476:12;:10;:12::i;:::-;1465:23;;:7;:5;:7::i;:::-;:23;;;1457:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1401:132::o;7483:264:3:-;7576:4;7593:13;7609:23;7624:7;7609:14;:23::i;:::-;7593:39;;7662:5;7651:16;;:7;:16;;;:52;;;;7671:32;7688:5;7695:7;7671:16;:32::i;:::-;7651:52;:87;;;;7731:7;7707:31;;:20;7719:7;7707:11;:20::i;:::-;:31;;;7651:87;7643:96;;;7483:264;;;;:::o;10506:625::-;10665:4;10638:31;;:23;10653:7;10638:14;:23::i;:::-;:31;;;10630:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10744:1;10730:16;;:2;:16;;;;10722:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10800:39;10821:4;10827:2;10831:7;10800:20;:39::i;:::-;10904:29;10921:1;10925:7;10904:8;:29::i;:::-;10965:1;10946:9;:15;10956:4;10946:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10994:1;10977:9;:13;10987:2;10977:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11025:2;11006:7;:16;11014:7;11006:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11064:7;11060:2;11045:27;;11054:4;11045:27;;;;;;;;;;;;11085:38;11105:4;11111:2;11115:7;11085:19;:38::i;:::-;10506:625;;;:::o;7189:127::-;7254:4;7306:1;7278:30;;:7;:16;7286:7;7278:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7271:37;;7189:127;;;:::o;2503:191:8:-;2577:16;2596:6;;;;;;;;;;;2577:25;;2622:8;2613:6;;:17;;;;;;;;;;;;;;;;;;2677:8;2646:40;;2667:8;2646:40;;;;;;;;;;;;2566:128;2503:191;:::o;11567:315:3:-;11722:8;11713:17;;:5;:17;;;;11705:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11809:8;11771:18;:25;11790:5;11771:25;;;;;;;;;;;;;;;:35;11797:8;11771:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11855:8;11833:41;;11848:5;11833:41;;;11865:8;11833:41;;;;;;:::i;:::-;;;;;;;;11567:315;;;:::o;6563:313::-;6719:28;6729:4;6735:2;6739:7;6719:9;:28::i;:::-;6766:47;6789:4;6795:2;6799:7;6808:4;6766:22;:47::i;:::-;6758:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6563:313;;;;:::o;977:102:9:-;1037:13;1066:7;1059:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;977:102;:::o;407:723:10:-;463:13;693:1;684:5;:10;680:53;;;711:10;;;;;;;;;;;;;;;;;;;;;680:53;743:12;758:5;743:20;;774:14;799:78;814:1;806:4;:9;799:78;;832:8;;;;;:::i;:::-;;;;863:2;855:10;;;;;:::i;:::-;;;799:78;;;887:19;919:6;909:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;887:39;;937:154;953:1;944:5;:10;937:154;;981:1;971:11;;;;;:::i;:::-;;;1048:2;1040:5;:10;;;;:::i;:::-;1027:2;:24;;;;:::i;:::-;1014:39;;997:6;1004;997:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1077:2;1068:11;;;;;:::i;:::-;;;937:154;;;1115:6;1101:21;;;;;407:723;;;;:::o;9081:439:3:-;9175:1;9161:16;;:2;:16;;;;9153:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9234:16;9242:7;9234;:16::i;:::-;9233:17;9225:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9296:45;9325:1;9329:2;9333:7;9296:20;:45::i;:::-;9371:1;9354:9;:13;9364:2;9354:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9402:2;9383:7;:16;9391:7;9383:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9447:7;9443:2;9422:33;;9439:1;9422:33;;;;;;;;;;;;9468:44;9496:1;9500:2;9504:7;9468:19;:44::i;:::-;9081:439;;:::o;14095:126::-;;;;:::o;14606:125::-;;;;:::o;12670:853::-;12824:4;12845:15;:2;:13;;;:15::i;:::-;12841:675;;;12897:2;12881:36;;;12918:12;:10;:12::i;:::-;12932:4;12938:7;12947:4;12881:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12877:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13139:1;13122:6;:13;:18;13118:328;;;13165:60;;;;;;;;;;:::i;:::-;;;;;;;;13118:328;13396:6;13390:13;13381:6;13377:2;13373:15;13366:38;12877:584;13013:41;;;13003:51;;;:6;:51;;;;12996:58;;;;;12841:675;13500:4;13493:11;;12670:853;;;;;;;:::o;1210:326:0:-;1270:4;1527:1;1505:7;:19;;;:23;1498:30;;1210:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:11:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1152:568::-;1225:8;1235:6;1285:3;1278:4;1270:6;1266:17;1262:27;1252:122;;1293:79;;:::i;:::-;1252:122;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:117;;;1458:79;;:::i;:::-;1422:117;1572:4;1564:6;1560:17;1548:29;;1626:3;1618:4;1610:6;1606:17;1596:8;1592:32;1589:41;1586:128;;;1633:79;;:::i;:::-;1586:128;1152:568;;;;;:::o;1726:133::-;1769:5;1807:6;1794:20;1785:29;;1823:30;1847:5;1823:30;:::i;:::-;1726:133;;;;:::o;1865:137::-;1910:5;1948:6;1935:20;1926:29;;1964:32;1990:5;1964:32;:::i;:::-;1865:137;;;;:::o;2008:141::-;2064:5;2095:6;2089:13;2080:22;;2111:32;2137:5;2111:32;:::i;:::-;2008:141;;;;:::o;2168:338::-;2223:5;2272:3;2265:4;2257:6;2253:17;2249:27;2239:122;;2280:79;;:::i;:::-;2239:122;2397:6;2384:20;2422:78;2496:3;2488:6;2481:4;2473:6;2469:17;2422:78;:::i;:::-;2413:87;;2229:277;2168:338;;;;:::o;2526:340::-;2582:5;2631:3;2624:4;2616:6;2612:17;2608:27;2598:122;;2639:79;;:::i;:::-;2598:122;2756:6;2743:20;2781:79;2856:3;2848:6;2841:4;2833:6;2829:17;2781:79;:::i;:::-;2772:88;;2588:278;2526:340;;;;:::o;2872:139::-;2918:5;2956:6;2943:20;2934:29;;2972:33;2999:5;2972:33;:::i;:::-;2872:139;;;;:::o;3017:329::-;3076:6;3125:2;3113:9;3104:7;3100:23;3096:32;3093:119;;;3131:79;;:::i;:::-;3093:119;3251:1;3276:53;3321:7;3312:6;3301:9;3297:22;3276:53;:::i;:::-;3266:63;;3222:117;3017:329;;;;:::o;3352:351::-;3422:6;3471:2;3459:9;3450:7;3446:23;3442:32;3439:119;;;3477:79;;:::i;:::-;3439:119;3597:1;3622:64;3678:7;3669:6;3658:9;3654:22;3622:64;:::i;:::-;3612:74;;3568:128;3352:351;;;;:::o;3709:474::-;3777:6;3785;3834:2;3822:9;3813:7;3809:23;3805:32;3802:119;;;3840:79;;:::i;:::-;3802:119;3960:1;3985:53;4030:7;4021:6;4010:9;4006:22;3985:53;:::i;:::-;3975:63;;3931:117;4087:2;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4058:118;3709:474;;;;;:::o;4189:619::-;4266:6;4274;4282;4331:2;4319:9;4310:7;4306:23;4302:32;4299:119;;;4337:79;;:::i;:::-;4299:119;4457:1;4482:53;4527:7;4518:6;4507:9;4503:22;4482:53;:::i;:::-;4472:63;;4428:117;4584:2;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;:::i;:::-;4600:63;;4555:118;4712:2;4738:53;4783:7;4774:6;4763:9;4759:22;4738:53;:::i;:::-;4728:63;;4683:118;4189:619;;;;;:::o;4814:943::-;4909:6;4917;4925;4933;4982:3;4970:9;4961:7;4957:23;4953:33;4950:120;;;4989:79;;:::i;:::-;4950:120;5109:1;5134:53;5179:7;5170:6;5159:9;5155:22;5134:53;:::i;:::-;5124:63;;5080:117;5236:2;5262:53;5307:7;5298:6;5287:9;5283:22;5262:53;:::i;:::-;5252:63;;5207:118;5364:2;5390:53;5435:7;5426:6;5415:9;5411:22;5390:53;:::i;:::-;5380:63;;5335:118;5520:2;5509:9;5505:18;5492:32;5551:18;5543:6;5540:30;5537:117;;;5573:79;;:::i;:::-;5537:117;5678:62;5732:7;5723:6;5712:9;5708:22;5678:62;:::i;:::-;5668:72;;5463:287;4814:943;;;;;;;:::o;5763:704::-;5858:6;5866;5874;5923:2;5911:9;5902:7;5898:23;5894:32;5891:119;;;5929:79;;:::i;:::-;5891:119;6049:1;6074:53;6119:7;6110:6;6099:9;6095:22;6074:53;:::i;:::-;6064:63;;6020:117;6204:2;6193:9;6189:18;6176:32;6235:18;6227:6;6224:30;6221:117;;;6257:79;;:::i;:::-;6221:117;6370:80;6442:7;6433:6;6422:9;6418:22;6370:80;:::i;:::-;6352:98;;;;6147:313;5763:704;;;;;:::o;6473:468::-;6538:6;6546;6595:2;6583:9;6574:7;6570:23;6566:32;6563:119;;;6601:79;;:::i;:::-;6563:119;6721:1;6746:53;6791:7;6782:6;6771:9;6767:22;6746:53;:::i;:::-;6736:63;;6692:117;6848:2;6874:50;6916:7;6907:6;6896:9;6892:22;6874:50;:::i;:::-;6864:60;;6819:115;6473:468;;;;;:::o;6947:474::-;7015:6;7023;7072:2;7060:9;7051:7;7047:23;7043:32;7040:119;;;7078:79;;:::i;:::-;7040:119;7198:1;7223:53;7268:7;7259:6;7248:9;7244:22;7223:53;:::i;:::-;7213:63;;7169:117;7325:2;7351:53;7396:7;7387:6;7376:9;7372:22;7351:53;:::i;:::-;7341:63;;7296:118;6947:474;;;;;:::o;7427:323::-;7483:6;7532:2;7520:9;7511:7;7507:23;7503:32;7500:119;;;7538:79;;:::i;:::-;7500:119;7658:1;7683:50;7725:7;7716:6;7705:9;7701:22;7683:50;:::i;:::-;7673:60;;7629:114;7427:323;;;;:::o;7756:327::-;7814:6;7863:2;7851:9;7842:7;7838:23;7834:32;7831:119;;;7869:79;;:::i;:::-;7831:119;7989:1;8014:52;8058:7;8049:6;8038:9;8034:22;8014:52;:::i;:::-;8004:62;;7960:116;7756:327;;;;:::o;8089:349::-;8158:6;8207:2;8195:9;8186:7;8182:23;8178:32;8175:119;;;8213:79;;:::i;:::-;8175:119;8333:1;8358:63;8413:7;8404:6;8393:9;8389:22;8358:63;:::i;:::-;8348:73;;8304:127;8089:349;;;;:::o;8444:509::-;8513:6;8562:2;8550:9;8541:7;8537:23;8533:32;8530:119;;;8568:79;;:::i;:::-;8530:119;8716:1;8705:9;8701:17;8688:31;8746:18;8738:6;8735:30;8732:117;;;8768:79;;:::i;:::-;8732:117;8873:63;8928:7;8919:6;8908:9;8904:22;8873:63;:::i;:::-;8863:73;;8659:287;8444:509;;;;:::o;8959:329::-;9018:6;9067:2;9055:9;9046:7;9042:23;9038:32;9035:119;;;9073:79;;:::i;:::-;9035:119;9193:1;9218:53;9263:7;9254:6;9243:9;9239:22;9218:53;:::i;:::-;9208:63;;9164:117;8959:329;;;;:::o;9294:118::-;9381:24;9399:5;9381:24;:::i;:::-;9376:3;9369:37;9294:118;;:::o;9418:109::-;9499:21;9514:5;9499:21;:::i;:::-;9494:3;9487:34;9418:109;;:::o;9533:360::-;9619:3;9647:38;9679:5;9647:38;:::i;:::-;9701:70;9764:6;9759:3;9701:70;:::i;:::-;9694:77;;9780:52;9825:6;9820:3;9813:4;9806:5;9802:16;9780:52;:::i;:::-;9857:29;9879:6;9857:29;:::i;:::-;9852:3;9848:39;9841:46;;9623:270;9533:360;;;;:::o;9899:161::-;10001:52;10047:5;10001:52;:::i;:::-;9996:3;9989:65;9899:161;;:::o;10066:364::-;10154:3;10182:39;10215:5;10182:39;:::i;:::-;10237:71;10301:6;10296:3;10237:71;:::i;:::-;10230:78;;10317:52;10362:6;10357:3;10350:4;10343:5;10339:16;10317:52;:::i;:::-;10394:29;10416:6;10394:29;:::i;:::-;10389:3;10385:39;10378:46;;10158:272;10066:364;;;;:::o;10436:377::-;10542:3;10570:39;10603:5;10570:39;:::i;:::-;10625:89;10707:6;10702:3;10625:89;:::i;:::-;10618:96;;10723:52;10768:6;10763:3;10756:4;10749:5;10745:16;10723:52;:::i;:::-;10800:6;10795:3;10791:16;10784:23;;10546:267;10436:377;;;;:::o;10843:845::-;10946:3;10983:5;10977:12;11012:36;11038:9;11012:36;:::i;:::-;11064:89;11146:6;11141:3;11064:89;:::i;:::-;11057:96;;11184:1;11173:9;11169:17;11200:1;11195:137;;;;11346:1;11341:341;;;;11162:520;;11195:137;11279:4;11275:9;11264;11260:25;11255:3;11248:38;11315:6;11310:3;11306:16;11299:23;;11195:137;;11341:341;11408:38;11440:5;11408:38;:::i;:::-;11468:1;11482:154;11496:6;11493:1;11490:13;11482:154;;;11570:7;11564:14;11560:1;11555:3;11551:11;11544:35;11620:1;11611:7;11607:15;11596:26;;11518:4;11515:1;11511:12;11506:17;;11482:154;;;11665:6;11660:3;11656:16;11649:23;;11348:334;;11162:520;;10950:738;;10843:845;;;;:::o;11694:365::-;11836:3;11857:66;11921:1;11916:3;11857:66;:::i;:::-;11850:73;;11932:93;12021:3;11932:93;:::i;:::-;12050:2;12045:3;12041:12;12034:19;;11694:365;;;:::o;12065:366::-;12207:3;12228:67;12292:2;12287:3;12228:67;:::i;:::-;12221:74;;12304:93;12393:3;12304:93;:::i;:::-;12422:2;12417:3;12413:12;12406:19;;12065:366;;;:::o;12437:::-;12579:3;12600:67;12664:2;12659:3;12600:67;:::i;:::-;12593:74;;12676:93;12765:3;12676:93;:::i;:::-;12794:2;12789:3;12785:12;12778:19;;12437:366;;;:::o;12809:::-;12951:3;12972:67;13036:2;13031:3;12972:67;:::i;:::-;12965:74;;13048:93;13137:3;13048:93;:::i;:::-;13166:2;13161:3;13157:12;13150:19;;12809:366;;;:::o;13181:::-;13323:3;13344:67;13408:2;13403:3;13344:67;:::i;:::-;13337:74;;13420:93;13509:3;13420:93;:::i;:::-;13538:2;13533:3;13529:12;13522:19;;13181:366;;;:::o;13553:::-;13695:3;13716:67;13780:2;13775:3;13716:67;:::i;:::-;13709:74;;13792:93;13881:3;13792:93;:::i;:::-;13910:2;13905:3;13901:12;13894:19;;13553:366;;;:::o;13925:::-;14067:3;14088:67;14152:2;14147:3;14088:67;:::i;:::-;14081:74;;14164:93;14253:3;14164:93;:::i;:::-;14282:2;14277:3;14273:12;14266:19;;13925:366;;;:::o;14297:::-;14439:3;14460:67;14524:2;14519:3;14460:67;:::i;:::-;14453:74;;14536:93;14625:3;14536:93;:::i;:::-;14654:2;14649:3;14645:12;14638:19;;14297:366;;;:::o;14669:::-;14811:3;14832:67;14896:2;14891:3;14832:67;:::i;:::-;14825:74;;14908:93;14997:3;14908:93;:::i;:::-;15026:2;15021:3;15017:12;15010:19;;14669:366;;;:::o;15041:::-;15183:3;15204:67;15268:2;15263:3;15204:67;:::i;:::-;15197:74;;15280:93;15369:3;15280:93;:::i;:::-;15398:2;15393:3;15389:12;15382:19;;15041:366;;;:::o;15413:::-;15555:3;15576:67;15640:2;15635:3;15576:67;:::i;:::-;15569:74;;15652:93;15741:3;15652:93;:::i;:::-;15770:2;15765:3;15761:12;15754:19;;15413:366;;;:::o;15785:::-;15927:3;15948:67;16012:2;16007:3;15948:67;:::i;:::-;15941:74;;16024:93;16113:3;16024:93;:::i;:::-;16142:2;16137:3;16133:12;16126:19;;15785:366;;;:::o;16157:::-;16299:3;16320:67;16384:2;16379:3;16320:67;:::i;:::-;16313:74;;16396:93;16485:3;16396:93;:::i;:::-;16514:2;16509:3;16505:12;16498:19;;16157:366;;;:::o;16529:402::-;16689:3;16710:85;16792:2;16787:3;16710:85;:::i;:::-;16703:92;;16804:93;16893:3;16804:93;:::i;:::-;16922:2;16917:3;16913:12;16906:19;;16529:402;;;:::o;16937:366::-;17079:3;17100:67;17164:2;17159:3;17100:67;:::i;:::-;17093:74;;17176:93;17265:3;17176:93;:::i;:::-;17294:2;17289:3;17285:12;17278:19;;16937:366;;;:::o;17309:::-;17451:3;17472:67;17536:2;17531:3;17472:67;:::i;:::-;17465:74;;17548:93;17637:3;17548:93;:::i;:::-;17666:2;17661:3;17657:12;17650:19;;17309:366;;;:::o;17681:::-;17823:3;17844:67;17908:2;17903:3;17844:67;:::i;:::-;17837:74;;17920:93;18009:3;17920:93;:::i;:::-;18038:2;18033:3;18029:12;18022:19;;17681:366;;;:::o;18053:118::-;18140:24;18158:5;18140:24;:::i;:::-;18135:3;18128:37;18053:118;;:::o;18177:157::-;18282:45;18302:24;18320:5;18302:24;:::i;:::-;18282:45;:::i;:::-;18277:3;18270:58;18177:157;;:::o;18340:589::-;18565:3;18587:95;18678:3;18669:6;18587:95;:::i;:::-;18580:102;;18699:95;18790:3;18781:6;18699:95;:::i;:::-;18692:102;;18811:92;18899:3;18890:6;18811:92;:::i;:::-;18804:99;;18920:3;18913:10;;18340:589;;;;;;:::o;18935:522::-;19148:3;19170:148;19314:3;19170:148;:::i;:::-;19163:155;;19328:75;19399:3;19390:6;19328:75;:::i;:::-;19428:2;19423:3;19419:12;19412:19;;19448:3;19441:10;;18935:522;;;;:::o;19463:222::-;19556:4;19594:2;19583:9;19579:18;19571:26;;19607:71;19675:1;19664:9;19660:17;19651:6;19607:71;:::i;:::-;19463:222;;;;:::o;19691:640::-;19886:4;19924:3;19913:9;19909:19;19901:27;;19938:71;20006:1;19995:9;19991:17;19982:6;19938:71;:::i;:::-;20019:72;20087:2;20076:9;20072:18;20063:6;20019:72;:::i;:::-;20101;20169:2;20158:9;20154:18;20145:6;20101:72;:::i;:::-;20220:9;20214:4;20210:20;20205:2;20194:9;20190:18;20183:48;20248:76;20319:4;20310:6;20248:76;:::i;:::-;20240:84;;19691:640;;;;;;;:::o;20337:210::-;20424:4;20462:2;20451:9;20447:18;20439:26;;20475:65;20537:1;20526:9;20522:17;20513:6;20475:65;:::i;:::-;20337:210;;;;:::o;20553:252::-;20661:4;20699:2;20688:9;20684:18;20676:26;;20712:86;20795:1;20784:9;20780:17;20771:6;20712:86;:::i;:::-;20553:252;;;;:::o;20811:313::-;20924:4;20962:2;20951:9;20947:18;20939:26;;21011:9;21005:4;21001:20;20997:1;20986:9;20982:17;20975:47;21039:78;21112:4;21103:6;21039:78;:::i;:::-;21031:86;;20811:313;;;;:::o;21130:419::-;21296:4;21334:2;21323:9;21319:18;21311:26;;21383:9;21377:4;21373:20;21369:1;21358:9;21354:17;21347:47;21411:131;21537:4;21411:131;:::i;:::-;21403:139;;21130:419;;;:::o;21555:::-;21721:4;21759:2;21748:9;21744:18;21736:26;;21808:9;21802:4;21798:20;21794:1;21783:9;21779:17;21772:47;21836:131;21962:4;21836:131;:::i;:::-;21828:139;;21555:419;;;:::o;21980:::-;22146:4;22184:2;22173:9;22169:18;22161:26;;22233:9;22227:4;22223:20;22219:1;22208:9;22204:17;22197:47;22261:131;22387:4;22261:131;:::i;:::-;22253:139;;21980:419;;;:::o;22405:::-;22571:4;22609:2;22598:9;22594:18;22586:26;;22658:9;22652:4;22648:20;22644:1;22633:9;22629:17;22622:47;22686:131;22812:4;22686:131;:::i;:::-;22678:139;;22405:419;;;:::o;22830:::-;22996:4;23034:2;23023:9;23019:18;23011:26;;23083:9;23077:4;23073:20;23069:1;23058:9;23054:17;23047:47;23111:131;23237:4;23111:131;:::i;:::-;23103:139;;22830:419;;;:::o;23255:::-;23421:4;23459:2;23448:9;23444:18;23436:26;;23508:9;23502:4;23498:20;23494:1;23483:9;23479:17;23472:47;23536:131;23662:4;23536:131;:::i;:::-;23528:139;;23255:419;;;:::o;23680:::-;23846:4;23884:2;23873:9;23869:18;23861:26;;23933:9;23927:4;23923:20;23919:1;23908:9;23904:17;23897:47;23961:131;24087:4;23961:131;:::i;:::-;23953:139;;23680:419;;;:::o;24105:::-;24271:4;24309:2;24298:9;24294:18;24286:26;;24358:9;24352:4;24348:20;24344:1;24333:9;24329:17;24322:47;24386:131;24512:4;24386:131;:::i;:::-;24378:139;;24105:419;;;:::o;24530:::-;24696:4;24734:2;24723:9;24719:18;24711:26;;24783:9;24777:4;24773:20;24769:1;24758:9;24754:17;24747:47;24811:131;24937:4;24811:131;:::i;:::-;24803:139;;24530:419;;;:::o;24955:::-;25121:4;25159:2;25148:9;25144:18;25136:26;;25208:9;25202:4;25198:20;25194:1;25183:9;25179:17;25172:47;25236:131;25362:4;25236:131;:::i;:::-;25228:139;;24955:419;;;:::o;25380:::-;25546:4;25584:2;25573:9;25569:18;25561:26;;25633:9;25627:4;25623:20;25619:1;25608:9;25604:17;25597:47;25661:131;25787:4;25661:131;:::i;:::-;25653:139;;25380:419;;;:::o;25805:::-;25971:4;26009:2;25998:9;25994:18;25986:26;;26058:9;26052:4;26048:20;26044:1;26033:9;26029:17;26022:47;26086:131;26212:4;26086:131;:::i;:::-;26078:139;;25805:419;;;:::o;26230:::-;26396:4;26434:2;26423:9;26419:18;26411:26;;26483:9;26477:4;26473:20;26469:1;26458:9;26454:17;26447:47;26511:131;26637:4;26511:131;:::i;:::-;26503:139;;26230:419;;;:::o;26655:::-;26821:4;26859:2;26848:9;26844:18;26836:26;;26908:9;26902:4;26898:20;26894:1;26883:9;26879:17;26872:47;26936:131;27062:4;26936:131;:::i;:::-;26928:139;;26655:419;;;:::o;27080:::-;27246:4;27284:2;27273:9;27269:18;27261:26;;27333:9;27327:4;27323:20;27319:1;27308:9;27304:17;27297:47;27361:131;27487:4;27361:131;:::i;:::-;27353:139;;27080:419;;;:::o;27505:::-;27671:4;27709:2;27698:9;27694:18;27686:26;;27758:9;27752:4;27748:20;27744:1;27733:9;27729:17;27722:47;27786:131;27912:4;27786:131;:::i;:::-;27778:139;;27505:419;;;:::o;27930:222::-;28023:4;28061:2;28050:9;28046:18;28038:26;;28074:71;28142:1;28131:9;28127:17;28118:6;28074:71;:::i;:::-;27930:222;;;;:::o;28158:129::-;28192:6;28219:20;;:::i;:::-;28209:30;;28248:33;28276:4;28268:6;28248:33;:::i;:::-;28158:129;;;:::o;28293:75::-;28326:6;28359:2;28353:9;28343:19;;28293:75;:::o;28374:307::-;28435:4;28525:18;28517:6;28514:30;28511:56;;;28547:18;;:::i;:::-;28511:56;28585:29;28607:6;28585:29;:::i;:::-;28577:37;;28669:4;28663;28659:15;28651:23;;28374:307;;;:::o;28687:308::-;28749:4;28839:18;28831:6;28828:30;28825:56;;;28861:18;;:::i;:::-;28825:56;28899:29;28921:6;28899:29;:::i;:::-;28891:37;;28983:4;28977;28973:15;28965:23;;28687:308;;;:::o;29001:141::-;29050:4;29073:3;29065:11;;29096:3;29093:1;29086:14;29130:4;29127:1;29117:18;29109:26;;29001:141;;;:::o;29148:98::-;29199:6;29233:5;29227:12;29217:22;;29148:98;;;:::o;29252:99::-;29304:6;29338:5;29332:12;29322:22;;29252:99;;;:::o;29357:168::-;29440:11;29474:6;29469:3;29462:19;29514:4;29509:3;29505:14;29490:29;;29357:168;;;;:::o;29531:169::-;29615:11;29649:6;29644:3;29637:19;29689:4;29684:3;29680:14;29665:29;;29531:169;;;;:::o;29706:148::-;29808:11;29845:3;29830:18;;29706:148;;;;:::o;29860:305::-;29900:3;29919:20;29937:1;29919:20;:::i;:::-;29914:25;;29953:20;29971:1;29953:20;:::i;:::-;29948:25;;30107:1;30039:66;30035:74;30032:1;30029:81;30026:107;;;30113:18;;:::i;:::-;30026:107;30157:1;30154;30150:9;30143:16;;29860:305;;;;:::o;30171:185::-;30211:1;30228:20;30246:1;30228:20;:::i;:::-;30223:25;;30262:20;30280:1;30262:20;:::i;:::-;30257:25;;30301:1;30291:35;;30306:18;;:::i;:::-;30291:35;30348:1;30345;30341:9;30336:14;;30171:185;;;;:::o;30362:191::-;30402:4;30422:20;30440:1;30422:20;:::i;:::-;30417:25;;30456:20;30474:1;30456:20;:::i;:::-;30451:25;;30495:1;30492;30489:8;30486:34;;;30500:18;;:::i;:::-;30486:34;30545:1;30542;30538:9;30530:17;;30362:191;;;;:::o;30559:96::-;30596:7;30625:24;30643:5;30625:24;:::i;:::-;30614:35;;30559:96;;;:::o;30661:90::-;30695:7;30738:5;30731:13;30724:21;30713:32;;30661:90;;;:::o;30757:149::-;30793:7;30833:66;30826:5;30822:78;30811:89;;30757:149;;;:::o;30912:126::-;30949:7;30989:42;30982:5;30978:54;30967:65;;30912:126;;;:::o;31044:77::-;31081:7;31110:5;31099:16;;31044:77;;;:::o;31127:141::-;31192:9;31225:37;31256:5;31225:37;:::i;:::-;31212:50;;31127:141;;;:::o;31274:126::-;31324:9;31357:37;31388:5;31357:37;:::i;:::-;31344:50;;31274:126;;;:::o;31406:113::-;31456:9;31489:24;31507:5;31489:24;:::i;:::-;31476:37;;31406:113;;;:::o;31525:154::-;31609:6;31604:3;31599;31586:30;31671:1;31662:6;31657:3;31653:16;31646:27;31525:154;;;:::o;31685:307::-;31753:1;31763:113;31777:6;31774:1;31771:13;31763:113;;;31862:1;31857:3;31853:11;31847:18;31843:1;31838:3;31834:11;31827:39;31799:2;31796:1;31792:10;31787:15;;31763:113;;;31894:6;31891:1;31888:13;31885:101;;;31974:1;31965:6;31960:3;31956:16;31949:27;31885:101;31734:258;31685:307;;;:::o;31998:320::-;32042:6;32079:1;32073:4;32069:12;32059:22;;32126:1;32120:4;32116:12;32147:18;32137:81;;32203:4;32195:6;32191:17;32181:27;;32137:81;32265:2;32257:6;32254:14;32234:18;32231:38;32228:84;;;32284:18;;:::i;:::-;32228:84;32049:269;31998:320;;;:::o;32324:281::-;32407:27;32429:4;32407:27;:::i;:::-;32399:6;32395:40;32537:6;32525:10;32522:22;32501:18;32489:10;32486:34;32483:62;32480:88;;;32548:18;;:::i;:::-;32480:88;32588:10;32584:2;32577:22;32367:238;32324:281;;:::o;32611:233::-;32650:3;32673:24;32691:5;32673:24;:::i;:::-;32664:33;;32719:66;32712:5;32709:77;32706:103;;;32789:18;;:::i;:::-;32706:103;32836:1;32829:5;32825:13;32818:20;;32611:233;;;:::o;32850:79::-;32889:7;32918:5;32907:16;;32850:79;;;:::o;32935:176::-;32967:1;32984:20;33002:1;32984:20;:::i;:::-;32979:25;;33018:20;33036:1;33018:20;:::i;:::-;33013:25;;33057:1;33047:35;;33062:18;;:::i;:::-;33047:35;33103:1;33100;33096:9;33091:14;;32935:176;;;;:::o;33117:180::-;33165:77;33162:1;33155:88;33262:4;33259:1;33252:15;33286:4;33283:1;33276:15;33303:180;33351:77;33348:1;33341:88;33448:4;33445:1;33438:15;33472:4;33469:1;33462:15;33489:180;33537:77;33534:1;33527:88;33634:4;33631:1;33624:15;33658:4;33655:1;33648:15;33675:180;33723:77;33720:1;33713:88;33820:4;33817:1;33810:15;33844:4;33841:1;33834:15;33861:180;33909:77;33906:1;33899:88;34006:4;34003:1;33996:15;34030:4;34027:1;34020:15;34047:117;34156:1;34153;34146:12;34170:117;34279:1;34276;34269:12;34293:117;34402:1;34399;34392:12;34416:117;34525:1;34522;34515:12;34539:117;34648:1;34645;34638:12;34662:117;34771:1;34768;34761:12;34785:102;34826:6;34877:2;34873:7;34868:2;34861:5;34857:14;34853:28;34843:38;;34785:102;;;:::o;34893:156::-;35033:8;35029:1;35021:6;35017:14;35010:32;34893:156;:::o;35055:181::-;35195:33;35191:1;35183:6;35179:14;35172:57;35055:181;:::o;35242:237::-;35382:34;35378:1;35370:6;35366:14;35359:58;35451:20;35446:2;35438:6;35434:15;35427:45;35242:237;:::o;35485:225::-;35625:34;35621:1;35613:6;35609:14;35602:58;35694:8;35689:2;35681:6;35677:15;35670:33;35485:225;:::o;35716:224::-;35856:34;35852:1;35844:6;35840:14;35833:58;35925:7;35920:2;35912:6;35908:15;35901:32;35716:224;:::o;35946:178::-;36086:30;36082:1;36074:6;36070:14;36063:54;35946:178;:::o;36130:223::-;36270:34;36266:1;36258:6;36254:14;36247:58;36339:6;36334:2;36326:6;36322:15;36315:31;36130:223;:::o;36359:175::-;36499:27;36495:1;36487:6;36483:14;36476:51;36359:175;:::o;36540:228::-;36680:34;36676:1;36668:6;36664:14;36657:58;36749:11;36744:2;36736:6;36732:15;36725:36;36540:228;:::o;36774:168::-;36914:20;36910:1;36902:6;36898:14;36891:44;36774:168;:::o;36948:249::-;37088:34;37084:1;37076:6;37072:14;37065:58;37157:32;37152:2;37144:6;37140:15;37133:57;36948:249;:::o;37203:182::-;37343:34;37339:1;37331:6;37327:14;37320:58;37203:182;:::o;37391:::-;37531:34;37527:1;37519:6;37515:14;37508:58;37391:182;:::o;37579:167::-;37719:19;37715:1;37707:6;37703:14;37696:43;37579:167;:::o;37752:174::-;37892:26;37888:1;37880:6;37876:14;37869:50;37752:174;:::o;37932:220::-;38072:34;38068:1;38060:6;38056:14;38049:58;38141:3;38136:2;38128:6;38124:15;38117:28;37932:220;:::o;38158:233::-;38298:34;38294:1;38286:6;38282:14;38275:58;38367:16;38362:2;38354:6;38350:15;38343:41;38158:233;:::o;38397:122::-;38470:24;38488:5;38470:24;:::i;:::-;38463:5;38460:35;38450:63;;38509:1;38506;38499:12;38450:63;38397:122;:::o;38525:116::-;38595:21;38610:5;38595:21;:::i;:::-;38588:5;38585:32;38575:60;;38631:1;38628;38621:12;38575:60;38525:116;:::o;38647:120::-;38719:23;38736:5;38719:23;:::i;:::-;38712:5;38709:34;38699:62;;38757:1;38754;38747:12;38699:62;38647:120;:::o;38773:122::-;38846:24;38864:5;38846:24;:::i;:::-;38839:5;38836:35;38826:63;;38885:1;38882;38875:12;38826:63;38773:122;:::o

Swarm Source

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