ETH Price: $3,335.13 (-1.25%)

Token

Average PFPs (AVGP)
 

Overview

Max Total Supply

2,584 AVGP

Holders

550

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
*❤️💰️🎒️.eth
Balance
12 AVGP
0x2c92c17688a9785381943033763874c0f88c31a5
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:
AveragePFPs

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 13: AveragePFP.sol
// SPDX-License-Identifier: MIT

/*
Average Creatures PFPs.
*/

pragma solidity >=0.8.9 <0.9.0;

import "./ERC721.sol";
import "./Counters.sol";
import "./Ownable.sol";
import "./ReentrancyGuard.sol";

abstract contract CollectionContract {
   function balanceOf(address owner) external virtual view returns (uint256 balance);
   function walletOfOwner(address _owner) public virtual view returns (uint256[] memory);
   function ownerOf(uint256 tokenId) public virtual view returns (address tokenOwner);
}

contract AveragePFPs is ERC721, Ownable, ReentrancyGuard {

  using Strings for uint256;
  using Counters for Counters.Counter;
  Counters.Counter private supply;

  string public uriPrefix = "";
  string public uriSuffix = ".json";
  uint256 public maxSupply;
  uint256[40] claimedBitMap;
  bool public claimActive;

  address t1 = 0xdF0bb728394E96F202E4D3607D19fC7b826eB272;

  // Average Creatures Contract
  CollectionContract private _avgcreatures = CollectionContract(0xbB00B6B675b9a8Db9aA3b68Bf0aAc5e25f901656);

  constructor(
    string memory _tokenName,
    string memory _tokenSymbol,
    uint256 _maxSupply
  ) ERC721(_tokenName, _tokenSymbol) {
    maxSupply = _maxSupply;
  }

    function totalSupply() public view returns (uint256) {
        return supply.current();
    }

    // Open the doors
    function setClaimActive(bool claimActive_) public onlyOwner {
        claimActive = claimActive_;
    }

    // Check Claimed List
    function isClaimed(uint256 tokenId) public view returns (bool) {
        uint256 claimedWordIndex = tokenId / 256;
        uint256 claimedBitIndex = tokenId % 256;
        uint256 claimedWord = claimedBitMap[claimedWordIndex];
        uint256 mask = (1 << claimedBitIndex);
        return claimedWord & mask == mask;
    }

    // Claimed list
    function _setClaimed(uint256 tokenId) internal {
        uint256 claimedWordIndex = tokenId / 256;
        uint256 claimedBitIndex = tokenId % 256;
        claimedBitMap[claimedWordIndex] = claimedBitMap[claimedWordIndex] | (1 << claimedBitIndex);
    }

    function readAvgTokens(address _target) public view returns (uint256[] memory) {
      return _avgcreatures.walletOfOwner(_target);
    }

    // Claim a single PFP by sending a TokenID, only owner can call it
    function claimSingle(uint256 tokenid) external nonReentrant {
      require(_avgcreatures.balanceOf(msg.sender) > 0, "No Creatures found on this wallet.");
      require(_avgcreatures.ownerOf(tokenid) == msg.sender, "Token doesn't belong to wallet.");
      require(claimActive, "PFP Claim is paused.");
      if (!isClaimed(tokenid)) {
          supply.increment();
          _safeMint(msg.sender, tokenid);
          _setClaimed(tokenid);
        } 
    }

    // Claim many PFPs with a Token array (1,2,3...), only owner can call it
    function claimMany(uint256[] memory _mintArray) external nonReentrant {
      require(_avgcreatures.balanceOf(msg.sender) > 0, "No Creatures found on this wallet.");
      require(claimActive, "PFP Claim is paused.");
      for (uint256 i = 0; i <_mintArray.length; i++) {
        if (!isClaimed(_mintArray[i]) && _avgcreatures.ownerOf(_mintArray[i]) == msg.sender) {
          supply.increment();
          _safeMint(msg.sender, _mintArray[i]);
          _setClaimed(_mintArray[i]);
        } 
      }
    }

    // Our 7th District Judge will help
    function smallClaimsCourt(address _receiver, uint256 avgid) public onlyOwner {
        require(_avgcreatures.ownerOf(avgid) == _receiver, "Token doesn't belong to wallet.");
        if (!isClaimed(avgid)) {
          supply.increment();
          _safeMint(_receiver, avgid);
          _setClaimed(avgid);
        } 
    }

    function walletOfOwner(address _owner)
      public
      view
      returns (uint256[] memory)
    {
      uint256 ownerTokenCount = balanceOf(_owner);
      uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
      uint256 currentTokenId = 1;
      uint256 ownedTokenIndex = 0;

      while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
        address currentTokenOwner = ownerOf(currentTokenId);

        if (currentTokenOwner == _owner) {
          ownedTokenIds[ownedTokenIndex] = currentTokenId;

          ownedTokenIndex++;
        }

        currentTokenId++;
      }

      return ownedTokenIds;
    }

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

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

    // Pre
    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
      uriPrefix = _uriPrefix;
    }
    // Not Pre
    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
      uriSuffix = _uriSuffix;
    }

    // Read URI
    function _baseURI() internal view virtual override returns (string memory) {
      return uriPrefix;
    }

    // To avoid happy accidents in Average Town
    function withdraw() public onlyOwner nonReentrant {
    require(payable(t1).send(address(this).balance));
  }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 3 of 13: 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 4 of 13: Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 5 of 13: 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 6 of 13: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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: balance query for the zero address");
        return _balances[owner];
    }

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _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: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

File 7 of 13: 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 8 of 13: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

File 11 of 13: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

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

