ETH Price: $3,036.41 (+2.92%)

Token

Undead Pastel Club (UPC)
 

Overview

Max Total Supply

9,998 UPC

Holders

6,054

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
0 UPC
0x20c2527e4d7ac6ca21cc85e87a615f637b857e15
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Undead Pastel Club is a collection of 9999 unique mutant pastel apes created by the owner of MAYC #17458. Each Undead Pastel Club Ape allows its owner to be part of an exclusive community giving different perks and experiences to its holders.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
UndeadPastelClub

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-10
*/

// SPDX-License-Identifier: MIT AND GPL-3.0

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    _approve(to, tokenId);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

    _transfer(from, to, tokenId);
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    _beforeTokenTransfer(from, to, tokenId);

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

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

    emit Transfer(from, to, tokenId);
  }

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: contracts/UndeadPastelClub.sol

pragma solidity >=0.7.0 <0.9.0;

contract UndeadPastelClub is ERC721Enumerable, Ownable {
  using Strings for uint256;
  string private baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public preSaleCost = 0.07 ether;
  uint256 public cost = 0.1 ether;
  uint256 public maxSupply = 9999;
  uint256 public preSaleMaxSupply = 2250;
  uint256 public maxMintAmountPresale = 1;
  uint256 public maxMintAmount = 10;
  uint256 public nftPerAddressLimitPresale = 1;
  uint256 public nftPerAddressLimit = 100;
  uint256 public preSaleDate = 1641931200;
  uint256 public preSaleEndDate = 1642017600;
  uint256 public publicSaleDate = 1642039200;
  uint256 public currentSupply = 0;
  bool public paused = false;
  bool public revealed = false;
  mapping(address => bool) whitelistedAddresses;
  mapping(address => uint256) public addressMintedBalance;
  mapping(address => bool) private addressCanBurn;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setNotRevealedURI(_initNotRevealedUri);
  }

  //MODIFIERS
  modifier notPaused {
    require(!paused, "the contract is paused");
    _;
  }

  modifier saleStarted {
    require(block.timestamp >= preSaleDate, "Sale has not started yet");
    _;
  }

  modifier minimumMintAmount(uint256 _mintAmount) {
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    _;
  }

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

  function presaleValidations(
    uint256 _ownerMintedCount,
    uint256 _mintAmount,
    uint256 _supply
  ) internal {
    uint256 actualCost;
    block.timestamp < preSaleEndDate
      ? actualCost = preSaleCost
      : actualCost = cost;
    require(isWhitelisted(msg.sender), "user is not whitelisted");
    require(
      _ownerMintedCount + _mintAmount <= nftPerAddressLimitPresale,
      "max NFT per address exceeded for presale"
    );
    require(msg.value >= actualCost * _mintAmount, "insufficient funds");
    require(
      _mintAmount <= maxMintAmountPresale,
      "max mint amount per transaction exceeded"
    );
    require(
      _supply + _mintAmount <= preSaleMaxSupply,
      "max NFT presale limit exceeded"
    );
  }

  function publicsaleValidations(uint256 _ownerMintedCount, uint256 _mintAmount)
    internal
  {
    require(
      _ownerMintedCount + _mintAmount <= nftPerAddressLimit,
      "max NFT per address exceeded"
    );
    require(msg.value >= cost * _mintAmount, "insufficient funds");
    require(
      _mintAmount <= maxMintAmount,
      "max mint amount per transaction exceeded"
    );
  }

  //MINT
  function mint(uint256 _mintAmount)
    public
    payable
    notPaused
    saleStarted
    minimumMintAmount(_mintAmount)
  {
    uint256 supply = currentSupply;
    uint256 ownerMintedCount = addressMintedBalance[msg.sender];

    //Do some validations depending on which step of the sale we are in
    block.timestamp < publicSaleDate
      ? presaleValidations(ownerMintedCount, _mintAmount, supply)
      : publicsaleValidations(ownerMintedCount, _mintAmount);

    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
      currentSupply = currentSupply + 1;
    }
  }

  function gift(uint256 _mintAmount, address destination) public onlyOwner {
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    uint256 supply = currentSupply;
    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[destination]++;
      _safeMint(destination, supply + i);
      currentSupply = currentSupply + 1;
    }
  }

  //PUBLIC VIEWS
  function isWhitelisted(address _user) public view returns (bool) {
    return whitelistedAddresses[_user];
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

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

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

  function getCurrentCost() public view returns (uint256) {
    if (block.timestamp < preSaleEndDate) {
      return preSaleCost;
    } else {
      return cost;
    }
  }

  //ONLY OWNER VIEWS
  function getBaseURI() public view onlyOwner returns (string memory) {
    return baseURI;
  }

  function getContractBalance() public view onlyOwner returns (uint256) {
    return address(this).balance;
  }

  //ONLY OWNER SETTERS
  function reveal() public onlyOwner {
    revealed = true;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }

  function setNftPerAddressLimitPreSale(uint256 _limit) public onlyOwner {
    nftPerAddressLimitPresale = _limit;
  }

  function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
    nftPerAddressLimit = _limit;
  }

  function setPresaleCost(uint256 _newCost) public onlyOwner {
    preSaleCost = _newCost;
  }

  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

  function setmaxMintAmountPreSale(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmountPresale = _newmaxMintAmount;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }

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

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function setPresaleMaxSupply(uint256 _newPresaleMaxSupply) public onlyOwner {
    preSaleMaxSupply = _newPresaleMaxSupply;
  }

  function setMaxSupply(uint256 _maxSupply) public onlyOwner {
    maxSupply = _maxSupply;
  }

  function setPreSaleDate(uint256 _preSaleDate) public onlyOwner {
    preSaleDate = _preSaleDate;
  }

  function setPreSaleEndDate(uint256 _preSaleEndDate) public onlyOwner {
    preSaleEndDate = _preSaleEndDate;
  }

  function setPublicSaleDate(uint256 _publicSaleDate) public onlyOwner {
    publicSaleDate = _publicSaleDate;
  }

  function whitelistUsers(address[] memory addresses) public onlyOwner {
    for (uint256 i = 0; i < addresses.length; i++) {
      whitelistedAddresses[addresses[i]] = true;
    }
  }

  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(
      ""
    );
    require(success);
  }

  function burn(uint256 tokenId) public {
    require(isApprovedOrOwner(msg.sender, tokenId));
    _burn(tokenId);
  }

  function whitelistForBurn(address _newAddress) public onlyOwner {
    addressCanBurn[_newAddress] = true;
  }

  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) ||
      addressCanBurn[spender]);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimitPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleEndDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimitPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleDate","type":"uint256"}],"name":"setPreSaleDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleEndDate","type":"uint256"}],"name":"setPreSaleEndDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPresaleMaxSupply","type":"uint256"}],"name":"setPresaleMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleDate","type":"uint256"}],"name":"setPublicSaleDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmountPreSale","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"whitelistForBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000322565b5066f8b0a10e470000600e5567016345785d8a0000600f5561270f6010556108ca6011556001601255600a601355600160145560646015556361dde1c06016556361df33406017556361df87a060185560006019556000601a60006101000a81548160ff0219169083151502179055506000601a60016101000a81548160ff021916908315150217905550348015620000e957600080fd5b506040516200667f3803806200667f83398181016040528101906200010f919062000444565b828281600090805190602001906200012992919062000322565b5080600190805190602001906200014292919062000322565b50505062000165620001596200017f60201b60201c565b6200018760201b60201c565b62000176816200024d60201b60201c565b5050506200068b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200025d6200017f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000283620002f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d39062000527565b60405180910390fd5b80600d9080519060200190620002f492919062000322565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200033090620005f7565b90600052602060002090601f016020900481019282620003545760008555620003a0565b82601f106200036f57805160ff1916838001178555620003a0565b82800160010185558215620003a0579182015b828111156200039f57825182559160200191906001019062000382565b5b509050620003af9190620003b3565b5090565b5b80821115620003ce576000816000905550600101620003b4565b5090565b6000620003e9620003e3846200057d565b62000549565b9050828152602081018484840111156200040257600080fd5b6200040f848285620005c1565b509392505050565b600082601f8301126200042957600080fd5b81516200043b848260208601620003d2565b91505092915050565b6000806000606084860312156200045a57600080fd5b600084015167ffffffffffffffff8111156200047557600080fd5b620004838682870162000417565b935050602084015167ffffffffffffffff811115620004a157600080fd5b620004af8682870162000417565b925050604084015167ffffffffffffffff811115620004cd57600080fd5b620004db8682870162000417565b9150509250925092565b6000620004f4602083620005b0565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200054281620004e5565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200057357620005726200065c565b5b8060405250919050565b600067ffffffffffffffff8211156200059b576200059a6200065c565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b83811015620005e1578082015181840152602081019050620005c4565b83811115620005f1576000848401525b50505050565b600060028204905060018216806200061057607f821691505b602082108114156200062757620006266200062d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b615fe4806200069b6000396000f3fe6080604052600436106103b85760003560e01c80636f9fb98a116101f2578063a22cb4651161010d578063d0eb26b0116100a0578063eced38731161006f578063eced387314610de8578063edec5f2714610e13578063f2c4ce1e14610e3c578063f2fde38b14610e65576103b8565b8063d0eb26b014610d2e578063d5abeb0114610d57578063da3ef23f14610d82578063e985e9c514610dab576103b8565b8063ba7d2c76116100dc578063ba7d2c7614610c70578063c668286214610c9b578063c87b56dd14610cc6578063cc9ff9c614610d03576103b8565b8063a22cb46514610bde578063a475b5dd14610c07578063a55afea814610c1e578063b88d4fde14610c47576103b8565b80637f00c7a6116101855780638fdcf942116101545780638fdcf94214610b4357806395d89b4114610b6c578063a0712d6814610b97578063a18116f114610bb3576103b8565b80637f00c7a614610a9b578063831e60de14610ac457806383a076be14610aef5780638da5cb5b14610b18576103b8565b8063743c7f6b116101c1578063743c7f6b146109f1578063771282f614610a1a5780637967a50a14610a455780637effc03214610a70576103b8565b80636f9fb98a1461094757806370a0823114610972578063714c5398146109af578063715018a6146109da576103b8565b80632e09282e116102e257806344a0d68a116102755780635c975abb116102445780635c975abb1461088d5780636352211e146108b8578063669736c0146108f55780636f8b44b01461091e576103b8565b806344a0d68a146107d35780634f6ccce7146107fc578063518302271461083957806355f804b314610864576103b8565b806342842e0e116102b157806342842e0e1461071b57806342966c681461074457806342f0ca0d1461076d578063438b630014610796576103b8565b80632e09282e1461066c5780632f745c59146106975780633af32abf146106d45780633ccfd60b14610711576103b8565b80630a50716b1161035a57806318cae2691161032957806318cae269146105b05780631985cc65146105ed578063239c70ae1461061857806323b872dd14610643576103b8565b80630a50716b146105085780630e54a8831461053157806313faede61461055a57806318160ddd14610585576103b8565b8063081812fc11610396578063081812fc1461044e578063081c8c441461048b578063095ea7b3146104b65780630a403f04146104df576103b8565b806301ffc9a7146103bd57806302329a29146103fa57806306fdde0314610423575b600080fd5b3480156103c957600080fd5b506103e460048036038101906103df91906149c8565b610e8e565b6040516103f191906156dd565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061499f565b610f08565b005b34801561042f57600080fd5b50610438610fa1565b60405161044591906156f8565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190614a5b565b611033565b6040516104829190615654565b60405180910390f35b34801561049757600080fd5b506104a06110b8565b6040516104ad91906156f8565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190614922565b611146565b005b3480156104eb57600080fd5b5061050660048036038101906105019190614a5b565b61125e565b005b34801561051457600080fd5b5061052f600480360381019061052a9190614a5b565b6112e4565b005b34801561053d57600080fd5b5061055860048036038101906105539190614a5b565b61136a565b005b34801561056657600080fd5b5061056f6113f0565b60405161057c9190615a9a565b60405180910390f35b34801561059157600080fd5b5061059a6113f6565b6040516105a79190615a9a565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906147b7565b611403565b6040516105e49190615a9a565b60405180910390f35b3480156105f957600080fd5b5061060261141b565b60405161060f9190615a9a565b60405180910390f35b34801561062457600080fd5b5061062d611421565b60405161063a9190615a9a565b60405180910390f35b34801561064f57600080fd5b5061066a6004803603810190610665919061481c565b611427565b005b34801561067857600080fd5b50610681611487565b60405161068e9190615a9a565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614922565b61148d565b6040516106cb9190615a9a565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f691906147b7565b611532565b60405161070891906156dd565b60405180910390f35b610719611588565b005b34801561072757600080fd5b50610742600480360381019061073d919061481c565b61167d565b005b34801561075057600080fd5b5061076b60048036038101906107669190614a5b565b61169d565b005b34801561077957600080fd5b50610794600480360381019061078f9190614a5b565b6116bc565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906147b7565b611742565b6040516107ca91906156bb565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190614a5b565b61183c565b005b34801561080857600080fd5b50610823600480360381019061081e9190614a5b565b6118c2565b6040516108309190615a9a565b60405180910390f35b34801561084557600080fd5b5061084e611959565b60405161085b91906156dd565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614a1a565b61196c565b005b34801561089957600080fd5b506108a2611a02565b6040516108af91906156dd565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614a5b565b611a15565b6040516108ec9190615654565b60405180910390f35b34801561090157600080fd5b5061091c60048036038101906109179190614a5b565b611ac7565b005b34801561092a57600080fd5b5061094560048036038101906109409190614a5b565b611b4d565b005b34801561095357600080fd5b5061095c611bd3565b6040516109699190615a9a565b60405180910390f35b34801561097e57600080fd5b50610999600480360381019061099491906147b7565b611c57565b6040516109a69190615a9a565b60405180910390f35b3480156109bb57600080fd5b506109c4611d0f565b6040516109d191906156f8565b60405180910390f35b3480156109e657600080fd5b506109ef611e1d565b005b3480156109fd57600080fd5b50610a186004803603810190610a139190614a5b565b611ea5565b005b348015610a2657600080fd5b50610a2f611f2b565b604051610a3c9190615a9a565b60405180910390f35b348015610a5157600080fd5b50610a5a611f31565b604051610a679190615a9a565b60405180910390f35b348015610a7c57600080fd5b50610a85611f37565b604051610a929190615a9a565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd9190614a5b565b611f3d565b005b348015610ad057600080fd5b50610ad9611fc3565b604051610ae69190615a9a565b60405180910390f35b348015610afb57600080fd5b50610b166004803603810190610b119190614a84565b611fe2565b005b348015610b2457600080fd5b50610b2d61219e565b604051610b3a9190615654565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b659190614a5b565b6121c8565b005b348015610b7857600080fd5b50610b8161224e565b604051610b8e91906156f8565b60405180910390f35b610bb16004803603810190610bac9190614a5b565b6122e0565b005b348015610bbf57600080fd5b50610bc861251f565b604051610bd59190615a9a565b60405180910390f35b348015610bea57600080fd5b50610c056004803603810190610c0091906148e6565b612525565b005b348015610c1357600080fd5b50610c1c6126a6565b005b348015610c2a57600080fd5b50610c456004803603810190610c4091906147b7565b61273f565b005b348015610c5357600080fd5b50610c6e6004803603810190610c69919061486b565b612816565b005b348015610c7c57600080fd5b50610c85612878565b604051610c929190615a9a565b60405180910390f35b348015610ca757600080fd5b50610cb061287e565b604051610cbd91906156f8565b60405180910390f35b348015610cd257600080fd5b50610ced6004803603810190610ce89190614a5b565b61290c565b604051610cfa91906156f8565b60405180910390f35b348015610d0f57600080fd5b50610d18612a5d565b604051610d259190615a9a565b60405180910390f35b348015610d3a57600080fd5b50610d556004803603810190610d509190614a5b565b612a63565b005b348015610d6357600080fd5b50610d6c612ae9565b604051610d799190615a9a565b60405180910390f35b348015610d8e57600080fd5b50610da96004803603810190610da49190614a1a565b612aef565b005b348015610db757600080fd5b50610dd26004803603810190610dcd91906147e0565b612b85565b604051610ddf91906156dd565b60405180910390f35b348015610df457600080fd5b50610dfd612c19565b604051610e0a9190615a9a565b60405180910390f35b348015610e1f57600080fd5b50610e3a6004803603810190610e35919061495e565b612c1f565b005b348015610e4857600080fd5b50610e636004803603810190610e5e9190614a1a565b612d56565b005b348015610e7157600080fd5b50610e8c6004803603810190610e8791906147b7565b612dec565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f015750610f0082612ee4565b5b9050919050565b610f10612fc6565b73ffffffffffffffffffffffffffffffffffffffff16610f2e61219e565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b9061591a565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b606060008054610fb090615dd9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdc90615dd9565b80156110295780601f10610ffe57610100808354040283529160200191611029565b820191906000526020600020905b81548152906001019060200180831161100c57829003601f168201915b5050505050905090565b600061103e82612fce565b61107d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611074906158fa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d80546110c590615dd9565b80601f01602080910402602001604051908101604052809291908181526020018280546110f190615dd9565b801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b505050505081565b600061115182611a15565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906159ba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111e1612fc6565b73ffffffffffffffffffffffffffffffffffffffff161480611210575061120f8161120a612fc6565b612b85565b5b61124f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112469061585a565b60405180910390fd5b611259838361303a565b505050565b611266612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661128461219e565b73ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d19061591a565b60405180910390fd5b8060118190555050565b6112ec612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661130a61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113579061591a565b60405180910390fd5b8060148190555050565b611372612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661139061219e565b73ffffffffffffffffffffffffffffffffffffffff16146113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd9061591a565b60405180910390fd5b8060188190555050565b600f5481565b6000600880549050905090565b601c6020528060005260406000206000915090505481565b60165481565b60135481565b611438611432612fc6565b826130f3565b611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e90615a1a565b60405180910390fd5b6114828383836131d1565b505050565b60145481565b600061149883611c57565b82106114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d09061573a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611590612fc6565b73ffffffffffffffffffffffffffffffffffffffff166115ae61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb9061591a565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161162a9061563f565b60006040518083038185875af1925050503d8060008114611667576040519150601f19603f3d011682016040523d82523d6000602084013e61166c565b606091505b505090508061167a57600080fd5b50565b61169883838360405180602001604052806000815250612816565b505050565b6116a7338261342d565b6116b057600080fd5b6116b98161355f565b50565b6116c4612fc6565b73ffffffffffffffffffffffffffffffffffffffff166116e261219e565b73ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f9061591a565b60405180910390fd5b8060178190555050565b6060600061174f83611c57565b905060008167ffffffffffffffff811115611793577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117c15781602001602082028036833780820191505090505b50905060005b82811015611831576117d9858261148d565b828281518110611812577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061182990615e0b565b9150506117c7565b508092505050919050565b611844612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661186261219e565b73ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af9061591a565b60405180910390fd5b80600f8190555050565b60006118cc6113f6565b821061190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490615a3a565b60405180910390fd5b60088281548110611947577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601a60019054906101000a900460ff1681565b611974612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661199261219e565b73ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df9061591a565b60405180910390fd5b80600b90805190602001906119fe929190614545565b5050565b601a60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab59061589a565b60405180910390fd5b80915050919050565b611acf612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611aed61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061591a565b60405180910390fd5b8060128190555050565b611b55612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611b7361219e565b73ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc09061591a565b60405180910390fd5b8060108190555050565b6000611bdd612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611bfb61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c489061591a565b60405180910390fd5b47905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf9061587a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060611d19612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611d3761219e565b73ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061591a565b60405180910390fd5b600b8054611d9a90615dd9565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc690615dd9565b8015611e135780601f10611de857610100808354040283529160200191611e13565b820191906000526020600020905b815481529060010190602001808311611df657829003601f168201915b5050505050905090565b611e25612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611e4361219e565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e909061591a565b60405180910390fd5b611ea36000613670565b565b611ead612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611ecb61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f189061591a565b60405180910390fd5b8060168190555050565b60195481565b60175481565b60125481565b611f45612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611f6361219e565b73ffffffffffffffffffffffffffffffffffffffff1614611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb09061591a565b60405180910390fd5b8060138190555050565b6000601754421015611fd957600e549050611fdf565b600f5490505b90565b611fea612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661200861219e565b73ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120559061591a565b60405180910390fd5b600082116120a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209890615a7a565b60405180910390fd5b6000601954905060105483826120b79190615c0e565b11156120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef906158ba565b60405180910390fd5b6000600190505b83811161219857601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061215690615e0b565b919050555061217083828461216b9190615c0e565b613736565b600160195461217f9190615c0e565b601981905550808061219090615e0b565b9150506120ff565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6121d0612fc6565b73ffffffffffffffffffffffffffffffffffffffff166121ee61219e565b73ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061591a565b60405180910390fd5b80600e8190555050565b60606001805461225d90615dd9565b80601f016020809104026020016040519081016040528092919081815260200182805461228990615dd9565b80156122d65780601f106122ab576101008083540402835291602001916122d6565b820191906000526020600020905b8154815290600101906020018083116122b957829003601f168201915b5050505050905090565b601a60009054906101000a900460ff1615612330576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123279061593a565b60405180910390fd5b601654421015612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c9061571a565b60405180910390fd5b80600081116123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090615a7a565b60405180910390fd5b600060195490506000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601854421061241c576124178185613754565b612428565b61242781858461383d565b5b60105484836124379190615c0e565b1115612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f906158ba565b60405180910390fd5b6000600190505b84811161251857601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906124d690615e0b565b91905055506124f03382856124eb9190615c0e565b613736565b60016019546124ff9190615c0e565b601981905550808061251090615e0b565b91505061247f565b5050505050565b60115481565b61252d612fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561259b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612592906157fa565b60405180910390fd5b80600560006125a8612fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612655612fc6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161269a91906156dd565b60405180910390a35050565b6126ae612fc6565b73ffffffffffffffffffffffffffffffffffffffff166126cc61219e565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127199061591a565b60405180910390fd5b6001601a60016101000a81548160ff021916908315150217905550565b612747612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661276561219e565b73ffffffffffffffffffffffffffffffffffffffff16146127bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b29061591a565b60405180910390fd5b6001601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612827612821612fc6565b836130f3565b612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90615a1a565b60405180910390fd5b612872848484846139dc565b50505050565b60155481565b600c805461288b90615dd9565b80601f01602080910402602001604051908101604052809291908181526020018280546128b790615dd9565b80156129045780601f106128d957610100808354040283529160200191612904565b820191906000526020600020905b8154815290600101906020018083116128e757829003601f168201915b505050505081565b606061291782612fce565b612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d9061599a565b60405180910390fd5b601a60019054906101000a900460ff166129fc57600d805461297790615dd9565b80601f01602080910402602001604051908101604052809291908181526020018280546129a390615dd9565b80156129f05780601f106129c5576101008083540402835291602001916129f0565b820191906000526020600020905b8154815290600101906020018083116129d357829003601f168201915b50505050509050612a58565b6000612a06613a38565b90506000815111612a265760405180602001604052806000815250612a54565b80612a3084613aca565b600c604051602001612a449392919061560e565b6040516020818303038152906040525b9150505b919050565b600e5481565b612a6b612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612a8961219e565b73ffffffffffffffffffffffffffffffffffffffff1614612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad69061591a565b60405180910390fd5b8060158190555050565b60105481565b612af7612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612b1561219e565b73ffffffffffffffffffffffffffffffffffffffff1614612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b629061591a565b60405180910390fd5b80600c9080519060200190612b81929190614545565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60185481565b612c27612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612c4561219e565b73ffffffffffffffffffffffffffffffffffffffff1614612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c929061591a565b60405180910390fd5b60005b8151811015612d52576001601b6000848481518110612ce6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612d4a90615e0b565b915050612c9e565b5050565b612d5e612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612d7c61219e565b73ffffffffffffffffffffffffffffffffffffffff1614612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc99061591a565b60405180910390fd5b80600d9080519060200190612de8929190614545565b5050565b612df4612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612e1261219e565b73ffffffffffffffffffffffffffffffffffffffff1614612e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5f9061591a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecf9061577a565b60405180910390fd5b612ee181613670565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612faf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612fbf5750612fbe82613c77565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166130ad83611a15565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006130fe82612fce565b61313d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131349061583a565b60405180910390fd5b600061314883611a15565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806131b757508373ffffffffffffffffffffffffffffffffffffffff1661319f84611033565b73ffffffffffffffffffffffffffffffffffffffff16145b806131c857506131c78185612b85565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166131f182611a15565b73ffffffffffffffffffffffffffffffffffffffff1614613247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323e9061595a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae906157da565b60405180910390fd5b6132c2838383613ce1565b6132cd60008261303a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461331d9190615cef565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133749190615c0e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061343882612fce565b613477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346e9061583a565b60405180910390fd5b600061348283611a15565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806134f157508373ffffffffffffffffffffffffffffffffffffffff166134d984611033565b73ffffffffffffffffffffffffffffffffffffffff16145b8061350257506135018185612b85565b5b806135565750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b91505092915050565b600061356a82611a15565b905061357881600084613ce1565b61358360008361303a565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135d39190615cef565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613750828260405180602001604052806000815250613df5565b5050565b60155481836137639190615c0e565b11156137a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379b906157ba565b60405180910390fd5b80600f546137b29190615c95565b3410156137f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137eb906159da565b60405180910390fd5b601354811115613839576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138309061581a565b60405180910390fd5b5050565b6000601754421061385357600f5490508061385a565b600e549050805b5061386433611532565b6138a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389a90615a5a565b60405180910390fd5b60145483856138b29190615c0e565b11156138f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ea906159fa565b60405180910390fd5b82816138ff9190615c95565b341015613941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613938906159da565b60405180910390fd5b601254831115613986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397d9061581a565b60405180910390fd5b60115483836139959190615c0e565b11156139d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cd9061597a565b60405180910390fd5b50505050565b6139e78484846131d1565b6139f384848484613e50565b613a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a299061575a565b60405180910390fd5b50505050565b6060600b8054613a4790615dd9565b80601f0160208091040260200160405190810160405280929190818152602001828054613a7390615dd9565b8015613ac05780601f10613a9557610100808354040283529160200191613ac0565b820191906000526020600020905b815481529060010190602001808311613aa357829003601f168201915b5050505050905090565b60606000821415613b12576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613c72565b600082905060005b60008214613b44578080613b2d90615e0b565b915050600a82613b3d9190615c64565b9150613b1a565b60008167ffffffffffffffff811115613b86577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613bb85781602001600182028036833780820191505090505b5090505b60008514613c6b57600182613bd19190615cef565b9150600a85613be09190615e54565b6030613bec9190615c0e565b60f81b818381518110613c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613c649190615c64565b9450613bbc565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613cec838383613fe7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d2f57613d2a81613fec565b613d6e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613d6d57613d6c8382614035565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613db157613dac816141a2565b613df0565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613def57613dee82826142e5565b5b5b505050565b613dff8383614364565b613e0c6000848484613e50565b613e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e429061575a565b60405180910390fd5b505050565b6000613e718473ffffffffffffffffffffffffffffffffffffffff16614532565b15613fda578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e9a612fc6565b8786866040518563ffffffff1660e01b8152600401613ebc949392919061566f565b602060405180830381600087803b158015613ed657600080fd5b505af1925050508015613f0757506040513d601f19601f82011682018060405250810190613f0491906149f1565b60015b613f8a573d8060008114613f37576040519150601f19603f3d011682016040523d82523d6000602084013e613f3c565b606091505b50600081511415613f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f799061575a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613fdf565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161404284611c57565b61404c9190615cef565b9050600060076000848152602001908152602001600020549050818114614131576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506141b69190615cef565b905060006009600084815260200190815260200160002054905060006008838154811061420c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110614254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806142c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006142f083611c57565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156143d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143cb906158da565b60405180910390fd5b6143dd81612fce565b1561441d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144149061579a565b60405180910390fd5b61442960008383613ce1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546144799190615c0e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461455190615dd9565b90600052602060002090601f01602090048101928261457357600085556145ba565b82601f1061458c57805160ff19168380011785556145ba565b828001600101855582156145ba579182015b828111156145b957825182559160200191906001019061459e565b5b5090506145c791906145cb565b5090565b5b808211156145e45760008160009055506001016145cc565b5090565b60006145fb6145f684615ae6565b615ab5565b9050808382526020820190508285602086028201111561461a57600080fd5b60005b8581101561464a578161463088826146d0565b84526020840193506020830192505060018101905061461d565b5050509392505050565b600061466761466284615b12565b615ab5565b90508281526020810184848401111561467f57600080fd5b61468a848285615d97565b509392505050565b60006146a56146a084615b42565b615ab5565b9050828152602081018484840111156146bd57600080fd5b6146c8848285615d97565b509392505050565b6000813590506146df81615f52565b92915050565b600082601f8301126146f657600080fd5b81356147068482602086016145e8565b91505092915050565b60008135905061471e81615f69565b92915050565b60008135905061473381615f80565b92915050565b60008151905061474881615f80565b92915050565b600082601f83011261475f57600080fd5b813561476f848260208601614654565b91505092915050565b600082601f83011261478957600080fd5b8135614799848260208601614692565b91505092915050565b6000813590506147b181615f97565b92915050565b6000602082840312156147c957600080fd5b60006147d7848285016146d0565b91505092915050565b600080604083850312156147f357600080fd5b6000614801858286016146d0565b9250506020614812858286016146d0565b9150509250929050565b60008060006060848603121561483157600080fd5b600061483f868287016146d0565b9350506020614850868287016146d0565b9250506040614861868287016147a2565b9150509250925092565b6000806000806080858703121561488157600080fd5b600061488f878288016146d0565b94505060206148a0878288016146d0565b93505060406148b1878288016147a2565b925050606085013567ffffffffffffffff8111156148ce57600080fd5b6148da8782880161474e565b91505092959194509250565b600080604083850312156148f957600080fd5b6000614907858286016146d0565b92505060206149188582860161470f565b9150509250929050565b6000806040838503121561493557600080fd5b6000614943858286016146d0565b9250506020614954858286016147a2565b9150509250929050565b60006020828403121561497057600080fd5b600082013567ffffffffffffffff81111561498a57600080fd5b614996848285016146e5565b91505092915050565b6000602082840312156149b157600080fd5b60006149bf8482850161470f565b91505092915050565b6000602082840312156149da57600080fd5b60006149e884828501614724565b91505092915050565b600060208284031215614a0357600080fd5b6000614a1184828501614739565b91505092915050565b600060208284031215614a2c57600080fd5b600082013567ffffffffffffffff811115614a4657600080fd5b614a5284828501614778565b91505092915050565b600060208284031215614a6d57600080fd5b6000614a7b848285016147a2565b91505092915050565b60008060408385031215614a9757600080fd5b6000614aa5858286016147a2565b9250506020614ab6858286016146d0565b9150509250929050565b6000614acc83836155f0565b60208301905092915050565b614ae181615d23565b82525050565b6000614af282615b97565b614afc8185615bc5565b9350614b0783615b72565b8060005b83811015614b38578151614b1f8882614ac0565b9750614b2a83615bb8565b925050600181019050614b0b565b5085935050505092915050565b614b4e81615d35565b82525050565b6000614b5f82615ba2565b614b698185615bd6565b9350614b79818560208601615da6565b614b8281615f41565b840191505092915050565b6000614b9882615bad565b614ba28185615bf2565b9350614bb2818560208601615da6565b614bbb81615f41565b840191505092915050565b6000614bd182615bad565b614bdb8185615c03565b9350614beb818560208601615da6565b80840191505092915050565b60008154614c0481615dd9565b614c0e8186615c03565b94506001821660008114614c295760018114614c3a57614c6d565b60ff19831686528186019350614c6d565b614c4385615b82565b60005b83811015614c6557815481890152600182019150602081019050614c46565b838801955050505b50505092915050565b6000614c83601883615bf2565b91507f53616c6520686173206e6f7420737461727465642079657400000000000000006000830152602082019050919050565b6000614cc3602b83615bf2565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000614d29603283615bf2565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614d8f602683615bf2565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614df5601c83615bf2565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614e35601c83615bf2565b91507f6d6178204e4654207065722061646472657373206578636565646564000000006000830152602082019050919050565b6000614e75602483615bf2565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614edb601983615bf2565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614f1b602883615bf2565b91507f6d6178206d696e7420616d6f756e7420706572207472616e73616374696f6e2060008301527f65786365656465640000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f81602c83615bf2565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614fe7603883615bf2565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061504d602a83615bf2565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006150b3602983615bf2565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000615119601683615bf2565b91507f6d6178204e4654206c696d6974206578636565646564000000000000000000006000830152602082019050919050565b6000615159602083615bf2565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000615199602c83615bf2565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006151ff602083615bf2565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061523f601683615bf2565b91507f74686520636f6e747261637420697320706175736564000000000000000000006000830152602082019050919050565b600061527f602983615bf2565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006152e5601e83615bf2565b91507f6d6178204e46542070726573616c65206c696d697420657863656564656400006000830152602082019050919050565b6000615325602f83615bf2565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061538b602183615bf2565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006153f1600083615be7565b9150600082019050919050565b600061540b601283615bf2565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b600061544b602883615bf2565b91507f6d6178204e465420706572206164647265737320657863656564656420666f7260008301527f2070726573616c650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006154b1603183615bf2565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000615517602c83615bf2565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061557d601783615bf2565b91507f75736572206973206e6f742077686974656c69737465640000000000000000006000830152602082019050919050565b60006155bd601b83615bf2565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b6155f981615d8d565b82525050565b61560881615d8d565b82525050565b600061561a8286614bc6565b91506156268285614bc6565b91506156328284614bf7565b9150819050949350505050565b600061564a826153e4565b9150819050919050565b60006020820190506156696000830184614ad8565b92915050565b60006080820190506156846000830187614ad8565b6156916020830186614ad8565b61569e60408301856155ff565b81810360608301526156b08184614b54565b905095945050505050565b600060208201905081810360008301526156d58184614ae7565b905092915050565b60006020820190506156f26000830184614b45565b92915050565b600060208201905081810360008301526157128184614b8d565b905092915050565b6000602082019050818103600083015261573381614c76565b9050919050565b6000602082019050818103600083015261575381614cb6565b9050919050565b6000602082019050818103600083015261577381614d1c565b9050919050565b6000602082019050818103600083015261579381614d82565b9050919050565b600060208201905081810360008301526157b381614de8565b9050919050565b600060208201905081810360008301526157d381614e28565b9050919050565b600060208201905081810360008301526157f381614e68565b9050919050565b6000602082019050818103600083015261581381614ece565b9050919050565b6000602082019050818103600083015261583381614f0e565b9050919050565b6000602082019050818103600083015261585381614f74565b9050919050565b6000602082019050818103600083015261587381614fda565b9050919050565b6000602082019050818103600083015261589381615040565b9050919050565b600060208201905081810360008301526158b3816150a6565b9050919050565b600060208201905081810360008301526158d38161510c565b9050919050565b600060208201905081810360008301526158f38161514c565b9050919050565b600060208201905081810360008301526159138161518c565b9050919050565b60006020820190508181036000830152615933816151f2565b9050919050565b6000602082019050818103600083015261595381615232565b9050919050565b6000602082019050818103600083015261597381615272565b9050919050565b60006020820190508181036000830152615993816152d8565b9050919050565b600060208201905081810360008301526159b381615318565b9050919050565b600060208201905081810360008301526159d38161537e565b9050919050565b600060208201905081810360008301526159f3816153fe565b9050919050565b60006020820190508181036000830152615a138161543e565b9050919050565b60006020820190508181036000830152615a33816154a4565b9050919050565b60006020820190508181036000830152615a538161550a565b9050919050565b60006020820190508181036000830152615a7381615570565b9050919050565b60006020820190508181036000830152615a93816155b0565b9050919050565b6000602082019050615aaf60008301846155ff565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615adc57615adb615f12565b5b8060405250919050565b600067ffffffffffffffff821115615b0157615b00615f12565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615b2d57615b2c615f12565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115615b5d57615b5c615f12565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615c1982615d8d565b9150615c2483615d8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615c5957615c58615e85565b5b828201905092915050565b6000615c6f82615d8d565b9150615c7a83615d8d565b925082615c8a57615c89615eb4565b5b828204905092915050565b6000615ca082615d8d565b9150615cab83615d8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615ce457615ce3615e85565b5b828202905092915050565b6000615cfa82615d8d565b9150615d0583615d8d565b925082821015615d1857615d17615e85565b5b828203905092915050565b6000615d2e82615d6d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615dc4578082015181840152602081019050615da9565b83811115615dd3576000848401525b50505050565b60006002820490506001821680615df157607f821691505b60208210811415615e0557615e04615ee3565b5b50919050565b6000615e1682615d8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615e4957615e48615e85565b5b600182019050919050565b6000615e5f82615d8d565b9150615e6a83615d8d565b925082615e7a57615e79615eb4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615f5b81615d23565b8114615f6657600080fd5b50565b615f7281615d35565b8114615f7d57600080fd5b50565b615f8981615d41565b8114615f9457600080fd5b50565b615fa081615d8d565b8114615fab57600080fd5b5056fea264697066735822122043ba35155b5d993e2f56b6a1b5f64341287f7354e44024434f0a33530ff7768664736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012556e646561642050617374656c20436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035550430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d623473773373714137415a7361525a3776744d77784364756b3145784a4c356756445063706e50386b78464b2f000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103b85760003560e01c80636f9fb98a116101f2578063a22cb4651161010d578063d0eb26b0116100a0578063eced38731161006f578063eced387314610de8578063edec5f2714610e13578063f2c4ce1e14610e3c578063f2fde38b14610e65576103b8565b8063d0eb26b014610d2e578063d5abeb0114610d57578063da3ef23f14610d82578063e985e9c514610dab576103b8565b8063ba7d2c76116100dc578063ba7d2c7614610c70578063c668286214610c9b578063c87b56dd14610cc6578063cc9ff9c614610d03576103b8565b8063a22cb46514610bde578063a475b5dd14610c07578063a55afea814610c1e578063b88d4fde14610c47576103b8565b80637f00c7a6116101855780638fdcf942116101545780638fdcf94214610b4357806395d89b4114610b6c578063a0712d6814610b97578063a18116f114610bb3576103b8565b80637f00c7a614610a9b578063831e60de14610ac457806383a076be14610aef5780638da5cb5b14610b18576103b8565b8063743c7f6b116101c1578063743c7f6b146109f1578063771282f614610a1a5780637967a50a14610a455780637effc03214610a70576103b8565b80636f9fb98a1461094757806370a0823114610972578063714c5398146109af578063715018a6146109da576103b8565b80632e09282e116102e257806344a0d68a116102755780635c975abb116102445780635c975abb1461088d5780636352211e146108b8578063669736c0146108f55780636f8b44b01461091e576103b8565b806344a0d68a146107d35780634f6ccce7146107fc578063518302271461083957806355f804b314610864576103b8565b806342842e0e116102b157806342842e0e1461071b57806342966c681461074457806342f0ca0d1461076d578063438b630014610796576103b8565b80632e09282e1461066c5780632f745c59146106975780633af32abf146106d45780633ccfd60b14610711576103b8565b80630a50716b1161035a57806318cae2691161032957806318cae269146105b05780631985cc65146105ed578063239c70ae1461061857806323b872dd14610643576103b8565b80630a50716b146105085780630e54a8831461053157806313faede61461055a57806318160ddd14610585576103b8565b8063081812fc11610396578063081812fc1461044e578063081c8c441461048b578063095ea7b3146104b65780630a403f04146104df576103b8565b806301ffc9a7146103bd57806302329a29146103fa57806306fdde0314610423575b600080fd5b3480156103c957600080fd5b506103e460048036038101906103df91906149c8565b610e8e565b6040516103f191906156dd565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061499f565b610f08565b005b34801561042f57600080fd5b50610438610fa1565b60405161044591906156f8565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190614a5b565b611033565b6040516104829190615654565b60405180910390f35b34801561049757600080fd5b506104a06110b8565b6040516104ad91906156f8565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190614922565b611146565b005b3480156104eb57600080fd5b5061050660048036038101906105019190614a5b565b61125e565b005b34801561051457600080fd5b5061052f600480360381019061052a9190614a5b565b6112e4565b005b34801561053d57600080fd5b5061055860048036038101906105539190614a5b565b61136a565b005b34801561056657600080fd5b5061056f6113f0565b60405161057c9190615a9a565b60405180910390f35b34801561059157600080fd5b5061059a6113f6565b6040516105a79190615a9a565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906147b7565b611403565b6040516105e49190615a9a565b60405180910390f35b3480156105f957600080fd5b5061060261141b565b60405161060f9190615a9a565b60405180910390f35b34801561062457600080fd5b5061062d611421565b60405161063a9190615a9a565b60405180910390f35b34801561064f57600080fd5b5061066a6004803603810190610665919061481c565b611427565b005b34801561067857600080fd5b50610681611487565b60405161068e9190615a9a565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614922565b61148d565b6040516106cb9190615a9a565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f691906147b7565b611532565b60405161070891906156dd565b60405180910390f35b610719611588565b005b34801561072757600080fd5b50610742600480360381019061073d919061481c565b61167d565b005b34801561075057600080fd5b5061076b60048036038101906107669190614a5b565b61169d565b005b34801561077957600080fd5b50610794600480360381019061078f9190614a5b565b6116bc565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906147b7565b611742565b6040516107ca91906156bb565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190614a5b565b61183c565b005b34801561080857600080fd5b50610823600480360381019061081e9190614a5b565b6118c2565b6040516108309190615a9a565b60405180910390f35b34801561084557600080fd5b5061084e611959565b60405161085b91906156dd565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614a1a565b61196c565b005b34801561089957600080fd5b506108a2611a02565b6040516108af91906156dd565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614a5b565b611a15565b6040516108ec9190615654565b60405180910390f35b34801561090157600080fd5b5061091c60048036038101906109179190614a5b565b611ac7565b005b34801561092a57600080fd5b5061094560048036038101906109409190614a5b565b611b4d565b005b34801561095357600080fd5b5061095c611bd3565b6040516109699190615a9a565b60405180910390f35b34801561097e57600080fd5b50610999600480360381019061099491906147b7565b611c57565b6040516109a69190615a9a565b60405180910390f35b3480156109bb57600080fd5b506109c4611d0f565b6040516109d191906156f8565b60405180910390f35b3480156109e657600080fd5b506109ef611e1d565b005b3480156109fd57600080fd5b50610a186004803603810190610a139190614a5b565b611ea5565b005b348015610a2657600080fd5b50610a2f611f2b565b604051610a3c9190615a9a565b60405180910390f35b348015610a5157600080fd5b50610a5a611f31565b604051610a679190615a9a565b60405180910390f35b348015610a7c57600080fd5b50610a85611f37565b604051610a929190615a9a565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd9190614a5b565b611f3d565b005b348015610ad057600080fd5b50610ad9611fc3565b604051610ae69190615a9a565b60405180910390f35b348015610afb57600080fd5b50610b166004803603810190610b119190614a84565b611fe2565b005b348015610b2457600080fd5b50610b2d61219e565b604051610b3a9190615654565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b659190614a5b565b6121c8565b005b348015610b7857600080fd5b50610b8161224e565b604051610b8e91906156f8565b60405180910390f35b610bb16004803603810190610bac9190614a5b565b6122e0565b005b348015610bbf57600080fd5b50610bc861251f565b604051610bd59190615a9a565b60405180910390f35b348015610bea57600080fd5b50610c056004803603810190610c0091906148e6565b612525565b005b348015610c1357600080fd5b50610c1c6126a6565b005b348015610c2a57600080fd5b50610c456004803603810190610c4091906147b7565b61273f565b005b348015610c5357600080fd5b50610c6e6004803603810190610c69919061486b565b612816565b005b348015610c7c57600080fd5b50610c85612878565b604051610c929190615a9a565b60405180910390f35b348015610ca757600080fd5b50610cb061287e565b604051610cbd91906156f8565b60405180910390f35b348015610cd257600080fd5b50610ced6004803603810190610ce89190614a5b565b61290c565b604051610cfa91906156f8565b60405180910390f35b348015610d0f57600080fd5b50610d18612a5d565b604051610d259190615a9a565b60405180910390f35b348015610d3a57600080fd5b50610d556004803603810190610d509190614a5b565b612a63565b005b348015610d6357600080fd5b50610d6c612ae9565b604051610d799190615a9a565b60405180910390f35b348015610d8e57600080fd5b50610da96004803603810190610da49190614a1a565b612aef565b005b348015610db757600080fd5b50610dd26004803603810190610dcd91906147e0565b612b85565b604051610ddf91906156dd565b60405180910390f35b348015610df457600080fd5b50610dfd612c19565b604051610e0a9190615a9a565b60405180910390f35b348015610e1f57600080fd5b50610e3a6004803603810190610e35919061495e565b612c1f565b005b348015610e4857600080fd5b50610e636004803603810190610e5e9190614a1a565b612d56565b005b348015610e7157600080fd5b50610e8c6004803603810190610e8791906147b7565b612dec565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f015750610f0082612ee4565b5b9050919050565b610f10612fc6565b73ffffffffffffffffffffffffffffffffffffffff16610f2e61219e565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b9061591a565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b606060008054610fb090615dd9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdc90615dd9565b80156110295780601f10610ffe57610100808354040283529160200191611029565b820191906000526020600020905b81548152906001019060200180831161100c57829003601f168201915b5050505050905090565b600061103e82612fce565b61107d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611074906158fa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d80546110c590615dd9565b80601f01602080910402602001604051908101604052809291908181526020018280546110f190615dd9565b801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b505050505081565b600061115182611a15565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906159ba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111e1612fc6565b73ffffffffffffffffffffffffffffffffffffffff161480611210575061120f8161120a612fc6565b612b85565b5b61124f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112469061585a565b60405180910390fd5b611259838361303a565b505050565b611266612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661128461219e565b73ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d19061591a565b60405180910390fd5b8060118190555050565b6112ec612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661130a61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113579061591a565b60405180910390fd5b8060148190555050565b611372612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661139061219e565b73ffffffffffffffffffffffffffffffffffffffff16146113e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dd9061591a565b60405180910390fd5b8060188190555050565b600f5481565b6000600880549050905090565b601c6020528060005260406000206000915090505481565b60165481565b60135481565b611438611432612fc6565b826130f3565b611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e90615a1a565b60405180910390fd5b6114828383836131d1565b505050565b60145481565b600061149883611c57565b82106114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d09061573a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611590612fc6565b73ffffffffffffffffffffffffffffffffffffffff166115ae61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb9061591a565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161162a9061563f565b60006040518083038185875af1925050503d8060008114611667576040519150601f19603f3d011682016040523d82523d6000602084013e61166c565b606091505b505090508061167a57600080fd5b50565b61169883838360405180602001604052806000815250612816565b505050565b6116a7338261342d565b6116b057600080fd5b6116b98161355f565b50565b6116c4612fc6565b73ffffffffffffffffffffffffffffffffffffffff166116e261219e565b73ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f9061591a565b60405180910390fd5b8060178190555050565b6060600061174f83611c57565b905060008167ffffffffffffffff811115611793577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117c15781602001602082028036833780820191505090505b50905060005b82811015611831576117d9858261148d565b828281518110611812577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061182990615e0b565b9150506117c7565b508092505050919050565b611844612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661186261219e565b73ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af9061591a565b60405180910390fd5b80600f8190555050565b60006118cc6113f6565b821061190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490615a3a565b60405180910390fd5b60088281548110611947577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601a60019054906101000a900460ff1681565b611974612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661199261219e565b73ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df9061591a565b60405180910390fd5b80600b90805190602001906119fe929190614545565b5050565b601a60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab59061589a565b60405180910390fd5b80915050919050565b611acf612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611aed61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061591a565b60405180910390fd5b8060128190555050565b611b55612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611b7361219e565b73ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc09061591a565b60405180910390fd5b8060108190555050565b6000611bdd612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611bfb61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c489061591a565b60405180910390fd5b47905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf9061587a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060611d19612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611d3761219e565b73ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061591a565b60405180910390fd5b600b8054611d9a90615dd9565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc690615dd9565b8015611e135780601f10611de857610100808354040283529160200191611e13565b820191906000526020600020905b815481529060010190602001808311611df657829003601f168201915b5050505050905090565b611e25612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611e4361219e565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e909061591a565b60405180910390fd5b611ea36000613670565b565b611ead612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611ecb61219e565b73ffffffffffffffffffffffffffffffffffffffff1614611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f189061591a565b60405180910390fd5b8060168190555050565b60195481565b60175481565b60125481565b611f45612fc6565b73ffffffffffffffffffffffffffffffffffffffff16611f6361219e565b73ffffffffffffffffffffffffffffffffffffffff1614611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb09061591a565b60405180910390fd5b8060138190555050565b6000601754421015611fd957600e549050611fdf565b600f5490505b90565b611fea612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661200861219e565b73ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120559061591a565b60405180910390fd5b600082116120a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209890615a7a565b60405180910390fd5b6000601954905060105483826120b79190615c0e565b11156120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef906158ba565b60405180910390fd5b6000600190505b83811161219857601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061215690615e0b565b919050555061217083828461216b9190615c0e565b613736565b600160195461217f9190615c0e565b601981905550808061219090615e0b565b9150506120ff565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6121d0612fc6565b73ffffffffffffffffffffffffffffffffffffffff166121ee61219e565b73ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061591a565b60405180910390fd5b80600e8190555050565b60606001805461225d90615dd9565b80601f016020809104026020016040519081016040528092919081815260200182805461228990615dd9565b80156122d65780601f106122ab576101008083540402835291602001916122d6565b820191906000526020600020905b8154815290600101906020018083116122b957829003601f168201915b5050505050905090565b601a60009054906101000a900460ff1615612330576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123279061593a565b60405180910390fd5b601654421015612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c9061571a565b60405180910390fd5b80600081116123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090615a7a565b60405180910390fd5b600060195490506000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601854421061241c576124178185613754565b612428565b61242781858461383d565b5b60105484836124379190615c0e565b1115612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f906158ba565b60405180910390fd5b6000600190505b84811161251857601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906124d690615e0b565b91905055506124f03382856124eb9190615c0e565b613736565b60016019546124ff9190615c0e565b601981905550808061251090615e0b565b91505061247f565b5050505050565b60115481565b61252d612fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561259b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612592906157fa565b60405180910390fd5b80600560006125a8612fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612655612fc6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161269a91906156dd565b60405180910390a35050565b6126ae612fc6565b73ffffffffffffffffffffffffffffffffffffffff166126cc61219e565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127199061591a565b60405180910390fd5b6001601a60016101000a81548160ff021916908315150217905550565b612747612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661276561219e565b73ffffffffffffffffffffffffffffffffffffffff16146127bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b29061591a565b60405180910390fd5b6001601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612827612821612fc6565b836130f3565b612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90615a1a565b60405180910390fd5b612872848484846139dc565b50505050565b60155481565b600c805461288b90615dd9565b80601f01602080910402602001604051908101604052809291908181526020018280546128b790615dd9565b80156129045780601f106128d957610100808354040283529160200191612904565b820191906000526020600020905b8154815290600101906020018083116128e757829003601f168201915b505050505081565b606061291782612fce565b612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d9061599a565b60405180910390fd5b601a60019054906101000a900460ff166129fc57600d805461297790615dd9565b80601f01602080910402602001604051908101604052809291908181526020018280546129a390615dd9565b80156129f05780601f106129c5576101008083540402835291602001916129f0565b820191906000526020600020905b8154815290600101906020018083116129d357829003601f168201915b50505050509050612a58565b6000612a06613a38565b90506000815111612a265760405180602001604052806000815250612a54565b80612a3084613aca565b600c604051602001612a449392919061560e565b6040516020818303038152906040525b9150505b919050565b600e5481565b612a6b612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612a8961219e565b73ffffffffffffffffffffffffffffffffffffffff1614612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad69061591a565b60405180910390fd5b8060158190555050565b60105481565b612af7612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612b1561219e565b73ffffffffffffffffffffffffffffffffffffffff1614612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b629061591a565b60405180910390fd5b80600c9080519060200190612b81929190614545565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60185481565b612c27612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612c4561219e565b73ffffffffffffffffffffffffffffffffffffffff1614612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c929061591a565b60405180910390fd5b60005b8151811015612d52576001601b6000848481518110612ce6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612d4a90615e0b565b915050612c9e565b5050565b612d5e612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612d7c61219e565b73ffffffffffffffffffffffffffffffffffffffff1614612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc99061591a565b60405180910390fd5b80600d9080519060200190612de8929190614545565b5050565b612df4612fc6565b73ffffffffffffffffffffffffffffffffffffffff16612e1261219e565b73ffffffffffffffffffffffffffffffffffffffff1614612e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5f9061591a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecf9061577a565b60405180910390fd5b612ee181613670565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612faf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612fbf5750612fbe82613c77565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166130ad83611a15565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006130fe82612fce565b61313d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131349061583a565b60405180910390fd5b600061314883611a15565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806131b757508373ffffffffffffffffffffffffffffffffffffffff1661319f84611033565b73ffffffffffffffffffffffffffffffffffffffff16145b806131c857506131c78185612b85565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166131f182611a15565b73ffffffffffffffffffffffffffffffffffffffff1614613247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323e9061595a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae906157da565b60405180910390fd5b6132c2838383613ce1565b6132cd60008261303a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461331d9190615cef565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133749190615c0e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061343882612fce565b613477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346e9061583a565b60405180910390fd5b600061348283611a15565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806134f157508373ffffffffffffffffffffffffffffffffffffffff166134d984611033565b73ffffffffffffffffffffffffffffffffffffffff16145b8061350257506135018185612b85565b5b806135565750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b91505092915050565b600061356a82611a15565b905061357881600084613ce1565b61358360008361303a565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135d39190615cef565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613750828260405180602001604052806000815250613df5565b5050565b60155481836137639190615c0e565b11156137a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379b906157ba565b60405180910390fd5b80600f546137b29190615c95565b3410156137f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137eb906159da565b60405180910390fd5b601354811115613839576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138309061581a565b60405180910390fd5b5050565b6000601754421061385357600f5490508061385a565b600e549050805b5061386433611532565b6138a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389a90615a5a565b60405180910390fd5b60145483856138b29190615c0e565b11156138f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ea906159fa565b60405180910390fd5b82816138ff9190615c95565b341015613941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613938906159da565b60405180910390fd5b601254831115613986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397d9061581a565b60405180910390fd5b60115483836139959190615c0e565b11156139d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cd9061597a565b60405180910390fd5b50505050565b6139e78484846131d1565b6139f384848484613e50565b613a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a299061575a565b60405180910390fd5b50505050565b6060600b8054613a4790615dd9565b80601f0160208091040260200160405190810160405280929190818152602001828054613a7390615dd9565b8015613ac05780601f10613a9557610100808354040283529160200191613ac0565b820191906000526020600020905b815481529060010190602001808311613aa357829003601f168201915b5050505050905090565b60606000821415613b12576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613c72565b600082905060005b60008214613b44578080613b2d90615e0b565b915050600a82613b3d9190615c64565b9150613b1a565b60008167ffffffffffffffff811115613b86577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613bb85781602001600182028036833780820191505090505b5090505b60008514613c6b57600182613bd19190615cef565b9150600a85613be09190615e54565b6030613bec9190615c0e565b60f81b818381518110613c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613c649190615c64565b9450613bbc565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613cec838383613fe7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d2f57613d2a81613fec565b613d6e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613d6d57613d6c8382614035565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613db157613dac816141a2565b613df0565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613def57613dee82826142e5565b5b5b505050565b613dff8383614364565b613e0c6000848484613e50565b613e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e429061575a565b60405180910390fd5b505050565b6000613e718473ffffffffffffffffffffffffffffffffffffffff16614532565b15613fda578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e9a612fc6565b8786866040518563ffffffff1660e01b8152600401613ebc949392919061566f565b602060405180830381600087803b158015613ed657600080fd5b505af1925050508015613f0757506040513d601f19601f82011682018060405250810190613f0491906149f1565b60015b613f8a573d8060008114613f37576040519150601f19603f3d011682016040523d82523d6000602084013e613f3c565b606091505b50600081511415613f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f799061575a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613fdf565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161404284611c57565b61404c9190615cef565b9050600060076000848152602001908152602001600020549050818114614131576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506141b69190615cef565b905060006009600084815260200190815260200160002054905060006008838154811061420c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110614254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806142c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006142f083611c57565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156143d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143cb906158da565b60405180910390fd5b6143dd81612fce565b1561441d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144149061579a565b60405180910390fd5b61442960008383613ce1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546144799190615c0e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461455190615dd9565b90600052602060002090601f01602090048101928261457357600085556145ba565b82601f1061458c57805160ff19168380011785556145ba565b828001600101855582156145ba579182015b828111156145b957825182559160200191906001019061459e565b5b5090506145c791906145cb565b5090565b5b808211156145e45760008160009055506001016145cc565b5090565b60006145fb6145f684615ae6565b615ab5565b9050808382526020820190508285602086028201111561461a57600080fd5b60005b8581101561464a578161463088826146d0565b84526020840193506020830192505060018101905061461d565b5050509392505050565b600061466761466284615b12565b615ab5565b90508281526020810184848401111561467f57600080fd5b61468a848285615d97565b509392505050565b60006146a56146a084615b42565b615ab5565b9050828152602081018484840111156146bd57600080fd5b6146c8848285615d97565b509392505050565b6000813590506146df81615f52565b92915050565b600082601f8301126146f657600080fd5b81356147068482602086016145e8565b91505092915050565b60008135905061471e81615f69565b92915050565b60008135905061473381615f80565b92915050565b60008151905061474881615f80565b92915050565b600082601f83011261475f57600080fd5b813561476f848260208601614654565b91505092915050565b600082601f83011261478957600080fd5b8135614799848260208601614692565b91505092915050565b6000813590506147b181615f97565b92915050565b6000602082840312156147c957600080fd5b60006147d7848285016146d0565b91505092915050565b600080604083850312156147f357600080fd5b6000614801858286016146d0565b9250506020614812858286016146d0565b9150509250929050565b60008060006060848603121561483157600080fd5b600061483f868287016146d0565b9350506020614850868287016146d0565b9250506040614861868287016147a2565b9150509250925092565b6000806000806080858703121561488157600080fd5b600061488f878288016146d0565b94505060206148a0878288016146d0565b93505060406148b1878288016147a2565b925050606085013567ffffffffffffffff8111156148ce57600080fd5b6148da8782880161474e565b91505092959194509250565b600080604083850312156148f957600080fd5b6000614907858286016146d0565b92505060206149188582860161470f565b9150509250929050565b6000806040838503121561493557600080fd5b6000614943858286016146d0565b9250506020614954858286016147a2565b9150509250929050565b60006020828403121561497057600080fd5b600082013567ffffffffffffffff81111561498a57600080fd5b614996848285016146e5565b91505092915050565b6000602082840312156149b157600080fd5b60006149bf8482850161470f565b91505092915050565b6000602082840312156149da57600080fd5b60006149e884828501614724565b91505092915050565b600060208284031215614a0357600080fd5b6000614a1184828501614739565b91505092915050565b600060208284031215614a2c57600080fd5b600082013567ffffffffffffffff811115614a4657600080fd5b614a5284828501614778565b91505092915050565b600060208284031215614a6d57600080fd5b6000614a7b848285016147a2565b91505092915050565b60008060408385031215614a9757600080fd5b6000614aa5858286016147a2565b9250506020614ab6858286016146d0565b9150509250929050565b6000614acc83836155f0565b60208301905092915050565b614ae181615d23565b82525050565b6000614af282615b97565b614afc8185615bc5565b9350614b0783615b72565b8060005b83811015614b38578151614b1f8882614ac0565b9750614b2a83615bb8565b925050600181019050614b0b565b5085935050505092915050565b614b4e81615d35565b82525050565b6000614b5f82615ba2565b614b698185615bd6565b9350614b79818560208601615da6565b614b8281615f41565b840191505092915050565b6000614b9882615bad565b614ba28185615bf2565b9350614bb2818560208601615da6565b614bbb81615f41565b840191505092915050565b6000614bd182615bad565b614bdb8185615c03565b9350614beb818560208601615da6565b80840191505092915050565b60008154614c0481615dd9565b614c0e8186615c03565b94506001821660008114614c295760018114614c3a57614c6d565b60ff19831686528186019350614c6d565b614c4385615b82565b60005b83811015614c6557815481890152600182019150602081019050614c46565b838801955050505b50505092915050565b6000614c83601883615bf2565b91507f53616c6520686173206e6f7420737461727465642079657400000000000000006000830152602082019050919050565b6000614cc3602b83615bf2565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000614d29603283615bf2565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614d8f602683615bf2565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614df5601c83615bf2565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614e35601c83615bf2565b91507f6d6178204e4654207065722061646472657373206578636565646564000000006000830152602082019050919050565b6000614e75602483615bf2565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614edb601983615bf2565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614f1b602883615bf2565b91507f6d6178206d696e7420616d6f756e7420706572207472616e73616374696f6e2060008301527f65786365656465640000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f81602c83615bf2565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614fe7603883615bf2565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061504d602a83615bf2565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006150b3602983615bf2565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000615119601683615bf2565b91507f6d6178204e4654206c696d6974206578636565646564000000000000000000006000830152602082019050919050565b6000615159602083615bf2565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000615199602c83615bf2565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006151ff602083615bf2565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061523f601683615bf2565b91507f74686520636f6e747261637420697320706175736564000000000000000000006000830152602082019050919050565b600061527f602983615bf2565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006152e5601e83615bf2565b91507f6d6178204e46542070726573616c65206c696d697420657863656564656400006000830152602082019050919050565b6000615325602f83615bf2565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061538b602183615bf2565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006153f1600083615be7565b9150600082019050919050565b600061540b601283615bf2565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b600061544b602883615bf2565b91507f6d6178204e465420706572206164647265737320657863656564656420666f7260008301527f2070726573616c650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006154b1603183615bf2565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000615517602c83615bf2565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061557d601783615bf2565b91507f75736572206973206e6f742077686974656c69737465640000000000000000006000830152602082019050919050565b60006155bd601b83615bf2565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b6155f981615d8d565b82525050565b61560881615d8d565b82525050565b600061561a8286614bc6565b91506156268285614bc6565b91506156328284614bf7565b9150819050949350505050565b600061564a826153e4565b9150819050919050565b60006020820190506156696000830184614ad8565b92915050565b60006080820190506156846000830187614ad8565b6156916020830186614ad8565b61569e60408301856155ff565b81810360608301526156b08184614b54565b905095945050505050565b600060208201905081810360008301526156d58184614ae7565b905092915050565b60006020820190506156f26000830184614b45565b92915050565b600060208201905081810360008301526157128184614b8d565b905092915050565b6000602082019050818103600083015261573381614c76565b9050919050565b6000602082019050818103600083015261575381614cb6565b9050919050565b6000602082019050818103600083015261577381614d1c565b9050919050565b6000602082019050818103600083015261579381614d82565b9050919050565b600060208201905081810360008301526157b381614de8565b9050919050565b600060208201905081810360008301526157d381614e28565b9050919050565b600060208201905081810360008301526157f381614e68565b9050919050565b6000602082019050818103600083015261581381614ece565b9050919050565b6000602082019050818103600083015261583381614f0e565b9050919050565b6000602082019050818103600083015261585381614f74565b9050919050565b6000602082019050818103600083015261587381614fda565b9050919050565b6000602082019050818103600083015261589381615040565b9050919050565b600060208201905081810360008301526158b3816150a6565b9050919050565b600060208201905081810360008301526158d38161510c565b9050919050565b600060208201905081810360008301526158f38161514c565b9050919050565b600060208201905081810360008301526159138161518c565b9050919050565b60006020820190508181036000830152615933816151f2565b9050919050565b6000602082019050818103600083015261595381615232565b9050919050565b6000602082019050818103600083015261597381615272565b9050919050565b60006020820190508181036000830152615993816152d8565b9050919050565b600060208201905081810360008301526159b381615318565b9050919050565b600060208201905081810360008301526159d38161537e565b9050919050565b600060208201905081810360008301526159f3816153fe565b9050919050565b60006020820190508181036000830152615a138161543e565b9050919050565b60006020820190508181036000830152615a33816154a4565b9050919050565b60006020820190508181036000830152615a538161550a565b9050919050565b60006020820190508181036000830152615a7381615570565b9050919050565b60006020820190508181036000830152615a93816155b0565b9050919050565b6000602082019050615aaf60008301846155ff565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615adc57615adb615f12565b5b8060405250919050565b600067ffffffffffffffff821115615b0157615b00615f12565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615b2d57615b2c615f12565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115615b5d57615b5c615f12565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615c1982615d8d565b9150615c2483615d8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615c5957615c58615e85565b5b828201905092915050565b6000615c6f82615d8d565b9150615c7a83615d8d565b925082615c8a57615c89615eb4565b5b828204905092915050565b6000615ca082615d8d565b9150615cab83615d8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615ce457615ce3615e85565b5b828202905092915050565b6000615cfa82615d8d565b9150615d0583615d8d565b925082821015615d1857615d17615e85565b5b828203905092915050565b6000615d2e82615d6d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615dc4578082015181840152602081019050615da9565b83811115615dd3576000848401525b50505050565b60006002820490506001821680615df157607f821691505b60208210811415615e0557615e04615ee3565b5b50919050565b6000615e1682615d8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615e4957615e48615e85565b5b600182019050919050565b6000615e5f82615d8d565b9150615e6a83615d8d565b925082615e7a57615e79615eb4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615f5b81615d23565b8114615f6657600080fd5b50565b615f7281615d35565b8114615f7d57600080fd5b50565b615f8981615d41565b8114615f9457600080fd5b50565b615fa081615d8d565b8114615fab57600080fd5b5056fea264697066735822122043ba35155b5d993e2f56b6a1b5f64341287f7354e44024434f0a33530ff7768664736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012556e646561642050617374656c20436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035550430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d623473773373714137415a7361525a3776744d77784364756b3145784a4c356756445063706e50386b78464b2f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Undead Pastel Club