File 12 of 13: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"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":"claimActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_mintArray","type":"uint256[]"}],"name":"claimMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"claimSingle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"readAvgTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"bool","name":"claimActive_","type":"bool"}],"name":"setClaimActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"avgid","type":"uint256"}],"name":"smallClaimsCourt","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"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600990805190602001906200002b92919062000293565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200007992919062000293565b5073df0bb728394e96f202e4d3607d19fc7b826eb272603460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bb00b6b675b9a8db9aa3b68bf0aac5e25f901656603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013157600080fd5b5060405162004a5e38038062004a5e83398181016040528101906200015791906200051b565b828281600090805190602001906200017192919062000293565b5080600190805190602001906200018a92919062000293565b505050620001ad620001a1620001c560201b60201c565b620001cd60201b60201c565b600160078190555080600b819055505050506200061a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002a190620005e4565b90600052602060002090601f016020900481019282620002c5576000855562000311565b82601f10620002e057805160ff191683800117855562000311565b8280016001018555821562000311579182015b8281111562000310578251825591602001919060010190620002f3565b5b50905062000320919062000324565b5090565b5b808211156200033f57600081600090555060010162000325565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003ac8262000361565b810181811067ffffffffffffffff82111715620003ce57620003cd62000372565b5b80604052505050565b6000620003e362000343565b9050620003f18282620003a1565b919050565b600067ffffffffffffffff82111562000414576200041362000372565b5b6200041f8262000361565b9050602081019050919050565b60005b838110156200044c5780820151818401526020810190506200042f565b838111156200045c576000848401525b50505050565b6000620004796200047384620003f6565b620003d7565b9050828152602081018484840111156200049857620004976200035c565b5b620004a58482856200042c565b509392505050565b600082601f830112620004c557620004c462000357565b5b8151620004d784826020860162000462565b91505092915050565b6000819050919050565b620004f581620004e0565b81146200050157600080fd5b50565b6000815190506200051581620004ea565b92915050565b6000806000606084860312156200053757620005366200034d565b5b600084015167ffffffffffffffff81111562000558576200055762000352565b5b6200056686828701620004ad565b935050602084015167ffffffffffffffff8111156200058a576200058962000352565b5b6200059886828701620004ad565b9250506040620005ab8682870162000504565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005fd57607f821691505b60208210811415620006145762000613620005b5565b5b50919050565b614434806200062a6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f578063b88d4fde116100a2578063d5abeb0111610071578063d5abeb0114610554578063e985e9c514610572578063f0d9fab6146105a2578063f2fde38b146105d2576101e5565b8063b88d4fde146104ce578063c87b56dd146104ea578063d0ff02161461051a578063d4a6a2fd14610536576101e5565b8063925489a8116100de578063925489a81461044857806395d89b41146104645780639e34070f14610482578063a22cb465146104b2576101e5565b8063715018a6146103e857806373417b09146103f25780637ec4a6591461040e5780638da5cb5b1461042a576101e5565b806323b872dd116101875780635503a0e8116101565780635503a0e81461034c57806362b99ad41461036a5780636352211e1461038857806370a08231146103b8576101e5565b806323b872dd146102da5780633ccfd60b146102f657806342842e0e14610300578063438b63001461031c576101e5565b8063095ea7b3116101c3578063095ea7b314610268578063133859ae1461028457806316ba10e0146102a057806318160ddd146102bc576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190612bd6565b6105ee565b6040516102119190612c1e565b60405180910390f35b6102226106d0565b60405161022f9190612cd2565b60405180910390f35b610252600480360381019061024d9190612d2a565b610762565b60405161025f9190612d98565b60405180910390f35b610282600480360381019061027d9190612ddf565b6107e7565b005b61029e60048036038101906102999190612ddf565b6108ff565b005b6102ba60048036038101906102b59190612f54565b610ac2565b005b6102c4610b58565b6040516102d19190612fac565b60405180910390f35b6102f460048036038101906102ef9190612fc7565b610b69565b005b6102fe610bc9565b005b61031a60048036038101906103159190612fc7565b610cfd565b005b6103366004803603810190610331919061301a565b610d1d565b6040516103439190613105565b60405180910390f35b610354610e28565b6040516103619190612cd2565b60405180910390f35b610372610eb6565b60405161037f9190612cd2565b60405180910390f35b6103a2600480360381019061039d9190612d2a565b610f44565b6040516103af9190612d98565b60405180910390f35b6103d260048036038101906103cd919061301a565b610ff6565b6040516103df9190612fac565b60405180910390f35b6103f06110ae565b005b61040c60048036038101906104079190613153565b611136565b005b61042860048036038101906104239190612f54565b6111cf565b005b610432611265565b60405161043f9190612d98565b60405180910390f35b610462600480360381019061045d9190613248565b61128f565b005b61046c6115ba565b6040516104799190612cd2565b60405180910390f35b61049c60048036038101906104979190612d2a565b61164c565b6040516104a99190612c1e565b60405180910390f35b6104cc60048036038101906104c79190613291565b6116a4565b005b6104e860048036038101906104e39190613372565b6116ba565b005b61050460048036038101906104ff9190612d2a565b61171c565b6040516105119190612cd2565b60405180910390f35b610534600480360381019061052f9190612d2a565b6117c6565b005b61053e611a9e565b60405161054b9190612c1e565b60405180910390f35b61055c611ab1565b6040516105699190612fac565b60405180910390f35b61058c600480360381019061058791906133f5565b611ab7565b6040516105999190612c1e565b60405180910390f35b6105bc60048036038101906105b7919061301a565b611b4b565b6040516105c99190613105565b60405180910390f35b6105ec60048036038101906105e7919061301a565b611c04565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c957506106c882611cfc565b5b9050919050565b6060600080546106df90613464565b80601f016020809104026020016040519081016040528092919081815260200182805461070b90613464565b80156107585780601f1061072d57610100808354040283529160200191610758565b820191906000526020600020905b81548152906001019060200180831161073b57829003601f168201915b5050505050905090565b600061076d82611d66565b6107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390613508565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107f282610f44565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a9061359a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610882611dd2565b73ffffffffffffffffffffffffffffffffffffffff1614806108b157506108b0816108ab611dd2565b611ab7565b5b6108f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e79061362c565b60405180910390fd5b6108fa8383611dda565b505050565b610907611dd2565b73ffffffffffffffffffffffffffffffffffffffff16610925611265565b73ffffffffffffffffffffffffffffffffffffffff161461097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613698565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016109ed9190612fac565b60206040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d91906136cd565b73ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90613746565b60405180910390fd5b610a9c8161164c565b610abe57610aaa6008611e93565b610ab48282611ea9565b610abd81611ec7565b5b5050565b610aca611dd2565b73ffffffffffffffffffffffffffffffffffffffff16610ae8611265565b73ffffffffffffffffffffffffffffffffffffffff1614610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3590613698565b60405180910390fd5b80600a9080519060200190610b54929190612ac7565b5050565b6000610b646008611f25565b905090565b610b7a610b74611dd2565b82611f33565b610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb0906137d8565b60405180910390fd5b610bc4838383612011565b505050565b610bd1611dd2565b73ffffffffffffffffffffffffffffffffffffffff16610bef611265565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90613698565b60405180910390fd5b60026007541415610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290613844565b60405180910390fd5b6002600781905550603460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610cf357600080fd5b6001600781905550565b610d18838383604051806020016040528060008152506116ba565b505050565b60606000610d2a83610ff6565b905060008167ffffffffffffffff811115610d4857610d47612e29565b5b604051908082528060200260200182016040528015610d765781602001602082028036833780820191505090505b50905060006001905060005b8381108015610d935750600b548211155b15610e1c576000610da383610f44565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e085782848381518110610ded57610dec613864565b5b6020026020010181815250508180610e04906138c2565b9250505b8280610e13906138c2565b93505050610d82565b82945050505050919050565b600a8054610e3590613464565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6190613464565b8015610eae5780601f10610e8357610100808354040283529160200191610eae565b820191906000526020600020905b815481529060010190602001808311610e9157829003601f168201915b505050505081565b60098054610ec390613464565b80601f0160208091040260200160405190810160405280929190818152602001828054610eef90613464565b8015610f3c5780601f10610f1157610100808354040283529160200191610f3c565b820191906000526020600020905b815481529060010190602001808311610f1f57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe49061397d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613a0f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b6611dd2565b73ffffffffffffffffffffffffffffffffffffffff166110d4611265565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190613698565b60405180910390fd5b611134600061226d565b565b61113e611dd2565b73ffffffffffffffffffffffffffffffffffffffff1661115c611265565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990613698565b60405180910390fd5b80603460006101000a81548160ff02191690831515021790555050565b6111d7611dd2565b73ffffffffffffffffffffffffffffffffffffffff166111f5611265565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613698565b60405180910390fd5b8060099080519060200190611261929190612ac7565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260075414156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613844565b60405180910390fd5b60026007819055506000603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161133a9190612d98565b60206040518083038186803b15801561135257600080fd5b505afa158015611366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138a9190613a44565b116113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190613ae3565b60405180910390fd5b603460009054906101000a900460ff16611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090613b4f565b60405180910390fd5b60005b81518110156115ae5761144882828151811061143b5761143a613864565b5b602002602001015161164c565b15801561154457503373ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8484815181106114b8576114b7613864565b5b60200260200101516040518263ffffffff1660e01b81526004016114dc9190612fac565b60206040518083038186803b1580156114f457600080fd5b505afa158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c91906136cd565b73ffffffffffffffffffffffffffffffffffffffff16145b1561159b576115536008611e93565b6115773383838151811061156a57611569613864565b5b6020026020010151611ea9565b61159a82828151811061158d5761158c613864565b5b6020026020010151611ec7565b5b80806115a6906138c2565b91505061141c565b50600160078190555050565b6060600180546115c990613464565b80601f01602080910402602001604051908101604052809291908181526020018280546115f590613464565b80156116425780601f1061161757610100808354040283529160200191611642565b820191906000526020600020905b81548152906001019060200180831161162557829003601f168201915b5050505050905090565b6000806101008361165d9190613b9e565b905060006101008461166f9190613bcf565b90506000600c836028811061168757611686613864565b5b015490506000826001901b90508081831614945050505050919050565b6116b66116af611dd2565b8383612333565b5050565b6116cb6116c5611dd2565b83611f33565b61170a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611701906137d8565b60405180910390fd5b611716848484846124a0565b50505050565b606061172782611d66565b611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90613c72565b60405180910390fd5b60006117706124fc565b9050600081511161179057604051806020016040528060008152506117be565b8061179a8461258e565b600a6040516020016117ae93929190613d62565b6040516020818303038152906040525b915050919050565b6002600754141561180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390613844565b60405180910390fd5b60026007819055506000603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016118719190612d98565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190613a44565b11611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890613ae3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016119739190612fac565b60206040518083038186803b15801561198b57600080fd5b505afa15801561199f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c391906136cd565b73ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090613746565b60405180910390fd5b603460009054906101000a900460ff16611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90613b4f565b60405180910390fd5b611a718161164c565b611a9357611a7f6008611e93565b611a893382611ea9565b611a9281611ec7565b5b600160078190555050565b603460009054906101000a900460ff1681565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663438b6300836040518263ffffffff1660e01b8152600401611ba89190612d98565b60006040518083038186803b158015611bc057600080fd5b505afa158015611bd4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bfd9190613e2a565b9050919050565b611c0c611dd2565b73ffffffffffffffffffffffffffffffffffffffff16611c2a611265565b73ffffffffffffffffffffffffffffffffffffffff1614611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7790613698565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790613ee5565b60405180910390fd5b611cf98161226d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e4d83610f44565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001816000016000828254019250508190555050565b611ec38282604051806020016040528060008152506126ef565b5050565b600061010082611ed79190613b9e565b9050600061010083611ee99190613bcf565b9050806001901b600c8360288110611f0457611f03613864565b5b015417600c8360288110611f1b57611f1a613864565b5b0181905550505050565b600081600001549050919050565b6000611f3e82611d66565b611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613f77565b60405180910390fd5b6000611f8883610f44565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ff757508373ffffffffffffffffffffffffffffffffffffffff16611fdf84610762565b73ffffffffffffffffffffffffffffffffffffffff16145b8061200857506120078185611ab7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661203182610f44565b73ffffffffffffffffffffffffffffffffffffffff1614612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90614009565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061409b565b60405180910390fd5b61210283838361274a565b61210d600082611dda565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215d91906140bb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b491906140ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990614191565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124939190612c1e565b60405180910390a3505050565b6124ab848484612011565b6124b78484848461274f565b6124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90614223565b60405180910390fd5b50505050565b60606009805461250b90613464565b80601f016020809104026020016040519081016040528092919081815260200182805461253790613464565b80156125845780601f1061255957610100808354040283529160200191612584565b820191906000526020600020905b81548152906001019060200180831161256757829003601f168201915b5050505050905090565b606060008214156125d6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ea565b600082905060005b600082146126085780806125f1906138c2565b915050600a826126019190613b9e565b91506125de565b60008167ffffffffffffffff81111561262457612623612e29565b5b6040519080825280601f01601f1916602001820160405280156126565781602001600182028036833780820191505090505b5090505b600085146126e35760018261266f91906140bb565b9150600a8561267e9190613bcf565b603061268a91906140ef565b60f81b8183815181106126a05761269f613864565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126dc9190613b9e565b945061265a565b8093505050505b919050565b6126f983836128e6565b612706600084848461274f565b612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90614223565b60405180910390fd5b505050565b505050565b60006127708473ffffffffffffffffffffffffffffffffffffffff16612ab4565b156128d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612799611dd2565b8786866040518563ffffffff1660e01b81526004016127bb9493929190614298565b602060405180830381600087803b1580156127d557600080fd5b505af192505050801561280657506040513d601f19601f8201168201806040525081019061280391906142f9565b60015b612889573d8060008114612836576040519150601f19603f3d011682016040523d82523d6000602084013e61283b565b606091505b50600081511415612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890614223565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128de565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90614372565b60405180910390fd5b61295f81611d66565b1561299f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612996906143de565b60405180910390fd5b6129ab6000838361274a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129fb91906140ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ad390613464565b90600052602060002090601f016020900481019282612af55760008555612b3c565b82601f10612b0e57805160ff1916838001178555612b3c565b82800160010185558215612b3c579182015b82811115612b3b578251825591602001919060010190612b20565b5b509050612b499190612b4d565b5090565b5b80821115612b66576000816000905550600101612b4e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bb381612b7e565b8114612bbe57600080fd5b50565b600081359050612bd081612baa565b92915050565b600060208284031215612bec57612beb612b74565b5b6000612bfa84828501612bc1565b91505092915050565b60008115159050919050565b612c1881612c03565b82525050565b6000602082019050612c336000830184612c0f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c73578082015181840152602081019050612c58565b83811115612c82576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ca482612c39565b612cae8185612c44565b9350612cbe818560208601612c55565b612cc781612c88565b840191505092915050565b60006020820190508181036000830152612cec8184612c99565b905092915050565b6000819050919050565b612d0781612cf4565b8114612d1257600080fd5b50565b600081359050612d2481612cfe565b92915050565b600060208284031215612d4057612d3f612b74565b5b6000612d4e84828501612d15565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d8282612d57565b9050919050565b612d9281612d77565b82525050565b6000602082019050612dad6000830184612d89565b92915050565b612dbc81612d77565b8114612dc757600080fd5b50565b600081359050612dd981612db3565b92915050565b60008060408385031215612df657612df5612b74565b5b6000612e0485828601612dca565b9250506020612e1585828601612d15565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e6182612c88565b810181811067ffffffffffffffff82111715612e8057612e7f612e29565b5b80604052505050565b6000612e93612b6a565b9050612e9f8282612e58565b919050565b600067ffffffffffffffff821115612ebf57612ebe612e29565b5b612ec882612c88565b9050602081019050919050565b82818337600083830152505050565b6000612ef7612ef284612ea4565b612e89565b905082815260208101848484011115612f1357612f12612e24565b5b612f1e848285612ed5565b509392505050565b600082601f830112612f3b57612f3a612e1f565b5b8135612f4b848260208601612ee4565b91505092915050565b600060208284031215612f6a57612f69612b74565b5b600082013567ffffffffffffffff811115612f8857612f87612b79565b5b612f9484828501612f26565b91505092915050565b612fa681612cf4565b82525050565b6000602082019050612fc16000830184612f9d565b92915050565b600080600060608486031215612fe057612fdf612b74565b5b6000612fee86828701612dca565b9350506020612fff86828701612dca565b925050604061301086828701612d15565b9150509250925092565b6000602082840312156130305761302f612b74565b5b600061303e84828501612dca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61307c81612cf4565b82525050565b600061308e8383613073565b60208301905092915050565b6000602082019050919050565b60006130b282613047565b6130bc8185613052565b93506130c783613063565b8060005b838110156130f85781516130df8882613082565b97506130ea8361309a565b9250506001810190506130cb565b5085935050505092915050565b6000602082019050818103600083015261311f81846130a7565b905092915050565b61313081612c03565b811461313b57600080fd5b50565b60008135905061314d81613127565b92915050565b60006020828403121561316957613168612b74565b5b60006131778482850161313e565b91505092915050565b600067ffffffffffffffff82111561319b5761319a612e29565b5b602082029050602081019050919050565b600080fd5b60006131c46131bf84613180565b612e89565b905080838252602082019050602084028301858111156131e7576131e66131ac565b5b835b8181101561321057806131fc8882612d15565b8452602084019350506020810190506131e9565b5050509392505050565b600082601f83011261322f5761322e612e1f565b5b813561323f8482602086016131b1565b91505092915050565b60006020828403121561325e5761325d612b74565b5b600082013567ffffffffffffffff81111561327c5761327b612b79565b5b6132888482850161321a565b91505092915050565b600080604083850312156132a8576132a7612b74565b5b60006132b685828601612dca565b92505060206132c78582860161313e565b9150509250929050565b600067ffffffffffffffff8211156132ec576132eb612e29565b5b6132f582612c88565b9050602081019050919050565b6000613315613310846132d1565b612e89565b90508281526020810184848401111561333157613330612e24565b5b61333c848285612ed5565b509392505050565b600082601f83011261335957613358612e1f565b5b8135613369848260208601613302565b91505092915050565b6000806000806080858703121561338c5761338b612b74565b5b600061339a87828801612dca565b94505060206133ab87828801612dca565b93505060406133bc87828801612d15565b925050606085013567ffffffffffffffff8111156133dd576133dc612b79565b5b6133e987828801613344565b91505092959194509250565b6000806040838503121561340c5761340b612b74565b5b600061341a85828601612dca565b925050602061342b85828601612dca565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061347c57607f821691505b602082108114156134905761348f613435565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006134f2602c83612c44565b91506134fd82613496565b604082019050919050565b60006020820190508181036000830152613521816134e5565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613584602183612c44565b915061358f82613528565b604082019050919050565b600060208201905081810360008301526135b381613577565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613616603883612c44565b9150613621826135ba565b604082019050919050565b6000602082019050818103600083015261364581613609565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613682602083612c44565b915061368d8261364c565b602082019050919050565b600060208201905081810360008301526136b181613675565b9050919050565b6000815190506136c781612db3565b92915050565b6000602082840312156136e3576136e2612b74565b5b60006136f1848285016136b8565b91505092915050565b7f546f6b656e20646f65736e27742062656c6f6e6720746f2077616c6c65742e00600082015250565b6000613730601f83612c44565b915061373b826136fa565b602082019050919050565b6000602082019050818103600083015261375f81613723565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006137c2603183612c44565b91506137cd82613766565b604082019050919050565b600060208201905081810360008301526137f1816137b5565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061382e601f83612c44565b9150613839826137f8565b602082019050919050565b6000602082019050818103600083015261385d81613821565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138cd82612cf4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613900576138ff613893565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613967602983612c44565b91506139728261390b565b604082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006139f9602a83612c44565b9150613a048261399d565b604082019050919050565b60006020820190508181036000830152613a28816139ec565b9050919050565b600081519050613a3e81612cfe565b92915050565b600060208284031215613a5a57613a59612b74565b5b6000613a6884828501613a2f565b91505092915050565b7f4e6f2043726561747572657320666f756e64206f6e20746869732077616c6c6560008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613acd602283612c44565b9150613ad882613a71565b604082019050919050565b60006020820190508181036000830152613afc81613ac0565b9050919050565b7f50465020436c61696d206973207061757365642e000000000000000000000000600082015250565b6000613b39601483612c44565b9150613b4482613b03565b602082019050919050565b60006020820190508181036000830152613b6881613b2c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ba982612cf4565b9150613bb483612cf4565b925082613bc457613bc3613b6f565b5b828204905092915050565b6000613bda82612cf4565b9150613be583612cf4565b925082613bf557613bf4613b6f565b5b828206905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613c5c602f83612c44565b9150613c6782613c00565b604082019050919050565b60006020820190508181036000830152613c8b81613c4f565b9050919050565b600081905092915050565b6000613ca882612c39565b613cb28185613c92565b9350613cc2818560208601612c55565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613cf081613464565b613cfa8186613c92565b94506001821660008114613d155760018114613d2657613d59565b60ff19831686528186019350613d59565b613d2f85613cce565b60005b83811015613d5157815481890152600182019150602081019050613d32565b838801955050505b50505092915050565b6000613d6e8286613c9d565b9150613d7a8285613c9d565b9150613d868284613ce3565b9150819050949350505050565b6000613da6613da184613180565b612e89565b90508083825260208201905060208402830185811115613dc957613dc86131ac565b5b835b81811015613df25780613dde8882613a2f565b845260208401935050602081019050613dcb565b5050509392505050565b600082601f830112613e1157613e10612e1f565b5b8151613e21848260208601613d93565b91505092915050565b600060208284031215613e4057613e3f612b74565b5b600082015167ffffffffffffffff811115613e5e57613e5d612b79565b5b613e6a84828501613dfc565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ecf602683612c44565b9150613eda82613e73565b604082019050919050565b60006020820190508181036000830152613efe81613ec2565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613f61602c83612c44565b9150613f6c82613f05565b604082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613ff3602983612c44565b9150613ffe82613f97565b604082019050919050565b6000602082019050818103600083015261402281613fe6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614085602483612c44565b915061409082614029565b604082019050919050565b600060208201905081810360008301526140b481614078565b9050919050565b60006140c682612cf4565b91506140d183612cf4565b9250828210156140e4576140e3613893565b5b828203905092915050565b60006140fa82612cf4565b915061410583612cf4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561413a57614139613893565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061417b601983612c44565b915061418682614145565b602082019050919050565b600060208201905081810360008301526141aa8161416e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061420d603283612c44565b9150614218826141b1565b604082019050919050565b6000602082019050818103600083015261423c81614200565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061426a82614243565b614274818561424e565b9350614284818560208601612c55565b61428d81612c88565b840191505092915050565b60006080820190506142ad6000830187612d89565b6142ba6020830186612d89565b6142c76040830185612f9d565b81810360608301526142d9818461425f565b905095945050505050565b6000815190506142f381612baa565b92915050565b60006020828403121561430f5761430e612b74565b5b600061431d848285016142e4565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061435c602083612c44565b915061436782614326565b602082019050919050565b6000602082019050818103600083015261438b8161434f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006143c8601c83612c44565b91506143d382614392565b602082019050919050565b600060208201905081810360008301526143f7816143bb565b905091905056fea2646970667358221220e649bc81edf0e2006c27a960678ceeaebce8a359d5f00c0dc02c563f48f447d364736f6c63430008090033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001e36000000000000000000000000000000000000000000000000000000000000000c417665726167652050465073000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044156475000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f578063b88d4fde116100a2578063d5abeb0111610071578063d5abeb0114610554578063e985e9c514610572578063f0d9fab6146105a2578063f2fde38b146105d2576101e5565b8063b88d4fde146104ce578063c87b56dd146104ea578063d0ff02161461051a578063d4a6a2fd14610536576101e5565b8063925489a8116100de578063925489a81461044857806395d89b41146104645780639e34070f14610482578063a22cb465146104b2576101e5565b8063715018a6146103e857806373417b09146103f25780637ec4a6591461040e5780638da5cb5b1461042a576101e5565b806323b872dd116101875780635503a0e8116101565780635503a0e81461034c57806362b99ad41461036a5780636352211e1461038857806370a08231146103b8576101e5565b806323b872dd146102da5780633ccfd60b146102f657806342842e0e14610300578063438b63001461031c576101e5565b8063095ea7b3116101c3578063095ea7b314610268578063133859ae1461028457806316ba10e0146102a057806318160ddd146102bc576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190612bd6565b6105ee565b6040516102119190612c1e565b60405180910390f35b6102226106d0565b60405161022f9190612cd2565b60405180910390f35b610252600480360381019061024d9190612d2a565b610762565b60405161025f9190612d98565b60405180910390f35b610282600480360381019061027d9190612ddf565b6107e7565b005b61029e60048036038101906102999190612ddf565b6108ff565b005b6102ba60048036038101906102b59190612f54565b610ac2565b005b6102c4610b58565b6040516102d19190612fac565b60405180910390f35b6102f460048036038101906102ef9190612fc7565b610b69565b005b6102fe610bc9565b005b61031a60048036038101906103159190612fc7565b610cfd565b005b6103366004803603810190610331919061301a565b610d1d565b6040516103439190613105565b60405180910390f35b610354610e28565b6040516103619190612cd2565b60405180910390f35b610372610eb6565b60405161037f9190612cd2565b60405180910390f35b6103a2600480360381019061039d9190612d2a565b610f44565b6040516103af9190612d98565b60405180910390f35b6103d260048036038101906103cd919061301a565b610ff6565b6040516103df9190612fac565b60405180910390f35b6103f06110ae565b005b61040c60048036038101906104079190613153565b611136565b005b61042860048036038101906104239190612f54565b6111cf565b005b610432611265565b60405161043f9190612d98565b60405180910390f35b610462600480360381019061045d9190613248565b61128f565b005b61046c6115ba565b6040516104799190612cd2565b60405180910390f35b61049c60048036038101906104979190612d2a565b61164c565b6040516104a99190612c1e565b60405180910390f35b6104cc60048036038101906104c79190613291565b6116a4565b005b6104e860048036038101906104e39190613372565b6116ba565b005b61050460048036038101906104ff9190612d2a565b61171c565b6040516105119190612cd2565b60405180910390f35b610534600480360381019061052f9190612d2a565b6117c6565b005b61053e611a9e565b60405161054b9190612c1e565b60405180910390f35b61055c611ab1565b6040516105699190612fac565b60405180910390f35b61058c600480360381019061058791906133f5565b611ab7565b6040516105999190612c1e565b60405180910390f35b6105bc60048036038101906105b7919061301a565b611b4b565b6040516105c99190613105565b60405180910390f35b6105ec60048036038101906105e7919061301a565b611c04565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c957506106c882611cfc565b5b9050919050565b6060600080546106df90613464565b80601f016020809104026020016040519081016040528092919081815260200182805461070b90613464565b80156107585780601f1061072d57610100808354040283529160200191610758565b820191906000526020600020905b81548152906001019060200180831161073b57829003601f168201915b5050505050905090565b600061076d82611d66565b6107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390613508565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107f282610f44565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085a9061359a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610882611dd2565b73ffffffffffffffffffffffffffffffffffffffff1614806108b157506108b0816108ab611dd2565b611ab7565b5b6108f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e79061362c565b60405180910390fd5b6108fa8383611dda565b505050565b610907611dd2565b73ffffffffffffffffffffffffffffffffffffffff16610925611265565b73ffffffffffffffffffffffffffffffffffffffff161461097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613698565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016109ed9190612fac565b60206040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d91906136cd565b73ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90613746565b60405180910390fd5b610a9c8161164c565b610abe57610aaa6008611e93565b610ab48282611ea9565b610abd81611ec7565b5b5050565b610aca611dd2565b73ffffffffffffffffffffffffffffffffffffffff16610ae8611265565b73ffffffffffffffffffffffffffffffffffffffff1614610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3590613698565b60405180910390fd5b80600a9080519060200190610b54929190612ac7565b5050565b6000610b646008611f25565b905090565b610b7a610b74611dd2565b82611f33565b610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb0906137d8565b60405180910390fd5b610bc4838383612011565b505050565b610bd1611dd2565b73ffffffffffffffffffffffffffffffffffffffff16610bef611265565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90613698565b60405180910390fd5b60026007541415610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290613844565b60405180910390fd5b6002600781905550603460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610cf357600080fd5b6001600781905550565b610d18838383604051806020016040528060008152506116ba565b505050565b60606000610d2a83610ff6565b905060008167ffffffffffffffff811115610d4857610d47612e29565b5b604051908082528060200260200182016040528015610d765781602001602082028036833780820191505090505b50905060006001905060005b8381108015610d935750600b548211155b15610e1c576000610da383610f44565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e085782848381518110610ded57610dec613864565b5b6020026020010181815250508180610e04906138c2565b9250505b8280610e13906138c2565b93505050610d82565b82945050505050919050565b600a8054610e3590613464565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6190613464565b8015610eae5780601f10610e8357610100808354040283529160200191610eae565b820191906000526020600020905b815481529060010190602001808311610e9157829003601f168201915b505050505081565b60098054610ec390613464565b80601f0160208091040260200160405190810160405280929190818152602001828054610eef90613464565b8015610f3c5780601f10610f1157610100808354040283529160200191610f3c565b820191906000526020600020905b815481529060010190602001808311610f1f57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe49061397d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613a0f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b6611dd2565b73ffffffffffffffffffffffffffffffffffffffff166110d4611265565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190613698565b60405180910390fd5b611134600061226d565b565b61113e611dd2565b73ffffffffffffffffffffffffffffffffffffffff1661115c611265565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990613698565b60405180910390fd5b80603460006101000a81548160ff02191690831515021790555050565b6111d7611dd2565b73ffffffffffffffffffffffffffffffffffffffff166111f5611265565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613698565b60405180910390fd5b8060099080519060200190611261929190612ac7565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260075414156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613844565b60405180910390fd5b60026007819055506000603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161133a9190612d98565b60206040518083038186803b15801561135257600080fd5b505afa158015611366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138a9190613a44565b116113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190613ae3565b60405180910390fd5b603460009054906101000a900460ff16611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090613b4f565b60405180910390fd5b60005b81518110156115ae5761144882828151811061143b5761143a613864565b5b602002602001015161164c565b15801561154457503373ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8484815181106114b8576114b7613864565b5b60200260200101516040518263ffffffff1660e01b81526004016114dc9190612fac565b60206040518083038186803b1580156114f457600080fd5b505afa158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c91906136cd565b73ffffffffffffffffffffffffffffffffffffffff16145b1561159b576115536008611e93565b6115773383838151811061156a57611569613864565b5b6020026020010151611ea9565b61159a82828151811061158d5761158c613864565b5b6020026020010151611ec7565b5b80806115a6906138c2565b91505061141c565b50600160078190555050565b6060600180546115c990613464565b80601f01602080910402602001604051908101604052809291908181526020018280546115f590613464565b80156116425780601f1061161757610100808354040283529160200191611642565b820191906000526020600020905b81548152906001019060200180831161162557829003601f168201915b5050505050905090565b6000806101008361165d9190613b9e565b905060006101008461166f9190613bcf565b90506000600c836028811061168757611686613864565b5b015490506000826001901b90508081831614945050505050919050565b6116b66116af611dd2565b8383612333565b5050565b6116cb6116c5611dd2565b83611f33565b61170a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611701906137d8565b60405180910390fd5b611716848484846124a0565b50505050565b606061172782611d66565b611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90613c72565b60405180910390fd5b60006117706124fc565b9050600081511161179057604051806020016040528060008152506117be565b8061179a8461258e565b600a6040516020016117ae93929190613d62565b6040516020818303038152906040525b915050919050565b6002600754141561180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390613844565b60405180910390fd5b60026007819055506000603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016118719190612d98565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190613a44565b11611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890613ae3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016119739190612fac565b60206040518083038186803b15801561198b57600080fd5b505afa15801561199f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c391906136cd565b73ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090613746565b60405180910390fd5b603460009054906101000a900460ff16611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90613b4f565b60405180910390fd5b611a718161164c565b611a9357611a7f6008611e93565b611a893382611ea9565b611a9281611ec7565b5b600160078190555050565b603460009054906101000a900460ff1681565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663438b6300836040518263ffffffff1660e01b8152600401611ba89190612d98565b60006040518083038186803b158015611bc057600080fd5b505afa158015611bd4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bfd9190613e2a565b9050919050565b611c0c611dd2565b73ffffffffffffffffffffffffffffffffffffffff16611c2a611265565b73ffffffffffffffffffffffffffffffffffffffff1614611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7790613698565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790613ee5565b60405180910390fd5b611cf98161226d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e4d83610f44565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001816000016000828254019250508190555050565b611ec38282604051806020016040528060008152506126ef565b5050565b600061010082611ed79190613b9e565b9050600061010083611ee99190613bcf565b9050806001901b600c8360288110611f0457611f03613864565b5b015417600c8360288110611f1b57611f1a613864565b5b0181905550505050565b600081600001549050919050565b6000611f3e82611d66565b611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613f77565b60405180910390fd5b6000611f8883610f44565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ff757508373ffffffffffffffffffffffffffffffffffffffff16611fdf84610762565b73ffffffffffffffffffffffffffffffffffffffff16145b8061200857506120078185611ab7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661203182610f44565b73ffffffffffffffffffffffffffffffffffffffff1614612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90614009565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061409b565b60405180910390fd5b61210283838361274a565b61210d600082611dda565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215d91906140bb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b491906140ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990614191565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124939190612c1e565b60405180910390a3505050565b6124ab848484612011565b6124b78484848461274f565b6124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90614223565b60405180910390fd5b50505050565b60606009805461250b90613464565b80601f016020809104026020016040519081016040528092919081815260200182805461253790613464565b80156125845780601f1061255957610100808354040283529160200191612584565b820191906000526020600020905b81548152906001019060200180831161256757829003601f168201915b5050505050905090565b606060008214156125d6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ea565b600082905060005b600082146126085780806125f1906138c2565b915050600a826126019190613b9e565b91506125de565b60008167ffffffffffffffff81111561262457612623612e29565b5b6040519080825280601f01601f1916602001820160405280156126565781602001600182028036833780820191505090505b5090505b600085146126e35760018261266f91906140bb565b9150600a8561267e9190613bcf565b603061268a91906140ef565b60f81b8183815181106126a05761269f613864565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126dc9190613b9e565b945061265a565b8093505050505b919050565b6126f983836128e6565b612706600084848461274f565b612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90614223565b60405180910390fd5b505050565b505050565b60006127708473ffffffffffffffffffffffffffffffffffffffff16612ab4565b156128d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612799611dd2565b8786866040518563ffffffff1660e01b81526004016127bb9493929190614298565b602060405180830381600087803b1580156127d557600080fd5b505af192505050801561280657506040513d601f19601f8201168201806040525081019061280391906142f9565b60015b612889573d8060008114612836576040519150601f19603f3d011682016040523d82523d6000602084013e61283b565b606091505b50600081511415612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890614223565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128de565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90614372565b60405180910390fd5b61295f81611d66565b1561299f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612996906143de565b60405180910390fd5b6129ab6000838361274a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129fb91906140ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ad390613464565b90600052602060002090601f016020900481019282612af55760008555612b3c565b82601f10612b0e57805160ff1916838001178555612b3c565b82800160010185558215612b3c579182015b82811115612b3b578251825591602001919060010190612b20565b5b509050612b499190612b4d565b5090565b5b80821115612b66576000816000905550600101612b4e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bb381612b7e565b8114612bbe57600080fd5b50565b600081359050612bd081612baa565b92915050565b600060208284031215612bec57612beb612b74565b5b6000612bfa84828501612bc1565b91505092915050565b60008115159050919050565b612c1881612c03565b82525050565b6000602082019050612c336000830184612c0f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c73578082015181840152602081019050612c58565b83811115612c82576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ca482612c39565b612cae8185612c44565b9350612cbe818560208601612c55565b612cc781612c88565b840191505092915050565b60006020820190508181036000830152612cec8184612c99565b905092915050565b6000819050919050565b612d0781612cf4565b8114612d1257600080fd5b50565b600081359050612d2481612cfe565b92915050565b600060208284031215612d4057612d3f612b74565b5b6000612d4e84828501612d15565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d8282612d57565b9050919050565b612d9281612d77565b82525050565b6000602082019050612dad6000830184612d89565b92915050565b612dbc81612d77565b8114612dc757600080fd5b50565b600081359050612dd981612db3565b92915050565b60008060408385031215612df657612df5612b74565b5b6000612e0485828601612dca565b9250506020612e1585828601612d15565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e6182612c88565b810181811067ffffffffffffffff82111715612e8057612e7f612e29565b5b80604052505050565b6000612e93612b6a565b9050612e9f8282612e58565b919050565b600067ffffffffffffffff821115612ebf57612ebe612e29565b5b612ec882612c88565b9050602081019050919050565b82818337600083830152505050565b6000612ef7612ef284612ea4565b612e89565b905082815260208101848484011115612f1357612f12612e24565b5b612f1e848285612ed5565b509392505050565b600082601f830112612f3b57612f3a612e1f565b5b8135612f4b848260208601612ee4565b91505092915050565b600060208284031215612f6a57612f69612b74565b5b600082013567ffffffffffffffff811115612f8857612f87612b79565b5b612f9484828501612f26565b91505092915050565b612fa681612cf4565b82525050565b6000602082019050612fc16000830184612f9d565b92915050565b600080600060608486031215612fe057612fdf612b74565b5b6000612fee86828701612dca565b9350506020612fff86828701612dca565b925050604061301086828701612d15565b9150509250925092565b6000602082840312156130305761302f612b74565b5b600061303e84828501612dca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61307c81612cf4565b82525050565b600061308e8383613073565b60208301905092915050565b6000602082019050919050565b60006130b282613047565b6130bc8185613052565b93506130c783613063565b8060005b838110156130f85781516130df8882613082565b97506130ea8361309a565b9250506001810190506130cb565b5085935050505092915050565b6000602082019050818103600083015261311f81846130a7565b905092915050565b61313081612c03565b811461313b57600080fd5b50565b60008135905061314d81613127565b92915050565b60006020828403121561316957613168612b74565b5b60006131778482850161313e565b91505092915050565b600067ffffffffffffffff82111561319b5761319a612e29565b5b602082029050602081019050919050565b600080fd5b60006131c46131bf84613180565b612e89565b905080838252602082019050602084028301858111156131e7576131e66131ac565b5b835b8181101561321057806131fc8882612d15565b8452602084019350506020810190506131e9565b5050509392505050565b600082601f83011261322f5761322e612e1f565b5b813561323f8482602086016131b1565b91505092915050565b60006020828403121561325e5761325d612b74565b5b600082013567ffffffffffffffff81111561327c5761327b612b79565b5b6132888482850161321a565b91505092915050565b600080604083850312156132a8576132a7612b74565b5b60006132b685828601612dca565b92505060206132c78582860161313e565b9150509250929050565b600067ffffffffffffffff8211156132ec576132eb612e29565b5b6132f582612c88565b9050602081019050919050565b6000613315613310846132d1565b612e89565b90508281526020810184848401111561333157613330612e24565b5b61333c848285612ed5565b509392505050565b600082601f83011261335957613358612e1f565b5b8135613369848260208601613302565b91505092915050565b6000806000806080858703121561338c5761338b612b74565b5b600061339a87828801612dca565b94505060206133ab87828801612dca565b93505060406133bc87828801612d15565b925050606085013567ffffffffffffffff8111156133dd576133dc612b79565b5b6133e987828801613344565b91505092959194509250565b6000806040838503121561340c5761340b612b74565b5b600061341a85828601612dca565b925050602061342b85828601612dca565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061347c57607f821691505b602082108114156134905761348f613435565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006134f2602c83612c44565b91506134fd82613496565b604082019050919050565b60006020820190508181036000830152613521816134e5565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613584602183612c44565b915061358f82613528565b604082019050919050565b600060208201905081810360008301526135b381613577565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613616603883612c44565b9150613621826135ba565b604082019050919050565b6000602082019050818103600083015261364581613609565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613682602083612c44565b915061368d8261364c565b602082019050919050565b600060208201905081810360008301526136b181613675565b9050919050565b6000815190506136c781612db3565b92915050565b6000602082840312156136e3576136e2612b74565b5b60006136f1848285016136b8565b91505092915050565b7f546f6b656e20646f65736e27742062656c6f6e6720746f2077616c6c65742e00600082015250565b6000613730601f83612c44565b915061373b826136fa565b602082019050919050565b6000602082019050818103600083015261375f81613723565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006137c2603183612c44565b91506137cd82613766565b604082019050919050565b600060208201905081810360008301526137f1816137b5565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061382e601f83612c44565b9150613839826137f8565b602082019050919050565b6000602082019050818103600083015261385d81613821565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138cd82612cf4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613900576138ff613893565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613967602983612c44565b91506139728261390b565b604082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006139f9602a83612c44565b9150613a048261399d565b604082019050919050565b60006020820190508181036000830152613a28816139ec565b9050919050565b600081519050613a3e81612cfe565b92915050565b600060208284031215613a5a57613a59612b74565b5b6000613a6884828501613a2f565b91505092915050565b7f4e6f2043726561747572657320666f756e64206f6e20746869732077616c6c6560008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613acd602283612c44565b9150613ad882613a71565b604082019050919050565b60006020820190508181036000830152613afc81613ac0565b9050919050565b7f50465020436c61696d206973207061757365642e000000000000000000000000600082015250565b6000613b39601483612c44565b9150613b4482613b03565b602082019050919050565b60006020820190508181036000830152613b6881613b2c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ba982612cf4565b9150613bb483612cf4565b925082613bc457613bc3613b6f565b5b828204905092915050565b6000613bda82612cf4565b9150613be583612cf4565b925082613bf557613bf4613b6f565b5b828206905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613c5c602f83612c44565b9150613c6782613c00565b604082019050919050565b60006020820190508181036000830152613c8b81613c4f565b9050919050565b600081905092915050565b6000613ca882612c39565b613cb28185613c92565b9350613cc2818560208601612c55565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613cf081613464565b613cfa8186613c92565b94506001821660008114613d155760018114613d2657613d59565b60ff19831686528186019350613d59565b613d2f85613cce565b60005b83811015613d5157815481890152600182019150602081019050613d32565b838801955050505b50505092915050565b6000613d6e8286613c9d565b9150613d7a8285613c9d565b9150613d868284613ce3565b9150819050949350505050565b6000613da6613da184613180565b612e89565b90508083825260208201905060208402830185811115613dc957613dc86131ac565b5b835b81811015613df25780613dde8882613a2f565b845260208401935050602081019050613dcb565b5050509392505050565b600082601f830112613e1157613e10612e1f565b5b8151613e21848260208601613d93565b91505092915050565b600060208284031215613e4057613e3f612b74565b5b600082015167ffffffffffffffff811115613e5e57613e5d612b79565b5b613e6a84828501613dfc565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ecf602683612c44565b9150613eda82613e73565b604082019050919050565b60006020820190508181036000830152613efe81613ec2565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613f61602c83612c44565b9150613f6c82613f05565b604082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613ff3602983612c44565b9150613ffe82613f97565b604082019050919050565b6000602082019050818103600083015261402281613fe6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614085602483612c44565b915061409082614029565b604082019050919050565b600060208201905081810360008301526140b481614078565b9050919050565b60006140c682612cf4565b91506140d183612cf4565b9250828210156140e4576140e3613893565b5b828203905092915050565b60006140fa82612cf4565b915061410583612cf4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561413a57614139613893565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061417b601983612c44565b915061418682614145565b602082019050919050565b600060208201905081810360008301526141aa8161416e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061420d603283612c44565b9150614218826141b1565b604082019050919050565b6000602082019050818103600083015261423c81614200565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061426a82614243565b614274818561424e565b9350614284818560208601612c55565b61428d81612c88565b840191505092915050565b60006080820190506142ad6000830187612d89565b6142ba6020830186612d89565b6142c76040830185612f9d565b81810360608301526142d9818461425f565b905095945050505050565b6000815190506142f381612baa565b92915050565b60006020828403121561430f5761430e612b74565b5b600061431d848285016142e4565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061435c602083612c44565b915061436782614326565b602082019050919050565b6000602082019050818103600083015261438b8161434f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006143c8601c83612c44565b91506143d382614392565b602082019050919050565b600060208201905081810360008301526143f7816143bb565b905091905056fea2646970667358221220e649bc81edf0e2006c27a960678ceeaebce8a359d5f00c0dc02c563f48f447d364736f6c63430008090033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001e36000000000000000000000000000000000000000000000000000000000000000c417665726167652050465073000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044156475000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenName (string): Average PFPs
Arg [1] : _tokenSymbol (string): AVGP
Arg [2] : _maxSupply (uint256): 7734

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001e36
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 4176657261676520504650730000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4156475000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