Arg [1] : _symbol (string): UPC
Arg [2] : _initNotRevealedUri (string): https://gateway.pinata.cloud/ipfs/Qmb4sw3sqA7AZsaRZ7vtMwxCduk1ExJL5gVDPcpnP8kxFK/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 556e646561642050617374656c20436c75620000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5550430000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d623473773373714137415a7361525a3776744d77784364756b314578
Arg [10] : 4a4c356756445063706e50386b78464b2f000000000000000000000000000000


Deployed Bytecode Sourcemap

41443:8246:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33236:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46971:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20755:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22278:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41602:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21843:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48086:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47050:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48548:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41679:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33935:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42258:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41969:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41838:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23188:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41876:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33572:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45440:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48860:174;;;:::i;:::-;;23583:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49040:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48428:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45558:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47384:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34111:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42175:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47728:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42144:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20443:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47470:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48220:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46761:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20163:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46660:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40778:88;;;;;;;;;;;;;:::i;:::-;;48320:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42107:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42013:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41794:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47606:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46457:175;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44975:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40167:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47284:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20910:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44223:746;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41751:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22581:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46902:63;;;;;;;;;;;;;:::i;:::-;;49165:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23811:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41925:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41560:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45912:539;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41635:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47174:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41715:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47832:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22943:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42060:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48668:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47960:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41011:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33236:260;33363:4;33408:35;33393:50;;;:11;:50;;;;:97;;;;33454:36;33478:11;33454:23;:36::i;:::-;33393:97;33379:111;;33236:260;;;:::o;46971:73::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47032:6:::1;47023;;:15;;;;;;;;;;;;;;;;;;46971:73:::0;:::o;20755:94::-;20809:13;20838:5;20831:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20755:94;:::o;22278:239::-;22379:7;22406:16;22414:7;22406;:16::i;:::-;22398:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22487:15;:24;22503:7;22487:24;;;;;;;;;;;;;;;;;;;;;22480:31;;22278:239;;;:::o;41602:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21843:377::-;21920:13;21936:23;21951:7;21936:14;:23::i;:::-;21920:39;;21980:5;21974:11;;:2;:11;;;;21966:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22064:5;22048:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22073:37;22090:5;22097:12;:10;:12::i;:::-;22073:16;:37::i;:::-;22048:62;22032:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;22193:21;22202:2;22206:7;22193:8;:21::i;:::-;21843:377;;;:::o;48086:128::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48188:20:::1;48169:16;:39;;;;48086:128:::0;:::o;47050:118::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47156:6:::1;47128:25;:34;;;;47050:118:::0;:::o;48548:114::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48641:15:::1;48624:14;:32;;;;48548:114:::0;:::o;41679:31::-;;;;:::o;33935:107::-;33996:7;34019:10;:17;;;;34012:24;;33935:107;:::o;42258:55::-;;;;;;;;;;;;;;;;;:::o;41969:39::-;;;;:::o;41838:33::-;;;;:::o;23188:332::-;23369:41;23388:12;:10;:12::i;:::-;23402:7;23369:18;:41::i;:::-;23353:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;23486:28;23496:4;23502:2;23506:7;23486:9;:28::i;:::-;23188:332;;;:::o;41876:44::-;;;;:::o;33572:295::-;33694:7;33737:23;33754:5;33737:16;:23::i;:::-;33729:5;:31;33713:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;33835:12;:19;33848:5;33835:19;;;;;;;;;;;;;;;:26;33855:5;33835:26;;;;;;;;;;;;33828:33;;33572:295;;;;:::o;45440:112::-;45499:4;45519:20;:27;45540:5;45519:27;;;;;;;;;;;;;;;;;;;;;;;;;45512:34;;45440:112;;;:::o;48860:174::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48913:12:::1;48939:10;48931:24;;48964:21;48931:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48912:93;;;49020:7;49012:16;;;::::0;::::1;;40436:1;48860:174::o:0;23583:165::-;23703:39;23720:4;23726:2;23730:7;23703:39;;;;;;;;;;;;:16;:39::i;:::-;23583:165;;;:::o;49040:119::-;49093:38;49111:10;49123:7;49093:17;:38::i;:::-;49085:47;;;;;;49139:14;49145:7;49139:5;:14::i;:::-;49040:119;:::o;48428:114::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48521:15:::1;48504:14;:32;;;;48428:114:::0;:::o;45558:348::-;45633:16;45661:23;45687:17;45697:6;45687:9;:17::i;:::-;45661:43;;45711:25;45753:15;45739:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45711:58;;45781:9;45776:103;45796:15;45792:1;:19;45776:103;;;45841:30;45861:6;45869:1;45841:19;:30::i;:::-;45827:8;45836:1;45827:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;45813:3;;;;;:::i;:::-;;;;45776:103;;;;45892:8;45885:15;;;;45558:348;;;:::o;47384:80::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47450:8:::1;47443:4;:15;;;;47384:80:::0;:::o;34111:272::-;34211:7;34254:30;:28;:30::i;:::-;34246:5;:38;34230:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;34360:10;34371:5;34360:17;;;;;;;;;;;;;;;;;;;;;;;;34353:24;;34111:272;;;:::o;42175:28::-;;;;;;;;;;;;;:::o;47728:98::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47809:11:::1;47799:7;:21;;;;;;;;;;;;:::i;:::-;;47728:98:::0;:::o;42144:26::-;;;;;;;;;;;;;:::o;20443:253::-;20540:7;20559:13;20575:7;:16;20583:7;20575:16;;;;;;;;;;;;;;;;;;;;;20559:32;;20623:1;20606:19;;:5;:19;;;;20598:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20685:5;20678:12;;;20443:253;;;:::o;47470:130::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47577:17:::1;47554:20;:40;;;;47470:130:::0;:::o;48220:94::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48298:10:::1;48286:9;:22;;;;48220:94:::0;:::o;46761:111::-;46822:7;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46845:21:::1;46838:28;;46761:111:::0;:::o;20163:226::-;20260:7;20304:1;20287:19;;:5;:19;;;;20279:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20367:9;:16;20377:5;20367:16;;;;;;;;;;;;;;;;20360:23;;20163:226;;;:::o;46660:95::-;46713:13;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46742:7:::1;46735:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46660:95:::0;:::o;40778:88::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40839:21:::1;40857:1;40839:9;:21::i;:::-;40778:88::o:0;48320:102::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48404:12:::1;48390:11;:26;;;;48320:102:::0;:::o;42107:32::-;;;;:::o;42013:42::-;;;;:::o;41794:39::-;;;;:::o;47606:116::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47699:17:::1;47683:13;:33;;;;47606:116:::0;:::o;46457:175::-;46504:7;46542:14;;46524:15;:32;46520:107;;;46574:11;;46567:18;;;;46520:107;46615:4;;46608:11;;46457:175;;:::o;44975:441::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45077:1:::1;45063:11;:15;45055:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45117:14;45134:13;;45117:30;;45186:9;;45171:11;45162:6;:20;;;;:::i;:::-;:33;;45154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45236:9;45248:1;45236:13;;45231:180;45256:11;45251:1;:16;45231:180;;45283:20;:33;45304:11;45283:33;;;;;;;;;;;;;;;;:35;;;;;;;;;:::i;:::-;;;;;;45327:34;45337:11;45359:1;45350:6;:10;;;;:::i;:::-;45327:9;:34::i;:::-;45402:1;45386:13;;:17;;;;:::i;:::-;45370:13;:33;;;;45269:3;;;;;:::i;:::-;;;;45231:180;;;;40436:1;44975:441:::0;;:::o;40167:81::-;40213:7;40236:6;;;;;;;;;;;40229:13;;40167:81;:::o;47284:94::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47364:8:::1;47350:11;:22;;;;47284:94:::0;:::o;20910:98::-;20966:13;20995:7;20988:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20910:98;:::o;44223:746::-;42613:6;;;;;;;;;;;42612:7;42604:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;42721:11:::1;;42702:15;:30;;42694:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44338:11:::2;42858:1;42844:11;:15;42836:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44361:14:::3;44378:13;;44361:30;;44398:24;44425:20;:32;44446:10;44425:32;;;;;;;;;;;;;;;;44398:59;;44557:14;;44539:15;:32;:161;;44648:52;44670:16;44688:11;44648:21;:52::i;:::-;44539:161;;;44581:57;44600:16;44618:11;44631:6;44581:18;:57::i;:::-;44539:161;44741:9;;44726:11;44717:6;:20;;;;:::i;:::-;:33;;44709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44791:9;44803:1;44791:13;;44786:178;44811:11;44806:1;:16;44786:178;;44838:20;:32;44859:10;44838:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;44881:33;44891:10;44912:1;44903:6;:10;;;;:::i;:::-;44881:9;:33::i;:::-;44955:1;44939:13;;:17;;;;:::i;:::-;44923:13;:33;;;;44824:3;;;;;:::i;:::-;;;;44786:178;;;;42898:1;;42768::::2;44223:746:::0;:::o;41751:38::-;;;;:::o;22581:299::-;22710:12;:10;:12::i;:::-;22698:24;;:8;:24;;;;22690:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22806:8;22761:18;:32;22780:12;:10;:12::i;:::-;22761:32;;;;;;;;;;;;;;;:42;22794:8;22761:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22855:8;22826:48;;22841:12;:10;:12::i;:::-;22826:48;;;22865:8;22826:48;;;;;;:::i;:::-;;;;;;;;22581:299;;:::o;46902:63::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46955:4:::1;46944:8;;:15;;;;;;;;;;;;;;;;;;46902:63::o:0;49165:111::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49266:4:::1;49236:14;:27;49251:11;49236:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;49165:111:::0;:::o;23811:321::-;23972:41;23991:12;:10;:12::i;:::-;24005:7;23972:18;:41::i;:::-;23956:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;24087:39;24101:4;24107:2;24111:7;24120:5;24087:13;:39::i;:::-;23811:321;;;;:::o;41925:39::-;;;;:::o;41560:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45912:539::-;46010:13;46051:16;46059:7;46051;:16::i;:::-;46035:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46146:8;;;;;;;;;;;46141:305;;46172:14;46165:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46141:305;46209:28;46240:10;:8;:10::i;:::-;46209:41;;46306:1;46281:14;46275:28;:32;:163;;;;;;;;;;;;;;;;;46359:14;46375:18;:7;:16;:18::i;:::-;46395:13;46342:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46275:163;46259:179;;;45912:539;;;;:::o;41635:39::-;;;;:::o;47174:104::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47266:6:::1;47245:18;:27;;;;47174:104:::0;:::o;41715:31::-;;;;:::o;47832:122::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47931:17:::1;47915:13;:33;;;;;;;;;;;;:::i;:::-;;47832:122:::0;:::o;22943:186::-;23065:4;23088:18;:25;23107:5;23088:25;;;;;;;;;;;;;;;:35;23114:8;23088:35;;;;;;;;;;;;;;;;;;;;;;;;;23081:42;;22943:186;;;;:::o;42060:42::-;;;;:::o;48668:186::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48749:9:::1;48744:105;48768:9;:16;48764:1;:20;48744:105;;;48837:4;48800:20;:34;48821:9;48831:1;48821:12;;;;;;;;;;;;;;;;;;;;;;48800:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;48786:3;;;;;:::i;:::-;;;;48744:105;;;;48668:186:::0;:::o;47960:120::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48059:15:::1;48042:14;:32;;;;;;;;;;;;:::i;:::-;;47960:120:::0;:::o;41011:182::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41116:1:::1;41096:22;;:8;:22;;;;41088:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41168:19;41178:8;41168:9;:19::i;:::-;41011:182:::0;:::o;19798:309::-;19925:4;19970:25;19955:40;;;:11;:40;;;;:99;;;;20021:33;20006:48;;;:11;:48;;;;19955:99;:146;;;;20065:36;20089:11;20065:23;:36::i;:::-;19955:146;19941:160;;19798:309;;;:::o;15486:92::-;15539:7;15562:10;15555:17;;15486:92;:::o;25579:121::-;25644:4;25692:1;25664:30;;:7;:16;25672:7;25664:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25657:37;;25579:121;;;:::o;29313:164::-;29411:2;29384:15;:24;29400:7;29384:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29463:7;29459:2;29425:46;;29434:23;29449:7;29434:14;:23::i;:::-;29425:46;;;;;;;;;;;;29313:164;;:::o;25851:371::-;25964:4;25988:16;25996:7;25988;:16::i;:::-;25980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26060:13;26076:23;26091:7;26076:14;:23::i;:::-;26060:39;;26125:5;26114:16;;:7;:16;;;:58;;;;26165:7;26141:31;;:20;26153:7;26141:11;:20::i;:::-;:31;;;26114:58;:101;;;;26183:32;26200:5;26207:7;26183:16;:32::i;:::-;26114:101;26106:110;;;25851:371;;;;:::o;28660:547::-;28809:4;28782:31;;:23;28797:7;28782:14;:23::i;:::-;:31;;;28766:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;28901:1;28887:16;;:2;:16;;;;28879:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28953:39;28974:4;28980:2;28984:7;28953:20;:39::i;:::-;29049:29;29066:1;29070:7;29049:8;:29::i;:::-;29106:1;29087:9;:15;29097:4;29087:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29131:1;29114:9;:13;29124:2;29114:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29158:2;29139:7;:16;29147:7;29139:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29193:7;29189:2;29174:27;;29183:4;29174:27;;;;;;;;;;;;28660:547;;;:::o;49282:404::-;49394:4;49418:16;49426:7;49418;:16::i;:::-;49410:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49490:13;49506:23;49521:7;49506:14;:23::i;:::-;49490:39;;49555:5;49544:16;;:7;:16;;;:58;;;;49595:7;49571:31;;:20;49583:7;49571:11;:20::i;:::-;:31;;;49544:58;:101;;;;49613:32;49630:5;49637:7;49613:16;:32::i;:::-;49544:101;:135;;;;49656:14;:23;49671:7;49656:23;;;;;;;;;;;;;;;;;;;;;;;;;49544:135;49536:144;;;49282:404;;;;:::o;28017:330::-;28073:13;28089:23;28104:7;28089:14;:23::i;:::-;28073:39;;28121:48;28142:5;28157:1;28161:7;28121:20;:48::i;:::-;28202:29;28219:1;28223:7;28202:8;:29::i;:::-;28260:1;28240:9;:16;28250:5;28240:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;28275:7;:16;28283:7;28275:16;;;;;;;;;;;;28268:23;;;;;;;;;;;28333:7;28329:1;28305:36;;28314:5;28305:36;;;;;;;;;;;;28017:330;;:::o;41199:159::-;41251:16;41270:6;;;;;;;;;;;41251:25;;41292:8;41283:6;;:17;;;;;;;;;;;;;;;;;;41343:8;41312:40;;41333:8;41312:40;;;;;;;;;;;;41199:159;;:::o;26542:104::-;26614:26;26624:2;26628:7;26614:26;;;;;;;;;;;;:9;:26::i;:::-;26542:104;;:::o;43805:402::-;43959:18;;43944:11;43924:17;:31;;;;:::i;:::-;:53;;43908:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;44058:11;44051:4;;:18;;;;:::i;:::-;44038:9;:31;;44030:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44130:13;;44115:11;:28;;44099:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;43805:402;;:::o;43034:765::-;43163:18;43206:14;;43188:15;:32;:93;;43277:4;;43264:17;;;43188:93;;;43243:11;;43230:24;;;43188:93;;43296:25;43310:10;43296:13;:25::i;:::-;43288:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43407:25;;43392:11;43372:17;:31;;;;:::i;:::-;:60;;43356:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;43531:11;43518:10;:24;;;;:::i;:::-;43505:9;:37;;43497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43603:20;;43588:11;:35;;43572:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;43729:16;;43714:11;43704:7;:21;;;;:::i;:::-;:41;;43688:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;43034:765;;;;:::o;24976:308::-;25111:28;25121:4;25127:2;25131:7;25111:9;:28::i;:::-;25162:48;25185:4;25191:2;25195:7;25204:5;25162:22;:48::i;:::-;25146:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;24976:308;;;;:::o;42926:102::-;42986:13;43015:7;43008:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42926:102;:::o;15983:637::-;16039:13;16257:1;16248:5;:10;16244:43;;;16269:10;;;;;;;;;;;;;;;;;;;;;16244:43;16293:12;16308:5;16293:20;;16320:14;16341:62;16356:1;16348:4;:9;16341:62;;16368:8;;;;;:::i;:::-;;;;16393:2;16385:10;;;;;:::i;:::-;;;16341:62;;;16409:19;16441:6;16431:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16409:39;;16455:132;16471:1;16462:5;:10;16455:132;;16493:1;16483:11;;;;;:::i;:::-;;;16554:2;16546:5;:10;;;;:::i;:::-;16533:2;:24;;;;:::i;:::-;16520:39;;16503:6;16510;16503:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;16577:2;16568:11;;;;;:::i;:::-;;;16455:132;;;16607:6;16593:21;;;;;15983:637;;;;:::o;18352:179::-;18462:4;18500:25;18485:40;;;:11;:40;;;;18478:47;;18352:179;;;:::o;34964:521::-;35090:45;35117:4;35123:2;35127:7;35090:26;:45::i;:::-;35164:1;35148:18;;:4;:18;;;35144:167;;;35177:40;35209:7;35177:31;:40::i;:::-;35144:167;;;35243:2;35235:10;;:4;:10;;;35231:80;;35256:47;35289:4;35295:7;35256:32;:47::i;:::-;35231:80;35144:167;35335:1;35321:16;;:2;:16;;;35317:163;;;35348:45;35385:7;35348:36;:45::i;:::-;35317:163;;;35417:4;35411:10;;:2;:10;;;35407:73;;35432:40;35460:2;35464:7;35432:27;:40::i;:::-;35407:73;35317:163;34964:521;;;:::o;26863:281::-;26975:18;26981:2;26985:7;26975:5;:18::i;:::-;27016:54;27047:1;27051:2;27055:7;27064:5;27016:22;:54::i;:::-;27000:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;26863:281;;;:::o;30020:685::-;30157:4;30174:15;:2;:13;;;:15::i;:::-;30170:530;;;30229:2;30213:36;;;30250:12;:10;:12::i;:::-;30264:4;30270:7;30279:5;30213:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30200:459;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30457:1;30440:6;:13;:18;30436:214;;;30473:60;;;;;;;;;;:::i;:::-;;;;;;;;30436:214;30618:6;30612:13;30603:6;30599:2;30595:15;30588:38;30200:459;30345:41;;;30335:51;;;:6;:51;;;;30328:58;;;;;30170:530;30688:4;30681:11;;30020:685;;;;;;;:::o;31247:112::-;;;;:::o;36172:154::-;36272:10;:17;;;;36245:15;:24;36261:7;36245:24;;;;;;;;;;;:44;;;;36296:10;36312:7;36296:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36172:154;:::o;36935:936::-;37197:22;37247:1;37222:22;37239:4;37222:16;:22::i;:::-;:26;;;;:::i;:::-;37197:51;;37255:18;37276:17;:26;37294:7;37276:26;;;;;;;;;;;;37255:47;;37415:14;37401:10;:28;37397:306;;37440:19;37462:12;:18;37475:4;37462:18;;;;;;;;;;;;;;;:34;37481:14;37462:34;;;;;;;;;;;;37440:56;;37540:11;37507:12;:18;37520:4;37507:18;;;;;;;;;;;;;;;:30;37526:10;37507:30;;;;;;;;;;;:44;;;;37651:10;37618:17;:30;37636:11;37618:30;;;;;;;;;;;:43;;;;37397:306;;37791:17;:26;37809:7;37791:26;;;;;;;;;;;37784:33;;;37831:12;:18;37844:4;37831:18;;;;;;;;;;;;;;;:34;37850:14;37831:34;;;;;;;;;;;37824:41;;;36935:936;;;;:::o;38154:1025::-;38395:22;38440:1;38420:10;:17;;;;:21;;;;:::i;:::-;38395:46;;38448:18;38469:15;:24;38485:7;38469:24;;;;;;;;;;;;38448:45;;38804:19;38826:10;38837:14;38826:26;;;;;;;;;;;;;;;;;;;;;;;;38804:48;;38886:11;38861:10;38872;38861:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;38993:10;38962:15;:28;38978:11;38962:28;;;;;;;;;;;:41;;;;39126:15;:24;39142:7;39126:24;;;;;;;;;;;39119:31;;;39157:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38154:1025;;;;:::o;35774:207::-;35855:14;35872:20;35889:2;35872:16;:20::i;:::-;35855:37;;35926:7;35899:12;:16;35912:2;35899:16;;;;;;;;;;;;;;;:24;35916:6;35899:24;;;;;;;;;;;:34;;;;35969:6;35940:17;:26;35958:7;35940:26;;;;;;;;;;;:35;;;;35774:207;;;:::o;27454:356::-;27544:1;27530:16;;:2;:16;;;;27522:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27599:16;27607:7;27599;:16::i;:::-;27598:17;27590:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27657:45;27686:1;27690:2;27694:7;27657:20;:45::i;:::-;27728:1;27711:9;:13;27721:2;27711:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27755:2;27736:7;:16;27744:7;27736:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27796:7;27792:2;27771:33;;27788:1;27771:33;;;;;;;;;;;;27454:356;;:::o;7848:351::-;7908:4;8100:12;8157:7;8145:20;8137:28;;8192:1;8185:4;:8;8178:15;;;7848:351;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:256::-;;6368:2;6356:9;6347:7;6343:23;6339:32;6336:2;;;6384:1;6381;6374:12;6336:2;6427:1;6452:50;6494:7;6485:6;6474:9;6470:22;6452:50;:::i;:::-;6442:60;;6398:114;6326:193;;;;:::o;6525:260::-;;6632:2;6620:9;6611:7;6607:23;6603:32;6600:2;;;6648:1;6645;6638:12;6600:2;6691:1;6716:52;6760:7;6751:6;6740:9;6736:22;6716:52;:::i;:::-;6706:62;;6662:116;6590:195;;;;:::o;6791:282::-;;6909:2;6897:9;6888:7;6884:23;6880:32;6877:2;;;6925:1;6922;6915:12;6877:2;6968:1;6993:63;7048:7;7039:6;7028:9;7024:22;6993:63;:::i;:::-;6983:73;;6939:127;6867:206;;;;:::o;7079:375::-;;7197:2;7185:9;7176:7;7172:23;7168:32;7165:2;;;7213:1;7210;7203:12;7165:2;7284:1;7273:9;7269:17;7256:31;7314:18;7306:6;7303:30;7300:2;;;7346:1;7343;7336:12;7300:2;7374:63;7429:7;7420:6;7409:9;7405:22;7374:63;:::i;:::-;7364:73;;7227:220;7155:299;;;;:::o;7460:262::-;;7568:2;7556:9;7547:7;7543:23;7539:32;7536:2;;;7584:1;7581;7574:12;7536:2;7627:1;7652:53;7697:7;7688:6;7677:9;7673:22;7652:53;:::i;:::-;7642:63;;7598:117;7526:196;;;;:::o;7728:407::-;;;7853:2;7841:9;7832:7;7828:23;7824:32;7821:2;;;7869:1;7866;7859:12;7821:2;7912:1;7937:53;7982:7;7973:6;7962:9;7958:22;7937:53;:::i;:::-;7927:63;;7883:117;8039:2;8065:53;8110:7;8101:6;8090:9;8086:22;8065:53;:::i;:::-;8055:63;;8010:118;7811:324;;;;;:::o;8141:179::-;;8231:46;8273:3;8265:6;8231:46;:::i;:::-;8309:4;8304:3;8300:14;8286:28;;8221:99;;;;:::o;8326:118::-;8413:24;8431:5;8413:24;:::i;:::-;8408:3;8401:37;8391:53;;:::o;8480:732::-;;8628:54;8676:5;8628:54;:::i;:::-;8698:86;8777:6;8772:3;8698:86;:::i;:::-;8691:93;;8808:56;8858:5;8808:56;:::i;:::-;8887:7;8918:1;8903:284;8928:6;8925:1;8922:13;8903:284;;;9004:6;8998:13;9031:63;9090:3;9075:13;9031:63;:::i;:::-;9024:70;;9117:60;9170:6;9117:60;:::i;:::-;9107:70;;8963:224;8950:1;8947;8943:9;8938:14;;8903:284;;;8907:14;9203:3;9196:10;;8604:608;;;;;;;:::o;9218:109::-;9299:21;9314:5;9299:21;:::i;:::-;9294:3;9287:34;9277:50;;:::o;9333:360::-;;9447:38;9479:5;9447:38;:::i;:::-;9501:70;9564:6;9559:3;9501:70;:::i;:::-;9494:77;;9580:52;9625:6;9620:3;9613:4;9606:5;9602:16;9580:52;:::i;:::-;9657:29;9679:6;9657:29;:::i;:::-;9652:3;9648:39;9641:46;;9423:270;;;;;:::o;9699:364::-;;9815:39;9848:5;9815:39;:::i;:::-;9870:71;9934:6;9929:3;9870:71;:::i;:::-;9863:78;;9950:52;9995:6;9990:3;9983:4;9976:5;9972:16;9950:52;:::i;:::-;10027:29;10049:6;10027:29;:::i;:::-;10022:3;10018:39;10011:46;;9791:272;;;;;:::o;10069:377::-;;10203:39;10236:5;10203:39;:::i;:::-;10258:89;10340:6;10335:3;10258:89;:::i;:::-;10251:96;;10356:52;10401:6;10396:3;10389:4;10382:5;10378:16;10356:52;:::i;:::-;10433:6;10428:3;10424:16;10417:23;;10179:267;;;;;:::o;10476:845::-;;10616:5;10610:12;10645:36;10671:9;10645:36;:::i;:::-;10697:89;10779:6;10774:3;10697:89;:::i;:::-;10690:96;;10817:1;10806:9;10802:17;10833:1;10828:137;;;;10979:1;10974:341;;;;10795:520;;10828:137;10912:4;10908:9;10897;10893:25;10888:3;10881:38;10948:6;10943:3;10939:16;10932:23;;10828:137;;10974:341;11041:38;11073:5;11041:38;:::i;:::-;11101:1;11115:154;11129:6;11126:1;11123:13;11115:154;;;11203:7;11197:14;11193:1;11188:3;11184:11;11177:35;11253:1;11244:7;11240:15;11229:26;;11151:4;11148:1;11144:12;11139:17;;11115:154;;;11298:6;11293:3;11289:16;11282:23;;10981:334;;10795:520;;10583:738;;;;;;:::o;11327:322::-;;11490:67;11554:2;11549:3;11490:67;:::i;:::-;11483:74;;11587:26;11583:1;11578:3;11574:11;11567:47;11640:2;11635:3;11631:12;11624:19;;11473:176;;;:::o;11655:375::-;;11818:67;11882:2;11877:3;11818:67;:::i;:::-;11811:74;;11915:34;11911:1;11906:3;11902:11;11895:55;11981:13;11976:2;11971:3;11967:12;11960:35;12021:2;12016:3;12012:12;12005:19;;11801:229;;;:::o;12036:382::-;;12199:67;12263:2;12258:3;12199:67;:::i;:::-;12192:74;;12296:34;12292:1;12287:3;12283:11;12276:55;12362:20;12357:2;12352:3;12348:12;12341:42;12409:2;12404:3;12400:12;12393:19;;12182:236;;;:::o;12424:370::-;;12587:67;12651:2;12646:3;12587:67;:::i;:::-;12580:74;;12684:34;12680:1;12675:3;12671:11;12664:55;12750:8;12745:2;12740:3;12736:12;12729:30;12785:2;12780:3;12776:12;12769:19;;12570:224;;;:::o;12800:326::-;;12963:67;13027:2;13022:3;12963:67;:::i;:::-;12956:74;;13060:30;13056:1;13051:3;13047:11;13040:51;13117:2;13112:3;13108:12;13101:19;;12946:180;;;:::o;13132:326::-;;13295:67;13359:2;13354:3;13295:67;:::i;:::-;13288:74;;13392:30;13388:1;13383:3;13379:11;13372:51;13449:2;13444:3;13440:12;13433:19;;13278:180;;;:::o;13464:368::-;;13627:67;13691:2;13686:3;13627:67;:::i;:::-;13620:74;;13724:34;13720:1;13715:3;13711:11;13704:55;13790:6;13785:2;13780:3;13776:12;13769:28;13823:2;13818:3;13814:12;13807:19;;13610:222;;;:::o;13838:323::-;;14001:67;14065:2;14060:3;14001:67;:::i;:::-;13994:74;;14098:27;14094:1;14089:3;14085:11;14078:48;14152:2;14147:3;14143:12;14136:19;;13984:177;;;:::o;14167:372::-;;14330:67;14394:2;14389:3;14330:67;:::i;:::-;14323:74;;14427:34;14423:1;14418:3;14414:11;14407:55;14493:10;14488:2;14483:3;14479:12;14472:32;14530:2;14525:3;14521:12;14514:19;;14313:226;;;:::o;14545:376::-;;14708:67;14772:2;14767:3;14708:67;:::i;:::-;14701:74;;14805:34;14801:1;14796:3;14792:11;14785:55;14871:14;14866:2;14861:3;14857:12;14850:36;14912:2;14907:3;14903:12;14896:19;;14691:230;;;:::o;14927:388::-;;15090:67;15154:2;15149:3;15090:67;:::i;:::-;15083:74;;15187:34;15183:1;15178:3;15174:11;15167:55;15253:26;15248:2;15243:3;15239:12;15232:48;15306:2;15301:3;15297:12;15290:19;;15073:242;;;:::o;15321:374::-;;15484:67;15548:2;15543:3;15484:67;:::i;:::-;15477:74;;15581:34;15577:1;15572:3;15568:11;15561:55;15647:12;15642:2;15637:3;15633:12;15626:34;15686:2;15681:3;15677:12;15670:19;;15467:228;;;:::o;15701:373::-;;15864:67;15928:2;15923:3;15864:67;:::i;:::-;15857:74;;15961:34;15957:1;15952:3;15948:11;15941:55;16027:11;16022:2;16017:3;16013:12;16006:33;16065:2;16060:3;16056:12;16049:19;;15847:227;;;:::o;16080:320::-;;16243:67;16307:2;16302:3;16243:67;:::i;:::-;16236:74;;16340:24;16336:1;16331:3;16327:11;16320:45;16391:2;16386:3;16382:12;16375:19;;16226:174;;;:::o;16406:330::-;;16569:67;16633:2;16628:3;16569:67;:::i;:::-;16562:74;;16666:34;16662:1;16657:3;16653:11;16646:55;16727:2;16722:3;16718:12;16711:19;;16552:184;;;:::o;16742:376::-;;16905:67;16969:2;16964:3;16905:67;:::i;:::-;16898:74;;17002:34;16998:1;16993:3;16989:11;16982:55;17068:14;17063:2;17058:3;17054:12;17047:36;17109:2;17104:3;17100:12;17093:19;;16888:230;;;:::o;17124:330::-;;17287:67;17351:2;17346:3;17287:67;:::i;:::-;17280:74;;17384:34;17380:1;17375:3;17371:11;17364:55;17445:2;17440:3;17436:12;17429:19;;17270:184;;;:::o;17460:320::-;;17623:67;17687:2;17682:3;17623:67;:::i;:::-;17616:74;;17720:24;17716:1;17711:3;17707:11;17700:45;17771:2;17766:3;17762:12;17755:19;;17606:174;;;:::o;17786:373::-;;17949:67;18013:2;18008:3;17949:67;:::i;:::-;17942:74;;18046:34;18042:1;18037:3;18033:11;18026:55;18112:11;18107:2;18102:3;18098:12;18091:33;18150:2;18145:3;18141:12;18134:19;;17932:227;;;:::o;18165:328::-;;18328:67;18392:2;18387:3;18328:67;:::i;:::-;18321:74;;18425:32;18421:1;18416:3;18412:11;18405:53;18484:2;18479:3;18475:12;18468:19;;18311:182;;;:::o;18499:379::-;;18662:67;18726:2;18721:3;18662:67;:::i;:::-;18655:74;;18759:34;18755:1;18750:3;18746:11;18739:55;18825:17;18820:2;18815:3;18811:12;18804:39;18869:2;18864:3;18860:12;18853:19;;18645:233;;;:::o;18884:365::-;;19047:67;19111:2;19106:3;19047:67;:::i;:::-;19040:74;;19144:34;19140:1;19135:3;19131:11;19124:55;19210:3;19205:2;19200:3;19196:12;19189:25;19240:2;19235:3;19231:12;19224:19;;19030:219;;;:::o;19255:297::-;;19435:83;19516:1;19511:3;19435:83;:::i;:::-;19428:90;;19544:1;19539:3;19535:11;19528:18;;19418:134;;;:::o;19558:316::-;;19721:67;19785:2;19780:3;19721:67;:::i;:::-;19714:74;;19818:20;19814:1;19809:3;19805:11;19798:41;19865:2;19860:3;19856:12;19849:19;;19704:170;;;:::o;19880:372::-;;20043:67;20107:2;20102:3;20043:67;:::i;:::-;20036:74;;20140:34;20136:1;20131:3;20127:11;20120:55;20206:10;20201:2;20196:3;20192:12;20185:32;20243:2;20238:3;20234:12;20227:19;;20026:226;;;:::o;20258:381::-;;20421:67;20485:2;20480:3;20421:67;:::i;:::-;20414:74;;20518:34;20514:1;20509:3;20505:11;20498:55;20584:19;20579:2;20574:3;20570:12;20563:41;20630:2;20625:3;20621:12;20614:19;;20404:235;;;:::o;20645:376::-;;20808:67;20872:2;20867:3;20808:67;:::i;:::-;20801:74;;20905:34;20901:1;20896:3;20892:11;20885:55;20971:14;20966:2;20961:3;20957:12;20950:36;21012:2;21007:3;21003:12;20996:19;;20791:230;;;:::o;21027:321::-;;21190:67;21254:2;21249:3;21190:67;:::i;:::-;21183:74;;21287:25;21283:1;21278:3;21274:11;21267:46;21339:2;21334:3;21330:12;21323:19;;21173:175;;;:::o;21354:325::-;;21517:67;21581:2;21576:3;21517:67;:::i;:::-;21510:74;;21614:29;21610:1;21605:3;21601:11;21594:50;21670:2;21665:3;21661:12;21654:19;;21500:179;;;:::o;21685:108::-;21762:24;21780:5;21762:24;:::i;:::-;21757:3;21750:37;21740:53;;:::o;21799:118::-;21886:24;21904:5;21886:24;:::i;:::-;21881:3;21874:37;21864:53;;:::o;21923:589::-;;22170:95;22261:3;22252:6;22170:95;:::i;:::-;22163:102;;22282:95;22373:3;22364:6;22282:95;:::i;:::-;22275:102;;22394:92;22482:3;22473:6;22394:92;:::i;:::-;22387:99;;22503:3;22496:10;;22152:360;;;;;;:::o;22518:379::-;;22724:147;22867:3;22724:147;:::i;:::-;22717:154;;22888:3;22881:10;;22706:191;;;:::o;22903:222::-;;23034:2;23023:9;23019:18;23011:26;;23047:71;23115:1;23104:9;23100:17;23091:6;23047:71;:::i;:::-;23001:124;;;;:::o;23131:640::-;;23364:3;23353:9;23349:19;23341:27;;23378:71;23446:1;23435:9;23431:17;23422:6;23378:71;:::i;:::-;23459:72;23527:2;23516:9;23512:18;23503:6;23459:72;:::i;:::-;23541;23609:2;23598:9;23594:18;23585:6;23541:72;:::i;:::-;23660:9;23654:4;23650:20;23645:2;23634:9;23630:18;23623:48;23688:76;23759:4;23750:6;23688:76;:::i;:::-;23680:84;;23331:440;;;;;;;:::o;23777:373::-;;23958:2;23947:9;23943:18;23935:26;;24007:9;24001:4;23997:20;23993:1;23982:9;23978:17;23971:47;24035:108;24138:4;24129:6;24035:108;:::i;:::-;24027:116;;23925:225;;;;:::o;24156:210::-;;24281:2;24270:9;24266:18;24258:26;;24294:65;24356:1;24345:9;24341:17;24332:6;24294:65;:::i;:::-;24248:118;;;;:::o;24372:313::-;;24523:2;24512:9;24508:18;24500:26;;24572:9;24566:4;24562:20;24558:1;24547:9;24543:17;24536:47;24600:78;24673:4;24664:6;24600:78;:::i;:::-;24592:86;;24490:195;;;;:::o;24691:419::-;;24895:2;24884:9;24880:18;24872:26;;24944:9;24938:4;24934:20;24930:1;24919:9;24915:17;24908:47;24972:131;25098:4;24972:131;:::i;:::-;24964:139;;24862:248;;;:::o;25116:419::-;;25320:2;25309:9;25305:18;25297:26;;25369:9;25363:4;25359:20;25355:1;25344:9;25340:17;25333:47;25397:131;25523:4;25397:131;:::i;:::-;25389:139;;25287:248;;;:::o;25541:419::-;;25745:2;25734:9;25730:18;25722:26;;25794:9;25788:4;25784:20;25780:1;25769:9;25765:17;25758:47;25822:131;25948:4;25822:131;:::i;:::-;25814:139;;25712:248;;;:::o;25966:419::-;;26170:2;26159:9;26155:18;26147:26;;26219:9;26213:4;26209:20;26205:1;26194:9;26190:17;26183:47;26247:131;26373:4;26247:131;:::i;:::-;26239:139;;26137:248;;;:::o;26391:419::-;;26595:2;26584:9;26580:18;26572:26;;26644:9;26638:4;26634:20;26630:1;26619:9;26615:17;26608:47;26672:131;26798:4;26672:131;:::i;:::-;26664:139;;26562:248;;;:::o;26816:419::-;;27020:2;27009:9;27005:18;26997:26;;27069:9;27063:4;27059:20;27055:1;27044:9;27040:17;27033:47;27097:131;27223:4;27097:131;:::i;:::-;27089:139;;26987:248;;;:::o;27241:419::-;;27445:2;27434:9;27430:18;27422:26;;27494:9;27488:4;27484:20;27480:1;27469:9;27465:17;27458:47;27522:131;27648:4;27522:131;:::i;:::-;27514:139;;27412:248;;;:::o;27666:419::-;;27870:2;27859:9;27855:18;27847:26;;27919:9;27913:4;27909:20;27905:1;27894:9;27890:17;27883:47;27947:131;28073:4;27947:131;:::i;:::-;27939:139;;27837:248;;;:::o;28091:419::-;;28295:2;28284:9;28280:18;28272:26;;28344:9;28338:4;28334:20;28330:1;28319:9;28315:17;28308:47;28372:131;28498:4;28372:131;:::i;:::-;28364:139;;28262:248;;;:::o;28516:419::-;;28720:2;28709:9;28705:18;28697:26;;28769:9;28763:4;28759:20;28755:1;28744:9;28740:17;28733:47;28797:131;28923:4;28797:131;:::i;:::-;28789:139;;28687:248;;;:::o;28941:419::-;;29145:2;29134:9;29130:18;29122:26;;29194:9;29188:4;29184:20;29180:1;29169:9;29165:17;29158:47;29222:131;29348:4;29222:131;:::i;:::-;29214:139;;29112:248;;;:::o;29366:419::-;;29570:2;29559:9;29555:18;29547:26;;29619:9;29613:4;29609:20;29605:1;29594:9;29590:17;29583:47;29647:131;29773:4;29647:131;:::i;:::-;29639:139;;29537:248;;;:::o;29791:419::-;;29995:2;29984:9;29980:18;29972:26;;30044:9;30038:4;30034:20;30030:1;30019:9;30015:17;30008:47;30072:131;30198:4;30072:131;:::i;:::-;30064:139;;29962:248;;;:::o;30216:419::-;;30420:2;30409:9;30405:18;30397:26;;30469:9;30463:4;30459:20;30455:1;30444:9;30440:17;30433:47;30497:131;30623:4;30497:131;:::i;:::-;30489:139;;30387:248;;;:::o;30641:419::-;;30845:2;30834:9;30830:18;30822:26;;30894:9;30888:4;30884:20;30880:1;30869:9;30865:17;30858:47;30922:131;31048:4;30922:131;:::i;:::-;30914:139;;30812:248;;;:::o;31066:419::-;;31270:2;31259:9;31255:18;31247:26;;31319:9;31313:4;31309:20;31305:1;31294:9;31290:17;31283:47;31347:131;31473:4;31347:131;:::i;:::-;31339:139;;31237:248;;;:::o;31491:419::-;;31695:2;31684:9;31680:18;31672:26;;31744:9;31738:4;31734:20;31730:1;31719:9;31715:17;31708:47;31772:131;31898:4;31772:131;:::i;:::-;31764:139;;31662:248;;;:::o;31916:419::-;;32120:2;32109:9;32105:18;32097:26;;32169:9;32163:4;32159:20;32155:1;32144:9;32140:17;32133:47;32197:131;32323:4;32197:131;:::i;:::-;32189:139;;32087:248;;;:::o;32341:419::-;;32545:2;32534:9;32530:18;32522:26;;32594:9;32588:4;32584:20;32580:1;32569:9;32565:17;32558:47;32622:131;32748:4;32622:131;:::i;:::-;32614:139;;32512:248;;;:::o;32766:419::-;;32970:2;32959:9;32955:18;32947:26;;33019:9;33013:4;33009:20;33005:1;32994:9;32990:17;32983:47;33047:131;33173:4;33047:131;:::i;:::-;33039:139;;32937:248;;;:::o;33191:419::-;;33395:2;33384:9;33380:18;33372:26;;33444:9;33438:4;33434:20;33430:1;33419:9;33415:17;33408:47;33472:131;33598:4;33472:131;:::i;:::-;33464:139;;33362:248;;;:::o;33616:419::-;;33820:2;33809:9;33805:18;33797:26;;33869:9;33863:4;33859:20;33855:1;33844:9;33840:17;33833:47;33897:131;34023:4;33897:131;:::i;:::-;33889:139;;33787:248;;;:::o;34041:419::-;;34245:2;34234:9;34230:18;34222:26;;34294:9;34288:4;34284:20;34280:1;34269:9;34265:17;34258:47;34322:131;34448:4;34322:131;:::i;:::-;34314:139;;34212:248;;;:::o;34466:419::-;;34670:2;34659:9;34655:18;34647:26;;34719:9;34713:4;34709:20;34705:1;34694:9;34690:17;34683:47;34747:131;34873:4;34747:131;:::i;:::-;34739:139;;34637:248;;;:::o;34891:419::-;;35095:2;35084:9;35080:18;35072:26;;35144:9;35138:4;35134:20;35130:1;35119:9;35115:17;35108:47;35172:131;35298:4;35172:131;:::i;:::-;35164:139;;35062:248;;;:::o;35316:419::-;;35520:2;35509:9;35505:18;35497:26;;35569:9;35563:4;35559:20;35555:1;35544:9;35540:17;35533:47;35597:131;35723:4;35597:131;:::i;:::-;35589:139;;35487:248;;;:::o;35741:419::-;;35945:2;35934:9;35930:18;35922:26;;35994:9;35988:4;35984:20;35980:1;35969:9;35965:17;35958:47;36022:131;36148:4;36022:131;:::i;:::-;36014:139;;35912:248;;;:::o;36166:419::-;;36370:2;36359:9;36355:18;36347:26;;36419:9;36413:4;36409:20;36405:1;36394:9;36390:17;36383:47;36447:131;36573:4;36447:131;:::i;:::-;36439:139;;36337:248;;;:::o;36591:222::-;;36722:2;36711:9;36707:18;36699:26;;36735:71;36803:1;36792:9;36788:17;36779:6;36735:71;:::i;:::-;36689:124;;;;:::o;36819:283::-;;36885:2;36879:9;36869:19;;36927:4;36919:6;36915:17;37034:6;37022:10;37019:22;36998:18;36986:10;36983:34;36980:62;36977:2;;;37045:18;;:::i;:::-;36977:2;37085:10;37081:2;37074:22;36859:243;;;;:::o;37108:311::-;;37275:18;37267:6;37264:30;37261:2;;;37297:18;;:::i;:::-;37261:2;37347:4;37339:6;37335:17;37327:25;;37407:4;37401;37397:15;37389:23;;37190:229;;;:::o;37425:331::-;;37576:18;37568:6;37565:30;37562:2;;;37598:18;;:::i;:::-;37562:2;37683:4;37679:9;37672:4;37664:6;37660:17;37656:33;37648:41;;37744:4;37738;37734:15;37726:23;;37491:265;;;:::o;37762:332::-;;37914:18;37906:6;37903:30;37900:2;;;37936:18;;:::i;:::-;37900:2;38021:4;38017:9;38010:4;38002:6;37998:17;37994:33;37986:41;;38082:4;38076;38072:15;38064:23;;37829:265;;;:::o;38100:132::-;;38190:3;38182:11;;38220:4;38215:3;38211:14;38203:22;;38172:60;;;:::o;38238:141::-;;38310:3;38302:11;;38333:3;38330:1;38323:14;38367:4;38364:1;38354:18;38346:26;;38292:87;;;:::o;38385:114::-;;38486:5;38480:12;38470:22;;38459:40;;;:::o;38505:98::-;;38590:5;38584:12;38574:22;;38563:40;;;:::o;38609:99::-;;38695:5;38689:12;38679:22;;38668:40;;;:::o;38714:113::-;;38816:4;38811:3;38807:14;38799:22;;38789:38;;;:::o;38833:184::-;;38966:6;38961:3;38954:19;39006:4;39001:3;38997:14;38982:29;;38944:73;;;;:::o;39023:168::-;;39140:6;39135:3;39128:19;39180:4;39175:3;39171:14;39156:29;;39118:73;;;;:::o;39197:147::-;;39335:3;39320:18;;39310:34;;;;:::o;39350:169::-;;39468:6;39463:3;39456:19;39508:4;39503:3;39499:14;39484:29;;39446:73;;;;:::o;39525:148::-;;39664:3;39649:18;;39639:34;;;;:::o;39679:305::-;;39738:20;39756:1;39738:20;:::i;:::-;39733:25;;39772:20;39790:1;39772:20;:::i;:::-;39767:25;;39926:1;39858:66;39854:74;39851:1;39848:81;39845:2;;;39932:18;;:::i;:::-;39845:2;39976:1;39973;39969:9;39962:16;;39723:261;;;;:::o;39990:185::-;;40047:20;40065:1;40047:20;:::i;:::-;40042:25;;40081:20;40099:1;40081:20;:::i;:::-;40076:25;;40120:1;40110:2;;40125:18;;:::i;:::-;40110:2;40167:1;40164;40160:9;40155:14;;40032:143;;;;:::o;40181:348::-;;40244:20;40262:1;40244:20;:::i;:::-;40239:25;;40278:20;40296:1;40278:20;:::i;:::-;40273:25;;40466:1;40398:66;40394:74;40391:1;40388:81;40383:1;40376:9;40369:17;40365:105;40362:2;;;40473:18;;:::i;:::-;40362:2;40521:1;40518;40514:9;40503:20;;40229:300;;;;:::o;40535:191::-;;40595:20;40613:1;40595:20;:::i;:::-;40590:25;;40629:20;40647:1;40629:20;:::i;:::-;40624:25;;40668:1;40665;40662:8;40659:2;;;40673:18;;:::i;:::-;40659:2;40718:1;40715;40711:9;40703:17;;40580:146;;;;:::o;40732:96::-;;40798:24;40816:5;40798:24;:::i;:::-;40787:35;;40777:51;;;:::o;40834:90::-;;40911:5;40904:13;40897:21;40886:32;;40876:48;;;:::o;40930:149::-;;41006:66;40999:5;40995:78;40984:89;;40974:105;;;:::o;41085:126::-;;41162:42;41155:5;41151:54;41140:65;;41130:81;;;:::o;41217:77::-;;41283:5;41272:16;;41262:32;;;:::o;41300:154::-;41384:6;41379:3;41374;41361:30;41446:1;41437:6;41432:3;41428:16;41421:27;41351:103;;;:::o;41460:307::-;41528:1;41538:113;41552:6;41549:1;41546:13;41538:113;;;41637:1;41632:3;41628:11;41622:18;41618:1;41613:3;41609:11;41602:39;41574:2;41571:1;41567:10;41562:15;;41538:113;;;41669:6;41666:1;41663:13;41660:2;;;41749:1;41740:6;41735:3;41731:16;41724:27;41660:2;41509:258;;;;:::o;41773:320::-;;41854:1;41848:4;41844:12;41834:22;;41901:1;41895:4;41891:12;41922:18;41912:2;;41978:4;41970:6;41966:17;41956:27;;41912:2;42040;42032:6;42029:14;42009:18;42006:38;42003:2;;;42059:18;;:::i;:::-;42003:2;41824:269;;;;:::o;42099:233::-;;42161:24;42179:5;42161:24;:::i;:::-;42152:33;;42207:66;42200:5;42197:77;42194:2;;;42277:18;;:::i;:::-;42194:2;42324:1;42317:5;42313:13;42306:20;;42142:190;;;:::o;42338:176::-;;42387:20;42405:1;42387:20;:::i;:::-;42382:25;;42421:20;42439:1;42421:20;:::i;:::-;42416:25;;42460:1;42450:2;;42465:18;;:::i;:::-;42450:2;42506:1;42503;42499:9;42494:14;;42372:142;;;;:::o;42520:180::-;42568:77;42565:1;42558:88;42665:4;42662:1;42655:15;42689:4;42686:1;42679:15;42706:180;42754:77;42751:1;42744:88;42851:4;42848:1;42841:15;42875:4;42872:1;42865:15;42892:180;42940:77;42937:1;42930:88;43037:4;43034:1;43027:15;43061:4;43058:1;43051:15;43078:180;43126:77;43123:1;43116:88;43223:4;43220:1;43213:15;43247:4;43244:1;43237:15;43264:102;;43356:2;43352:7;43347:2;43340:5;43336:14;43332:28;43322:38;;43312:54;;;:::o;43372:122::-;43445:24;43463:5;43445:24;:::i;:::-;43438:5;43435:35;43425:2;;43484:1;43481;43474:12;43425:2;43415:79;:::o;43500:116::-;43570:21;43585:5;43570:21;:::i;:::-;43563:5;43560:32;43550:2;;43606:1;43603;43596:12;43550:2;43540:76;:::o;43622:120::-;43694:23;43711:5;43694:23;:::i;:::-;43687:5;43684:34;43674:2;;43732:1;43729;43722:12;43674:2;43664:78;:::o;43748:122::-;43821:24;43839:5;43821:24;:::i;:::-;43814:5;43811:35;43801:2;;43860:1;43857;43850:12;43801:2;43791:79;:::o

Swarm Source

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