507:4819:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1490:300:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2408:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3919:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3457:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3374:322:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4931:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1203:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4646:330:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5215:109:1;;;:::i;:::-;;5042:179:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3702:648:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;705:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;673:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2111:235:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1849:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:10;;;:::i;:::-;;1324:103:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4809:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1029:85:10;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2820:508:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2570:102:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1459:322:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4203:153:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5287:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4356:436:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2280:457;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;799:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;742:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4422:162:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2066:137:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1490:300:5;1592:4;1642:25;1627:40;;;:11;:40;;;;:104;;;;1698:33;1683:48;;;:11;:48;;;;1627:104;:156;;;;1747:36;1771:11;1747:23;:36::i;:::-;1627:156;1608:175;;1490:300;;;:::o;2408:98::-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;4022:16;4030:7;4022;:16::i;:::-;4014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4105:15;:24;4121:7;4105:24;;;;;;;;;;;;;;;;;;;;;4098:31;;3919:217;;;:::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;3594:11;;:2;:11;;;;3586:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3691:5;3675:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3700:37;3717:5;3724:12;:10;:12::i;:::-;3700:16;:37::i;:::-;3675:62;3654:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;3374:322:1:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3501:9:1::1;3469:41;;:13;;;;;;;;;;;:21;;;3491:5;3469:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;3461:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3561:16;3571:5;3561:9;:16::i;:::-;3556:133;;3591:18;:6;:16;:18::i;:::-;3621:27;3631:9;3642:5;3621:9;:27::i;:::-;3660:18;3672:5;3660:11;:18::i;:::-;3556:133;3374:322:::0;;:::o;4931:102::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5016:10:1::1;5004:9;:22;;;;;;;;;;;;:::i;:::-;;4931:102:::0;:::o;1203:93::-;1247:7;1273:16;:6;:14;:16::i;:::-;1266:23;;1203:93;:::o;4646:330:5:-;4835:41;4854:12;:10;:12::i;:::-;4868:7;4835:18;:41::i;:::-;4827:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;:::-;4646:330;;;:::o;5215:109:1:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:11::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;5287:2:1::2;;;;;;;;;;;5279:16;;:39;5296:21;5279:39;;;;;;;;;;;;;;;;;;;;;;;5271:48;;;::::0;::::2;;1701:1:11::1;2628:7;:22;;;;5215:109:1:o:0;5042:179:5:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;:::-;5042:179;;;:::o;3702:648:1:-;3780:16;3810:23;3836:17;3846:6;3836:9;:17::i;:::-;3810:43;;3861:30;3908:15;3894:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3861:63;;3932:22;3957:1;3932:26;;3966:23;4002:313;4027:15;4009;:33;:64;;;;;4064:9;;4046:14;:27;;4009:64;4002:313;;;4085:25;4113:23;4121:14;4113:7;:23::i;:::-;4085:51;;4172:6;4151:27;;:17;:27;;;4147:133;;;4225:14;4192:13;4206:15;4192:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;4252:17;;;;;:::i;:::-;;;;4147:133;4290:16;;;;;:::i;:::-;;;;4075:240;4002:313;;;4330:13;4323:20;;;;;;3702:648;;;:::o;705:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;673:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2111:235:5:-;2183:7;2202:13;2218:7;:16;2226:7;2218:16;;;;;;;;;;;;;;;;;;;;;2202:32;;2269:1;2252:19;;:5;:19;;;;2244:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2334:5;2327:12;;;2111:235;;;:::o;1849:205::-;1921:7;1965:1;1948:19;;:5;:19;;;;1940:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2031:9;:16;2041:5;2031:16;;;;;;;;;;;;;;;;2024:23;;1849:205;;;:::o;1661:101:10:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1324:103:1:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1408:12:1::1;1394:11;;:26;;;;;;;;;;;;;;;;;;1324:103:::0;:::o;4809:102::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4894:10:1::1;4882:9;:22;;;;;;;;;;;;:::i;:::-;;4809:102:::0;:::o;1029:85:10:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2820:508:1:-;1744:1:11;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;2944:1:1::1;2906:13;;;;;;;;;;;:23;;;2930:10;2906:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;2898:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;3000:11;;;;;;;;;;;2992:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;3049:9;3044:278;3067:10;:17;3064:1;:20;3044:278;;;3106:24;3116:10;3127:1;3116:13;;;;;;;;:::i;:::-;;;;;;;;3106:9;:24::i;:::-;3105:25;:79;;;;;3174:10;3134:50;;:13;;;;;;;;;;;:21;;;3156:10;3167:1;3156:13;;;;;;;;:::i;:::-;;;;;;;;3134:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;3105:79;3101:212;;;3198:18;:6;:16;:18::i;:::-;3228:36;3238:10;3250;3261:1;3250:13;;;;;;;;:::i;:::-;;;;;;;;3228:9;:36::i;:::-;3276:26;3288:10;3299:1;3288:13;;;;;;;;:::i;:::-;;;;;;;;3276:11;:26::i;:::-;3101:212;3086:3;;;;;:::i;:::-;;;;3044:278;;;;1701:1:11::0;2628:7;:22;;;;2820:508:1;:::o;2570:102:5:-;2626:13;2658:7;2651:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2570:102;:::o;1459:322:1:-;1516:4;1532:24;1569:3;1559:7;:13;;;;:::i;:::-;1532:40;;1582:23;1618:3;1608:7;:13;;;;:::i;:::-;1582:39;;1631:19;1653:13;1667:16;1653:31;;;;;;;:::i;:::-;;;;1631:53;;1694:12;1715:15;1710:1;:20;;1694:37;;1770:4;1762;1748:11;:18;:26;1741:33;;;;;;1459:322;;;:::o;4203:153:5:-;4297:52;4316:12;:10;:12::i;:::-;4330:8;4340;4297:18;:52::i;:::-;4203:153;;:::o;5287:320::-;5456:41;5475:12;:10;:12::i;:::-;5489:7;5456:18;:41::i;:::-;5448:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;:::-;5287:320;;;;:::o;4356:436:1:-;4460:13;4504:17;4512:8;4504:7;:17::i;:::-;4487:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;4597:28;4628:10;:8;:10::i;:::-;4597:41;;4684:1;4659:14;4653:28;:32;:132;;;;;;;;;;;;;;;;;4722:14;4738:19;:8;:17;:19::i;:::-;4759:9;4705:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4653:132;4646:139;;;4356:436;;;:::o;2280:457::-;1744:1:11;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;2394:1:1::1;2356:13;;;;;;;;;;;:23;;;2380:10;2356:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;2348:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;2484:10;2450:44;;:13;;;;;;;;;;;:21;;;2472:7;2450:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;2442:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;2546:11;;;;;;;;;;;2538:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;2595:18;2605:7;2595:9;:18::i;:::-;2590:140;;2627:18;:6;:16;:18::i;:::-;2657:30;2667:10;2679:7;2657:9;:30::i;:::-;2699:20;2711:7;2699:11;:20::i;:::-;2590:140;1701:1:11::0;2628:7;:22;;;;2280:457:1;:::o;799:23::-;;;;;;;;;;;;;:::o;742:24::-;;;;:::o;4422:162:5:-;4519:4;4542:18;:25;4561:5;4542:25;;;;;;;;;;;;;;;:35;4568:8;4542:35;;;;;;;;;;;;;;;;;;;;;;;;;4535:42;;4422:162;;;;:::o;2066:137:1:-;2127:16;2160:13;;;;;;;;;;;:27;;;2188:7;2160:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2153:43;;2066:137;;;:::o;1911:198:10:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;829:155:4:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;7079:125:5:-;7144:4;7195:1;7167:30;;:7;:16;7175:7;7167:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7160:37;;7079:125;;;:::o;640:96:2:-;693:7;719:10;712:17;;640:96;:::o;10930:171:5:-;11031:2;11004:15;:24;11020:7;11004:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11086:7;11082:2;11048:46;;11057:23;11072:7;11057:14;:23::i;:::-;11048:46;;;;;;;;;;;;10930:171;;:::o;945:123:3:-;1050:1;1032:7;:14;;;:19;;;;;;;;;;;945:123;:::o;8036:108:5:-;8111:26;8121:2;8125:7;8111:26;;;;;;;;;;;;:9;:26::i;:::-;8036:108;;:::o;1807:253:1:-;1864:24;1901:3;1891:7;:13;;;;:::i;:::-;1864:40;;1914:23;1950:3;1940:7;:13;;;;:::i;:::-;1914:39;;2037:15;2032:1;:20;;1997:13;2011:16;1997:31;;;;;;;:::i;:::-;;;;:56;1963:13;1977:16;1963:31;;;;;;;:::i;:::-;;;:90;;;;1854:206;;1807:253;:::o;827:112:3:-;892:7;918;:14;;;911:21;;827:112;;;:::o;7362:344:5:-;7455:4;7479:16;7487:7;7479;:16::i;:::-;7471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;7611:16;;:7;:16;;;:51;;;;7655:7;7631:31;;:20;7643:7;7631:11;:20::i;:::-;:31;;;7611:51;:87;;;;7666:32;7683:5;7690:7;7666:16;:32::i;:::-;7611:87;7603:96;;;7362:344;;;;:::o;10259:560::-;10413:4;10386:31;;:23;10401:7;10386:14;:23::i;:::-;:31;;;10378:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10495:1;10481:16;;:2;:16;;;;10473:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10549:39;10570:4;10576:2;10580:7;10549:20;:39::i;:::-;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;10709:1;10690:9;:15;10700:4;10690:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10737:1;10720:9;:13;10730:2;10720:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10767:2;10748:7;:16;10756:7;10748:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10804:7;10800:2;10785:27;;10794:4;10785:27;;;;;;;;;;;;10259:560;;;:::o;2263:187:10:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;11236:307:5:-;11386:8;11377:17;;:5;:17;;;;11369:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11472:8;11434:18;:25;11453:5;11434:25;;;;;;;;;;;;;;;:35;11460:8;11434:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11517:8;11495:41;;11510:5;11495:41;;;11527:8;11495:41;;;;;;:::i;:::-;;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6469:307;;;;:::o;5055:106:1:-;5115:13;5145:9;5138:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5055:106;:::o;328:703:12:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;8365:311:5:-;8490:18;8496:2;8500:7;8490:5;:18::i;:::-;8539:54;8570:1;8574:2;8578:7;8587:5;8539:22;:54::i;:::-;8518:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8365:311;;;:::o;13430:122::-;;;;:::o;12096:778::-;12246:4;12266:15;:2;:13;;;:15::i;:::-;12262:606;;;12317:2;12301:36;;;12338:12;:10;:12::i;:::-;12352:4;12358:7;12367:5;12301:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12557:1;12540:6;:13;:18;12536:266;;;12582:60;;;;;;;;;;:::i;:::-;;;;;;;;12536:266;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;12433:41;;;12423:51;;;:6;:51;;;;12416:58;;;;;12262:606;12853:4;12846:11;;12096:778;;;;;;;:::o;8998:372::-;9091:1;9077:16;;:2;:16;;;;9069:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9149:16;9157:7;9149;:16::i;:::-;9148:17;9140:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9209:45;9238:1;9242:2;9246:7;9209:20;:45::i;:::-;9282:1;9265:9;:13;9275:2;9265:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9312:2;9293:7;:16;9301:7;9293:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9355:7;9351:2;9330:33;;9347:1;9330:33;;;;;;;;;;;;8998:372;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:13:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:308::-;5854:4;5944:18;5936:6;5933:30;5930:56;;;5966:18;;:::i;:::-;5930:56;6004:29;6026:6;6004:29;:::i;:::-;5996:37;;6088:4;6082;6078:15;6070:23;;5792:308;;;:::o;6106:154::-;6190:6;6185:3;6180;6167:30;6252:1;6243:6;6238:3;6234:16;6227:27;6106:154;;;:::o;6266:412::-;6344:5;6369:66;6385:49;6427:6;6385:49;:::i;:::-;6369:66;:::i;:::-;6360:75;;6458:6;6451:5;6444:21;6496:4;6489:5;6485:16;6534:3;6525:6;6520:3;6516:16;6513:25;6510:112;;;6541:79;;:::i;:::-;6510:112;6631:41;6665:6;6660:3;6655;6631:41;:::i;:::-;6350:328;6266:412;;;;;:::o;6698:340::-;6754:5;6803:3;6796:4;6788:6;6784:17;6780:27;6770:122;;6811:79;;:::i;:::-;6770:122;6928:6;6915:20;6953:79;7028:3;7020:6;7013:4;7005:6;7001:17;6953:79;:::i;:::-;6944:88;;6760:278;6698:340;;;;:::o;7044:509::-;7113:6;7162:2;7150:9;7141:7;7137:23;7133:32;7130:119;;;7168:79;;:::i;:::-;7130:119;7316:1;7305:9;7301:17;7288:31;7346:18;7338:6;7335:30;7332:117;;;7368:79;;:::i;:::-;7332:117;7473:63;7528:7;7519:6;7508:9;7504:22;7473:63;:::i;:::-;7463:73;;7259:287;7044:509;;;;:::o;7559:118::-;7646:24;7664:5;7646:24;:::i;:::-;7641:3;7634:37;7559:118;;:::o;7683:222::-;7776:4;7814:2;7803:9;7799:18;7791:26;;7827:71;7895:1;7884:9;7880:17;7871:6;7827:71;:::i;:::-;7683:222;;;;:::o;7911:619::-;7988:6;7996;8004;8053:2;8041:9;8032:7;8028:23;8024:32;8021:119;;;8059:79;;:::i;:::-;8021:119;8179:1;8204:53;8249:7;8240:6;8229:9;8225:22;8204:53;:::i;:::-;8194:63;;8150:117;8306:2;8332:53;8377:7;8368:6;8357:9;8353:22;8332:53;:::i;:::-;8322:63;;8277:118;8434:2;8460:53;8505:7;8496:6;8485:9;8481:22;8460:53;:::i;:::-;8450:63;;8405:118;7911:619;;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:114::-;8938:6;8972:5;8966:12;8956:22;;8871:114;;;:::o;8991:184::-;9090:11;9124:6;9119:3;9112:19;9164:4;9159:3;9155:14;9140:29;;8991:184;;;;:::o;9181:132::-;9248:4;9271:3;9263:11;;9301:4;9296:3;9292:14;9284:22;;9181:132;;;:::o;9319:108::-;9396:24;9414:5;9396:24;:::i;:::-;9391:3;9384:37;9319:108;;:::o;9433:179::-;9502:10;9523:46;9565:3;9557:6;9523:46;:::i;:::-;9601:4;9596:3;9592:14;9578:28;;9433:179;;;;:::o;9618:113::-;9688:4;9720;9715:3;9711:14;9703:22;;9618:113;;;:::o;9767:732::-;9886:3;9915:54;9963:5;9915:54;:::i;:::-;9985:86;10064:6;10059:3;9985:86;:::i;:::-;9978:93;;10095:56;10145:5;10095:56;:::i;:::-;10174:7;10205:1;10190:284;10215:6;10212:1;10209:13;10190:284;;;10291:6;10285:13;10318:63;10377:3;10362:13;10318:63;:::i;:::-;10311:70;;10404:60;10457:6;10404:60;:::i;:::-;10394:70;;10250:224;10237:1;10234;10230:9;10225:14;;10190:284;;;10194:14;10490:3;10483:10;;9891:608;;;9767:732;;;;:::o;10505:373::-;10648:4;10686:2;10675:9;10671:18;10663:26;;10735:9;10729:4;10725:20;10721:1;10710:9;10706:17;10699:47;10763:108;10866:4;10857:6;10763:108;:::i;:::-;10755:116;;10505:373;;;;:::o;10884:116::-;10954:21;10969:5;10954:21;:::i;:::-;10947:5;10944:32;10934:60;;10990:1;10987;10980:12;10934:60;10884:116;:::o;11006:133::-;11049:5;11087:6;11074:20;11065:29;;11103:30;11127:5;11103:30;:::i;:::-;11006:133;;;;:::o;11145:323::-;11201:6;11250:2;11238:9;11229:7;11225:23;11221:32;11218:119;;;11256:79;;:::i;:::-;11218:119;11376:1;11401:50;11443:7;11434:6;11423:9;11419:22;11401:50;:::i;:::-;11391:60;;11347:114;11145:323;;;;:::o;11474:311::-;11551:4;11641:18;11633:6;11630:30;11627:56;;;11663:18;;:::i;:::-;11627:56;11713:4;11705:6;11701:17;11693:25;;11773:4;11767;11763:15;11755:23;;11474:311;;;:::o;11791:117::-;11900:1;11897;11890:12;11931:710;12027:5;12052:81;12068:64;12125:6;12068:64;:::i;:::-;12052:81;:::i;:::-;12043:90;;12153:5;12182:6;12175:5;12168:21;12216:4;12209:5;12205:16;12198:23;;12269:4;12261:6;12257:17;12249:6;12245:30;12298:3;12290:6;12287:15;12284:122;;;12317:79;;:::i;:::-;12284:122;12432:6;12415:220;12449:6;12444:3;12441:15;12415:220;;;12524:3;12553:37;12586:3;12574:10;12553:37;:::i;:::-;12548:3;12541:50;12620:4;12615:3;12611:14;12604:21;;12491:144;12475:4;12470:3;12466:14;12459:21;;12415:220;;;12419:21;12033:608;;11931:710;;;;;:::o;12664:370::-;12735:5;12784:3;12777:4;12769:6;12765:17;12761:27;12751:122;;12792:79;;:::i;:::-;12751:122;12909:6;12896:20;12934:94;13024:3;13016:6;13009:4;13001:6;12997:17;12934:94;:::i;:::-;12925:103;;12741:293;12664:370;;;;:::o;13040:539::-;13124:6;13173:2;13161:9;13152:7;13148:23;13144:32;13141:119;;;13179:79;;:::i;:::-;13141:119;13327:1;13316:9;13312:17;13299:31;13357:18;13349:6;13346:30;13343:117;;;13379:79;;:::i;:::-;13343:117;13484:78;13554:7;13545:6;13534:9;13530:22;13484:78;:::i;:::-;13474:88;;13270:302;13040:539;;;;:::o;13585:468::-;13650:6;13658;13707:2;13695:9;13686:7;13682:23;13678:32;13675:119;;;13713:79;;:::i;:::-;13675:119;13833:1;13858:53;13903:7;13894:6;13883:9;13879:22;13858:53;:::i;:::-;13848:63;;13804:117;13960:2;13986:50;14028:7;14019:6;14008:9;14004:22;13986:50;:::i;:::-;13976:60;;13931:115;13585:468;;;;;:::o;14059:307::-;14120:4;14210:18;14202:6;14199:30;14196:56;;;14232:18;;:::i;:::-;14196:56;14270:29;14292:6;14270:29;:::i;:::-;14262:37;;14354:4;14348;14344:15;14336:23;;14059:307;;;:::o;14372:410::-;14449:5;14474:65;14490:48;14531:6;14490:48;:::i;:::-;14474:65;:::i;:::-;14465:74;;14562:6;14555:5;14548:21;14600:4;14593:5;14589:16;14638:3;14629:6;14624:3;14620:16;14617:25;14614:112;;;14645:79;;:::i;:::-;14614:112;14735:41;14769:6;14764:3;14759;14735:41;:::i;:::-;14455:327;14372:410;;;;;:::o;14801:338::-;14856:5;14905:3;14898:4;14890:6;14886:17;14882:27;14872:122;;14913:79;;:::i;:::-;14872:122;15030:6;15017:20;15055:78;15129:3;15121:6;15114:4;15106:6;15102:17;15055:78;:::i;:::-;15046:87;;14862:277;14801:338;;;;:::o;15145:943::-;15240:6;15248;15256;15264;15313:3;15301:9;15292:7;15288:23;15284:33;15281:120;;;15320:79;;:::i;:::-;15281:120;15440:1;15465:53;15510:7;15501:6;15490:9;15486:22;15465:53;:::i;:::-;15455:63;;15411:117;15567:2;15593:53;15638:7;15629:6;15618:9;15614:22;15593:53;:::i;:::-;15583:63;;15538:118;15695:2;15721:53;15766:7;15757:6;15746:9;15742:22;15721:53;:::i;:::-;15711:63;;15666:118;15851:2;15840:9;15836:18;15823:32;15882:18;15874:6;15871:30;15868:117;;;15904:79;;:::i;:::-;15868:117;16009:62;16063:7;16054:6;16043:9;16039:22;16009:62;:::i;:::-;15999:72;;15794:287;15145:943;;;;;;;:::o;16094:474::-;16162:6;16170;16219:2;16207:9;16198:7;16194:23;16190:32;16187:119;;;16225:79;;:::i;:::-;16187:119;16345:1;16370:53;16415:7;16406:6;16395:9;16391:22;16370:53;:::i;:::-;16360:63;;16316:117;16472:2;16498:53;16543:7;16534:6;16523:9;16519:22;16498:53;:::i;:::-;16488:63;;16443:118;16094:474;;;;;:::o;16574:180::-;16622:77;16619:1;16612:88;16719:4;16716:1;16709:15;16743:4;16740:1;16733:15;16760:320;16804:6;16841:1;16835:4;16831:12;16821:22;;16888:1;16882:4;16878:12;16909:18;16899:81;;16965:4;16957:6;16953:17;16943:27;;16899:81;17027:2;17019:6;17016:14;16996:18;16993:38;16990:84;;;17046:18;;:::i;:::-;16990:84;16811:269;16760:320;;;:::o;17086:231::-;17226:34;17222:1;17214:6;17210:14;17203:58;17295:14;17290:2;17282:6;17278:15;17271:39;17086:231;:::o;17323:366::-;17465:3;17486:67;17550:2;17545:3;17486:67;:::i;:::-;17479:74;;17562:93;17651:3;17562:93;:::i;:::-;17680:2;17675:3;17671:12;17664:19;;17323:366;;;:::o;17695:419::-;17861:4;17899:2;17888:9;17884:18;17876:26;;17948:9;17942:4;17938:20;17934:1;17923:9;17919:17;17912:47;17976:131;18102:4;17976:131;:::i;:::-;17968:139;;17695:419;;;:::o;18120:220::-;18260:34;18256:1;18248:6;18244:14;18237:58;18329:3;18324:2;18316:6;18312:15;18305:28;18120:220;:::o;18346:366::-;18488:3;18509:67;18573:2;18568:3;18509:67;:::i;:::-;18502:74;;18585:93;18674:3;18585:93;:::i;:::-;18703:2;18698:3;18694:12;18687:19;;18346:366;;;:::o;18718:419::-;18884:4;18922:2;18911:9;18907:18;18899:26;;18971:9;18965:4;18961:20;18957:1;18946:9;18942:17;18935:47;18999:131;19125:4;18999:131;:::i;:::-;18991:139;;18718:419;;;:::o;19143:243::-;19283:34;19279:1;19271:6;19267:14;19260:58;19352:26;19347:2;19339:6;19335:15;19328:51;19143:243;:::o;19392:366::-;19534:3;19555:67;19619:2;19614:3;19555:67;:::i;:::-;19548:74;;19631:93;19720:3;19631:93;:::i;:::-;19749:2;19744:3;19740:12;19733:19;;19392:366;;;:::o;19764:419::-;19930:4;19968:2;19957:9;19953:18;19945:26;;20017:9;20011:4;20007:20;20003:1;19992:9;19988:17;19981:47;20045:131;20171:4;20045:131;:::i;:::-;20037:139;;19764:419;;;:::o;20189:182::-;20329:34;20325:1;20317:6;20313:14;20306:58;20189:182;:::o;20377:366::-;20519:3;20540:67;20604:2;20599:3;20540:67;:::i;:::-;20533:74;;20616:93;20705:3;20616:93;:::i;:::-;20734:2;20729:3;20725:12;20718:19;;20377:366;;;:::o;20749:419::-;20915:4;20953:2;20942:9;20938:18;20930:26;;21002:9;20996:4;20992:20;20988:1;20977:9;20973:17;20966:47;21030:131;21156:4;21030:131;:::i;:::-;21022:139;;20749:419;;;:::o;21174:143::-;21231:5;21262:6;21256:13;21247:22;;21278:33;21305:5;21278:33;:::i;:::-;21174:143;;;;:::o;21323:351::-;21393:6;21442:2;21430:9;21421:7;21417:23;21413:32;21410:119;;;21448:79;;:::i;:::-;21410:119;21568:1;21593:64;21649:7;21640:6;21629:9;21625:22;21593:64;:::i;:::-;21583:74;;21539:128;21323:351;;;;:::o;21680:181::-;21820:33;21816:1;21808:6;21804:14;21797:57;21680:181;:::o;21867:366::-;22009:3;22030:67;22094:2;22089:3;22030:67;:::i;:::-;22023:74;;22106:93;22195:3;22106:93;:::i;:::-;22224:2;22219:3;22215:12;22208:19;;21867:366;;;:::o;22239:419::-;22405:4;22443:2;22432:9;22428:18;22420:26;;22492:9;22486:4;22482:20;22478:1;22467:9;22463:17;22456:47;22520:131;22646:4;22520:131;:::i;:::-;22512:139;;22239:419;;;:::o;22664:236::-;22804:34;22800:1;22792:6;22788:14;22781:58;22873:19;22868:2;22860:6;22856:15;22849:44;22664:236;:::o;22906:366::-;23048:3;23069:67;23133:2;23128:3;23069:67;:::i;:::-;23062:74;;23145:93;23234:3;23145:93;:::i;:::-;23263:2;23258:3;23254:12;23247:19;;22906:366;;;:::o;23278:419::-;23444:4;23482:2;23471:9;23467:18;23459:26;;23531:9;23525:4;23521:20;23517:1;23506:9;23502:17;23495:47;23559:131;23685:4;23559:131;:::i;:::-;23551:139;;23278:419;;;:::o;23703:181::-;23843:33;23839:1;23831:6;23827:14;23820:57;23703:181;:::o;23890:366::-;24032:3;24053:67;24117:2;24112:3;24053:67;:::i;:::-;24046:74;;24129:93;24218:3;24129:93;:::i;:::-;24247:2;24242:3;24238:12;24231:19;;23890:366;;;:::o;24262:419::-;24428:4;24466:2;24455:9;24451:18;24443:26;;24515:9;24509:4;24505:20;24501:1;24490:9;24486:17;24479:47;24543:131;24669:4;24543:131;:::i;:::-;24535:139;;24262:419;;;:::o;24687:180::-;24735:77;24732:1;24725:88;24832:4;24829:1;24822:15;24856:4;24853:1;24846:15;24873:180;24921:77;24918:1;24911:88;25018:4;25015:1;25008:15;25042:4;25039:1;25032:15;25059:233;25098:3;25121:24;25139:5;25121:24;:::i;:::-;25112:33;;25167:66;25160:5;25157:77;25154:103;;;25237:18;;:::i;:::-;25154:103;25284:1;25277:5;25273:13;25266:20;;25059:233;;;:::o;25298:228::-;25438:34;25434:1;25426:6;25422:14;25415:58;25507:11;25502:2;25494:6;25490:15;25483:36;25298:228;:::o;25532:366::-;25674:3;25695:67;25759:2;25754:3;25695:67;:::i;:::-;25688:74;;25771:93;25860:3;25771:93;:::i;:::-;25889:2;25884:3;25880:12;25873:19;;25532:366;;;:::o;25904:419::-;26070:4;26108:2;26097:9;26093:18;26085:26;;26157:9;26151:4;26147:20;26143:1;26132:9;26128:17;26121:47;26185:131;26311:4;26185:131;:::i;:::-;26177:139;;25904:419;;;:::o;26329:229::-;26469:34;26465:1;26457:6;26453:14;26446:58;26538:12;26533:2;26525:6;26521:15;26514:37;26329:229;:::o;26564:366::-;26706:3;26727:67;26791:2;26786:3;26727:67;:::i;:::-;26720:74;;26803:93;26892:3;26803:93;:::i;:::-;26921:2;26916:3;26912:12;26905:19;;26564:366;;;:::o;26936:419::-;27102:4;27140:2;27129:9;27125:18;27117:26;;27189:9;27183:4;27179:20;27175:1;27164:9;27160:17;27153:47;27217:131;27343:4;27217:131;:::i;:::-;27209:139;;26936:419;;;:::o;27361:143::-;27418:5;27449:6;27443:13;27434:22;;27465:33;27492:5;27465:33;:::i;:::-;27361:143;;;;:::o;27510:351::-;27580:6;27629:2;27617:9;27608:7;27604:23;27600:32;27597:119;;;27635:79;;:::i;:::-;27597:119;27755:1;27780:64;27836:7;27827:6;27816:9;27812:22;27780:64;:::i;:::-;27770:74;;27726:128;27510:351;;;;:::o;27867:221::-;28007:34;28003:1;27995:6;27991:14;27984:58;28076:4;28071:2;28063:6;28059:15;28052:29;27867:221;:::o;28094:366::-;28236:3;28257:67;28321:2;28316:3;28257:67;:::i;:::-;28250:74;;28333:93;28422:3;28333:93;:::i;:::-;28451:2;28446:3;28442:12;28435:19;;28094:366;;;:::o;28466:419::-;28632:4;28670:2;28659:9;28655:18;28647:26;;28719:9;28713:4;28709:20;28705:1;28694:9;28690:17;28683:47;28747:131;28873:4;28747:131;:::i;:::-;28739:139;;28466:419;;;:::o;28891:170::-;29031:22;29027:1;29019:6;29015:14;29008:46;28891:170;:::o;29067:366::-;29209:3;29230:67;29294:2;29289:3;29230:67;:::i;:::-;29223:74;;29306:93;29395:3;29306:93;:::i;:::-;29424:2;29419:3;29415:12;29408:19;;29067:366;;;:::o;29439:419::-;29605:4;29643:2;29632:9;29628:18;29620:26;;29692:9;29686:4;29682:20;29678:1;29667:9;29663:17;29656:47;29720:131;29846:4;29720:131;:::i;:::-;29712:139;;29439:419;;;:::o;29864:180::-;29912:77;29909:1;29902:88;30009:4;30006:1;29999:15;30033:4;30030:1;30023:15;30050:185;30090:1;30107:20;30125:1;30107:20;:::i;:::-;30102:25;;30141:20;30159:1;30141:20;:::i;:::-;30136:25;;30180:1;30170:35;;30185:18;;:::i;:::-;30170:35;30227:1;30224;30220:9;30215:14;;30050:185;;;;:::o;30241:176::-;30273:1;30290:20;30308:1;30290:20;:::i;:::-;30285:25;;30324:20;30342:1;30324:20;:::i;:::-;30319:25;;30363:1;30353:35;;30368:18;;:::i;:::-;30353:35;30409:1;30406;30402:9;30397:14;;30241:176;;;;:::o;30423:234::-;30563:34;30559:1;30551:6;30547:14;30540:58;30632:17;30627:2;30619:6;30615:15;30608:42;30423:234;:::o;30663:366::-;30805:3;30826:67;30890:2;30885:3;30826:67;:::i;:::-;30819:74;;30902:93;30991:3;30902:93;:::i;:::-;31020:2;31015:3;31011:12;31004:19;;30663:366;;;:::o;31035:419::-;31201:4;31239:2;31228:9;31224:18;31216:26;;31288:9;31282:4;31278:20;31274:1;31263:9;31259:17;31252:47;31316:131;31442:4;31316:131;:::i;:::-;31308:139;;31035:419;;;:::o;31460:148::-;31562:11;31599:3;31584:18;;31460:148;;;;:::o;31614:377::-;31720:3;31748:39;31781:5;31748:39;:::i;:::-;31803:89;31885:6;31880:3;31803:89;:::i;:::-;31796:96;;31901:52;31946:6;31941:3;31934:4;31927:5;31923:16;31901:52;:::i;:::-;31978:6;31973:3;31969:16;31962:23;;31724:267;31614:377;;;;:::o;31997:141::-;32046:4;32069:3;32061:11;;32092:3;32089:1;32082:14;32126:4;32123:1;32113:18;32105:26;;31997:141;;;:::o;32168:845::-;32271:3;32308:5;32302:12;32337:36;32363:9;32337:36;:::i;:::-;32389:89;32471:6;32466:3;32389:89;:::i;:::-;32382:96;;32509:1;32498:9;32494:17;32525:1;32520:137;;;;32671:1;32666:341;;;;32487:520;;32520:137;32604:4;32600:9;32589;32585:25;32580:3;32573:38;32640:6;32635:3;32631:16;32624:23;;32520:137;;32666:341;32733:38;32765:5;32733:38;:::i;:::-;32793:1;32807:154;32821:6;32818:1;32815:13;32807:154;;;32895:7;32889:14;32885:1;32880:3;32876:11;32869:35;32945:1;32936:7;32932:15;32921:26;;32843:4;32840:1;32836:12;32831:17;;32807:154;;;32990:6;32985:3;32981:16;32974:23;;32673:334;;32487:520;;32275:738;;32168:845;;;;:::o;33019:589::-;33244:3;33266:95;33357:3;33348:6;33266:95;:::i;:::-;33259:102;;33378:95;33469:3;33460:6;33378:95;:::i;:::-;33371:102;;33490:92;33578:3;33569:6;33490:92;:::i;:::-;33483:99;;33599:3;33592:10;;33019:589;;;;;;:::o;33631:732::-;33738:5;33763:81;33779:64;33836:6;33779:64;:::i;:::-;33763:81;:::i;:::-;33754:90;;33864:5;33893:6;33886:5;33879:21;33927:4;33920:5;33916:16;33909:23;;33980:4;33972:6;33968:17;33960:6;33956:30;34009:3;34001:6;33998:15;33995:122;;;34028:79;;:::i;:::-;33995:122;34143:6;34126:231;34160:6;34155:3;34152:15;34126:231;;;34235:3;34264:48;34308:3;34296:10;34264:48;:::i;:::-;34259:3;34252:61;34342:4;34337:3;34333:14;34326:21;;34202:155;34186:4;34181:3;34177:14;34170:21;;34126:231;;;34130:21;33744:619;;33631:732;;;;;:::o;34386:385::-;34468:5;34517:3;34510:4;34502:6;34498:17;34494:27;34484:122;;34525:79;;:::i;:::-;34484:122;34635:6;34629:13;34660:105;34761:3;34753:6;34746:4;34738:6;34734:17;34660:105;:::i;:::-;34651:114;;34474:297;34386:385;;;;:::o;34777:554::-;34872:6;34921:2;34909:9;34900:7;34896:23;34892:32;34889:119;;;34927:79;;:::i;:::-;34889:119;35068:1;35057:9;35053:17;35047:24;35098:18;35090:6;35087:30;35084:117;;;35120:79;;:::i;:::-;35084:117;35225:89;35306:7;35297:6;35286:9;35282:22;35225:89;:::i;:::-;35215:99;;35018:306;34777:554;;;;:::o;35337:225::-;35477:34;35473:1;35465:6;35461:14;35454:58;35546:8;35541:2;35533:6;35529:15;35522:33;35337:225;:::o;35568:366::-;35710:3;35731:67;35795:2;35790:3;35731:67;:::i;:::-;35724:74;;35807:93;35896:3;35807:93;:::i;:::-;35925:2;35920:3;35916:12;35909:19;;35568:366;;;:::o;35940:419::-;36106:4;36144:2;36133:9;36129:18;36121:26;;36193:9;36187:4;36183:20;36179:1;36168:9;36164:17;36157:47;36221:131;36347:4;36221:131;:::i;:::-;36213:139;;35940:419;;;:::o;36365:231::-;36505:34;36501:1;36493:6;36489:14;36482:58;36574:14;36569:2;36561:6;36557:15;36550:39;36365:231;:::o;36602:366::-;36744:3;36765:67;36829:2;36824:3;36765:67;:::i;:::-;36758:74;;36841:93;36930:3;36841:93;:::i;:::-;36959:2;36954:3;36950:12;36943:19;;36602:366;;;:::o;36974:419::-;37140:4;37178:2;37167:9;37163:18;37155:26;;37227:9;37221:4;37217:20;37213:1;37202:9;37198:17;37191:47;37255:131;37381:4;37255:131;:::i;:::-;37247:139;;36974:419;;;:::o;37399:228::-;37539:34;37535:1;37527:6;37523:14;37516:58;37608:11;37603:2;37595:6;37591:15;37584:36;37399:228;:::o;37633:366::-;37775:3;37796:67;37860:2;37855:3;37796:67;:::i;:::-;37789:74;;37872:93;37961:3;37872:93;:::i;:::-;37990:2;37985:3;37981:12;37974:19;;37633:366;;;:::o;38005:419::-;38171:4;38209:2;38198:9;38194:18;38186:26;;38258:9;38252:4;38248:20;38244:1;38233:9;38229:17;38222:47;38286:131;38412:4;38286:131;:::i;:::-;38278:139;;38005:419;;;:::o;38430:223::-;38570:34;38566:1;38558:6;38554:14;38547:58;38639:6;38634:2;38626:6;38622:15;38615:31;38430:223;:::o;38659:366::-;38801:3;38822:67;38886:2;38881:3;38822:67;:::i;:::-;38815:74;;38898:93;38987:3;38898:93;:::i;:::-;39016:2;39011:3;39007:12;39000:19;;38659:366;;;:::o;39031:419::-;39197:4;39235:2;39224:9;39220:18;39212:26;;39284:9;39278:4;39274:20;39270:1;39259:9;39255:17;39248:47;39312:131;39438:4;39312:131;:::i;:::-;39304:139;;39031:419;;;:::o;39456:191::-;39496:4;39516:20;39534:1;39516:20;:::i;:::-;39511:25;;39550:20;39568:1;39550:20;:::i;:::-;39545:25;;39589:1;39586;39583:8;39580:34;;;39594:18;;:::i;:::-;39580:34;39639:1;39636;39632:9;39624:17;;39456:191;;;;:::o;39653:305::-;39693:3;39712:20;39730:1;39712:20;:::i;:::-;39707:25;;39746:20;39764:1;39746:20;:::i;:::-;39741:25;;39900:1;39832:66;39828:74;39825:1;39822:81;39819:107;;;39906:18;;:::i;:::-;39819:107;39950:1;39947;39943:9;39936:16;;39653:305;;;;:::o;39964:175::-;40104:27;40100:1;40092:6;40088:14;40081:51;39964:175;:::o;40145:366::-;40287:3;40308:67;40372:2;40367:3;40308:67;:::i;:::-;40301:74;;40384:93;40473:3;40384:93;:::i;:::-;40502:2;40497:3;40493:12;40486:19;;40145:366;;;:::o;40517:419::-;40683:4;40721:2;40710:9;40706:18;40698:26;;40770:9;40764:4;40760:20;40756:1;40745:9;40741:17;40734:47;40798:131;40924:4;40798:131;:::i;:::-;40790:139;;40517:419;;;:::o;40942:237::-;41082:34;41078:1;41070:6;41066:14;41059:58;41151:20;41146:2;41138:6;41134:15;41127:45;40942:237;:::o;41185:366::-;41327:3;41348:67;41412:2;41407:3;41348:67;:::i;:::-;41341:74;;41424:93;41513:3;41424:93;:::i;:::-;41542:2;41537:3;41533:12;41526:19;;41185:366;;;:::o;41557:419::-;41723:4;41761:2;41750:9;41746:18;41738:26;;41810:9;41804:4;41800:20;41796:1;41785:9;41781:17;41774:47;41838:131;41964:4;41838:131;:::i;:::-;41830:139;;41557:419;;;:::o;41982:98::-;42033:6;42067:5;42061:12;42051:22;;41982:98;;;:::o;42086:168::-;42169:11;42203:6;42198:3;42191:19;42243:4;42238:3;42234:14;42219:29;;42086:168;;;;:::o;42260:360::-;42346:3;42374:38;42406:5;42374:38;:::i;:::-;42428:70;42491:6;42486:3;42428:70;:::i;:::-;42421:77;;42507:52;42552:6;42547:3;42540:4;42533:5;42529:16;42507:52;:::i;:::-;42584:29;42606:6;42584:29;:::i;:::-;42579:3;42575:39;42568:46;;42350:270;42260:360;;;;:::o;42626:640::-;42821:4;42859:3;42848:9;42844:19;42836:27;;42873:71;42941:1;42930:9;42926:17;42917:6;42873:71;:::i;:::-;42954:72;43022:2;43011:9;43007:18;42998:6;42954:72;:::i;:::-;43036;43104:2;43093:9;43089:18;43080:6;43036:72;:::i;:::-;43155:9;43149:4;43145:20;43140:2;43129:9;43125:18;43118:48;43183:76;43254:4;43245:6;43183:76;:::i;:::-;43175:84;;42626:640;;;;;;;:::o;43272:141::-;43328:5;43359:6;43353:13;43344:22;;43375:32;43401:5;43375:32;:::i;:::-;43272:141;;;;:::o;43419:349::-;43488:6;43537:2;43525:9;43516:7;43512:23;43508:32;43505:119;;;43543:79;;:::i;:::-;43505:119;43663:1;43688:63;43743:7;43734:6;43723:9;43719:22;43688:63;:::i;:::-;43678:73;;43634:127;43419:349;;;;:::o;43774:182::-;43914:34;43910:1;43902:6;43898:14;43891:58;43774:182;:::o;43962:366::-;44104:3;44125:67;44189:2;44184:3;44125:67;:::i;:::-;44118:74;;44201:93;44290:3;44201:93;:::i;:::-;44319:2;44314:3;44310:12;44303:19;;43962:366;;;:::o;44334:419::-;44500:4;44538:2;44527:9;44523:18;44515:26;;44587:9;44581:4;44577:20;44573:1;44562:9;44558:17;44551:47;44615:131;44741:4;44615:131;:::i;:::-;44607:139;;44334:419;;;:::o;44759:178::-;44899:30;44895:1;44887:6;44883:14;44876:54;44759:178;:::o;44943:366::-;45085:3;45106:67;45170:2;45165:3;45106:67;:::i;:::-;45099:74;;45182:93;45271:3;45182:93;:::i;:::-;45300:2;45295:3;45291:12;45284:19;;44943:366;;;:::o;45315:419::-;45481:4;45519:2;45508:9;45504:18;45496:26;;45568:9;45562:4;45558:20;45554:1;45543:9;45539:17;45532:47;45596:131;45722:4;45596:131;:::i;:::-;45588:139;;45315:419;;;:::o

Swarm Source

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